If you watch the demo portion above, look at the “colour” of the wall prior to the light crushing down on it. Before the light crushes it, it is a beige-orangey, after the light crushes it, it becomes a very yellow colour.
The reason for this is that Hero was rendered without a camera rendering transform, and instead used the sRGB transfer function labelled “Default”.
Traditionally, and ignoring complexities under the hood for the sake of explanation, a useful model to think about adjusting a colour value when you are drawing in something like Photoshop, is to think of it as controlling the emission of the diodes in the display. That is, when you set the slider to 50% you are trying to tell the display to “Output something that feels about half of the intensity of the brightest point 100% on the particular colour diode I am asking for” That gets converted via hardware of the display into a linear light emission value.
However, in something where you are mixing 3D and 2D, you are supplying lights in the scene to reflect off of the strokes or directly mixing the strokes as emissions with the scene’s lighting. That model is described as a scene referred model. That means that some of the things in our scene are trying to emit, and some are reflections of light smashing off of an object, and are then “rendered” via a transform, out of the screen.
In the Hero demo, the beige-orangey wall colour has a light smashing down on it. When we say albedo, we are now referring to the ratio of light reflected off of a surface. If our beige albedo were something like 0.7, 0.6, 0.03
, illuminated with one unit of light, we expect back the same values. Twice the light? Twice these values in the scene referred domain.
This is a grotesque oversimplification for the purposes of this particular explanation.
When we use camera rendering transforms that weren’t designed as such, the sRGB transfer function in this case, we can see the problem. The sRGB transfer function was never designed for such work, and the upper limit of the transfer function is 1.0. Hence, when say, twice the amount of light hits our beige wall, the values end up transformed to 1.4, 1.6, 0.06
, then transformed through the sRGB transfer function to become 1.0, 1.0, 0.06
output linear light out of the display, or that nasty pure yellow result! The original colour ratios are completely lost! The exact same issue would manifest if we double the emission strength of our drawn strokes.
So when using grease pencil, it is critical to still understand that you are developing textures of some sort that have potentially different contextual meanings. Are you smashing your strokes with light and using the result as a diffuse surface? That’s an albedo. Are you changing the material to an emission to project light?
The different contexts can yield different results, some of which are unintentional problems as we can see in the Hero demo sequence.
This is why the advice to “Just change to Default!!1!1” isn’t necessarily the most wise advice, where a bit of investigation would be more ideal.
Addendum: I’ll include a link here to an example I did on Twitter as this forum migration lost the original imagery. Warning: Once you see the broken handling, you can’t unsee it. It will remain with you forever and you will see it everywhere. It is a permanent mental blow. Do not click the link unless you want to be forever laden with seeing broken colour handling from cameras or animations. The three images (see thread) were taken from the OpenEXR reference imagery set, and rendered through the Filmic Blender camera rendering transform versus the sRGB default transfer function.
https://twitter.com/troy_s/status/812045320896933888?s=21