Learn R Programming

spacesRGB (version 1.5-0)

Opto-Optical Transfer Function, parameterized: Opto-Optical Transfer Function, general

Description

This parameterized OOTF maps from ACES (linear scene) RGB to linear display RGB (both of these are optical in nature).
This transform bypasses non-linear signal display RGB (which is electrical in nature).

Usage

general.OOTF( display_pri, Ymin=0.00010, Ymid=7.2, Ymax=108,
                 observerWP=NULL, limiting_pri=NULL,
                 surround='dark', dynrange='SDR', glowmod='1.1', redmod='1.1' )

Value

general.OOTF() returns a TransferFunction of dimension 3 that maps ACES RGB to linear display RGB.

The domain of the returned TransferFunction depends on the values of Ymin, Ymid, and Ymax. The range is [0,1]\(^3\), for which clamping may be used.

The metadata contains the display primaries and whitepoint, which is useful in installRGB().

Arguments

display_pri

a 4x2 matrix containing the display primaries, or a numeric vector of length 8 that can be converted to such a matrix, by row. Some built-in matrices are REC709_PRI, etc. This argument cannot be NULL.

Ymin

the minimum display luminance, in \(cd/m^2\), or nit.

Ymid

the middle display luminance, in \(cd/m^2\), or nit.

Ymax

the maximum display luminance, in \(cd/m^2\), or nit.

observerWP

the xy chromaticity of the assumed observer whitepoint. This is used to make a Chromatic Adaptation Transform (CAT) from the ACES whitepoint (approximately D60) to the assumed observer whitepoint. If observerWP is NULL, it is taken from display_pri. If ACES and observer whitepoints are the same, there is no CAT.

limiting_pri

a 4x2 matrix containing the limiting primaries, or a numeric vector of length 8 that can be converted to such a matrix, by row. If limiting_pri is not NULL, and not equal to display_pri, then the output RGB is clamped to the RGB cube that corresponds to limiting_pri.

surround

The level of the surround luminance. Valid values are 'dark' and 'dim'. If the level is 'dark' there is no special color compensation. Partial matching is enabled and matching is case-insensitive.

dynrange

the dynamic range of the display system. Valid values are 'SDR' (standard dynamic range) and 'HDR' (high dynamic range). If the value is 'HDR' then surround is ignored. Matching is partial and case-insensitive.

glowmod

the version of the Glow Modifier to use. The only version currently supported is "1.1".
glowmod can also be NULL, NA, or FALSE, which means to use no Glow Modifier at all.

redmod

the version of the Red Modifier to use. The only version currently supported is "1.1". This string can also be "1.1+pinv" which means to use a precision inverse; the forward transfer is exactly the same. This precision inverse uses an iterative root-finder, and is slower than the approximate default inverse.
redmod can also be NULL, NA, or FALSE, which means to use no Red Modifier at all.

Details

The transfer is complicated; here is a summary of the steps:

  1. glow module (see argument glowmod)

  2. red modifier (see argument redmod)

  3. matrix conversion from AP0 RGB → AP1 RGB

  4. clamp to non-negative RGB

  5. global desaturation (as in RRT.TF)

  6. single-stage tone-scale (SSTS) using Ymin, Ymid, and Ymax

  7. absolute luminance to linear code-value, in cube [0,1]\(^3\)

  8. matrix conversion from AP1 RGB to XYZ

  9. dim surround compensation (optional, see arguments surround and dynrange)

  10. clamp XYZ to limiting primaries (optional, see argument limiting_pri)

  11. adapt XYZ from ACES whitepoint to observer whitepoint (optional, see argument observerWP)

  12. matrix conversion from XYZ to linear display RGB (see argument display_pri)

  13. scale and roll-white to avoid clipping (optional, only when observerWP is ACES whitepoint and display whitepoint is D65 or DCI whitepoint)

  14. clamp to non-negative RGB

References

ST 2065-1:2012. SMPTE Standard - Academy Color Encoding Specification (ACES). 2013.

See Also

TransferFunction, installRGB(), metadata(), Standard Primaries