Untoon Engine
Lighting-and-Post-Process-Guide
本页目录
灯光与后处理指南
目标
这一页讲 untoon 的 Untoon 灯光参数和场景级 Untoon 控制项怎么用。
优先显示调试
新功能沿用当前 Toon 光照。优先目标仍获得正常光照、高光、速度和描边;只是本组指定头发不再覆盖有效目标。投射阴影和光追几何保持原样,所以眼部仍可能收到头发投射的阴影,应通过既有 Toon 阴影控制调节风格。
| Console Variable | 默认值 | 用途 |
|---|---|---|
r.Untoon.Priority |
1 | 全局允许优先显示;材质节点和组登记仍需显式配置 |
r.Untoon.Priority.Debug |
0 | 0 正常、1 组颜色、2 有效目标覆盖(绿色) |
r.Untoon.Priority.MaxAtlasSize |
4096 | 图集最大边长;放不下的组恢复普通遮挡 |
Priority 调试覆盖显示作用于有组记录的可见 Toon 像素。
GPU 测量应记录关闭功能、单角色、多角色时的 Untoon.Priority.* 与 Toon Light 时间。优先显示会减少启用视图的历史遮挡剔除,目前没有已验证的性能收益结论。
灯光侧 Untoon 参数
该分支为 Light Component 增加了 Light|Toon 分类。常用参数包括:
Enable Default LightingDefault Lighting IntensityEnable Toon Base LightingUntoon Base Lighting IntensityUntoon Light SmoothUntoon Light OffsetEnable Toon Rim LightingUntoon Rim Lighting IntensityRim ColorRim FadeoutScreen Space Rim WidthScreen Space Rim ThresholdScreen Space Rim ContributeFresnel Rim ContributeFresnel Rim ExponentPenumbra Tint ModePenumbra Color
上面写的是编辑器里的显示名。Enable * 开关、Screen Space Rim * 和 Fresnel Rim Exponent 显式设置了显示名,其余由 C++ 属性名自动生成,例如 UntoonLightSmooth 显示为 Untoon Light Smooth。
局部光(点光 / 聚光 / 矩形光)在启用 Enable Toon Base Lighting 后还提供 Untoon Light Flatten 与 Flatten Distance,用于让明暗形状更接近光源的距离衰减。方向光没有衰减半径,不支持这两个参数,渲染时始终按 0 处理。
推荐调参顺序
关键灯按这个顺序调:
- 决定是否保留默认光照
- 调整 Toon Base Lighting 强度
- 调整
Untoon Light Smooth - 调整
Untoon Light Offset - 再引入 Rim Lighting
- 最后处理 Penumbra Tint
参数语义建议
Default Lighting
项目里非 Untoon 材质还要继续吃 UE 默认光照时,保持启用。
如果这盏灯只用来给 Untoon 角色塑形,可以把默认光照压低甚至关掉。
Toon Base Lighting
这一组参数控制 Untoon 受光的主要明暗结构:Intensity 决定整体强度,Smooth 决定明暗边界软硬,Offset 决定明暗分界线的位置。
RenderLights 阶段生成的主受光 / 表面阴影结果会继续流入后续 ToonShadowMask 和 ToonLight 阶段,所以灯光参数不只影响直接受光,也会改变风格化阴影和最终合成。
Rim Lighting
逆光,或者角色轮廓糊进背景时,用 Rim Light 把边缘提出来。
Penumbra Tint
阴影过渡区发灰、发脏时,用 Penumbra Tint 给过渡带加风格色。
与 Untoon 渲染阶段的关系
Untoon 灯光相关的阶段顺序:
RenderLights生成主受光结果,并写入UntoonShadow.RRenderToonShadowMask重新评估材质ToonShadowMaskOutput,写入UntoonShadow.G/ARenderToonLightPass准备 light 参数时触发AddToonMainLightShadowBlurPass,基于G/A生成晕染后的光照遮罩并写入UntoonShadow.BRenderToonLightPass重新评估材质ToonLightOutput,合成回SceneColor
因此:
- 灯光参数既影响
RenderLights,也会影响后续LightPassLight上下文 ToonShadowMask和Toon Light材质节点看到的主光参数需要与普通 mesh / Nanite 保持一致- 调光时如果发现普通 mesh 与 Nanite 表现不同,应优先检查 post-light export 是否复用了相同的
LightPassLight语义
当前 Toon Light 阶段的关键理解是:
PreLightSceneColor:灯光前的SceneColor快照PostLightSceneColor:灯光后的SceneColor快照AreaLightLighting = max(PostLightSceneColor - PreLightSceneColor, 0):当前后置阶段看到的区域光照差分结果SimpleMainDirectionalDiffuse:随ToonLighting.a增大而减弱的主方向光简化漫反射补偿
材质可以通过 Toon Light 的第二个输出 AreaLightLightingModulate 调制这部分差分结果;普通 mesh 与 Nanite 当前都使用同一套合成公式:
AreaLightLighting *= AreaLightLightingModulate;
SimpleMainDirectionalDiffuse = (BaseColor / PI) * MainLightColor * saturate(dot(N, L)) * (1.0 - UntoonShadow.R);
FinalColor = lerp(PostLightSceneColor + SimpleMainDirectionalDiffuse, ToonLighting.rgb + AreaLightLighting, saturate(ToonLighting.a));
可缩放 Untoon 质量
高开销的 Untoon Shadow Blur 和 Untoon Outline 阶段支持运行时质量档位:
r.Untoon.ShadingQuality:全局默认质量,0关闭可选高开销效果,1低,2中,3高;默认3r.Untoon.ShadowBlur.ShadingQuality:主光 Shadow Blur 覆盖项,默认-1表示继承全局质量r.Untoon.Outline.ShadingQuality:Outline 覆盖项,默认-1表示继承全局质量
Shadow Blur 的质量档位会限制内部 Gaussian blur stage 数量并缩放 blur 半径;高质量 3 保持原有上限。Outline 的质量档位会降低临时 blur 纹理分辨率并减少 blur tap 数;高质量 3 保持原有 1/2 分辨率与 5-tap blur 行为。
后处理 / Scene Settings Untoon 控制
场景和 Post Process Settings 的 Global Illumination|Toon Lumen 分类下还有一组参数:
UntoonDiffuseIntensity:卡通光照漫反射强度UntoonDiffuseFlatten:平整卡通光影漫反射UntoonDiffuseSaturation:调整卡通光照漫反射的饱和度UntoonDiffuseOcclusion:卡通光照遮蔽强度(AO)UntoonSpecularIntensity:Untoon 高光强度
它们参与间接光合成与反射计算,所以 Lumen 路径受影响最明显。
推荐工作方式
灯光参数按灯光方案统一管理,不同角色类型共用一套预设;后处理参数尽量做成关卡或镜头预设。同一类风格参数别在材质、灯光、后处理三处各硬编码一份。
常见问题
- 明暗边界太脏:先调
Untoon Light Smooth和Untoon Light Offset - 角色边缘不够立:检查 Rim Light 和 Outline 是否都在工作
- 阴影过渡太写实:检查 Penumbra Tint 和 Shadow Blur 逻辑
- 角色在环境光下发灰:检查 Untoon Diffuse Saturation 与 Occlusion
- 普通 mesh 与 Nanite 阴影风格不一致:检查
ToonShadowMask/Toon Light是否依赖了错误的 pass 语义或未对齐的LightPassLight