AcademySoftwareFoundation / OpenColorIO

A color management framework for visual effects and animation.
https://opencolorio.org
BSD 3-Clause "New" or "Revised" License
1.78k stars 452 forks source link

Add Built-In Transform support for Apple Log #1916

Closed carolalynn closed 7 months ago

carolalynn commented 10 months ago

Related to the request to add Apple Log support to the OCIO Configs:

https://github.com/AcademySoftwareFoundation/OpenColorIO-Config-ACES/issues/120

We should add built-in transform support to the library to enable the configs to be LUT-free.

Reference implementation: A CTL-based Apple Log IDT was recently added to aces-dev at: https://github.com/ampas/aces-dev/tree/dev/transforms/ctl/idt/vendorSupplied/apple

Documentation: The official white paper, and example 1D LUT (.cube) are located here: https://developer.apple.com/download/all/?q=Apple%20log%20profile

JGoldstone commented 8 months ago

Are you looking for a NamedTransform for the curve in addition to the ColorSpace transform? Or just the latter?

doug-walker commented 7 months ago

I'm reopening this issue after looking at some purported footage in Apple Log space and it looks questionable. But I'm not sure if it's our transform or the media.

@rkmolho Could you direct us to some known good test footage?

doug-walker commented 7 months ago

We shot some of our own test footage of charts and based on that, I think the results actually are pretty much as expected. (We were really thrown off by the samples that we had been provided earlier, which must not have been done correctly.) If we get official samples from Apple, that would definitely add some certainty around what to expect. In the meantime, I'll close this.

I noticed that the half-domain Lut1D eventually overflows at extreme values. It would be nice to revisit that, but that could be done as a follow up. Given that the nonlinearity has a hard-clip on the bottom end, probably the best approach would be to use a normal-domain Lut1D that covers [0,2] in Apple Log space, with a matrix in front to set the domain.