Building Color Models and Exploring Color Spaces in Three Dimensions with Blender
Color spaces and color models can be difficult to wrap your head around completely. There are additive and subtractive spaces, like RGB vs. CMYK, and different format/display technologies, like analog's YUV vs. digital's YCbCr -- all of which you may have to traverse to achieve the final 'look' you want for your imagery. Not to mention that many color spaces are not absolute, meaning they don't profile device-specific color representation. This can certainly induce a bit of a headache for newcomers to the color science realm. A great post by photographer Mark Meyer, featured recently on PetaPixel, explains how you can quite literally better-orient yourself to color spaces and models by, well, modeling them -- in 3D open suite Blender, no less.
Now, many of us may not think of color spaces three-dimensionally, but a 3D perspective on color is, in a way, already dictated by the very terminology in use here: color space (not "color shape" like a rectangle) and color model (not "color map") would seem to imply a dimensionality beyond the flat charts filmmakers may be used to grading with in our NLEs. Mark Meyer (originally on his own site, and featured by PetaPixel) takes this idea and runs with it, and the results are actually quite beautiful as well as enlightening:
From time to time I post plots of color gamuts like [this]. Each time, I get email asking how I make them leading me to assume that the world's thirst for color nerdiness is going unquenched. I'm setting out to fix that in this post. There are several applications that produce graphics like these on demand including Apple's ColorSync Utility, ColorThink Pro, and Gamut Vision. These are all terrific applications and they all do a lot more than plot gamuts, but when I make these graphics, I do it from scratch using Blender and its Python scripting interface.
Blender is an open source 3D modeling/rendering application. Because you have to tell it explicitly what to do at every step, working with color geometry in Blender is a really good way to sharpen your understanding of the technical details. And unlike software dedicated specifically to plotting colors, Blender imposes no limitations on your creativity.
Mark goes into some great detail regarding the process he uses to create his models and map colors to them -- additional resources include RGB-XYZ conversion matrices by Bruce Lindbloom. Such charts are necessary because, as Mark also points out, not all color spaces are absolute. CIEXYZ (also known as CIE XYZ or the 'CIE 1931 color space'), sRGB, and Adobe RGB are examples of absolute color spaces, in contrast to 'generic' RGB spaces.
Whereas a generic RGB space will leave 'full/true/pure' values (like red, green, or blue) up to a given display device to create, an absolute color space defines conversion techniques so that any disparity in display technology still produces the exact same tone/shade/hue regardless of the display. The source may be different, but the destination is the same. This is called metamerism, and it basically just means "yeah, you're looking at the same color at points A & B, don't care how you got there." ICC profiles are an oft-used method of performing such conversions, or 'making absolute' a relative color space. A psuedo-absolute 'Lab' color space such as CIELAB (aka L*,a*,b*) also does this once a white point is determined, allowing each value to fall into its place relative to that point.
Given all this, the flat color graphs we often use to color correct can be thought of as convenience -- universally-visible and navigable 'unwrapped' projections of a three-dimensional shape. Color spaces lend themselves to modeling because they do, in fact, have borders, meaning the colors they include have finite extents or limits, and multiple overlapping colors mean these borders have multiple dimensions, just like a three-dimensional shape. The above overlayed models, for instance, are a way for Mark to compare the breadth, length, and scope of two RGB spaces:
The above graphic uses simple matrices available from Bruce Lindbloom to convert two RGB cubes into XYZ spaces using the ProPhotoRGB profile and the Adobe RGB (1998) profile. Once in XYZ space it is easy to see that the ProPhoto gamut completely contains the smaller AdobeRGB gamut. You can also see that the white points (the top right vertex in this image) are aligned because I have adapted them to D50. It's a necessary step when comparing colorspaces with different white points.
There's plenty more color modeling where that came from over at Mark's post and site, and part of the reason he's shared is to allow others to participate in exploring color three dimensionally themselves -- so those interested, let us know what you come up with!