Unity学习笔记 Vol.101 Unity 实时光追(五)- Screen Space Reflection屏幕空间反射
记笔记

我们来详细了解一下 ,屏幕空间反射效果的光追版本 我们切换到Unity球体的这个场景,也就是1号房间。

我们可以在Volume上添加Screen Space Reflection这个重载,为场景添加屏幕空间反射效果。

在HDRP场景中,系统会按照以下顺序,为场景提供反射信息,屏幕空间反射,Reflection probe,反射探针,来自天空的反射,意思就是物体表面会优先从屏幕空间反射获取反射信息, 如果不存在屏幕空间反射信息,那么会看是否可以利用反射探针。如果反射探针也没有, 最后才会使用来自天空的反射信息,当前场景来自天空的反射非常强烈,所以我们一定要添加一些本地反射信息源,也就是屏幕空间反射和反射探针一起使用,这样可以避免漏光现象的发生。

默认情况下,屏幕空间反射使用光栅化版本的算法,利用当前画面真的信息,来计算反射信息。

如果我们转动画面,一旦球体离开画面,地面上的反射就不见了。这显然效果很差,相比之下, 因为光追版本的屏幕空间反射效果,使用 Rematching 算法进行计算,所以即使物体离开了当前画面,也可以在反射信息中出现。

如果你觉得某些表面的反射太暗,我们可以把 Clamp Value 的数值提高,从而增大从光追射线返回的反射强度,不过这可能会让深层的反射信息包含更多的噪点。

我们切换到第二个房间的柱子视角,针对屏幕空间反射算法,两个很重要的参数是Minimum smoothness(最小光滑度)和 Smoothness Fade Start(反射开始消失的光滑度)


最小光滑度参数控制的是材质上的Smothness数值大于最小光滑度数值时,屏幕空间反射信息 才会显示在物体表面,将这两个参数的数值调大,可以提升实时渲染的运行性能,本质上就是物体表面要很光滑,才能显示屏幕空间反射信息,就减少了渲染工作量。

这里我们可以尝试将 迷你们斯姆斯尼斯最小光滑度数值 调小到0.5 如果我们没有打开 屏幕空间反射光锥算法,当我们转动镜头看向地板时,柱子就会消失。现在我们打开光追算法,可以看到柱子不再消失了。

现在我们来看一下具体参数,我们首先选择模式为Performance,只是性能版这一模式注重运行性能,但是只会让射线产生一次反弹,之后我会讲解Quaility模式, Max Ray Length (射线最大长度)对于生成正确的反射信息非常重要,我们要确保光追算法计算时,所用的射线长度足够长,这样射线才能射中场景中,需要参与光追计算的物体。

如果我们降低射线长度数值,可以看到反射信息消失了,出现了漏光现象。

我们可以禁用Full Resolution (全屏分辨率)选项来提升运行性能。

不过这样会增加屏幕空间反射效果中所包含的噪点,使用Denoise (降噪)选项一般是必须的。

如果禁用降噪选项,最终效果将会产生很多的噪点 。

现在我们切换到Quaility(质量)模式,在质量模式下,我们可以手动控制Sample Count (采样值) Bounce Count(反弹数量),增大这两者都会,提升屏幕空间反射效果的质量,但是随之带来的对性能的影响,也是巨大的。

切换到玻璃盒子部分,我们可以向上一个视频中描述的环境光遮蔽,那样通过Layer Mask 来控制哪些物体会参与屏幕空间反射信息的计算。

这里我们把所有竹子的橙设置为 Not in Reflection这个层,然后在 Volume 中的Layer Mask 取消这个层的勾选。

这样竹子就不会参与反射信息的计算了,减少参与反射信息的计算,可以提升我们的运行性能。
现在切换到第一个房间,我在这个油腻气球的周围放了两面镜子,通过他们来演示屏幕空间反射效果,当我们把场景中的两面镜子启用,可以看到目前只有一次反弹,我们可以通过增加反弹次数,来实现镜子中的镜子中的镜子的效果。

这里我们可以把屏幕空间反射的 BounceCount,尝试设置成15或者更大,来看一下效果,是不是很有趣。

如果我们现在把屏幕空间反射效果禁用,那么镜子里看到的是来自场景中,反射探针上的反射信息。

如果把反射探针也禁用,那么镜子上的反射信息, 就只有来自天空了。

最新的光追版本的屏幕空间反射也支持,透明物体的反射效果,比如玻璃或者水面。

我们可以清晰的看到这个透明方块上的屏幕空间反射效果,总结来说从性能的角度来看屏幕空间反射信息并不是非常经济,不过他可以为场景中的物体表面,提供很好的反射效果,相比基于反射探针的反射效果,屏幕空间反射,可以为我们提供更准确的反射信息,不会因为反射探针的位置局限性,导致反射信息不够准确的问题,当然像反射探针这样的技术也是非常重要的,特别是在那些对反射信息准确度要求不高的场景中,建议大家,使用反射弹针这种性能较好的方式。
了解了上面的内容,大家可能会问这么一个问题,如果我使用屏幕空间反射,那么还有必要去使用反射弹针吗?我的回答是,屏幕空间反射是一个很好的补充,但是反射探针因为性能较好,所以我们通常是使用反射探针的,这两者他们不是互相排斥的关系。