Unity_StochasticSSR[2]-改进篇

[复制链接]
查看2626 | 回复3 | 2018-9-11 22:02:24 | 显示全部楼层 |阅读模式
继续上次的Unity_StochasticSSR[1]-实现篇。这次来分享一下改进内容。本来想用HiZ的结果卡在第一步的MipMap Depth,Unity的RT非二次幂不能产生MipMap,所以就转头用了2D步进的追踪方式(求好心大佬告知怎么弄非二次幂MipMap)。




  首先呢改进的第一点就是TemporalFiltter。之前用的是CameraDepth的MtionVector,然后用UV - MotionVector来采样当前帧的反射RT。这也做有个坏处就是很鬼畜拖影,就像下面的视频展示。


上传视频封面




好的标题可以获得更多的推荐及关注者







可以看到,前面基于CameraDepth的拖影严重。。简直不能再恶心。后面使用了RayDepth来算的MotionVector可以得到一个比较正常的结果。

  改动呢也是相当的简易。就是吧RayCasting阶段得到的rayPos的Z拿出来结合当前帧和上一帧的ViewProjectionMatrix来生成一个MotonVector。具体可以详见源代码。









  完成这一步即可修复那种甩拖尾的残影效果。因为甩尾解决了差不多所以自然可以加强TAA的采样。得到的就是更少的噪点。如图。









  可以看到噪点几乎又少了百分之40的样子。。




  第二个修改的地方就是上一版本因为是用了Temporal和相邻像素共用一个样本来去噪。所以导致的结果也是很模糊,虽然高粗糙度看不出来,但是低粗糙度下却很模糊。如下图对比(左边是改进的,右边是原来的)。





  修改也是灰常简单的。。直接做几个判断主要如 : 在低粗糙度下不使用ImportanceSampler,Resolver的偏移量为0,TAA的强度低一些,最后再加点锐化。

















完成这步即可得到地粗糙度下比较清晰的反射。




  第三个修改的内容则是PreintegratedGF这一项。之前的版本我是用的Fersnel去在最后一个Pass混合的,但后来看了Ragnarok大佬的StochasticSSR才发现这个问题。所以我就修改了一下内容吧Fersnel去了,加上那张PreintegratedGF的LUT我不知道怎么生成。所以就用了虚幻的Mobile的曲面拟合近似的版本。









PPT说这样可以减少方差,但是我对比好像只有红色 紫色这是很艳的颜色边缘会黑一圈而已。。上面是原来的下面是PreintegratedGF。












  最后修改的则是追踪方式。因为没有MipMapDepth,所以也就没换HiZ了。这里用的是之前提到过的2D屏幕步进方法好处是能确保每次步进都是一个像素。

















大概就是这样具体可以看源代码这些就是本次修改的内容,下面放几张图欣赏欣赏吧。下次弄出来HiZ再分享。

















































  ennm,蛮漂亮的。。最后镇文图配GitHub。





下载地址:https://github.com/haolange/Unit ... en-Space-Reflection



ilovedumei | 2019-6-13 19:29:40 | 显示全部楼层
哇塞 太棒了  你太好了
回复 支持 反对

使用道具 举报

AaronW | 2019-11-18 11:27:53 | 显示全部楼层
厉害,学习了!
回复 支持 反对

使用道具 举报

hanju | 2020-7-3 11:35:48 | 显示全部楼层
资源不错,感谢分享。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

33

主题

266

回帖

3191

积分

中阶编码师

积分
3191