最近写的一些好玩的东西

最近时间比较宽裕,继续学了些东西。做个简单小结,不深入具体。

水面涟漪

在这里插入图片描述
在这里插入图片描述
求解了波动方程,并根据求解所得的高度图得到法线贴图。再根据法线去偏移UV。水面的反射是用平面反射做的。

简单的后处理 – 深度雾,bloom,色调映射

在这里插入图片描述

拿到当前场景的深度,转化为线性/01的深度值后,做指数/线性计算再和当前场景颜色进行插值。这里有个恶心的地方是老管线里面的深度图是走shadowCaster这个pass,似乎是需要fallback的,否则无法写入到深度图里面。而公司里面用的URP,似乎是直接能够拿到这张深度图而不用其他的操作的。

在这里插入图片描述
bloom参考了catlike的实现过程。主要的思路就是提取场景中的高亮信息,进行多次下采样后再进行对应次数的上采样。其实就是模糊了高亮信息后,再进行叠加。提取高亮信息使用了两种不同的曲线进行,使得可以调节一些低亮度信息也能够进行叠加。inside里面似乎用了大范围bloom + 线性雾 + 一些暗角做了一个大气散射的近似模拟,真的漂亮。可惜我精力有限,口味较重,直接拉满,亮瞎狗眼

在这里插入图片描述
最后直接抄了一个tonemapping的实现,记得开线性空间。

大气散射

在这里插入图片描述
大气散射实现了Rayleigh和Mie两种散射。前者主要对应极小颗粒,在散射时,对蓝光散射较多,红光较少。耗散和波长的四次方成反比。后者对应空气中的较大的颗粒,和光波关系不大。
实现上,我们从相机位置向天空和发送射线,计算和大气相交的点进行步进。步进中主要计算的是exp(-h/H)这一项,我们用这个曲线来逼近大气密度的变化。这个项的积分我们称为Optical Depth–光学厚度。计算耗散其实就是计算这个光学厚度的积分。
在单次散射的模型下,光线从大气射入后,会进行向各个方向的散射称为外散射。而到达视线时,会散射入视线方向,称为内积分。可以用对应的相位函数计算。

做完后,帧率惨不忍睹。。 视线方向步进32次,太阳方向步进16次,这个GT740差不多就不到60帧了。因此,我给他加了一个二维的LUT,把向太阳方向的步进的密度积分存起来了。这样结果就和上图一样,预计算的时候反正是无所谓,采样数直接拉满,视线方向步进的时候依然是32次。差不多就七八百帧了。。

这里还有个待填坑的部分,以后等有时间再搞把。。就是这个模型只能表示单次散射,在日落时多次散射和单次散射差距还是比较明显的。而且其实视线方向的步进似乎也能放到查找表里面。我参考了一个全部预计分的项目,效果爆炸帧率还是我的好几倍。多次散射的实现要比单次散射麻烦得多,而且LUT怎么存,可能会对精度有影响,需要优化的东西也很多,所以就先放着吧。。(其实就是我不啃08年那个论文。。 太tm晦涩难懂了)

球谐光照

在这里插入图片描述
这个图是我把环境光(cubemap),计算出系数后再还原后的结果。
球谐函数这部分是最炸裂的。。让我感觉的大学的数学完全没学。。概率论,高数,信号与系统。。都是啥??所以我根据我的理解简单讲讲。

类比傅里叶变换,我们把光照信息投影到一些正交的基函数上得到一个投影后的系数。那么根据这个系数和投影的坐标轴,我们就能够还原原始的信息。就好像我能够把一个信号从时域变到频域上,同样我也能把一个频域上的信号还原到时域上。这个正交基就直接抄吧。。 三维的拉普拉斯在球坐标的解都是啥??(但是这似乎并不影响我写代码,反正是实现了hhh)

对于环境光照就可以类比我的实现方法,计算出这个系数后再根据对应向量,还原出原始信号。这个信号收到球谐函数阶数影响,还原了低频信号而高频会丢失掉一部分。

在计算系数的时候,根据蒙特卡罗方法来求解积分。对于在单位球上的采样Unity有对应的api–》UnityEngine.Random.onUnitSphere。我们不能简单的random出来几个0-1的值去采样,因为单位面积对应的值和sin(theta)相关,这会导致在两极密度大而赤道部分密度小。解决办法就是通过逆变换采样,求解边缘分布函数的反函数。(概率论他来了!!我也忘差不多了,自己看吧)

球谐函数nb的地方就是可以将积分项变成简单的乘积(这tm属实太强)。也就是我们能够把渲染方程积分里面的元素拆分为光照部分和传输部分。这个传输部分包含了brdf,遮挡的各种元素。我们对这些信息进行编码后,运行时就仅仅做乘积就可以了。(这部分我没实现。。懒。。),对于动态的物体,可以根据位置对多个lightprobe进行插值计算环境光。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值