色彩管理
Vite 使用 Unreal Engine 4.27 的原生色调映射和色彩管线:ACES 电影色调映射器、后期体积调色、LUT 和 HDR 输出。本页涵盖了最常导致问题的控件和设置。
色彩管理是帧的最后一个阶段,它决定了光照和光线追踪系统所做的所有工作最终能否正确呈现在显示器上。
管线
渲染器全程以线性 HDR 模式运行。在帧的末尾:
- SMAA 在色调映射之前,以线性空间的方式解析边缘。
- 色彩分级 应用后期处理模块的曝光、白平衡、饱和度、对比度、增益、伽玛和偏移控制,以及任何色彩分级 LUT。
- 色调映射 映射使用 ACES 电影曲线将 HDR 范围映射到显示范围。
- 输出编码 应用目标显示器的传输函数,SDR 使用 sRGB,HDR 使用 PQ/ST-2084。
色调映射器控制
| CVar | 默认值 | 用途 |
|---|---|---|
r.TonemapperFilm |
1 |
使用 ACES 胶片色调映射器。0 恢复为传统曲线。 |
r.Tonemapper.Quality |
5 |
0 仅基本设置,1 + 胶片对比度,2 + 暗角,3 + 胶片阴影色调,4 + 颗粒,5 + 颗粒抖动(最高质量)。 |
r.Tonemapper.Sharpen |
0 |
色调映射器中的锐化,上限为 10。0.5 为半强度,1 为全强度。 |
r.Tonemapper.GrainQuantization |
1 |
1 添加高频像素图案以对抗 8 位颜色量化。0 速度略快。 |
r.TonemapperGamma |
0.0 |
0 使用默认的 sRGB 或 Rec709 转换;任何其他值都强制使用固定的伽玛值。 |
r.Gamma |
1.0 |
Gamma 应用于输出 |
r.Tonemapper.Quality 是一个真正的可扩展性控制点。每降低一级,色调映射着色器就会移除一项功能,从而产生更经济的排列组合。如果您的项目不使用暗角、胶片阴影色调或颗粒效果,降低质量级别不会造成任何视觉损失,还能节省帧时间和着色器排列组合次数。
r.Tonemapper.Sharpen 需要谨慎使用。少量色调映射锐化可以补偿感知到的柔化,但它是在抗锯齿之后进行的,会在 SMAA 刚刚解决的边缘重新引入锯齿。如果图像看起来柔和,请首先确认您确实以原生分辨率渲染,并且没有启用任何放大功能。
色彩分级
所有色彩分级均通过 色彩分级(Color Grading) 下的后期处理体积完成。控件分为“色温”、“全局”、“阴影”、“中间调”和“高光”五个部分,每个部分都提供饱和度、对比度、伽玛值、增益和偏移量等设置。
在虚幻引擎中,色彩分级是在色调映射之前,以线性空间进行操作的。这就是为什么在二维图像编辑器中看起来正确的调色值无法直接应用到实际场景中的原因——您是在对场景相关的线性数据进行调色,而不是对显示器相关的像素进行调色。
LUT(查找表)。 可以在后期处理程序中指定一个调色 LUT,并设置混合权重。创建 LUT 时,应使用场景的原始中性图像,而不是使用已经调色过的图像,否则调色结果会叠加。
HDR 输出
| CVar | 用途 |
|---|---|
r.AllowHDR |
启用项目的 HDR 输出支持。通常在 DefaultEngine.ini 中针对每个项目或平台进行设置。 |
r.HDR.Display.OutputDevice |
选择输出传输函数 |
r.HDR.Display.ColorGamut |
选择输出色域 |
; Config/DefaultEngine.ini
[/Script/Engine.RendererSettings]
r.AllowHDR=1
HDR 输出与 SMAA 的交互正常,因为在 Vite 中,SMAA 的运行先于色调映射。运行在色调映射之后的抗锯齿实现通常需要针对 HDR 输出进行重新调整;而 Vite 的实现则无需如此。
Slate 和 UI 会根据输出设备信息(通过 r.TonemapperGamma)进行合成,但基于 SDR 参考创建的 UI 在 HDR 下会显示错误。请预留时间专门检查 UI 在 HDR 下的显示效果,而不是想当然地认为它会自动转换。
常见问题
- 场景看起来发白或泛白
通常是环境光或雾气过大,而不是调色问题。检查是否应用了环境光遮蔽 (AO) 以及全局光照 (GI) 强度是否过高。在调整对比度之前,请先与路径追踪参考进行比较。
- 编辑器视窗和打包版本之间的颜色存在差异
几乎总是由于输出设备不同或存在未解除绑定的后期处理体积造成的。确认两者中的 r.HDR.Display.OutputDevice 是否匹配,并检查是否存在仅在编辑器中显示的后期处理体积。
- 渐变和天空出现条带
检查 r.Tonemapper.GrainQuantization 是否为 1。如果在 HDR 显示器上仍然存在条带,则可能是源渐变本身被量化了——请检查天空纹理或渐变材质的精度。
- 图像在编辑器中清晰,但在游戏中模糊
确认没有启用任何放大器。请参阅超分辨率和帧生成。Vite 默认以原生分辨率渲染;游戏设置菜单中启用的放大器通常是造成此问题的原因。