i do not understand the filmicRGB dynamic range mapping

can some one explain the dynamic range mapping graph as below

why is the display % from 0 to 18 taking up more spaces than 18-100 and why is from 0 to 18 there is more shades when compared to 18-100

as my understanding 18% is map to a value of 127,127,127 is it not.
i have been scratching my head why the graph is like that.

can someone explain this thanks

Please search this forum, there have been more detailed explanations posted. If you still have questions, let us know, but check what is out there first.

The (link to the) graph in your post seems to be broken…
Perhaps you want to have a look at https://www.youtube.com/watch?v=zbPj_TqTF88. And Aurelien Pierre has published furthermore videos and posts about filmic module and dynamic range mapping. Also this forum contains several post about this topic.
Another source of information are the videos of Bruce Williams. Just use your preferred search engine…

i do understand what its doing. The thing that i am trying to understand is why there are 9 shades of grey from 0 to 18percent but only 3 shades of grey from 18% to 100% pure white.

Simply put, this is because our perception is not linear (like that of the camera sensor) and we perceive the brightness differences most clearly in this range between 0 and 18% of reflectance (middle gray range). Brightness differences above this range are much less perceptible to us, correspondingly the compression is much stronger in this range.


thanks @s7habo for the explanation. now I get it thanks

Probably best not to reply if you don’t really want to.

Because… dynamic range sucks.

Your display is probably close to sRGB and using 8 bits integer encoding. So the highest value that will get rounded to 0 when converting to uint8 sRGB is (0.5 / 255) / 12.92 = 0.0001518 where 12.92 is the encoding transfer function of sRGB near black. If we compute the \log_2 of this value, we get -12.69 EV.

So, that means that sRGB can encode 12.69 EV of lightness data between “pitch black” and “full white” (regardless of whether the screen can actually display all of them later or not – this is pure data encoding).

Meanwhile, middle grey \approx 0.1845, which in \log_2 is -2.44 EV. To sum up:

  • display white is at 0 EV (it’s our reference),
  • middle grey is at - 2.44 EV,
  • display black is at - 12.69 EV (and everything darker will get rounded the same -12.69 EV, encoded 0 in this space).

You see that our typical dynamic range is clearly unbalanced in favour of shadows.


You need a macro for this bit of text …you have typed it so often… :slight_smile:

Actually that is a great explanation and might be a nice add to the manual under the Filmic DNR display graph to enhance the description that exists there and for the rest of the filmic rgb doc??

Maybe only change if from “Your monitor is” to something like “A typical monitor is” rest as is above

@elstoc what do you think??

thanks for clearing up this. thats all I wanted to know so that i could understand the graph. thanks much appreciated.

so can I assume that any luminance value below 0.0152% will become black ?

Quick follow-up, your typical desktop display has a contrast ratio of 300:1, which is 8.23 EV. So it’s not even able to fully display the allowed sRGB dynamic range (the bottom 4 EV go to trash and get clipped to black… which is the whole point of black point adaptation… that nobody does).

1 Like

And in addition to all that, only encodes around 5.6EV without going below a rather lenient threshold of a 5% difference in brightness being perceivable in a gradient. Worse if you use a more stringent threshold.

(Unfortunately I don’t have a direct link to the paper in question at the moment, I’ll try to find the actual citation tonight.)

At least display dynamic ranges have improved significantly recently, although sometimes with tradeoffs (for example local dimming is great for global contrast ratios, but not necessarily good for handling high local contrast).