Understand & Set Up Filmic Color Transform
Tuesday, May 16, 2017
Here are two images, two sRGB images that comes from the same .EXR render (the same scene referred data). The only difference between those two images is that the scene linear data has been bent differently so the final sRGB images are not the same (display referred data).
What you need to understand:
Scene Referred Data:
Also called Scene Linear Data, it represent the RAW, linear values from your 3D scene.
A HDR image is also the same kind of data, it contains the linear values of the real world.
All pixels have a value between 0 and infinity according to their linear value.
It can only be viewable on a screen if we bent the data (compress it), for example with a color transform like Filmic or sRGB...
To have access to those values you have to render your image in a linear format like .EXR.
Display Referred Data:
The actual pixels you see on your screen, in sRGB (the main colorspace of the screen).
0 to 1 range.
What's wrong with the sRGB color transform?
Limited dynamic range:
You have to fit all your lighting information below 1 (linear scale) even if the rendered data is scene linear (infinite range)... The pixels above 1 will clamp.
In fact, the sRGB transfer function was explicitly designed for display referred contexts. Hence it terminates at 1.
For example if you take one of my sunny HDRI, the sky value is usually living between 5 and 10 (linear scale) and the sun can be up to 5000, with this high contrast in values it's hard to have a well balanced image with sRGB because the sun will clamp really fast on your materials and if you don't want that, your global scene will look too dark...
In the same logic, it becomes really tricky when you light a scene and you want to add more lights without burning your scene. It is really hard to make creative judgements against limited dynamic range...
Limited artistic decisions:
You can't have bright light values in your 3D scene without clamping your image.
No natural light bounces.
Less contrast between your lights values.
You have to fake things to get the result that you want.
The artist put energy and time trying to fix the lack of limited dynamic range and has less time to focus on his artistic decisions.
A lot of per-shot adjustments are needed.
Incredibly wide dynamic range:
It bends the scene linear data in a way that it takes advantage of a wider range of values present in your scene, not just 0 to 1...
You can use real value ratios between your lights (high and low values) in your 3D scene and benefit from all the secondary effects...
Natural desaturation process.
It has been created to work in a standard sRGB/REC.709 colored primaries environment so it is simple to implement it in your pipeline using OpenColorIO.
A big thanks goes to Troy Sobotka, the creator of Filmic, for taking his time to share his precious knowledge.
If you want to know more about the subject I highly recommend you to check those links, Alex Fry presentation is what got me so interested in all that stuff!