Unity学习笔记 Vol.100 Unity 实时光追(四)- Ambient Occlusion环境光遮蔽
记笔记

现在,我们来学习如何使用具体的光追功能

第一个是 Ambient Occlusion环境光遮蔽简称AO,我们可以看到在Volume Global 上已经存在 AO 的Volume重载。不过目前这个AO所用的是传统的光栅化算法,我们只要勾RayTracing复选框,就可以将光栅化算法切换成相应的光追算法。AO的效果一般比较细微,所以要看清 AO 的具体效果,我们要借助 HDRP 提供的 Debug 窗口。

我们可以通过菜单 Window - Render pipeline - Render pipeline debug,打开 Debug 窗口。

在 Lighting 界面上找到 Full screen debug mode,切换到 screen space ebbing a crucial 模式
这样我们就可以看到完整的 AO 效果了。如果你看到画面闪烁的话,不用担心这是完全正常的
这是因为在Debug模式下,HDRP 没有应用抗拒齿算法所导致的。


现在我们可以禁用RayTracing算法,对比默认状态下所用的光栅化算法,使用光栅化算法计算AO的问题是,它必须依赖当前真的 Depth Buffer深度缓冲信息。
一旦屏幕上的某个物体,离开了当前画面,也就意味着他的深度,缓冲信息不再存在了,那么就无法再为这个物体,生成环境光遮蔽。

我们看玻璃盒子下面的区域可以看到,一旦玻璃盒子离开,画面与地面交接的遮蔽效果就不见了。

如果我们使用光追算法生成AO,就不会存在这个问题。因为光遮算法可以将射线,投射到屏幕之外,生成当前画面中已经不存在的物体的环境光遮蔽效果。

接下去我们来逐像看一下 AO的参数,首先是 Intensity 用于控制 AO的强度,AO是一项细微的效果,所以通常我们不需要把强度调的很大,而且把强度调大会导致AO效果穿帮。
Direct lighting strength 直接光照强度,这一参数可用于控制AO,在接受直接光照的表面上的强度,Layer Mask用于控制哪些物体会参与 AO的计算,我们用这个参数来控制,让某些物体不参与 AO的计算,让他们不为环境提供环境光遮蔽效果,

比如我们把玻璃箱中,这个下面的蕨类植物的层,设置为 Ignore Reycast,然后把Ignore Reycast这个层在AO的Volume里,取消勾选。

那么这些菌类植物,就不会为场景贡献环境光遮蔽了。
我们可以通过 Quality,质量设置来选择低,中,高三档预设的质量,Unity 为这三档分别设置了预置参数,当然我们也可以选择 Custom,来自定义调节各项参数,
Max Ray Length,可用于控制 AO的光追射线的长度,单位为米数值越大,AO光追算法就能找到越远的物体,环境光遮蔽的效果也就越强烈越黑,当然越消耗性能。
如果你已经通过光照烘焙,获得了不错的环境光遮蔽效果,我们可以把 Max Ray Length设置的小一些,比如1 ,这样可以得到一些无法通过,光照烘焙获得的环境光遮蔽细节,同时也不会增加性能的开销。
Simple Count 可用于控制 AO算法的采样值,增大采样值,可以让降噪功能把画面中的,AO的噪点尽可能的移除。

如果我们把Denoise功能禁用,那我们的画面其实就没法看了,画面非常的不稳定,因为每一帧画面的采样都是,随机生成的,因此启用降噪功能和抗锯齿功能,非常的重要。


我们现在进入第三个房间,在这个第三个房间我们可以看到,相比于光栅化算法的AO,光锥版本的AO,可以为我们提供更好的遮蔽效果。
比如长条桌子下面的部分,咖啡桌上的绿植下面的部分,和椅子下面,通过计算来自光源的阴影,无法完全模拟场景中的,所有的阴影细节,而环境光遮蔽效果,可以为我们添加更多的这些细节,成为一个有力的补充。