
Note of intent:
I am aiming to simplify and summarize complex color management procedures for learning purposes. Please feel free to comment; any feedback will be greatly appreciated and result in future updates.
Introduction
Glossary
1. The Human Vision
2. What is a Colorspace?
3. What is sRGB?
4. Linear-sRGB workflow
5. What does ACES solve?
- ACES colorspaces
- Key terms
- Archiving
- Primaries conversion
- Filmic tonemapping
- Punchy lighting
- High Dynamic Range (HDR)
6. ACES Workflow
7. ACES Limitations
- You won’t get more colors
- Avoid Rendering in ACES AP0
- High exposure issues in ACEScg
- Handling noise in HDRI’s
8. Practical Setup
Glossary
Main references and many thanks!
1-The human vision
How the human eye and brain perceive colors
Photons enter the eye through the crystalline lens and are detected by the retina’s photoreceptors. We will focus on the two types of photoreceptors: rods and cones.
- Rods for Luminance Detection:
Rods are highly sensitive to light and are primarily responsible for detecting luminance (light intensity). They are not responsive to color, which is why our ability to perceive color diminishes in low-light conditions. - Cones for Color Detection:
Cones detect color by responding to specific wavelengths of light. They are less sensitive to light intensity, which is why they function best in well-lit environments and contribute less in low-light scenarios.
An essential aspect of vision is that rods and cones do not function like simple light switches. Instead of activating upon receiving light, they are constantly active and become inhibited when photons strike them. This mechanism allows photoreceptors to remain responsive in varying lighting conditions.
In darkness, photoreceptors maintain high levels of activity but transmit weaker signals due to limited photon stimulation. This is similar to how a camera amplifies a dark image, resulting in noise. This explains why in low light we primarily perceive luminance (thanks to rods) and see much less color.
How our eyes perceive luminance
2. What is a colorspace?

A colorspace is a way to organize and define colors so that they can be reproduced accurately across different devices. It’s like giving every color a specific address so you always know where to find it.
It is is defined by:
Primaries
These are the pure red, green, and blue points that form the “triangle” of colors the space can represent. Each primary has it’s own coordinates. That particular “triangle” is the Gamut:
Gamut: it is the range of colors that can exist by combining the primaries.

White point
This is the spot that defines what “neutral white” looks like in that colorspace. For example, I bet you’ve already heard about D65: it is a common white point used in sRGB and represents daylight at around 6500K.
Transfer functions
Transfer functions are mathematical operations that convert signals from one form to another, e.g., linear light and nonlinear color spaces (e.g., RGB). They are required for example to map image data to the perceptual characteristics of the human eye and the technical limitations of capture or display devices. For instance, they allow for efficient bit allocation to use fewer bits for bright areas (where the eye is less sensitive) while detail is optimized in the shadows and midtones (where the eye is more sensitive). Transfer functions can be employed for other purposes as well, such as the application of color profiles, dynamic range compression, or mapping images to specific color gamuts (e.g., HDR displays).
Here is an example of the data redistribution from Linear RGB to sRGB.

Transfer functions, like the sRGB curve, redistribute this data to prioritize detail in darker tones, making images look natural.
There are two main transfer functions:
- OETF (Opto-Electronic Transfer Function): Converts linear scene light into a non-linear video signal, typically within a camera. This is used during capture for encoding.
- EOTF (Electro-Optical Transfer Function): Converts the video signal back into linear light for display. This is used when sending a signal to a screen for decoding.

3. What is sRGB?
sRGB (Standard Red Green Blue) is a term that refers to two things:
sRGB colorspace

The sRGB colorspace is the default color standard for digital content.
It was created in 1996 by HP and Microsoft to standardize color for the growing digital world. It was designed for CRT screens (the bulky monitors of the time), which naturally displayed brightness in a non-linear way, similar to a gamma curve. This made sRGB a perfect fit for the technology of the era and be widely compatible.
Why We Still Use sRGB:
Even though CRTs are gone, sRGB stuck around because it’s simple and effective, makes easy to convert linear light data into sRGB and it optimizes file sizes, making it ideal for 8-bit formats like JPEGs.
sRGB transfer function
The sRGB transfer function is a curve that is a slight adjustment of the gamma 2.2 curve.

4. Linear sRGB workflow

Rendering engines calculate light and color in linear space because that’s how light behaves in the real world. Using linearized colors allows light to be additive: if you double the light intensity, you double the brightness. This physical accuracy is essential for realistic lighting, shadows, and reflections.
However, human vision doesn’t perceive light linearly. To fix that, we use transfer functions, which map linear light values to non-linear values optimized for display thanks to a view-transform.
Once the sRGB transfer function is baked into the file, no additional color transform is needed for the image to look correct on standard displays. This makes sRGB a practical choice for delivery, as it ensures compatibility with most devices and workflows.
sRGB’s limited gamut
When sRGB is used as the render color space, its limited gamut can cause colors to appear clamped and highlights to lose detail, ultimately reducing realism and disrupting the coherence of scene lighting.

5. What does ACES solve?
My own words wouldn’t be as efficient as the Main ACES page:
“ACES standardizes and simplifies color management by maintaining the color fidelity of your production at the highest level throughout production, postproduction and archiving.”
ACES colorspaces

Whitepoint: All ACES encodings are based on a D60 whitepoint which corresponds to 6000K.
ACESproxy: Log integer (10/12-bit), transport-friendly, non-floating-point. The ACESproxy encoding is specifically designed to work well when graded using the American Society of Cinematographers Color Decision List (ASC CDL) ( very specific).
ACES 2065-1: Used for ACES compliant files, it’s Gamut contains the entire visible spectrum.
ACEScg: it is the(scene-referred) colorspace used for rendering. ACEScg = Linear Wide Gamut. It is the recommended working colorspace for CG artists because it closely aligns with spectral rendering, which ensures scientifically accurate results, and has a large gamut close to Rec.2020. The primaries of Rec.2020 being the most saturated colors that can exist in nature and that correspond to laser’s colors. For short: working space with AP1 primaries, no negative values.
ACEScc(t): cc=color correcting and the t stands for a toe that prevents from having sub-0 values. They are logarithmic colorspaces used for grading operations, for example in Nuke the grading nodes are designed to work within the range of values between 0 and 1.

Key terms
Look Modification Transform (LMT): This is where creative decisions come to life. For instance, if a specific visual style is required for a film, mathematical transformations are applied to adjust the base look to the desired aesthetic. An example of this is when filmmakers want to replicate the colors of traditional film stocks in digital content, using LMTs to modify the colors and achieve a distinctive look.
Archiving
ACES is a well-documented framework that standardizes metadata and color management, enabling artists to create ACES-compliant EXR files, ensuring that the files are future-proof.
This makes them ideal for remastering, adapting to new display standards like HDR, or reformatting for different platforms.
ACES provides the structure and context needed to maintain consistency and quality over time. A raw linear file might look correct today, but without a defined color space or metadata, it’s impossible to guarantee how it will look in the future. ACES solves this by embedding all the necessary information—color space, dynamic range, and metadata—into the file itself.
As the Academy of Motion Picture Arts and Sciences puts it, ACES ensures the archive contains “the highest fidelity digital source master possible, representing the digital equivalent of the ‘finished negative.”. Making images ready to be remastered or adapted as technology advances.
Primaries conversion





Primaries have been converted using a 3×3 matrix to convert these to ACEScg. Now the “pure” colors are not anymore and it allows to have visible green bounces on red surfaces for example since completely pure values do not exist in nature!

When using pure red values in rendering, the material absorbs all green and blue light, resulting in no green or blue bounces. However, because ACES colorspace conversions make “pure” red slightly impure, the red object reflects small amounts of green and blue light. This subtle addition creates more realistic global illumination, making scenes feel natural and that more “energy” is in the scene.
Filmic tonemapping

Punchy lighting



On this example you can see that in sRGB the sun looks clamped and it clearly does not feel natural. The image on the Right is more appealing and punchy but also keeps a natural look and does not have clipping in the highlights.
High Dynamic Range (HDR)
As seen for example on Netflix’s Partner Help Center, ACES has become the standard for handling HDR content.

6. ACES workflow

Here is the workflow we used on our ESMA graduation movie: Sink. I’ve added a few steps that we don’t use like sending the files to a Digital Intermediate but that can be helpful for this doc.
Footage ingestion
Textures
The need to have textures in the correct working space is crucial to maintain visual accuracy between texturing and rendering departments. Textures created from scratch can be designed in the ACEScg colorspace and previewed using the sRGB (ACES) view transform for accurate representation.
For textures sourced from the internet or other sRGB-encoded assets, they need to be linearized and get their primaries converted before being integrated into an ACEScg scene via an IDT.
Rendering and compositing
Since the beginning of the scene, every input like textures and footages are “contained” in the same colorspace. So the workflow only needs to be preserved. Rendering in ACEScg in a .exr format allows compositing artists to input these renders as scene_linear in Nuke and view the files with again the same sRGB(ACES) viewer.
Color grading
As I collected information on color grading I found this forum from AcesCentral that was particularly helpful: https://community.acescentral.com/t/why-grading-in-log-instead-of-linear/2228

Since traditional grading operators such as grades and colorCorrects are supposed to operate on 0-1 values, ACEScc seems to be the best choice to have operations that are computed coherently with the image.
In order to do so in Nuke, use two OCIOColorSpace nodes one that is transforming ACEScg->ACEScc and another following one to transform back to ACEScc->ACEScc (because cg is our working space).

Even though the working colorspace is cg, it means that we transform the values to a logarithmic colorspace not corresponding to cg. That is why the cg->cc transform needs to be winded back to cg!
Comparaison of ACEScc and ACEScg grading:





In order to make grading efficient I made a nuke gizmo that allows to do color corrections in ACEScc and has a red saturation slider that helps to compensates the problem that makes red saturation too intense.
Writing ACES-compliant EXR files
The EXR format is widely used for high-quality images in visual effects and animation, especially when working with ACES. Here are the steps to ensure your EXR files are ACES-compliant:


7. ACES limitations & troubleshooting
You won’t get more colors
Avoid Rendering in ACES AP0 (ACES2065-1)
High exposure issues in ACEScg
Clipping in Highlights: Overexposed highlights can lose detail or appear unnaturally intense, especially when viewed on standard dynamic range (SDR) displays. (Even if the image is tonemapped doesn’t mean it can’t be overexposed)
Color Shifts: Extremely high-emission light sources or bright areas can result in unwanted color shifts, making scenes appear unnatural or inconsistent with the intended look. This is especially visible with saturated lights. The result is named hue skews and needs to be considered.
In this conversation we see that with red that becomes orange and blue becomes purple when the exposure is high.
Handling noise in HDRI’s
8. Practical Setup
OCIO config in windows
If working alone or a small team, make sure that everyone is using the same OCIO config file. It will avoid differences in color transforms and nomenclature that can make you lose time. This needs to be setup in your environment variables of Windows.
Example with Renderman that we used on Sink:

Renderman has a pre-configured config.ocio in its folders. Since we rendered the short-film in Renderman we used this config.ocio.
First go to Windows->edit environment variables



Variable name: OCIO
Variable value: whatever config.ocio you want to use
Once done every software will take this config to define its working space and view transforms.

To check in Nuke, when the color management is set to OCIO, the config should turn grey and the available transforms should have the same name as in Renderman.
OCIO config in Rocky Linux 9
Open the terminal and use nano to edit the text informations from the environment file int the /etc directory.

sudo nano /etc/environment
Once the file open the nano interface will appear:

OCIO="/home/user/yourconfig.ocio"
Once typed in hit ctrl+X to close the file.
In order the check if the variable is well typed in:
cat /etc/environment
What you should see in the terminal is the line you typed earlier:

Now we check that the variable can be acces by softwares using the $OCIO variable.
source /etc/environment //says from which file it will look at
echo $OCIO //results the value of the variable OCIO

The correct path is prompted so everything is well set. Restart the computer and enjoy!
Glossary
Main references
Bien évidemment: https://chrisbrejon.com/
https://openbooks.lib.msu.edu/neuroscience/chapter/vision-the-retina/
https://www.cgw.com/documents/WHITEPAPERS/VESCinematicColor.pdf
https://docs.acescentral.com/#alternate-viewing-pipeline
https://community.acescentral.com/t/why-grading-in-log-instead-of-linear/2228
https://www.desmos.com/calculator/gq1lq70fme
https://community.acescentral.com/t/difference-between-virtual-and-real-color-primaries/1380/7
https://acescentral.com/knowledge-base-2/aces-working-spaces/
MANY THANKS
Christophe Brejon de Lavergnée (merci Linkedin pour le nom complet et surtout merci pour le livre CG Cinematography)
Baptise Lebouc for the precise feedback and re-organisation of the entire doc
Victor Perez for the funniest ACES and compositing conferences. Especially this one: https://youtu.be/Y2mcVM8c7cA?si=COqmvnlho_DawQtB
The ACES Central forum which is full of the most precise resources you can find!


