# Academy Color Encoding System

The Academy Color Encoding System (ACES) is a color image encoding system created under the auspices of the Academy of Motion Picture Arts and Sciences. ACES is characterised by a color accurate workflow, with "seamless interchange of high quality motion picture images regardless of source".
The system defines its own primary colors as being on the spectral locus as defined by the CIE xyY specification. The white point is approximate to the chromaticity of CIE Daylight with a Correlated Color Temperature (CCT) of 6000K. Most ACES compliant image files are encoded in 16-bit half-floats, thus allowing ACES OpenEXR files to encode 30 stops of scene information. The ACESproxy format uses integers with a log encoding. ACES supports both high dynamic range (HDR) and wide color gamut (WCG).
The version 1.0 release occurred in December 2014. ACES received a Primetime Engineering Emmy Award in 2012. The system is standardized in part by the Society of Motion Picture and Television Engineers (SMPTE) standards body.

## History
### Background

The ACES project began its development in 2004 in collaboration with 50 industry technologists. The project began due to the recent incursion of digital technologies into the motion picture industry. The traditional motion picture workflow had been based on film negatives, and with the digital transition, scanning of negatives and digital camera acquisition. The industry lacked a color management scheme for diverse sources coming from a variety of digital motion picture cameras and film. The ACES system is designed to control the complexity inherent in managing a multitude of file formats, image encoding, metadata transfer, color reproduction, and image interchanges that are present in the current motion picture workflow.

### Versions

The following versions are available for the reference implementation:
* A number of pre-release versions were tagged from 0.1 (March 1, 2012) to 0.7.1 (February 26, 2014).
* ACES 1.0 (December 2014) is first release version. Three small patches followed.
* ACES 1.1 (June 21, 2018) adds some ODTs for P3, Rec. 2020, and DCDM.
* ACES 1.2 (April 1, 2020) introduces three new specification documents: ACES Metadata File (AML), updated Common LUT Format, new ACES Project Organization and Development Procedure. It also adds some transformations.
* ACES 1.3 (April 30, 2021) adds a colorspace conversion for Sony Venice, a gamut compression method for saturated objects, and some AMF refinements.

## System overview

The system comprises several components which are designed to work together to create a uniform workflow:
* Academy Color Encoding Specification (ACES): The specification that defines the ACES color space, allowing half-float high-precision encoding in scene linear light as exposed in a camera, and archival storage in files.
* Input Device Transform (IDT): This name was deprecated in ACES version 1.0 and replaced by Input Transform.
* Input Transform (IT): The process that takes captured images from any indigestible source material and transforms the content into the ACES color space and encoding specifications. There are many IT’s, which are specific to each class of capture device and likely specified by the manufacturer using ACES guidelines. It is recommended that a different IT be used for tungsten versus daylight lighting conditions.
* Look Modification Transform (LMT): A specific change in look that is applied systematically in combination with the RRT and ODT’s. (part of the ACES Viewing Transform)
* Output Transform: As per ACES version 1.0 naming convention, this is the overall mapping from the standard scene-referred ACES colorimetry (SMPTE 2065-1 color space) to the output-referred colorimetry of a specific device or family of devices. It is always the concatenation of the Reference Rendering Transform (RRT) and a specific Output Device Transform (ODT), as defined below. For this reason the Output Transform is usually shortened in "RRT+ODT".
* Reference Rendering Transform (RRT): Converts the scene-referred colorimetry to display-referred, and resembles traditional film image rendering with an S-shaped curve. It has a larger gamut and dynamic range available to allow for rendering to any output device (even ones not yet in existence).
* Output Device Transform (ODT): A guideline for rendering the large gamut and wide dynamic range of the RRT to a physically realized output device with limited gamut and dynamic range. There are many ODT’s, which will be likely generated by the manufacturers to the ACES guidelines.
* Academy Viewing Transform: A combined reference of a LMT and an Output Transform, i.e. "LMT+RRT+ODT".
* Academy Printing Density (APD): A reference printing density defined by the AMPAS for calibrating film scanners and film recorders.
* Academy Density Exchange (ADX): A densitometric encoding similar to Kodak's Cineon used for capturing data from film scanners.
* ACES color space SMPTE Standard 2065-1 (ACES2065-1): The principal scene-referred color space used in the ACES framework for storing images. Standardized by SMPTE as document ST2065-1. Its gamut includes the full CIE standard observer's gamut with radio-metrically linear transfer characteristics.
* ACEScc (ACES color correction space): A color space definition that is slightly larger than the ITU Rec.2020 color space and logarithmic transfer characteristics for improved use within color correctors and grading tools.
* ACEScct (ACES color correction space with toe): A color space definition that is slightly larger than the ITU Rec.2020 color space and logarithmic-ally encoded for improved use within color correctors and grading tools that resembles the toe behavior of Cineon files.
* ACEScg (ACES computer graphics space): A color space definition that is slightly larger than the ITU Rec.2020 color space and linearly encoded for improved use within computer graphics rendering and compositing tools.
* ACESproxy (ACES proxy color space): A color space definition that is slightly larger than the ITU Rec.2020 color space, logarithmic-ally encoded (like ACEScc, not like ACEScct) and represented with either 10-bits/channel or 12-bits/channel, integer-arithmetics digital representation. This encoding is exclusively designed for transport-only of code values across digital devices that don't support floating-point arithmetic encodings, like SDI cables, monitors, and infrastructure in general.

## ACES Color Spaces

ACES 1.0 is a color encoding system, defining one core archival color space, and then four additional working color spaces, and additional file protocols. The ACES system is designed to cover the needs film and television production, relating to the capture, generation, transport, exchange, grading, processing, and short & long term storage of motion picture and still image data. These color spaces all have a few common characteristics:
* They are based on the RGB color model.
* The image data is scene-referred, i.e. the numerical values are related to the original scene lighting, as reflected or emitted from the real objects & lights on the set at the time of filming. The space refers to a "standard reference camera", an imaginary camera that can capture all of human visual perception. Scene-referred code values captured by a real camera are directly related to luminous exposure.
* They are capable of holding 30 stops of exposure.
* The reference white point is sometimes, and incorrectly, referred to as "D60" though there is no such thing as a CIE D60 standard illuminant. Further, the white point is not on the CIE Daylight Locus nor the Planckian Locus, and does not define the neutral axis. Filmmakers are allowed to choose whatever effective whitepoint they need for technical or artistic reasons.
* The white point serves only as a mathematical reference for transforms, and should not be confused with a scene or display reference. It was chosen through an experiment, projecting film containing a LAD test patch onto a theater screen, using a projector with a xenon bulb. That measured white point was then adjusted to be close to, but not on, the CIE daylight locus. The CCT is close to 6000k, with CIE 1931 xy chromaticities of $(0.32168,0.33767)$.
The five color spaces use one of two defined sets of RGB color primaries called AP0 and AP1 (“ACES Primaries” #0 and #1); The chromaticity coordinates are listed in the table below:
ACES Primary and White Point Coordinates :
| CIE 1931 | AP0: ACES 2065-1 | AP0: ACES 2065-1 | AP0: ACES 2065-1 | White Point | AP1: cg, cc, cct, proxy | AP1: cg, cc, cct, proxy | AP1: cg, cc, cct, proxy |
| CIE 1931 | red | green | blue | White Point | red | green | blue |
| x | 0.7347 | 0.0000 | 0.0001 | 0.32168 | 0.713 | 0.165 | 0.128 |
| y | 0.2653 | 1.0000 | -0.0770 | 0.33767 | 0.293 | 0.830 | 0.044 |
AP0 is defined as the smallest set of primaries that encloses the entire CIE 1931 standard-observer spectral locus; thus theoretically including, and exceeding, all the color stimuli that can be seen by the average human eye. The concept of using non-realizable or imaginary primaries is not new, and is often employed with color systems that wish to render a larger portion of the visible spectral locus. The ProPhoto RGB (developed by Kodak) and the ARRI Wide Gamut (developed by Arri) are two such color spaces. Values outside the spectral locus are maintained with the assumption that they will later be manipulated through color timing or in other cases of image interchange to eventually lie within the locus. This results in color values not being “clipped” or “crushed” as a result of post-production manipulation.
AP1 gamut is smaller than the AP0 primaries, but is still considered “wide gamut”. The AP1 primaries are much closer to realizable primaries, but unlike AP0, none are negative. This is important for use as a working space, for a number of practical reasons:
* color-imaging and color-grading operations acting independently on the three RGB channels produce variations naturally-perceived on red, green, blue components. This might not be naturally perceived when operating on the “unbent” RGB axes of AP0 primaries.
* all the code values contained in the $[0,1]$ range represent colors that, converted into output-referred colorimetry via their respective Output Transforms (read above), can be displayed with either present or future projection/display technologies.

### ACES2065-1

This is the core ACES color space, and the only one using the AP0 RGB primaries. It uses photometrically linear transfer characteristics (i.e. gamma of 1.0), and is the only ACES space intended for interchange among facilities, and most importantly, archiving image/video files.
ACES2065-1 code values are linear values scaled in an Input Transform so that:
* a perfectly white diffuser would map to $(1,1,1)$ RGB code value.
* a photographic exposure of an 18% grey card would map to $(0.18,0.18,0.18)$ RGB code value.
ACES2065-1 code values often exceed $1.0$ for ordinary scenes, and a very high range of speculars and highlights can be maintained in the encoding. The internal processing and storage of ACES2065-1 code values must be in floating-point arithmetics with at least 16 bits per channel. Pre-release versions of ACES, i.e. those prior to 1.0, defined ACES2065-1 as the only color space. Legacy applications might therefore refer to ACES2065-1 when referring to “the ACES color space”. Furthermore, because of its importance and linear characteristics, and being the one based on AP0 primaries, it is also improperly referred to as either “Linear ACES”, “ACES.lin”, “SMPTE2065-1” or even “the AP0 color space”.
Standards are defined for storing images in the ACES2065-1 color space, particularly on the metadata side of things, so that applications honoring ACES framework can acknowledge the color space encoding from the metadata rather than inferring it from other things. For example:
* SMPTE ST2065-4 defines the correct encoding of ACES2065-1 still images within OpenEXR files and file sequences and their mandatory metadata flags/fields.
* SMPTE 2065-5 defines the correct embedding of ACES2065-1 video sequences within MXF files and their mandatory metadata fields.

### ACEScg

ACEScg is a scene-linear encoding, like ACES2065-1, but ACEScg is using the AP1 primaries, which are closer to realizable primaries. ACEScg was developed for use in visual effects work, when it became clear that ACES2065 was not a useful working space due to the negative blue primary, and the extreme distance of the other imaginary primaries.
The AP1 primaries are much closer to the chromaticity diagram of real colors, and importantly, none of them are negative. This is important for rendering and compositing image data as needed for visual effects.

### ACEScc & ACEScct

Like ACEScg, ACEScc and ACEScct are using the AP1 primaries. What sets them apart is that instead of a scene-linear transfer encoding, ACEScc and ACEScct use logarithmic curves, which makes them better suited to color-grading. The grading workflow has traditionally used log encoded image data, in large part as the physical film used in cinematography has a logarithmic response to light.
ACEScc is a pure log function, but ACEScct has a "toe" near black, to simulate the minimum density of photographic negative film, and the legacy DPX or Cineon log curve.

### Converting ACES2065-1 RGB values to CIE XYZ values

${\begin{bmatrix}X\\Y\\Z\end{bmatrix}}={\begin{bmatrix}0.9525523959&0.0000000000&0.0000936786\\0.3439664498&0.7281660966&-0.0721325464\\0.0000000000&0.0000000000&1.0088251844\end{bmatrix}}{\begin{bmatrix}R\\G\\B\end{bmatrix}}$

### Converting CIE XYZ values to ACES2065-1 values

${\begin{bmatrix}R\\G\\B\end{bmatrix}}={\begin{bmatrix}1.0498110175&0.0000000000&-0.0000974845\\-0.4959030231&1.3733130458&0.0982400361\\0.0000000000&0.0000000000&0.9912520182\end{bmatrix}}{\begin{bmatrix}X\\Y\\Z\end{bmatrix}}$

## Standards

ACES is defined by several Standards by SMPTE (ST2065 family) and documentations by AMPAS, which include:
* SMPTE ST 2065-1:2012 - Academy Color Encoding Specification (ACES)
* SMPTE ST 2065-2:2012 - Academy Printing Density (APD): Spectral Responsivities, Reference Measurement Device and Spectral Calculation
* SMPTE ST 2065-3:2012 - Academy Density Exchange Encoding (ADX): Encoding Academy Printing Density (APD) Values
* SMPTE ST 2065-4:2013 - ACES Image Container File Layout
* SMPTE ST 2065-5:2016 - Material Exchange Format: Mapping ACES Image Sequences into the MXF Generic Container
* S-2013-001 - ACESproxy: An Integer Log Encoding of ACES Image Data
* S-2014-003 - ACEScc: A Logarithmic Encoding of ACES Data for use within Color Grading Systems
* S-2014-004 - ACEScg: A Working Space for CGI Render and Compositing
* S-2016-001 - ACEScct: A Quasi-Logarithmic Encoding of ACES Data for use within Color Grading Systems
* P-2013-001 - Recommended Procedures for the Creation and Use of Digital Camera System Input Device Transforms (IDTs)
* TB-2014-001 - Academy Color Encoding System (ACES) Documentation Guide
* TB-2014-002 - Academy Color Encoding System (ACES) Version 1.0 User Experience Guidelines
* TB-2014-004 - Informative Notes on SMPTE ST 2065-1 - Academy Color Encoding Specification (ACES)
* TB-2014-005 - Informative Notes on SMPTE ST 2065-2 - Academy Printing Density (APD) – Spectral Responsivities, Reference Measurement Device and Spectral Calculation and SMPTE ST 2065-3 Academy Printing Density Exchange Encoding (ADX) - Encoding Printing Density (APD) Values
* TB-2014-006 - Informative Notes on SMPTE ST 2065-4 - ACES Image Container File Layout
* TB-2014-007 - Informative Notes on SMPTE ST 268:2014 – File Format for Digital Moving Picture Exchange (DPX)
* TB-2014-009 - Academy Color Encoding System (ACES) Clip-level Metadata File Format Definition and Usage
* TB-2014-010 - Design, Integration and Use of ACES Look Modification Transforms
* TB-2014-012 - Academy Color Encoding System (ACES) Version 1.0 Component Names
* TB-2018-001 - Derivation of the ACES White Point CIE Chromaticity Coordinates
A SMPTE standard is also under development to allow ACES code streams to be mapped to the Material Exchange Format (MXF) container.