开发

Unreal Engine 中的色调映射

更新时间: 2026年4月14日
在 Meta Quest 上,可在 Unreal Engine 中使用某些色调映射特效,却不会产生与色调映射相关的传统性能成本。Meta Quest 集成方案渲染色调映射仅需额外约 600 微秒的渲染时间,只是实际性能因设备和场景复杂性而异。之所以能够实现这一点,是因为集成方案使用 Vulkan 子通道,而非 Unreal Engine 的移动 HDR 模式或额外渲染通道。
此功能在 UE 的 Oculus-VR 分支版本以及安装了 Meta XR 插件的 Unreal Engine 标准 Epic 版本中均可使用,并且需启用 Vulkan。
Example of tonemapping
Vulkan 色调映射子通道支持以下后期处理特效:
  • 颜色分级(包括 LUT)
  • 电影色调映射
  • 晕影
编辑器支持 Android Vulkan 预览

示例

“图形演示”示例展示了这些常见的色调映射特效:
  • 淡入和淡出
  • 颜色渐变昼夜循环
  • 颜色分级 LUT
  • 晕影
“图形演示”示例应用可在以下地方获取:

启用色调映射子通道

如要启用 Vulkan 子通道用于色调映射,请设置 r.Mobile.TonemapSubpass=1
无需色调映射时,若要禁用 Vulkan 子通道以恢复性能,请设置 r.Mobile.TonemapSubpass=0
您可以使用以下任一方法设置此控制台变量:
  • DefaultEngine.ini:在项目 DefaultEngine.ini[/Script/Engine.RendererSettings] 部分中添加以下内容:
      [/Script/Engine.RendererSettings]
      r.Mobile.TonemapSubpass=1
    
  • 运行时控制台命令:通过控制台执行 r.Mobile.TonemapSubpass 1
  • C++ 或 Blueprint:使用 Execute Console Command Blueprint 节点,或在玩家控制器上调用 ConsoleCommand() 并使用命令字符串 r.Mobile.TonemapSubpass 1
Note
色调映射子通道与移动端延迟着色不兼容。如果启用了移动端延迟着色,则色调映射子通道将自动禁用。

将 HDR 与透视结合使用(混合现实)

可以将色调映射子通道与 HDR 渲染和透视功能结合起来,用于混合现实应用程序。这需要一个特定的场景颜色格式,其中包括用于透视混合的 Alpha 通道数据。
默认情况下,HDR 使用 PF_FloatR11G11B10 像素格式,该格式没有 Alpha 通道。透视混合需要 Alpha 数据,因此必须切换到 PF_A2B10G10R10 格式。
如要启用 HDR 和透视功能:
  1. 将以下代码行添加到项目的 DefaultEngine.ini 中:
     r.Mobile.SceneColorFormat=4
    
    这会将场景的颜色格式设置为 PF_A2B10G10R10,为透视合成提供所需的 Alpha 通道。
  2. 通过设置 r.Mobile.TonemapSubpass=1 启用上述色调映射子通道。
Note
如果没有 r.Mobile.SceneColorFormat=4,透视混合将无法正常工作,因为默认 HDR 像素格式 (PF_FloatR11G11B10) 不包含 Alpha 通道数据。

色调映射特效

可以通过更改 Post Process Volume(后期处理体积)属性和 Level Sequence(关卡序列)中的值来实现特定的色调映射特效。Vulkan 子通道支持:
  • 关卡序列中的淡入淡出轨迹
  • 后期处理体积属性中的场景颜色渐变
  • 后期处理体积属性中的颜色分级 LUT
  • 后期处理体积属性中的晕影

淡入和淡出

在 Level Sequence(关卡序列)中添加淡入淡出轨迹,并在该轨迹上定义关键点,即可实现淡入淡出特效。淡入淡出值为 1.0 表示完全不透明的黑色,而 0.0 表示完全透明。
实现淡入淡出效果:
  1. 在主工具栏中,点击 Cinematics(过场动画)> Add Level Sequence(添加关卡序列)。
  2. 在序列器中,点击 + Track(+ 轨迹),然后选择 Fade Track(淡入淡出轨迹)。
    Level sequence with a Fade
  3. 选择 Fade(淡入淡出)轨迹,然后点击 o 添加关键帧。

颜色渐变

添加 Post Process Volume(后期处理体积)并更改该处理体积的 Scene Color Tint(场景颜色渐变)属性,即可添加颜色渐变或色调。
添加基础颜色渐变:
  1. Post Process Volume(后期处理体积)Actor 添加到关卡。
  2. 前往 Post Process Volume Settings(后期处理体积设置)属性,然后选择 Enabled(启用)和 Infinite Extent (Unbound)(无限范围(无边界))。
    Post Process Volume settings
  3. Color Grading|Misc(颜色分级|其他项)> Scene Color Tint(场景颜色渐变)属性设置为想要的颜色渐变效果。
    Post Process Volume scene color tint settings

昼夜循环

可以使用序列器随着时间的推移逐渐改变后期处理体积的颜色渐变,从而制作昼夜循环的动画效果。例如,可以让“场景颜色渐变”从夜晚时的蓝色逐渐变为黎明时的红色,再变为白天时的中性白色。
要创建“场景颜色渐变”属性变化的序列:
  1. 在主工具栏中,点击 Cinematics(过场动画)> Add Level Sequence(添加关卡序列)。
  2. 在序列器中,点击 + Track(+ 轨迹)> Actor to Sequencer(将 Actor 添加到序列器),然后选择后期处理体积。后期处理体积已添加到序列器中。
  3. 在添加到序列器的后期处理体积中,点击 + Track(+ 轨迹)> Settings(设置)> Color Grading|Misc(颜色分级|其他项)> Scene Color Tint(场景颜色渐变)。场景颜色渐变设置已添加到序列器中。
  4. 展开 Scene Color Tint (Settings)(场景颜色渐变(设置)),然后点击 o 在所需位置添加关键帧。
    Tonemapping day night sequence

颜色分级 LUT

可以应用 LUT 来更改调色板或颜色分级。可以自行创建 LUT 或从 Unreal 市场获取 LUT
要应用颜色分级 LUT:
  1. 向项目添加 LUT 纹理。
  2. Post Process Volume(后期处理体积)Actor 添加到关卡。
  3. 前往 Post Process Volume Settings(后期处理体积设置)属性,然后选择 Enabled(启用)和 Infinite Extent (Unbound)(无限范围(无边界))。
    Post Process Volume settings
  4. 前往 Post Process Volume(后期处理体积)> Color Grading(颜色分级)属性。
  5. 选择 Color Grading LUT(颜色分级 LUT),然后从列表中选择要应用的 LUT 纹理。
    Post Process Volume color grading settings

晕影

利用 Post Process Volume(后期处理体积)的 Lens Image Effects(镜头图像特效)属性即可应用椭圆形晕影。
添加基础晕影:
  1. Post Process Volume(后期处理体积)Actor 添加到关卡。
  2. 前往 Lens > Image Effects(镜头 > 图像特效)属性,然后选择并设置 Vignette Intensiy(晕影强度)。
    Post Process Volume vignette settings
如需了解更多信息,请参阅 Unreal Engine 文档中的“晕影”

疑难解答

启用色调映射子通道后出现色彩偏移

与不使用色调映射子通道的渲染效果相比,启用 r.Mobile.TonemapSubpass=1 可能会导致色彩饱和度显著提升。这是因为禁用色调映射子通道时,Unreal Engine 默认的电影色调映射器所应用的色调曲线不会生效。
如要在启用色调映射子通道的情况下恢复原始色彩外观,请使用以下方法之一禁用色调曲线:
  • 控制台变量: 在运行时设置 ShowFlag.ToneCurve=0
  • 后处理体积:在关卡中添加后处理体积,并将 Film(电影)> Tone Curve Amount(色调曲线强度)设置为 0

特效不可见

如果特效未显示,请确保:
  • 选择了 Post Process Volume Settings > Enabled(后期处理体积设置 > 启用)。
  • 相机位于“后期处理体积”的范围内,或者选择了 Post Process Volume Settings > Infinite Extent (Unbound)(后期处理体积设置 > 无限范围(无边界))。
Post Process Volume settings
如需了解更多信息,请参阅 Unreal Engine 文档中的“后期处理特效”