The VFX Color Pipeline

The Basics

What is a Colorspace?

Photo by Sven Scheuermeier on Unsplash


The “L.M.L.D” flow. A basic description of what happens when we work on an image in modern “Linear Color Applications.” Note: The darkening of an image during the Linearize step is expected and not for dramatic effect.
  1. Convert input image(s) to a common colorspace, typically Linear.
  2. Do our modifications on these images in the same colorspace. This makes it easy to do image manipulation.
  3. Then, optionally, apply a Look, or series thereof. A Look typically takes the form of a LUT. IMPORTANT: A Look does not change the colorspace!
  4. Finally, at the last second, we convert from that common colorspace where we did our manipulation to account for the way your display shows color. Most displays use the colorspace sRGB or something close to it. When writing images to disk, we may bake this information in (a-la jpeg) or leave it in the linearized space (a-la OpenEXR)

Before You Go

The Not So Basics

What is Linear Color?

Photo that has nothing to do with linear color but the math looks really cool. Under the hood some math is done but, unless you’re making the software, it’s not all that vital to know.

What is sRGB?

Eugh… What a nerdy image. This is a color profile that dates back to the 1930’s with the sRGB colorspace (1996) placed in it. It’s important to notice how much information sRGB is missing and why the VFX industry does what it can to stay away from it. This photo is a great view into that loss of data.

What Does it Mean?!

color_a = 0.25 # linear value
color_b = 0.25 # linear value
color_a + color_b = 0.5 # linear value
color_a = 0.25 # linear value
color_b := 0.25 # sRGB value
color_a + color_b = 0.3008760881715568 # linear value
sRGB at 0.25 is ~0.05 when converted to linear. It’s a bit funky but getting used to this concept will go a long way in helping understand color theory. Note: The sRGB block is darker than the linear block, it’s almost black.
if srgb <= 0.0404482362771082: # ?
return srgb / 12.92 # ?!
return pow(((srgb + 0.055) / 1.055), 2.4) # ?!?!

You Probably Skipped That Part

Once We’re Linear.

Photo by Jacob Miller on Unsplash

Showing The User

We Made It!



Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Michael McCartney

Michael McCartney

Software blacksmith with an art degree