The 3D Handbook
Topic

Exposure and post-processing

How engines turn a high-dynamic-range render into the final image; exposure and EV100, auto exposure, tonemappers (Filmic, ACES, AgX), colour grading with LUTs, bloom and depth of field, and the debate about film grain and chromatic aberration.

lightingpost-processingexposuretonemappingcolour-grading

Exposure decides how the brightness of a rendered scene maps to the brightness of the screen. Post-processing is everything the engine does to the finished image after that: tonemapping, colour grading, bloom, depth of field and the rest. Together they are the last step between your lighting and what the player sees, so a well-lit scene can still look wrong if this step is off.

Modern engines render in high dynamic range (HDR): a sunlit wall can be thousands of times brighter than a shadowed corner. A screen cannot show that range, so exposure picks the window of brightness to show and the tonemapper squeezes the rest into it. Unity's HDRP documentation states: "To work with physically based lighting and Materials, you need to set up the Scene exposure correctly" (High Definition RP 17 documentation: Exposure).

#Exposure and EV

Photographers measure exposure in exposure values (EV). Each step of one EV is a doubling or halving of light. Unity's HDRP "expresses all exposure values that it uses in EV100" (High Definition RP 17 documentation: Exposure), meaning EV at ISO 100, and Unreal uses the same scale (Unreal Engine Documentation: Auto Exposure).

A horizontal EV100 scale from minus 4 to 16. Markers show full moon at minus 3 to minus 2, home interiors at 5 to 7, offices and night streets at 7 to 8, galleries at 8 to 11, heavy overcast at 12, cloudy bright at 13, full sun at 15 and sun on sand or snow at 16.
Typical EV100 values for real scenes. The gap between a home interior and full sun is 8 to 10 stops.Diagram by the handbook author; values from Wikipedia, "Exposure value

Real light levels span a huge range: a typical scene in full sun is EV 15, heavy overcast EV 12, home interiors EV 5 to 7, and a full moon EV −3 to −2 (Wikipedia: Exposure value). If your game moves between a house and a sunny street, exposure has to cover at least that 8 to 10 stop gap.

Unreal defines the relationship in its documentation: with physical camera settings, EV100 = log2(Aperture² / Shutter Speed × 100 / ISO), and the final exposure is 1 / 2^(EV100 + Exposure Compensation) (Unreal Engine Documentation: Auto Exposure). Exposure Compensation is logarithmic: "1 is two times brighter, and 2 is four times brighter" (Unreal Engine Documentation: Auto Exposure).

#Auto exposure

Auto exposure (eye adaptation) measures the image and adjusts exposure over time, like your eyes do when you step outside.

Unreal offers three metering modes (Unreal Engine Documentation: Auto Exposure):

  • Auto Exposure Histogram, "the default exposure metering mode", based on a 64-bin brightness histogram.
  • Auto Exposure Basic, faster, with fewer settings.
  • Manual, a single fixed value "unaffected by the luminance in the scene".

The important controls are Min and Max EV100, which clamp how far adaptation can go, and Speed Up and Speed Down, how quickly it adapts from dark to bright and back (Unreal Engine Documentation: Auto Exposure). For the histogram, Epic suggests starting with Low Percent at 70 to 80 and High Percent at 80 to 95 (Unreal Engine Documentation: Auto Exposure). Godot's auto exposure has similar Min and Max, Speed and Scale settings, but only in its Forward+ renderer (Godot Engine documentation: Environment and post-processing).

Local exposure keeps detail in both highlights and shadows on top of the global exposure (Unreal Engine Documentation: Auto Exposure). Epic says it "should always be set up when using Lumen Global Illumination" (Unreal Engine Documentation: Auto Exposure), and Fortnite's team repeated the advice (Unreal Engine tech blog: Lumen brings real-time global illumination to…).

#Tonemapping

A tonemapper is a curve that maps HDR scene values to the 0–1 range of the display. Without one, everything brighter than display white clips to flat white.

A graph of output brightness against scene brightness from 0 to 8. A dashed linear line rises steeply and flattens at 1.0 from scene value 1 onwards. An orange Reinhard curve rises more slowly and approaches 1.0 without reaching it.
A linear mapping clips every value above 1.0; a simple Reinhard curve, x/(1+x), rolls bright values off gradually. Filmic, ACES and AgX use more shaped curves. Curves computed for this page.Diagram by the handbook author

Godot's documentation describes its options (Godot Engine documentation: Environment and post-processing):

Tonemapper What it does Cost
Linear "Does not modify color data" "The simplest and fastest"
Reinhard "Rolls off bright values to prevent clipping" Slower than Linear
Filmic A film-like curve with "better contrast than Reinhard" Slightly slower
ACES "High-contrast film-like" curve that "desaturates bright values for a more realistic appearance" Slightly slower than Filmic
AgX "Better than other tonemappers at maintaining the hue of colors as they become brighter" "The slowest tonemapping option"

For photorealistic lighting, Godot recommends a White value between 6.0 and 8.0; higher values blow out less but can look lower in contrast (Godot Engine documentation: Environment and post-processing).

#Colour grading

Colour grading shifts the colours of the final image for mood: teal shadows, warm highlights, desaturation for a war film. Most engines grade with a LUT (look-up table), a small 3D texture that maps every input colour to an output colour.

Grading is a tool for art direction; see colour for environments and value.

#Other common effects

#In different engines

Unreal Engine 5 Unity 6 Godot 4
Exposure units EV100 (Unreal Engine Documentation) EV100 in HDRP (High Definition RP 17 documentation) Exposure multiplier; physical camera attributes optional (Godot Engine documentation)
Auto exposure Histogram (default), Basic, Manual; Local Exposure (Unreal Engine Documentation) HDRP exposure override (High Definition RP 17 documentation) Forward+ only (Godot Engine documentation)
Tonemappers Exposure Compensation applies only when a tonemapper is used (Unreal Engine Documentation) — Linear, Reinhard, Filmic, ACES, AgX (Godot Engine documentation)
Grading — HDR or LDR grading, LUT size 32 by default (URP) (Universal RP 17 documentation) Adjustments and 3D LUT after tonemapping (Godot Engine documentation)

#Common mistakes

#Further reading and watching

References

  1. Unity Technologies · Exposure · High Definition RP 17 documentation, 2026 · docs · accessed 2026-10-21
  2. Epic Games · Auto Exposure · Unreal Engine Documentation, 2026 · docs · accessed 2026-10-21
  3. Wikipedia contributors · Exposure value · Wikipedia, 2026 · web · accessed 2026-10-21
  4. Godot Engine contributors · Environment and post-processing · Godot Engine documentation (source on GitHub), 2026 · docs · accessed 2026-10-21
  5. Epic Games · Lumen brings real-time global illumination to Fortnite Battle Royale Chapter 4 · Unreal Engine tech blog, 2022 · article · accessed 2026-10-21
  6. Epic Games · Using Physical Lighting Units · Unreal Engine Documentation, 2026 · docs · accessed 2026-10-21
  7. Unity Technologies · Universal Render Pipeline Asset · Universal RP 17 documentation, 2026 · docs · accessed 2026-10-21
  8. Yi Dao · Death Stranding and Other Games' Filter Toggles Are Splitting Players · GameGeeker, 2026 · article · accessed 2026-10-21
  9. Rob Thubron · Assassin's Creed Mirage players employ mods to sidestep unwanted chromatic aberration · TechSpot, 2023 · article · accessed 2026-10-21

Last updated 2026-10-22