ACES Output Transforms - Background Information

Introduction

Key pre-release versions

[Clicking each version title will take you directly to the version tag on Github.]

DC22

Overview
  • Derived from film work by M. Uchida and Fuji team
  • Very filmic based - tone scale was more contrasty, especially in the toe
  • Dependent on lots of LUTs
  • No closed-form inverse

v0.1 (also known as UT33)

Overview
  • Ratio-restoring tone scale in ODT only
  • Problems:
  • lots of clipping steps which means:
  • gamut coverage in OCES is poor relative to the OCES encoding primaries
  • gamut coverage through the ODT is poor relative to the P3 encoding primaries
  • overly complex
  • non-invertible

Rendering Steps
RRT
  1. Tone scale: applied to ACES RGB independently
  1. Clip negatives
  1. 3x3 adjustment matrix
  1. Clip negatives
  1. Per-hue contrast adjustments: several 11-point 1D LUTs with blending between 6 hue regions
  1. Desaturation matrix: with equal 1/3 channel weighting, sat=0.86
  1. Clip negatives
ODT
  1. Ratio-restoring tone scale: applied to OCES RGB; norm = (R2 + G2 + B2) / (R + G + B)
  1. 3x3 matrix: OCES to XYZ
  1. 3x3 matrix: XYZ to display primaries
  1. Clip 0-1
  1. Inverse EOTF

v0.1.1

Overview
Mostly the same as v0.1, but with a few changes in the ODT only. Specifically, the norm used in the ODT’s ratio-restoring tone scale was changed to use the max value.
In addition, an “inverse saturation” function was added in order to “reduce the rate of desaturation” (i.e. keep bright saturated lights more saturated).

Rendering Steps
RRT - unchanged from v0.1
ODT
  1. Ratio-restoring tone scale: applied to OCES RGB; norm = max(R,G,B)
  • Introduced an inverse saturation function to “reduce the rate of desaturation”
  • Desaturation of low-chroma highlights toward a neutral with the same norm
  1. 3x3 matrix: OCES to XYZ
  1. 3x3 matrix: XYZ to display primaries
  1. Clip 0-1
  1. Inverse EOTF

v0.2

Overview
RRT (as described in the release README)
  • “The RRT included with this release has changed substantially from previous versions. These changes greatly simplify the algorithm while also changing the default look of the images to something that is believed to be a better starting point for creative adjustments.
 
  • The algorithmic complexity of previous RRT versions prohibited the creation of a closed-form inverse. This complicated the creation of custom looks that required an inverse RRT. This package includes both forward and inverse RRT and ODTs enabling the creation of LMTs using those transforms. Gamut coverage has been increased compared to previous version in both OCES and the output display color spaces ensuring full compatibility with existing and future display devices. Through the use of LMTs an infinite number of custom looks is now possible.
 
  • Feedback on previous version of the RRT indicated deficiencies in some highly saturated colors and a decreased ability to grade around the default look using common color grading tools. Both these issues have been addressed with the version of the RRT include in this package.”

Rendering Steps
RRT
  1. Scale chroma in red/magenta region
  1. 3x3 matrix: ACES to rendering primaries
  1. Tone scale: Applied independently to RGB then hue restored to pre-tone scale value using dw3 algorithm
  1. 3x3 matrix: Rendering primaries to OCES
ODT
  1. 3x3 matrix: OCES to rendering primaries
  1. Tone scale: applied independently to RGB then hue restored to pre-tone scale value using dw3 algorithm
  1. 3x3 matrix: rendering primaries to display primaries
  1. “Smart-clip” negative values (i.e. outside the display primaries), but restore hue after clip operation using dw3 algorithm (i.e. clip along a straight line toward white point chromaticity)
  1. Black point compensation: scale and offset
  1. Inverse EOTF

v0.2.1

Overview
No relevant algorithm changes – only file renames or removals.

v0.2.2

Overview
The order of operations in the ODT was modified from 0.2.

Rendering Steps
RRT – unchanged from v0.2
ODT - The black point compensation step was moved to after the tone scale.
  1. 3x3 matrix: OCES to rendering primaries
  1. Tone scale Applied independently to RGB then hue restored to pre-tone scale value using dw3 algorithm
  1. Black point compensation: Scale and offset
  1. 3x3 matrix: rendering primaries to display primaries
  1. “Smart-clip” negative values (i.e. outside the display primaries), but restore hue after clip operation using dw3 algorithm (i.e. clip along a straight line toward white point chromaticity)
  1. Inverse EOTF

v0.7

Overview
  • RRT changes
  • Removed rendering primaries “to address a bug which can occur during exposure grading.” Tone scale is applied directly to AP0 RGB.
  • Replaced the red chroma scaling step with an alternate algorithm to “darken red colors instead of reducing chroma”.
  • Added a "glow module", to provide “a modest lightening and saturation boost in colored shadow regions”.
  • ODT changes
  • Removed rendering primaries to “address a bug which could occur during exposure grading”. Tone scale is applied directly to OCES RGB.
  • New math in the ODT tone scale application to preserve more highlight saturation.

Rendering Steps
RRT
  1. “Glow” module
  1. Red modifier
  1. Tone scale applied independently to RGB then hue restored to pre-tone scale value using dw3 algorithm
ODT
  1. Tone scale applied independently to RGB then hue restored to pre-tone scale value using dw3 algorithm
  1. Black point compensation
  1. 3x3 matrix: OCES to display primaries
  1. “Smart-clip” negative values 0-1, but restore hue after clip operation using dw3 algorithm
  1. Inverse EOTF

v0.7.1

Overview
No algorithm changes (bug fixes only)

v1.0

Overview
This is the current ACES rendering model. The RRT has not changed since this release.

Rendering Steps
RRT
  1. “Glow” module
  1. Red modifier
  1. 3x3 matrix: AP0 (ACES) to AP1
  1. Clip negative values
  1. Desaturation via 3x3 matrix using AP1 weighting; value = 0.96
  1. Tone scale applied independently to RGB
  1. 3x3 matrix: AP1 to AP0 (OCES)
ODT
  1. 3x3 matrix: AP0 to AP1
  1. Tone scale applied independently to RGB - output in units of luminance (cd/m^2 or nits)
  1. Scale luminance to linear code value
  1. 3x3 matrix: AP1 to display primaries, with chromatic adaptation, if necessary
  1. Clip 0-1
  1. Inverse EOTF

v1.0.1

Overview
HDR transform tonescales were adjusted at the bottom end to allow for obtaining a code value of zero.

v1.0.2

Overview
No algorithm changes (typo and error fixes only).

v1.0.3

Overview
Added ACEScct. No changes to the rendering.

v1.1

Overview
Introduced the single-stage tone scale to the HDR transforms. 
Added ODTs for commonly requested outputs (P3D65 and Rec.2020 w/ gamut limiting).

v1.2

Overview
No changes to the rendering. 
Added specifications for AMF and CLF v3. 
Added color space conversions to/from a few camera spaces.

Other development tracks

IPT-based Renderings

Overview
Numerous specific iterations with minor difference but this development track was built on a backbone of the Michaelis-Menton equation to map relative luminance to lightness. Parameters used were from M. Fairchild's IPT-HDR paper. 
Steps were included to compensate for the Helmholtz-Kohlrausch effect.
Chroma was adjusted using formula from Akyuz/Reinhard.

Rendering Steps
RRT
  1. Convert ACES RGB to an “IPT” representation
  1. Apply a tone scale to I
  1. Adjust saturation by scaling PT by ratio of either:
  1. the ratio of OCES_I/ACES_I
  1. the ratio of chroma/lightness - then preserve color contrast by tracking the contrast applied to the tone curve, where contrast is determined by log/log slope of RRT tone curve
  1. Further modify saturation to mimic tone curve
  1. Convert IPT back to OCES RGB

Lars Borg Renderings

Overview
Lars Borg contributed his own efforts to the pool of rendering algorithms. In general, his approaches were based on separating luminance mapping from color adjustments.

Gary Demos Renderings

Overview
A number of renderings were created by Gary Demos in parallel with the official pre-release ACES renderings. While none of the GD versions were ultimately adopted for pre-release, Gary has continued his work and produced his own “single-master” system.

Gamut Mapping Approaches

Overview
Doug Walker provided a few different algorithms to assist with “gamut mapping” in the early ACES renderings.
One such algorithm had the following description:
  • “This is a simple, fast gamut mapping algorithm.  It maps RGB values onto the 0 to 1 cube using line/plane intersection math which has been optimized to take advantage of the fact that the planes are the [0,1] cube faces.
  • Out-of-gamut points are mapped towards a value on the neutral axis.
  • If the RGB values are linear tristimulus values for arbitrary RGB primaries then the algorithm preserves dominant wavelength on a chromaticity diagram. It also preserves hue in the HSV sense.
  • Light out-of-gamut colors are darkened as they approach the gamut, while dark colors are lightened (i.e. some lightness is traded off to preserve chroma).
  • There are certainly many more sophisticated algorithms for gamut mapping, but this is simple, fast, robust, and useful as a point of comparison.”

System Tone Scale Comparison

The approach for achieving the tone scale shape has changed many times through the various pre-release versions. The single stage tone scale (SSTS) introduced in v1.2 is by far the easiest to understand. Early on, the output of the tone scale was defined as density due to the roots in a filmic rendering. At some point, the numbers were adjusted so that the output of the tone scale equaled intended luminance, which was more direct since luminance of key values (e.g. 0.18, 1.0, etc.) was the preferred language of those evaluating the transforms.

Gamut Coverage

Ideally, I would start with a 0-1 cube of output code values, run through the inverse and forward again to show gamut coverage. However, versions prior to v0.2 do not have an inverse, therefore I instead sent a cube of ACES values through each rendering to show the portions of the P3 gamut that do not get covered (specifically in v0.1).

Image Comparisons

[Nov 19] - Page updated with additional renders, arranged in the following layout:
ACES DC22
ACES v0.1.1
ACES v0.2.2
ACES v0.7
ACES v1.2 (current)
ARRI ALF2
ARRI K1S1
RED IPP2
Filmlight T-CAM
Plot of chromaticity values of the ACES data

Unfortunately, Dropbox doesn’t have an image carousel option which would make the layout of these image comparisons easier to toggle. However, the major differences between versions should be evident, especially in highlight characteristics such as saturation and hue. Reds, blues, and greens can be quite different from version to version. 

ARRI - Headlights

ARRI - Product Shot

Bar - Coffee Neon

Bar - Taking a Shot

Brejon - Lightsabers

Brejon - Spheres - sRGB

Brejon - Spotlight ACEScg Blue

Brejon - Spotlight ACEScg Red

Brejon - CG Character

Fabian - Nightclub

Fabian - Woman in Nightclub

JG - Products 3200K

Okja Eggo

Radiation Canister

Red Christmas

Sony - Stage Interior

Spec-O-Ween

Sphere Targets