Replies: 5 comments 12 replies
-
This looks like a great start; I have a question :) Does the lut indicated in LUTColorTransformEffect explicitly transform to the working color space indicated on the BaseEffect? I believe the answer is yes, but just want to confirm. I assume the same is true for the CDL effect. |
Beta Was this translation helpful? Give feedback.
-
Another question, should tracks themselves have a color space? I'm imagining a composition that uses one group of tracks to target say a projector, and another group of tracks to target a DVD. The timeline color space would then represent the color space to use for any elements in a composition that do not have a more local color space in their hierarchy. Probably should say something about color space resolution, like,
|
Beta Was this translation helpful? Give feedback.
-
Maybe a "color" attribute? Like:
I think having descriptive names is good, especially if there are going to be more effects. Is "LUT" meant to refer specifically to a 1D LUT, or is it more general like the OCIO::FileTransform which can be any file based color transform?
Which aliases do you mean? I thought aliases in OCIO configs were just alternate names for other color spaces. |
Beta Was this translation helpful? Give feedback.
-
The example above includes these lines:
So the track color space is scene-referred (ACES2065-1) and the output color space is display-referred (P3-D60 - Display). It's important to recognize that there are many of different transforms to convert between scene-referred and display-referred color spaces. For example, ACES alone has dozens of ways, digital cinema vendors each have their own renderings, as do post-production houses and cinematographers. It is essential to include this information when converting between image states. This conversion goes by a lot of different names (tone-map, output transform, display-rendering transform, etc.) but in OCIO it's called a view transform and is applied via an OCIO DisplayViewTransform which takes three arguments: the scene-referred color space, the display-referred color space, and the view transform. So if you're going to have an "output_color_space" attribute, I would strongly recommend a view transform attribute as well to encourage consistency among implementations. Perhaps better, you could avoid having an output_color_space attribute and instead define a DisplayViewTransformEffect that could be used to convert tracks to the desired output color space. I don't know if Gap tracks are allowed to have effects on them, but that could be a useful way to harmonize a set of clips in different color spaces into a common color space if the Gap could contain either a ColorSpaceTransform or DisplayViewTransform. I realize this is steering a bit towards allowing more imperative operators, but I feel that timeline authors will want that control. For example, transitions such as dissolves require adjacent clips to be in a common color space. So it may become important to have a way to harmonize clips that originate from different sources or processes. |
Beta Was this translation helpful? Give feedback.
-
OpenFX recently completed a project to add colour management for plug-ins, which used similar concepts to this proposal. We used the OCIO ACES Studio config as the source for most strings in the same way that you are thinking, which allows developers to implement the spec using any colour management system that supports ACES, and makes it trivial to implement using OCIO. Here are some of the key decisions we made:
References: |
Beta Was this translation helpful? Give feedback.
-
Background
OpenTimelineIO is used to communicate compositional information starting from "dailies" authoring, all the way through conform. OTIO has the opportunity to preserve color decisions starting with those made on set (e.g. LUT application, CDL values, etc.) all the way through to finishing.
The objective of color management in OTIO should not be to advocate any particular color workflow, pipeline, or mathematics - it should be to convey the color pipeline and decisions used when authoring a composition.
Explicit vs. Implicit Transformation
Color pipelines can be expressed in two different ways:
Color In OpenTImelineIO
In OpenTimelineIO, I propose we use a combination of declarative and imperative models so that the focus is on what color transformation should happen in at which points and only get into how to perform those color transformations when necessary. This delegates the decisions about "how" to the discretion of implementers - OpenColorIO can be suggested as an implementation for resolving from declarative to imperative color pipelines.
Declarative color pipeline can be achieved through adding a
color_space
string attribute (values in this attribute to be discussed later) to various objects in the timeline hierarchy which identifies colorimetry for specific checkpoints in the hierarchy.The proposed attributes would be:
output_color_space
onTimeline
to describe what color space the rendered output of a timeline should be (i.e. what colorspace a file on disk would be written in)working_color_space
attribute toTimeline
to specify the colorspace timeline transform operations should be done incolor_space
attribute toComposable
to specify the color space transform operations should happen in at that point in the timeline heirarchycolor_space
attribute toMediaReference
(that can benull
) to state what the colorspace of the input asset is - this should ideally match metadata in the source file, but could be used to override when sources don't provide it or have the wrong metadataColorEffect
with aworking_space
attribute. Ifnull
, the working space is presumed to be same as theTimeline
working_space
, otherwise, this is the color space the transform should be applied inCDLColorTransformEffect
subclass schema for encoding ASC CDL values (see Foundry CDL Effect Proposal #1793 for more info)LUTColorTransformEffect
subclass schema with alut_reference
attribute ofMediaReference
type for identifying an external LUT file to useTo determine the color space of any element in a composition, check the element itself for color space metadata. If it's not there, check it's parent, and it's parent, and so on, all the way up the hierarchy until a color space metadatum is found. If none is found in this manner, the default color space should be Rec. 709, indicating the historic srgb transfer function, the most common default rec709 primaries and whitepoint, and scene referred, indicating that there is no other color management role implied.
This allows the
Timeline
to specify the output color space and the , individual media to be associated with the proper input color space, and clips to have specific transformations and the colorspace those transformations should be performed in.For example, a typical ACES pipeline (pulled from AMF example3) might be setup as follows:
Color Space Names
To ensure consistent interoperation across applications, there should be consistency about how string values map to the specific colorimetry definitions for a color space. From my research, there seems to be no such canonical table. For the domains OpenTimelineIO typically serves, the OpenColorIO Configuration for ACES seems to be furthest along this path.
This draws from both ACES library and OpenColorIO imperative transforms, maps some attributes/naming through a table, and creates an OpenColorIO config that can be used to find an imperative transformation between declarative color spaces.
While the ACES library defines keys (
ACESTransformID
URNs) to identify imperative transforms, the ACES OpenColorIO configs define a list of declarative color space names.Open Questions
CDLColorTransformEffect
andLUTColorTransformEffect
too verbose?name
field is designed to be human friendly, one of the options fromaliases
tend to look a bit more like a good key to encode in a serialized file.Related Issues/Discussions
Beta Was this translation helpful? Give feedback.
All reactions