# Output tonemapping to PNG produces gray even for superwhites

I have a scene that when rendered to EXR, produces a more-than-white background: 1.2, 1.2, 1.2 or thereabouts. When I save a render as PNG, that same pixel is (220, 220, 220) or 0.86, 0.86, 0.86. Why isn't it white? I understand that saving to PNG applies the "Color Management" settings in the Scene (camera icon). Mine are set to:

  Display Device: sRGB (correct for PNGs, right?)
View Transform: Filmic
Look: None
Exposure: 0
Gamma: 1.0
(no curves)


I would expect that a superwhite result would produce a white PNG pixel unless I have some setting seriously out of whack, right? Even if I apply a "high contrast" Look, I still get (228, 228, 228) in my PNG. If I do "View Transform: Raw", then I do get a saturated (255, 255, 255) but the doc says Raw is not intended for final output.

I'm using Blender 2.91alpha recent nightly.

White is not necessarily a scene referred value of 1 or 100 or 10 000. It all depends on the color transforms through which the image is processed to a display referred image, in which case yes, white is corresponds to 1 (and then expressed in a number of available bits, for example in an 8 bit image pure white would be 255, 255, 255).

When you save as EXR you are bypassing the color transforms set in the color management section.

EXRs are scene referred linear data, not intended for display, but for further processing, like compositing, that should be done with linear data.

The information in EXRs is not limited to a scale of 0 to 1, and can have very large values. Those values are probably beyond what any monitor can display, so in order to be displayed in some way that we can see and understand they go through color transforms set in the color management section

Next. When you set the display transform to sRGB and save as PNGs, then the values of the image are not linear anymore but are re-scaled and transformed, scaled and probably clipped, within the bounds of "display referred" imagery (0 to 1). A curve (sometimes called "gamma") is applied to the values, hence the difference in values that you report.

If you use the filmic transforms. White could be at a different value, 16.19 approximately.

To get a much better explanation on any of this (including the maligned term "superwihtes") please read:

Render with a wider dynamic range in cycles to produce photorealistic looking images

Also when you are using a "RAW" color transform you are not applying a curve to the output image. Any value larger than 1 will be clipped in any display referred format. RAW should only be used when you need your data to be undistorted by color transforms, as is the case of normal maps, height maps, etc, that are technically not images but data.

• I really enjoy how you explain things. I was trying to understand these things for a while now, and with your answer it all finally clicked together :). Aug 5 '20 at 9:22
• Thanks -- I understand color science pretty well, but this is a useful post for people. The key point in your post, for me, is that the Filmic transform assumes scene-linear 16.19 is the reference white point. Do you have a reference for that? I want my final result video to be all white (just barely), so I need to know what values to create in the Cycles render. I assumed it would be 1.0 but clearly that's wrong, at least for Filmic. Is that transform (maybe 3d LUT?) documented anywhere? It may be best for me to simply render EXRs and do all my tone mapping in post. Aug 5 '20 at 15:58
• all the info here: github.com/sobotka/filmic-blender
– susu
Aug 5 '20 at 17:48
• Thanks @susu -- I wasn't sure that "Filmic Blender" was the same as Filmic built into recent Blender, especially since the page you refer to only mentions the "Filmic Log" transform and its looks, and not "Filmic". But the chart in the false-color section is really useful. It gives a sense of the overall curve shape, at least for grayscale values. Also it seems that the PNGs that Blender produces with Filmic do have the sRGB ICC tag which is good. Aug 6 '20 at 14:28