2
$\begingroup$

I have one object in my scene that I want to make really emissive and purple.

When I input the color purple (#8800FF) and crank up the emission strength to 100, the object turns pink and nearby surroundings turn pink.

When I input the color red (#FF0000), the object and its nearby surroundings remain red.

enter image description here

I realize this is due to RGB math, but regardless, I haven't found a way to fix it. I'm basically looking for a purple lamp to have the same emission behavior as a red lamp.

$\endgroup$
7
  • 2
    $\begingroup$ Possibly related: blender.stackexchange.com/questions/46825/… $\endgroup$
    – JtheNinja
    Dec 30, 2016 at 22:23
  • $\begingroup$ Red lamp behaviour is impossible in the real world. every color should have at least SOME color from the oher two channels to behave realistically. That said, there is no way that i know of to do what you are trying to do besides maybe clamping or compositing? $\endgroup$ Dec 30, 2016 at 22:47
  • 1
    $\begingroup$ @SebastiánMestre This is false. $\endgroup$
    – troy_s
    Dec 30, 2016 at 23:10
  • $\begingroup$ @troy_s Lasers are the exception but they aren't a very common light source $\endgroup$ Dec 30, 2016 at 23:39
  • 1
    $\begingroup$ @SebastiánMestre RGB displays are not spectral, nor are RGB renderers. They are tristimulus, meaning they work on three lights. 709 (more specifically REC.709) red is the colour of the red light in the display you are (likely) looking at and the colour of the red in the OP's post. While it is possible that to make 709 red using a mix of wavelengths outside of a renderer or display, in this scenario, it is a single light. $\endgroup$
    – troy_s
    Dec 30, 2016 at 23:58

1 Answer 1

4
$\begingroup$

Not possibly related @JTheNinja, absolutely related.

The answer is that your colour values are rendered in the scene referred domain. This means that whatever view transform you are using will end up having a "maximum" scene referred value. So what is happening with purple?

In the case of the red, we expect it to actually "blow out", or turn white. This is due to the emergent and learned aesthetic of photography. It however, remains a perfectly saturated 709 (Longer term ITU-R Recommendation BT.709) light red.

In the case of the purple, we are relying on a mixture of the 709 flashlights to mix to the colour. In this case, a purple clearly needs some 709 blue, but also possibly a bit of 709 green. What is critical to understand is that the colour of the purple is a byproduct of the ratios between the flashlights. Those ratios must always remain identical to "hold" the colour we see.

As a result, as the 709 flashlight for red exceed the display referred transform, the other values continue to ascend. The scene referred to display referred transform however, has ceased being able to maintain that ever critical ratio as the lower values crush towards the maximum ceiling. When the ratios skew, the resultant colour skews. In this case, given that we cannot express "more 709 blue", we lose the ratio, and the 709 red continues to crawl up and give you the more fuchsia colour.

So what is a more ideal solution? Ideally, what would happen is that the colour maintains a straight line between the original colour and the Illuminant white point. Why is this more ideal than what you are seeing? Because it allows you in grading to go back and pull in those desaturated values as you creatively need, maintaining the original colour if done correctly. It also "looks more normal" in that as a colour ascends up our virtual camera's dynamic range, it indeed "blows out" according to what our mental models expect. This has a tremendous impact on the aesthetic of renders. So it is win-win[1].

In the case of an ignorant tone map / sRGB transform however, the values have a fixed scene referred value (a dismal and pathetic scene referred value of 1.0 in the case of the sRGB EOTF), and the original colour, or chromaticity in colour nerd terms, is skewed wildly.

If any of this interests you, go take Filmic Blender for a whirl, as it seeks to solve this very issue.

[1] This is in fact a key difference between the hacky cameras such as RED and Ursa, and the more high-end industrial cameras such as the Sony F55/65 and the Arri Alexa. In the case of the formers, they skew their colorimetry precisely as you are seeing in your demo. In the case of the latter, there is a careful hardware transform that attempts to gracefully desaturate higher values such that the chromaticities hold, albeit desaturated.

$\endgroup$
2
  • $\begingroup$ I don't exactly understand the technical terms, but Filmic Blender did give me some intruiging results. You try and see if you can submit the changes to Blender. $\endgroup$
    – kizlink
    Jan 3, 2017 at 6:00
  • $\begingroup$ @kizlink There is much room for improvement with Filmic, but it does address your issue specifically. The key thing to focus on is that ratios of light define the colour and that when faced with rendering ceilings (maximum values in the scene referred domain) you have to deal with how those ratios compress against the ceiling. If you don't compress them, you end up with the rather whacky colour results you discovered. $\endgroup$
    – troy_s
    Jan 3, 2017 at 6:51

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .