ACES & Color
working-space survival guide · not a substitute for the show's color pipeline doc
The spaces
- ACES2065-1 (AP0)interchange & archive
Linear, covers every visible color. What you hand between facilities and store as the master. Not meant for rendering or grading directly.
- ACEScg (AP1)rendering & comp
Linear working space for CG and compositing. Set your renderer's working space to this; the color-converter tool outputs ACEScg triplets.
- ACEScctgrading
Log-like encoding of AP1 for colorists — grading operators behave like they do on film log. Never render into it.
- Output transformsviewing & delivery
The view transform (RRT+ODT in ACES 1.x, Output Transform in ACES 2) maps scene-linear to your display: Rec.709, sRGB, P3, PQ. You always view through one.
Texture & render setup
- Working space: render and comp in ACEScg (or the show's chosen linear space) — one space everywhere, set by the OCIO config.
- Color maps (albedo, painted textures): input transform sRGB - Texture (or Utility sRGB), so they land in the working space correctly.
- Data maps (normal, roughness, metalness, displacement, masks): tag as raw / non-color — never color-convert them.
- HDRIs: usually already scene-linear — bring them in as linear Rec.709 or the space they were published in, not as sRGB texture.
- Delivery: render to EXR scene-linear; bake the output transform only into review media, never the master.
When it looks wrong
Render looks washed out / flat gray
Viewing scene-linear data without an output transform. Set the view transform (e.g. "ACES 1.0 SDR Video" / Rec.709) in your viewer — don't grade it away.
Textures look too dark or too saturated
Double or missing input transform. Color textures (albedo) need the sRGB-texture IDT; data maps (normals, roughness, masks) must be tagged raw / non-color.
Bright saturated lights skew hue (blue → purple)
Known behavior of ACES 1.x output transforms with intense saturated values; ACES 2.0's transforms and per-show LMTs address it. Don't fight it per-shot with hue rotates.
CG element doesn't match the plate
Plate and CG in different working spaces. Confirm the show's OCIO config (OCIO env var) is loaded by every DCC, and that the plate's IDT matches how it was encoded.
Transform names cheat table
| Working / rendering space | ACEScg |
| Color texture input | Utility - sRGB - Texture (a.k.a. sRGB - Texture) |
| Data map input | Utility - Raw (non-color) |
| Linear Rec.709 input (HDRIs, CG renders) | Utility - Linear - sRGB / lin_rec709 |
| Camera log input | the camera IDT (e.g. ARRI LogC4, Sony S-Log3) |
| SDR monitor view | ACES 1.0 - SDR Video (Rec.709 / sRGB ODT) |
| Grading space | ACEScct |
| Interchange / archive master | ACES2065-1 (AP0) EXR |
Official OCIO configs to reach for: cg-config-…_aces-v1.3_ocio-v2.1 (lean, for CG work) and studio-config-…_aces-v1.3_ocio-v2.1 (adds camera IDTs) — both from the ASWF OpenColorIO-Config-ACES releases.
Per-DCC setup
Blender
Ships its own config (AgX default view). For ACES: point the OCIO environment variable at an ACES config before launch; textures then get Utility roles.
Maya
Windows → Settings → Color Management. Recent versions ship an OCIO v2 ACES config by default; set rendering space ACEScg, view ACES 1.0 SDR-video.
Houdini
Set $OCIO to the config path; Houdini picks it up everywhere (viewport, MPlay, Karma). Without $OCIO it uses its built-in config.
Nuke
Project Settings → Color → color management: OCIO, pick the bundled aces_1.2/1.3 config or your show's. Reads/Writes then choose per-file input transforms.
Resolve
Project Settings → Color Management → color science: DaVinci YRGB Color Managed or ACEScct; set the ACES version + output transform there.
After Effects
Project Settings → Color: OCIO color management (native since 2023) — choose the ACES config; per-footage interpret rules set the IDT.
Unreal
Enable the OpenColorIO plugin, create an OCIO Configuration asset, assign it per viewport/Composure; UE's own tonemapper is otherwise its filmic default.
Substance Painter
Edit → Project Configuration → select an OCIO config (ACES supported natively); export targets then tag maps correctly.
The one rule across all of them: every app in the pipeline loads the same config — set $OCIO once at the environment level and most DCCs follow it.
Current sources
- ACEScentral — community & docshttps://acescentral.com
- ACES documentationhttps://docs.acescentral.com
- OpenColorIO documentationhttps://opencolorio.readthedocs.io
- ACES on GitHub (ampas)https://github.com/ampas/aces-core
This page is a quick orientation — specifics move with ACES and OCIO releases, so treat the linked documentation as the source of truth.