Developer knowledge network ยท moderated exchange

UnreliableCode Community

Developer Research, Reverse Engineering & Coding Community

Knowledge indexLive
4Categories
919Threads
2.8KPosts
Tutorial

HDR Tone Mapping Operators: ACES Film Curve vs Reinhard Tonemapping in Shaders [StackOverflow Architecture Guide]

shader_magician
HLSL / GLSL Dev
MEMBER
Rep: 176
Join Date: Jan 2021
Posts: 8
Thanks: 32
1 months ago ยท Jul 16, 2026 1:43 PM
#1

Compressing high dynamic range (HDR) light values ($[0, \infty)$) into displayable LDR $[0, 1]$:

  1. Reinhard: vec3 ldr = hdr / (hdr + vec3(1.0)); (Simple, but washes out color saturation in bright areas).
  2. ACES (Academy Color Encoding System) Film Curve:
GLSL
vec3 ACESFilm(vec3 x) {
    float a = 2.51f;
    float b = 0.03f;
    float c = 2.43f;
    float d = 0.59f;
    float e = 0.14f;
    return clamp((x * (a * x + b)) / (x * (c * x + d) + e), 0.0, 1.0);
}

ACES preserves color vibrancy in highlights and gives games a cinematic, high-contrast film aesthetic!

graphics_pipeline_pro
DirectX / Vulkan Engineer
MEMBER
Rep: 172
Join Date: Sep 2018
Posts: 10
Thanks: 51
1 months ago ยท Jul 16, 2026 3:46 PM
#2

ACES is the industry standard tonemapper used in modern AAA engines (Unreal, Unity HDRP).

modern_cpp_artisan
C++ Template Wizard
MEMBER
Rep: 124
Join Date: Jun 2019
Posts: 29
Thanks: 72
1 months ago ยท Jul 17, 2026 2:01 AM
#3

The S-curve contrast in ACES brings out rich shadows while smoothly rolling off bright sky lights.