Tone Mapping in Unreal Engine
Updated: Apr 14, 2026
You can use certain tone mapping effects in Unreal Engine on Meta Quest without incurring the traditional performance cost associated with tone mapping. The Meta Quest integration can render tone mapping with approximately 600 microseconds of additional render time, though actual performance varies by device and scene complexity. This is possible because the integration uses Vulkan subpasses instead of Unreal Engine’s Mobile HDR mode or an additional render pass.
The Vulkan Tonemap Subpass supports the following post process effects:
- Color Grading (includes LUT)
- Filmic Tonemapping
- Vignette
The Graphics Showcase example demonstrates these common tone mapping effects:
- Fade In / Fade Out
- Color Tint Day-Night Cycle
- Color Grading LUT
- Vignette
The Graphics Showcase sample app is available on:
Enabling Subpasses for Tone Mapping
To enable the Vulkan subpasses for tone mapping, set r.Mobile.TonemapSubpass=1.
To disable the Vulkan subpasses to regain performance when tone mapping is not needed, set r.Mobile.TonemapSubpass=0.
You can set this console variable using any of the following methods:
DefaultEngine.ini: Add the following to the [/Script/Engine.RendererSettings] section of your project’s DefaultEngine.ini:
[/Script/Engine.RendererSettings]
r.Mobile.TonemapSubpass=1
- Console command at runtime: Execute
r.Mobile.TonemapSubpass 1 via the console. - C++ or Blueprint: Use the
Execute Console Command Blueprint node or call ConsoleCommand() on your player controller with the command string r.Mobile.TonemapSubpass 1.
Note
The Tonemap Subpass is not compatible with mobile deferred shading. If mobile deferred shading is enabled, the Tonemap Subpass is automatically disabled.Using HDR with Passthrough (Mixed Reality)
You can use the Tonemap Subpass with HDR rendering and passthrough for mixed reality applications. This requires a specific scene color format that includes alpha channel data for passthrough blending.
By default, HDR uses the PF_FloatR11G11B10 pixel format, which has no alpha channel. Passthrough blending requires alpha data, so you must switch to the PF_A2B10G10R10 format.
To enable HDR with passthrough:
Add the following line to your project’s DefaultEngine.ini:
r.Mobile.SceneColorFormat=4
This sets the scene color format to PF_A2B10G10R10, which provides the alpha channel needed for passthrough compositing.
Enable the Tonemap Subpass as described above by setting r.Mobile.TonemapSubpass=1.
Note
Without r.Mobile.SceneColorFormat=4, passthrough blending will not work correctly because the default HDR pixel format (PF_FloatR11G11B10) does not include alpha channel data.You can implement specific tone mapping effects by changing values in the Post Process Volume properties and the Level Sequence. The Vulkan subpass supports:
- Fade tracks in the Level Sequence
- Scene Color Tint in the Post Process Volume properties
- Color Grading LUT in the Post Process Volume properties
- Vignettes in the Post Process Volume properties
You can implement fade in and fade out effects by adding a Fade track to the Level Sequence and defining key points on the Fade track. A fade value of 1.0 is fully opaque black and 0.0 is fully transparent.
To implement a fade:
From the main toolbar, click Cinematics > Add Level Sequence.
In the Sequencer, click + Track, and then select Fade Track.
Select the Fade track, and click o to add keyframes.
You can add a color tint or tone by adding a Post Process Volume and changing the Scene Color Tint properties of the volume.
To add a basic color tint:
Add a Post Process Volume actor to your level.
Go to Post Process Volume Settings properties, and then select Enabled and Infinite Extent (Unbound).
Set the Color Grading|Misc > Scene Color Tint properties to the color tint you want.
You can animate a day and night cycle by using the sequencer to gradually change the color tint of the Post Process Volume over time. For example, you can make the Scene Color Tint gradually change from blue at night, to red at dawn to neutral white by day.
To create a sequence of Scene Color Tint property changes:
From the main toolbar, click Cinematics > Add Level Sequence.
In the Sequencer, click + Track > Actor to Sequencer and then select your post process volume. Your post process volume is added to the sequencer.
In the post process volume added to the sequencer, click + Track > Settings > Color Grading|Misc > Scene Color Tint. The scene color tint setting is added to the sequencer.
Expand Scene Color Tint (Settings), and then click o to add keyframes where you want them.
To apply a color grading LUT:
Add a LUT texture to your project.
Add a Post Process Volume actor to your level.
Go to Post Process Volume Settings properties, and then select Enabled and Infinite Extent (Unbound).
Go to Post Process Volume > Color Grading properties.
Select Color Grading LUT and then select the LUT texture you want to apply from the list.
You can apply an oval vignette using the Lens Image Effects properties of a Post Process Volume.
To add a basic vignette:
Add a Post Process Volume actor to your level.
Go to Lens > Image Effects properties, and then select and set Vignette Intensity.
Color shift when enabling Tonemap Subpass
Enabling r.Mobile.TonemapSubpass=1 may cause a visible increase in color saturation compared to rendering without the Tonemap Subpass. This happens because Unreal Engine’s default filmic tonemapper applies a tone curve that is not active when the Tonemap Subpass is disabled.
To restore the original color appearance while keeping the Tonemap Subpass enabled, disable the tone curve using one of the following methods:
- Console variable: Set
ShowFlag.ToneCurve=0 at runtime. - Post Process Volume: Add a Post Process Volume to your level, and set Film > Tone Curve Amount to 0.
If the effect is not visible, make sure:
- you selected Post Process Volume Settings > Enabled.
- the camera is within the bounds of the Post Process Volume or that you selected Post Process Volume Settings > Infinite Extent (Unbound).