Review: Native Per-Shot Looks

Jeremy Selan <jeremy...@...>

This adds a new config-level class, OCIO::Look. It's intent is to make
the re-use of Looks (such as per-shot looks), more convenient and
explicit. A new Nuke node (LookTransform) is also added. This
functionality mirrors the intent of the IIF's
LookModificationTransform (LMT).

The user defines a series of color transforms, assigns them a name
(such as 'CC_Red, DI_Look', 'Onset look', etc), and also specifies
what ColorSpace the processing should be applied in. Both forward and
inverse transforms can be specified, if needed. The DisplayTransform
has also been extended so that a look can be specified (and obeyed)
automatically. (example below). The use of Looks is purely optional.

Example Config look syntax:

# Defining the look

- !
name: CC_Red
process_space: lg10
transform: ! {offset: [0.05, 0, 0, 0]}
- !
name: CC_Cyan
process_space: lg10
inverse_transform: ! {offset: [0.05, 0, 0, 0]}

# Using it in a Display

- ! {name: Raw, colorspace: nc10}
- ! {name: Log, colorspace: lg10}
- ! {name: Film, colorspace: srgb8}
- ! {name: Film Red, colorspace: srgb8, look: CC_Red}
- ! {name: Film Cyan, colorspace: srgb8, look: CC_Cyan}

Within the Look blocks, all Context (per-shot) envvar support is fully obeyed.

This also makes it simpler to re-use looks across multiple display
devices (such as srgb + dlp). Previously, the look specification would
be in multiple places in the color configuration (for each device).

This is backwards compatible (both the binary ABI and the .ocio file
format). However, OCIO::DisplayTransform::setDisplayColorSpace is now
deprecated in favor of setDisplay/setView. The old interface is fully
supported, but the new Look functionality requires using the new API.
All internal nodes and examples have been updated to use the new API.

-- Jeremy