DaVinci Resolve DCTL and OFX Plugins

ACES OFX Plugin can now run on CPU if CUDA is unavailable. A CPU only version should also work in other applications that can run OFX plugins.

The option of exporting a 3D LUT has also been added, with choice of cube size ranging from 3 to 129. The exported LUT is Resolve compatible, but other varieties of LUT can be included in future updates if requested.

Nice work @Paul_Dore! Does that include exporting Resolve LUTs with a shaper for situations where the input is linear?

The current version exports just a standard 3D LUT with an input range of 0.0 to 1.0, but a 1D shaper LUT could be included, and the option of modifying the input ranges could also be added. Defining when exactly to do this, and how it might affect the pipeline of transforms if implemented, is another consideration.

I added a shaper LUT option, as well as modifiable input values (for the 3D LUT), but I’m unsure about the initial 1D input range values (I used 0.0000019180 and 15.7761012587 from the LMT ACES v0.1.1.cube in Resolve), and how best to approach that. For now the shaper options are just Linear to ACEScc and Linear to ACEScct.

Here’s a link to a macOS compatible version of the OFX Plugin that includes the new features:

ACES OFX Plugin shaper

That seems a reasonable range. The SDR ODTs hit peak white 6.5 stops above mid grey, i.e. 0.18 * 2^6.5 = 16.2917, so 0 - 16.3 would also be a reasonable range if you want round numbers.

Finding an optimum shaper LUT is non-trivial. This may not produce a truly optimised result, but one approach I have used with success in the past is using a 1D LUT derived from the transform along the neutral axis as the shaper, and then using a 3D cube for what remains. In pseudocode, a LUT to apply out = f(in) would be constructed as follows:

shaper = f(linear_ramp_f3(min, max))

cube = f(inv_shaper(identity cube))

As per Nick’s suggestions, I’ve added more options to the Plugin.

I added a dynamic link between the min and max output values of the shaper and the input values of the 3D LUT (the values were preset in the earlier version), as well and an option to modify the size of the shaper (8bit to 14bit). Both shaper and 3D LUT have 10 decimal point deep values. Although the plugin UI rounds values up to 3 decimal points, the actual full values are preserved in the computation and printing of the LUT.

As it stands, only the Linear to ACEScc and Linear to ACEScct shapers are included (which are probably only of actual use when dealing with ACEScg data), but the entire ACES library is available to call as I converted it to C and included it in the .cpp file (this is separate to the DCTL and CUDA versions already translated).

At full capacity, the LUT is around 85MB with 16,384 rows for the shaper and 2,146,689 rows for the 3D LUT, but runs realtime on a modest system.

I’ve attached an example LUT (Linear to ACEScct shaper + unity 3D LUT). The previous link to the OFX Plugin has been updated for the new version.

Combined LUT

1 Like

ACES OFX Plugin and source files have been updated in the main repositories. I also added a separate version that works in Natron (and limited functionality in Nuke).

ACES 1.1 OFX Plugin

ACES 1.1 OFX Source Files

ACES 1.1 OFX Plugin Natron

Hi to all!

Is the plugin now efficient enough to be used on it’s own?

Thanks!

The plugin has been fully operational since release, and shares the same set of functions as the DCTL collection. The only real differences between the two options are speed (DCTLs run approximately 50% faster) and convenience (the plugin has an easy to use UI, as well as some slider type parameters). There is now a CPU only option with the plugin (for those who don’t have CUDA), but it’s very slow.

Thanks @Paul_Dore. I think I’ll stick with the DCTLs then. Cheers!

For the 1D shaper LUT there is now the option of a custom expression. An expression library has been added to the plugin, thereby increasing its size somewhat (the library is over twice the size of even the complete ACES library), but it doesn’t affect the main image processing.

A precision parameter has also been added, which controls the number of decimal points per value in the LUT. Resolve seems to have issues with certain input parameters when values exceed 6 decimal points (in macOS, Win, and Linux), whereas in other applications this isn’t the case.

ACES 1.1 OFX Plugin beta

ACES 1.1 OFX Source beta

Hi to all,

Still having some problems with the most recent source files that @Paul_Dore published. All the old DCTL I created don’t link when I replace the ACES_LIB content with either _CUDA or _CPU.

I’m not super techy and maybe I’m just not going about this the right way… Am I even supposed to replace these or should I just keep the old older version of the ACES_LIB folder I have that still “connects” properly to the DCTLs?

Thanks!

The ACES_LIB_CUDA and ACES_LIB_CPU folders are only for compiling the OFX Plugin, and shouldn’t be used with the DCTLs. The ACES_LIB folder that is part of the ACES_DCTL set is the correct option.

Thanks @Paul_Dore. I learn as I go. :blush:

This is huge Paul! For some reason I’m having trouble getting the OFX plugins to show up on a non-Cuda machine (2018 iMac Pro). Any tips?

If you’re referring specifically to the ACES OFX Plugin, it should still show up but only run on the CPU. If it’s not showing up, then try installing the Natron version of the plugin to see if that works.

Sorry, yes, was referring specifically to the ACES OFX plugin. Natron version works! Though as you’ve said, CPU is very slow. Any plans for a Metal-compatible version? I’d ask about OpenCL, but sounds like that’s more to do with Apple’s outdated implementation that isn’t likely to change. Thanks again for making cool stuff!

That all sounds great, but the plugin doesn’t show up here in Resolve Version 15.2

Is there something I am missing? I’ve placed the .ofx file in the plugins-folder?
Thats obviously wrong :slight_smile:

Thanks for any help!

Peter

No one any idea?

Thanks!

Peter

What operating system are you on, and what’s your GPU?