The 3D Handbook
Key term

Tonemapping

The curve that squeezes a rendered scene's huge range of brightness into what a screen can show, and decides how highlights roll off and how bright colours change hue.

renderingpost-processingcolourlighting

Tonemapping maps the brightness values a game renders, which can run from near zero to thousands, onto the 0 to 1 range a screen can display. Unreal's documentation states the purpose: "to map the wide range of high dynamic range (HDR) colors" to what the display can show (Unreal Engine Documentation: Color Grading and the Filmic Tonemapper). The tonemapper is the curve that does it. It decides how bright areas roll off to white, how much contrast the midtones get, and what happens to saturated colours as they brighten.

It is the second half of exposure: exposure picks which part of the range sits in the middle, the tonemapper compresses everything else.

#The common tonemappers

Godot 4 ships five, and its documentation summarises them (Godot Engine documentation: Environment and post-processing):

Tonemapper What Godot says it does
Linear "Does not modify color data, resulting in a linear tonemapping curve which unnaturally clips bright values"
Reinhard "A simple tonemapping curve that rolls off bright values to prevent clipping"
Filmic A "film-like tonemapping curve" with "better contrast than Reinhard"
ACES Uses "a high-contrast film-like tonemapping curve and desaturates bright values for a more realistic appearance"
AgX "Better than other tonemappers at maintaining the hue of colors as they become brighter"

Godot's White setting controls where the curve reaches display white; for photorealistic lighting it recommends values between 6.0 and 8.0, and with White left at 1.0 its Reinhard curve behaves like Linear (Godot Engine documentation: Environment and post-processing). Unreal's default is a filmic tonemapper that "matches the industry standard set by the Academy Color Encoding System (ACES)", with Slope, Toe, Shoulder, Black Clip and White Clip controls (defaults 0.88, 0.55, 0.26, 0 and 0.04) (Unreal Engine Documentation: Color Grading and the Filmic Tonemapper). Blender switched its default view transform to AgX in version 4.0, saying it "provides better color handling in over-exposed areas compared to Filmic" and that "bright colors go towards white, similar to real cameras" (Blender release notes: Blender 4.0: Color Management).

#Hue shifts in bright colours

The simplest tonemappers apply the same curve to red, green and blue separately. That compresses the strongest channel most, so the colour's hue changes as it brightens. Jasmin Patry of Sucker Punch describes the effect in his Ghost of Tsushima talk: "Per-channel tonemapping in the rendering color space clips saturated colors to cyan, magenta, and yellow" (SIGGRAPH 2021: Real-Time Samurai Cinema: Lighting…).

Three rows of nine swatches of the same orange at exposures from minus 2 to plus 6 stops. Without a tonemapper the colour clips to flat orange. With per-channel Reinhard it drifts to yellow and then near white. With Reinhard applied to luminance it stays orange as it brightens.
A saturated orange, such as a sunset or a flame, under three curves. Per-channel curves shift hue; luminance-based curves keep it but clip. Colours computed for this page.Diagram by the handbook author

ACES itself has addressed the same issue. Its 2.0 output transform tonemaps only a lightness component in a JMh colour space and adjusts colourfulness separately, which keeps "the original hue" intact (ACES Documentation: Output Transforms).

#Effects on art assets

  • Emissive and VFX values. A fire tuned under one curve looks wrong under another. See emissive materials.
  • Albedo checks. Judge base colour in a neutral lighting setup, not through a heavy curve.
  • HDR displays. The tonemapper targets a display. ACES output transforms take scene data and prepare it for "a specific display", through a rendering step and a display encoding step (ACES Documentation: Output Transforms).

Related: colour grading and LUTs, colour space: sRGB and linear, bit depth and banding, colour for environments.

#Further reading and watching

References

  1. Epic Games · Color Grading and the Filmic Tonemapper · Unreal Engine Documentation, 2026 · docs · accessed 2026-10-21
  2. Godot Engine contributors · Environment and post-processing · Godot Engine documentation (source on GitHub), 2026 · docs · accessed 2026-10-21
  3. Blender Foundation · Blender 4.0: Color Management · Blender release notes, 2023 · docs · accessed 2026-10-21
  4. Jasmin Patry (Sucker Punch Productions) · Real-Time Samurai Cinema: Lighting, Atmosphere, and Tonemapping in Ghost of Tsushima · SIGGRAPH 2021, Advances in Real-Time Rendering in Games, 2021 · talk · accessed 2026-10-21
  5. Academy Color Encoding System project · Output Transforms · ACES Documentation (ACES Central), 2026 · docs · accessed 2026-10-21

Last updated 2026-10-22