5
$\begingroup$

Different combinations of spectral wavelengths can produce the same apparent color. For instance, true yellow is 570nm-590nm, but computer screens produce it by mixing red and green. Both yellows look the same, but they are not really the same!

It's easy to demonstrate this effect in Blender. Cycles operates in RGB-only mode. It cannot simulate any colors in the visible light spectrum except for red, green, and blue. Secondary colors are combinations of the 3 RGB primaries.

A limitation of Blender Cycles's trichromatic color system

To Cycles, yellow = red + green and cyan = green + blue. When you layer 2 planes with yellow and cyan glass shaders above a white emission plane, green light passes through. Each plane lets 2 wavelengths of light pass through it.

To Cycles, red and blue are pure primary colors. When you layer 2 planes with red and blue glass shaders above a white emission plane, what you see is black (not purple!) Each plane lets just 1 wavelength of light pass through it, and all light is blocked since the wavelengths are different.

Is it possible to make colors in Blender act as their own true wavelengths/spectral distributions instead of a mixture of red, green, and blue? If you do that, layering translucent yellow and cyan planes will result in black, just like layering red and blue. If you make 2 different colors that respond to a range of overlapping spectra, layering them will allow some light to pass through (resulting in a non-black color).

Can blender render colors with custom/non-RGB spectral distributions?

https://www.youtube.com/watch?v=uYbdx4I7STg

$\endgroup$
  • 5
    $\begingroup$ As far as I know you need a spectral render engine to do this sort of thing, which Cycles is not. $\endgroup$ – Duarte Farrajota Ramos Jul 2 '18 at 4:00
  • 7
    $\begingroup$ @DuarteFarrajotaRamos's answer is absolutely correct. With any tri light rendering engine, you have three discrete colours that are determined by the colour management system and application. Given it is a three axis model, it is impossible to derive a unique combination that references the same point in a Cartesian space. Hence no metamerism. Add a single channel, and it would be possible. $\endgroup$ – troy_s Jul 2 '18 at 4:55
  • 1
    $\begingroup$ In real life if you use a blue filter in front of a red one you will effectively get no light. (cycles reproduces that). A blue filter absorbs light in all frequencies except for blue. If the light travels trough a second filter (red) then all light that is not red gets absorbed, leaving you with no light at all: black. If you want to get magenta out of Red and Blue you have to add two light sources with such colors. Read about the difference between additive color and subtractive color $\endgroup$ – cegaton Jul 3 '18 at 13:50
  • $\begingroup$ @cegaton In real life if you use a pure cyan (500nm) filter in front of a pure yellow (580nm) filter you will effectively get no light either. $\endgroup$ – clickbait Jul 3 '18 at 15:57
  • $\begingroup$ Cyan and Yellow filter would result in green light $\endgroup$ – cegaton Jul 3 '18 at 16:04
11
$\begingroup$

It's easy to demonstrate this effect in Blender. Cycles operates in RGB-only mode. It cannot simulate any colors in the visible light spectrum except for red, green, and blue.

This isn't correct.

The reference space primaries are determined by the colour management system. In theory, any reference space primaries within, or even beyond, the spectral locus can be selected. More specifically, any three light rendering engine can cover any area of the spectral locus, including imaginary coordinates beyond it, depending on the coordinates for each of the three lights.

Is it possible to make colors in Blender act as their own true wavelengths/spectral distributions instead of a mixture of red, green, and blue? If you do that, layering translucent yellow and cyan planes will result in black, just like layering red and green.

This has nothing to do with spectral, and rather a difference between additive light and subtractive (multiplicative) light systems.

Can blender render colors with custom/non-RGB spectral distributions?

If you mean "greater than three light" models, no. With that said, architecturally, a three light rendering engine isn't terribly far off from a spectral n-light rendering system; they crunch numbers in more or less the same way. The differences come in with respect to how the values are defined.

RGB however, isn't what it seems you think it is. RGB is literally any arbitrary set of three coloured lights, which are determined as a protocol layer in most instances in an raytracing engine. That is, the raytracing engine typically will just crunch numbers as though they were energy, and not care what colours are indicated by the intensities of the three lights. In this respect, RGB doesn't imply any specific colours of reddish, greenish, or blueish light, nor even that the labels represent reddish, greenish, or blueish lights but potentially something altogether of a different hue to what the somewhat arbitrary labels suggest.

There is nothing stopping someone from using spectral based primaries, such as those found in REC.2020, in Cycles for example. This is aside from the fact that Cycles and Eevee aren't properly colour managed, making the usage and interaction a bit tricky.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.