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

Color management is a fundamental aspect of any visual production, especially in fields like Animation and VFX. It ensures that the colors we create and see on our screens are consistent. This consistency is vital for evoking the desired emotions and effectively conveying the story that the images aim to express.

The Academy Color Encoding System (ACES) is a comprehensive, open-source, and free color management framework designed to standardize and streamline color handling across every stage of a production—from capture to post-production, delivery, and archiving. It ensures accurate and consistent color reproduction, preserving the filmmaker’s creative vision across diverse devices and workflows.

In this guide, we’ll break down the concepts of ACES and explain how the system works, its benefits, and why it matters for achieving effective visual storytelling.


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.

For further informations on the exact mechanisms behind the human eye, I encourage you to check the original article of these resources: https://openbooks.lib.msu.edu/neuroscience/chapter/vision-the-retina/

Our eyes are especially sensitive to green-yellow light, peaking at around 555 nanometers, which means we see this range more easily than other colors, especially in bright light.

To capture light in digital cameras, a Bayer Matrix is used to capture light in red, green, and blue channels. This matrix allows each subpixel to sense specific wavelengths of light through tiny, built-in color filters. Each pixel in a digital camera is typically composed of four subpixels, arranged in a pattern: two green, one red, and one blue.

This arrangement reflects the human eye’s sensitivity to different colors—green is given more importance because the human eye, especially the cones responsible for color vision, is about twice as sensitive to green wavelengths compared to red or blue. This makes the Bayer matrix’s design efficient for capturing images that closely mimic the way we perceive the world.

How our eyes perceive luminance

The human visual system is more finely tuned to detect details in midtones than in extreme shadows or highlights. This sensitivity is due to the structure of our retinas, where rods (responsible for low-light vision) and cones (responsible for color vision) work together to interpret light and color.

  • Midtones are where our eyes are most efficient at discerning fine details and subtle changes in luminance. This means that when viewing a scene with a balanced range of light, we tend to notice the most differences in the midtone areas.
  • Shadows and Highlights, on the other hand, are perceived with less sensitivity. The eye struggles to distinguish between very dark shades in the shadows, or very bright highlights, as fewer cones are actively processing these extremes.

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:

  1. 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.
  2. 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.

Curve difference between ACEScc (no toe) and cct (with toe).

Key terms

Input Device Transform: The IDT (Input Device Transform) converts incoming color data from the native color space of the capture device (such as a camera) to the scene working space. If the working space is ACEScg (AP1 primaries) a second LUT would be applied. Every camera sensor or scanner captures light differently, so the IDT standardizes the image for seamless work in ACES. Many major camera manufacturers, like ARRI and RED, provide pre-built IDTs for their devices, simplifying this step. This is specific for camera footage. For texture conversion for example, no IDT or RRT is used, it is a specific process that linearizes the data and converts the color space primaries.

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.

Output Transform (RRT + ODT): scene‑referred ACES → display‑referred for specific viewing conditions. After working in ACEScg or another working space, the output transform is used to convert the final output to the color space of the desired display device (such as an sRGB monitor or HDR display). This ensures the project is seen correctly on any platform, whether it’s a traditional monitor, a television, or a cinema projector. The output transform is essential for maintaining color consistency across various display formats.

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

This part blew my mind when I finally understood how the fact of having a larger colorspace (having primaries that cover more of the visible colors) was benefitial to the “quality” and realism of a render. I found this resource (in french) from Christophe Brejon de Lavergnée explaining that by having a render colorspace that has a larger spectrum of colors, pure rgb values in the textures and lights were not always pure and kept for example green and blue really slight values. This might seem like a minor change but in reality it allows to produce much more accurate bounces of colors.

Since RGB values are used in a wider colorspace pure rgb values in input will not stay pure values, the result is a far more natural and realistic appearance. This is possible thanks to “primaries conversion”.

Creating pure Red Green and Blue
Visually the values seem to be the same but in reality…

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

The filmic tonemapping of aces really adds something. It allows to display HDR inputs to LDR display like sRGB ones by applying it’s s-curve filmic tonemapping that is stretching the midtones to have most of the informations between .1 and 1 that can be then remapped to the 0-1 range.

Punchy lighting

Thanks to the primaries conversion, transfer function and filmic tonemapping, ACES enables “punchy” lightings like in Minions: The Rise of Gru from Illumination, the energy that you can feel throughout the movie is very intense.

The ACES LUT (which is a combination of four 1d and 3d LUTs) allows to push the lighting intensity way further than using only sRGB. When not using complex LUTs, you might increase the exposure of the lights, only to realize they become completely burnt. So, you lower the light exposure, but this reduces global illumination, subsurface scattering, and light bounces, affecting the overall scene “energy”.

The saturation also feels really natural, the sun has a very high incidence on the characters giving the feel of a realistic sun. ACES handles very well desaturation for textures that are hit with an intense light. Saturation reacts espacially well when grading in logarithmic with ACEScc. (Except for a few exceptions that we will see later.)

You can also see it better on this image from the website https://acescolorspace.com

Left sRGB | Right ACEScg

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)

While 16-bit linear files can store a wide dynamic range, ACES offers several key advantages for HDR workflows by having built-in metadata and view transforms, simplifying color management across different tools and pipelines and ensuring consistency between the screen of the artists and the screen at home.

It is also designed to work seamlessly with modern HDR standards like Dolby Vision and HDR10, making it easier to deliver content for today’s advanced displays. In short, ACES provides a complete, industry-standard framework for 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

The raw data from cameras or other capture devices, often in their native color spaces, are converted to an ACES color space. This step involves applying an Input Device Transform (IDT) to map the device’s color data into ACES.

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:

Saturation at 2 Lum math Rec.709. Gamma set to 0.5 Left is using ACEScc, Right is ACEScg.
Saturation at 2 Lum math Rec.709. Gamma set to 1.5 Left is using ACEScc, Right is ACEScg.

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:

Use the Correct Naming Conventions: ACES has specific naming conventions for files to ensure consistency across pipelines. For example, files should clearly indicate the color space used (e.g., “ACEScg_EXR.exr”).

As there should be no ODT select ACES-ACES2065-1 to do the transform to ACES2065-1, avoiding any LMT or ODT during the export.

7. ACES limitations & troubleshooting

You won’t get more colors

Because most displays still operate in the sRGB colorspace, it limits what can ultimately be shown. While ACEScg’s wide gamut can handle nearly the full range of human-visible colors during production, it doesn’t result in a visibly broader palette on standard screens.

Avoid Rendering in ACES AP0 (ACES2065-1)

While the AP0 colorspace is extremely wide, it includes non-physical primaries that often result in negative values during rendering, as some values fall outside the visible range. This makes AP0 unsuitable for rendering tasks.

ACEScg, with its optimized gamut, is better suited for rendering. It ensures more realistic values in calculations, avoiding the issues associated with AP0, and is widely considered the ideal choice for accurate and reliable rendering workflows.

High exposure issues in ACEScg

When rendering in ACEScg, one common issue is overexposure in high-brightness scenes, particularly in HDR workflows. Because ACES preserves a wide dynamic range, extremely bright values can cause:

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.

https://community.acescentral.com/t/notice-of-meeting-output-transforms-architecture-meeting-1-12-2-2020/3363

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

Since texture files can contain very high values, for example in HDRIs, the sun can be as high as 3 digits numbers. Keeping these high values in HDRIs often creates “fireflies”. A clean way to get rid of this problem is to remove the sun and other intense sources of lights in HDRis and replace them with cg lights.

8. Practical Setup

I will be very quick on this part since so much resources are available on the internet to do the 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

Here’s a breakdown of the most important concepts:

  • LUT (Look-Up Table): A LUT is a mathematical tool used in color grading to transform one range of color values to another. In the context of ACES, LUTs can be used to apply creative looks, adjust color spaces, or fine-tune color balance during the post-production process.
  • Gamut: The gamut refers to the range of colors a particular system, display, or color space can reproduce. In simple terms, it’s the total “color palette” that can be captured or displayed. ACES works with a very wide gamut (especially ACES AP0), allowing it to encompass more colors than typical color spaces like sRGB, which can lead to more vibrant and realistic results.
  • White Point: The white point defines the color temperature of white light in a particular color space. In many color spaces, the white point is standardized to D65, which represents a midday light source. This standardization ensures consistent color behavior across devices and workflows.
  • Linear: Linear refers to the representation of colors where the encoded value is directly proportional to the light intensity. This representation allows for more accurate calculations of light interactions in rendering and compositing. However, linear itself is not a color space, it is a characteristic of how data is represented within certain color spaces.
  • Gamma: it refers to the nonlinear relationship between a pixel’s brightness and its encoded value, designed to align with how the human eye perceives light. By prioritizing midtones, where our eyes are most sensitive, and compressing shadows and highlights, gamma ensures that digital images appear more natural.
  • Luminance: Luminance refers to the measurable intensity of light emitted or reflected from a surface in a specific direction, quantified in candelas per square meter (cd/m²). It represents how bright a surface appears to the human eye based on physical measurements. Unlike the more subjective term “brightness,” which describes how light is perceived and can vary from person to person, luminance is an objective, scientific measure. In color management and imaging, luminance is preferred because it provides a consistent, quantifiable way to assess light levels and ensure accurate representation across different devices.
  • Primaries: are the base colors (usually red, green, and blue) that are combined in various amounts to create all other colors within a color space. In digital color systems, the exact definition of these primary colors determines the range (gamut) of colors that can be represented.

Contact

Demo Reel / CV

www.linkedin.com/in/leonel-nguyen/

https://vimeo.com/leonelnguyen

leonel.nguyen.contact@gmail.com

+33 7 81 43 38 55

← Back

Thank you for your response. ✨