作用

使用更低分辨率的体积纹理简化半透明材质的光照(常用于粒子系统、体积效果)

光照半透明的大部分光照是通过一系列围绕视锥体定向的级联体积纹理获得的。因此对于体积内部的任何一个点,都可以通过一次正向传递了解光照信息,但缺点是体积纹理的分辨率相当低,而且只能覆盖以观察者为起点的有限景深范围。

Renderring Event

在profile GPU中,一般主要涉及两个过程

  • ClearTranslucencyLightingVolumeCompute,清空需要的纹理

  • InjectTranslucencyLightingVolume,执行光照注入

  • FilterTranslucentVolume,用于过滤纹理,做blur效果

视材质的具体使用可能还有如下流程

  • InjectAmbientCubemapTranslucentVolumeLighting

  • InjectSimpleTranslucentLightArray


r.TranslucentLightingVolume 1,默认1,是否开启半透光照注入,设置为0可以关闭整个过程。

r.TranslucencyVolumeBlur 1,默认1,可以单独打开/关闭 FilterTranslucentVolume

关键开销

  • 体积纹理分辨率

  • 启用了 Affect Translucent Lighting 的光源数量

与场景中半透明材质数量无关

材质效果影响

影响的基本是 Blend Mode 为 Translucent 的材质


具体需要结合实际场景测试

  • 粒子系统实现的各种效果(特别是范围较大的非自发光效果),需要光照半透明注入,直接关闭注入相当于丢失光照直接变黑

  • 各种半透明贴图,关闭后,略微变暗

  • 自带的透明摆件,关闭后在光照细节上稍微丢失一点


  • 场景内体积雾基本不受影响

  • 水面效果不受影响

  • 一些没有实体的半透明体积也基本没变化


FilterTranslucentVolume 仅与纹理的分辨率有关,是固定开销

优化思路

引擎默认配置 r.TranslucencyLightingVolumeDim 64,所有光源默认开启 Affect Translucent Lighting,在场景存在大量光源时对性能的消耗极大(接近1ms)

  • 降低体积纹理分辨率,16 - 128

  • 大部分光源选择关闭 Affect Translucent Lighting

  • 单独配置照亮半透明材质的光源

  • 光源影响范围尽量小,范围过大会导致即使光源很远也会纳入计算

体积纹理配置

可以通过Cvar配置,后者可以根据可延展性级别进行不同的设置:

r.TranslucencyLightingVolumeDim,默认值为64。如果将此值提高到原来的2倍,会使体积光照成本提高到原来的8倍。

r.TranslucencyLightingVolumeInnerDistance,默认值为1500。提高此值会增加光照体积覆盖范围,但会降低有效分辨率。

r.TranslucencyLightingVolumeOuterDistance,默认值为5000。提高此值会增加光照体积覆盖范围,但会降低有效分辨率。

光源配置

单个光源设置是否启用:光源(Lighting)-高级(Advance)-影响半透明光照(Affect Translucent Lighting)

参考

[1] Unreal’s Rendering Passes - Unreal Art Optimization

[2] How to Disable Translucency Volume/Lighting?