As I mentioned briefly here, I wanted to do a quick experiment using a per-channel RGB display rendering approach, experimenting with different primaries for the “rendering gamut”.
The other day I was messing around with the excellent and well-loved Arri K1S1 display transform, reading through this whitepaper again. When I last read it in 2012 I barely understood what a colorspace was. How time flies.
Anyway, I decided to implement it in Nuke:
Arri_K1S1_simplified.nk (19.3 KB)
It is extremely simple
Essentially a tonemap in Alexa Wide Gamut, and a display encoding, which includes a custom AWG → Rec.709 matrix which desturates the red and green primaries a little:
So I decided to make my own, inspired by this simple though highly effective approach to a display transform. I built a little setup that lets you position the coordinate of the three primaries positions using a 2d position knob, which then automatically calculates a matrix to convert your incoming image into this “custom rendering gamut”.
This little setup makes it really intuitive and easy to get a feel for what behavior the primaries positions causes on the rendering transform. I messed around and came up with a few presets to start off with. You can also set a reference gamut if you want as an overlay, to see where it’s primaries are positioned.
Those of you who are more interested in a per-channel display rendering approach may be interested to play with this. I’ve included the two tonemap nodes with presets that I’ve been playing around with, but you could easily swap in whatever tonemap approach you wanted to. Here’s the nuke script:
DIY_PerChannel_DRT.nk (108.0 KB)
Thanks to @daniele I found a bug in my code for the matrix calculation when the source or target gamut is XYZ.
Please update to this new setup which fixes the issue.
DIY_PerChannel_DRT_v2.nk (109.9 KB)
The Blinkscript node won’t work in nuke non-commercial. However it’s just used for drawing the spectral locus plot. Here’s a PNG image you can use in it’s place if you’re using Nuke NC