Color is not a file format, a LUT, or a “look.” It is light, filtered by human vision, measured into numbers, carried through cameras and software that each speak a different dialect, and finally forced onto a display that can only show a triangle of colors inside a larger world of what people can see.

This seminar conducted by color scientist Peter Postma a contributor to ACES - offers an incredible overview of how light is measured and displayed digitally.
Color is not a file format, a LUT, or a “look.” It is light, filtered by human vision, measured into numbers, carried through cameras and software that each speak a different dialect, and finally forced onto a display that can only show a triangle of colors inside a larger world of what people can see.
If you only remember one sentence for the career:
“Red” is not a wavelength on disk — it is a managed claim about how light should look to a human, on a given device, under a given transform.
This lesson builds that idea from vision → CIE measurement → gamuts → why we need color management (IDT / working space / ODT) → why cameras encode log → information theory and bits.
Visible light is a thin band of the electromagnetic spectrum — roughly 380–700 nm for human vision. Longer wavelengths trend “red”; shorter trend “violet.” Sunlight, tungsten, LEDs, and RGB pixels are different spectra (power vs wavelength).
A camera does not store spectra. Neither does your eye. Both collapse a continuous spectrum into a few channel responses:
System | How it samples light |
|---|---|
Human eye | Three cone types (L, M, S) with broad, overlapping sensitivity |
Cinema camera | Usually Bayer RGB filters + spectral curves of the sensor |
Display | Three (or more) primaries mixed to stimulate the eye |
Two different spectra can look the same to a person (metamerism). That is why “matching the plate” is about perceived color under a pipeline, not about identical physics everywhere.
People use “red” in at least four incompatible ways:
(1, 0, 0) in some color space.Only (3) is what lives in EXRs, ProRes, and Nuke — and (1, 0, 0) without a color space is meaningless.
(1, 0, 0) in sRGB / Rec.709 is one red primary on the CIE chart.(1, 0, 0) in ACEScg is a different chromaticity — much “wider.”(1, 0, 0) in camera log is not linear scene red; it is a code value after a log curve and a camera matrix.So “red” on a timeline is always:
code values + color space / encoding + view transform
Manage any of those wrong and “red” becomes pink, orange, crushed, or illegal on the client monitor.
Without management you get:
Color management is the discipline of labeling every image with what the numbers mean and transforming when you change meaning (camera → scene-linear → display).
In 1931 the CIE formalized how a “standard observer” matches lights using three imaginary primaries X, Y, Z. That gave:
x = X / (X + Y + Z)
y = Y / (X + Y + Z)Feature | Meaning |
|---|---|
Horseshoe boundary | Limits of human chromaticity for the 2° standard observer |
Inside the horseshoe | Real, mixable colors (desaturated toward white) |
White point (e.g. D65) | “Neutral” for a given illuminant / display |
RGB triangle | All colors makeable by mixing three primaries of that space |
Outside a triangle but inside the horseshoe | Visible to humans, not reproducible by that RGB system |
No three-primary RGB display or camera encoding can cover the entire horseshoe. That gap is why we talk about gamut, volume, and rendering intents.
Horseshoe = all chromaticities a standard observer can see. Triangles = colors an RGB system can make from its three primaries. Scroll to zoom, drag to pan.
sRGB / Rec.709
Display P3
Rec.2020
ACEScg (AP1)
The eye is not equally sensitive across the spectrum. Luminance for video is dominated by a green-weighted mix (classic Rec.709-ish):
Y ≈ 0.2126·R + 0.7152·G + 0.0722·B(in a linearized Rec.709-related RGB). That is why green carries most of the “detail/brightness” story and why chroma subsampling can get away with throwing away color resolution.

Physical light can span many orders of magnitude (starlight → sun). Subjective brightness is roughly logarithmic / power-law, not linear. Weber–Fechner-style: equal ratios of light feel more like equal steps than equal adds.
Displays and cameras exploit that:
That is the bridge to why cameras encode log (below).
Your brain white-balances continuously. A grey card under tungsten “looks white” after a minute; a raw file does not adapt for you. Pipelines must choose a creative white and stick to it through grades and CG.
A color gamut is the set of colors a device or encoding can represent.
Space | Rough role |
|---|---|
sRGB / Rec.709 | Legacy web + HD broadcast triangle (small) |
Display P3 | Wider modern displays / phones |
Rec.2020 | UHDTV container; most real TVs can’t fill it yet |
ACEScg (AP1) | Common VFX working RGB (wide, scene-referred) |
ACES2065-1 (AP0) | Archival ACES RGB (extremely wide; almost “all of CIE”) |
Key VFX fact: plates often contain camera colors outside Rec.709. If you prematurely convert to 709 and clip, you throw away information you needed for a show LUT, HDR grade, or matching CG.
On the CIE chart: camera / ACES triangles sit outside the 709 triangle. Color management’s job is to carry those values safely until an output transform decides how to fit them onto a real monitor.
Color management is a chain of named transforms. OCIO / ACES language:
Term | Meaning |
|---|---|
IDT (Input Device Transform) | Camera / plate encoding → scene-referred working space |
Working space | Where lighting, CG, and most grades should happen (often linear ACEScg or similar) |
ODT (Output Device Transform) | Working space → display / deliverable (Rec.709, P3-D65, HDR10, …) |
RRT (Reference Rendering Transform, ACES) | Scene → display-referred “look foundation” before a display ODT (ACES classic architecture) |
View transform | What you see in the viewer (often a preview ODT + look) |
Display | The actual device calibration target |
Camera log / RAW --IDT--> Scene-linear working RGB --creative grade / CG--> same working space
|
ODT / view
v
Client monitor / deliverableSkip either end and you are guessing. Comp “fixing” saturation on log without an IDT is cargo-cult color.
Mistake | Symptom |
|---|---|
No IDT (log treated as linear or as 709) | Wrong contrast, hue errors, CG never matches |
No ODT (linear dumped to sRGB) | Dark, flat, or wildly over-bright; “why does my EXR look wrong in Finder?” |
IDT of camera A on footage from B | Systematic hue/sat error |
ODT for P3 while client is 709 | Looks great at home, wrong in the suite |
Rule: every image in the script should have a known role (input encoding, working, display). OCIO configs exist so you stop inventing that map per shot.
Sensors measure light in a way that is approximately linear with exposure (within their range). Files do not usually ship pure linear 16-bit integer for every production codec.
Log curves (LogC, S-Log3, REDLog3G10, V-Log, …) apply a compressive transfer function so that:
That is not a look. It is a container encoding optimized for transport and bit depth. The “look” comes later (show LUT, grade, ODT).
Think in bits as budget:
Same idea as floating-point EXR for CG: scene-linear float has huge range with fine relative precision. Log integer is a compressed compromise for cameras and editorial codecs when float RAW pipelines are not the deliverable.
Encoding | Good for | Bad if you… |
|---|---|---|
Scene-linear float (EXR) | Lighting, CG, merges, science | Dump raw to sRGB viewer without a view transform |
Camera log (integer) | On-set / editorial range, 10-bit media | Grade as if it were display-referred |
Display gamma / PQ | Final view, streaming masters | Use as a lighting workspace |
IDT undoes camera log (and applies the camera’s color matrix) into working linear. ODT applies the display curve and gamut map so the viewer is not looking at linear data.
Classic mistake: grade and key log footage as if mid-grey were display mid-grey. Use the viewer process (OCIO view) so your eyes see an ODT’d image while the script stays correctly labeled.
A LUT is a sampled function: input RGB → output RGB.
In modern pipelines, many “LUTs” are baked views of IDT/ODT/look chains. Prefer OCIO named transforms when you can; use LUTs when the show delivers them as the contract.
LUTs are not magic color science — they are tables. Wrong input space → garbage output.
Your brain:
So:
ACES (Academy Color Encoding System) is a standardized family of spaces and transforms so facilities can share work without “what gamma is this EXR?”
OCIO (OpenColorIO) is the engine shows use to apply those transforms consistently in Nuke, Maya, Houdini, Blender, etc.
You do not need to memorize every ACES version. You need to:
Idea | One-liner |
|---|---|
Color | Spectra collapsed by eye/camera into a few channels |
“Red” | Code values + color space + view — not a free-floating hue |
CIE 1931 xy | Map of human chromaticities; horseshoe = vision, triangle = RGB gamut |
Gamut | Colors a device/encoding can make; none cover all of vision |
IDT | Camera encoding → scene working space |
ODT | Working space → display / deliverable |
Log | Compressive encoding so limited bits cover many stops of light |
Linear | Proportional to light; correct workspace for physical math |
Why manage color | Different devices, encodings, and gamuts must agree on meaning |
Information | Log / perceptual curves spend bits where the eye notices error |
Horseshoe = all chromaticities a standard observer can see. Triangles = colors an RGB system can make from its three primaries. Scroll to zoom, drag to pan.
sRGB / Rec.709
Display P3
Rec.2020