环境光遮蔽
三种选项:Vite 优化的 SSAO(默认开启,免费)、HBAO+(更高质量,后期处理体积控制)和 RTAO(光线追踪,最精确,也最昂贵)。它们相互叠加——HBAO+ 会叠加在 SSAO 缓冲区之上。
环境光遮蔽会使褶皱、接触点和环境光无法完全照射到的封闭区域变暗。它是使场景看起来更逼真的最经济的方法之一,也是最容易过度投入的地方之一。
Vite 优化的 SSAO
Vite 重写了 UE4.27 原生屏幕空间 AO 通道的内存访问模式。它以更低的成本产生与原生路径相同的效果,并且默认启用。
| 控制 | 默认值 | 备注 |
|---|---|---|
VITE_O_SSAO(编译时) |
1 |
最终发布的版本将锁定为该值 |
r.Vite.SSAO(运行时) |
VITE_O_SSAO |
仅限开发版本。0 = 原始 UE 路径,1 = 优化路径 |
运行时 CVar 的存在是为了方便您在开发过程中将优化后的路径与默认路径进行 A/B 对比,这也是优化验证的方式。在最终发布版本中,CVar 完全不存在——路径已编译到程序中。请参阅编译时开关。
UE4.27 的标准 SSAO 设置仍然适用,您可以在Rendering Features(渲染特性)> 环境光遮蔽(Ambient Occlusion)的后处理体积中找到它们:强度、半径、质量、功率、偏移、淡出距离等。
HBAO+
基于地平线的环境光遮蔽 (HBAO+) 是 NVIDIA 的高质量 AO 技术,继承自 NvRTX 分支。它沿地平线方向而非屏幕空间球体对深度缓冲区进行采样,从而在褶皱处产生更精确的遮蔽效果,并减少 SSAO 特有的物体轮廓周围的光晕。
HBAO+ 会乘以屏幕空间 AO 缓冲区而不是替换它,因此启用后两者都会运行。
启用
| CVar | 默认值 | 效果 |
|---|---|---|
r.HBAO.Enable |
0 |
主启用 |
r.HBAO.HighPrecisionDepth |
0 |
0 = 使用 FP16 内部深度,1 = 使用 FP32。使用 FP32 可避免远处物体出现自遮挡条带。 |
r.HBAO.GBufferNormals |
1 |
0 = 从深度重建法线,1 = 获取 GBuffer 法线 |
注意: CVar 帮助文本将 HBAO+ 描述为仅适用于 DX11。Vite 同时在 D3D11 和 D3D12 上实现了它;帮助字符串继承自最初的 NVIDIA 集成,尚未更新。
后处理体积设置
启用后,HBAO+ 将在 HBAO+ 类别下针对每个后处理体积进行调整。这些设置支持蓝图读/写,因此可以在运行时进行控制。
| 设置 | 默认值 | 范围 | 用途 |
|---|---|---|---|
| 幂指数 | 2.0 |
0–4 | 应用于 AO 结果的暗化曲线。数值越高,对比度越强。 |
| 半径 | 2.0 |
0.1–2 | 世界空间采样半径(米) |
| 偏差 | 0.1 |
0–0.2 | 拒绝低于此角度的采样。提高此值可消除平面上的自遮挡。 |
| SmallScale AO | 1.0 |
0–1 | 精细细节遮挡的权重 |
| 模糊半径 | 2 像素 | 禁用 / 2px / 4px | 降噪模糊 |
| 模糊锐度 | 16.0 |
0–32 | 模糊过程中边缘保留程度。数值越高,保留的边缘越多。 |
| 最大深度(Max Depth) | 9500.0 |
0–400+ | 超过此深度后,HBAO+ 将停止计算 |
| 深度锐度(Depth Sharpness) | 50.0 |
0–100 | 深度不连续性敏感度 |
| 前景 AO 钳制(Clamp Foreground AO) | 关闭 | — | 限制近处几何体的 AO 效果 |
| 前景 AO 距离 | 100.0 |
0–1000 | 前景钳制使用的距离 |
| 背景 AO 钳制(Clamp Background AO) | 关闭 | — | 限制远处几何体的 AO 效果 |
| 背景 AO 距离(Background AO Distance) | 1000.0 |
0–10000 | 背景钳制使用的距离 |
半径(Radius) 是最重要也是最容易出错的设置。它的单位是米,正确的数值完全取决于场景比例。室内场景(包含真人大小的道具)需要较小的半径;大型室外场景则需要较大的半径。半径过大会导致所有物体都笼罩在一层柔和的灰色光晕中;半径过小则只会在最细微的缝隙处产生遮挡效果。
最大深度(Max Depth) 是一个简单的性能控制选项。远处的几何体对可见的环境光遮蔽贡献很小,因此降低此值可以在视觉效果变化最小的情况下降低性能消耗。在确定一个较大的值之前,请先通过飞行模拟来检查结果。
光线追踪环境光遮蔽
光线追踪环境光遮蔽(Ray-traced ambient occlusion, RTAO)在光线追踪阴影和环境光遮蔽一文中有详细介绍。简而言之:它追踪实际的遮蔽光线,因此可以正确处理屏幕外的遮挡物,并且不会像屏幕空间 AO 那样受限于只能识别可见物体的根本局限性。
它也是三种方法中最昂贵的,并且需要 DXR。
选择
| 目标 | 推荐配置 |
|---|---|
| 风格化 4K120 | 仅启用 Vite SSAO |
| 性能卓越 4K60 | 启用 Vite SSAO,如有余量,启用 HBAO+ |
| 保真卓越 4K30 | 启用 Vite SSAO + HBAO+ |
| 保真全光线追踪 1440p30 | RTAO |
一般而言,AO(环境光遮蔽)应该是帧中产生效果的最省资源的组件。如果 DDGI(动态全局光照)已经正确解析了空间中的间接光照,那么在其基础上叠加高强度的 AO 就会导致双重变暗——你实际上是在减去 GI 解决方案从未添加的光照。
注意 AO 叠加的问题。同时启用材质 AO、SSAO(屏幕阴影环境光遮蔽)、HBAO+(高亮度环境光遮蔽增强)和 RTAO(实时环境光遮蔽)会导致场景中接触区域的亮度远低于预期。每一层都会叠加。如果你不确定接触阴影是否符合物理规律,或者只是单纯的暗,可以将其与路径追踪的参考图像进行比较。