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...