Implementing HDR rendering and tone mapping
In all our previous examples, the resulting color values in the framebuffer were clamped between 0.0
and 1.0
. Furthermore, we used 1
byte per color component, making only 256
shades of brightness possible, which means the ratio between the darkest and the brightest regions in the image cannot be larger than 256:1
. This might seem sufficient for many applications, but what happens if we have a really bright region illuminated by the Sun or multiple lights? Everything will be clamped at 1.0
, and any additional information in the higher values of brightness, or luminance, will be lost. These HDR brightness values can be remapped back into a Low Dynamic Range (LDR) 0..1
interval using a tone-mapping technique.
Getting ready
The source code for this demo is located in Chapter8/GL03_HDR/src/main.cpp
.
How to do it...
To implement HDR rendering, we need to store HDR values in framebuffers. This can be done using our existing GLFramebuffer...