D65sim for a DCI-P3 projector


(Charles Boileau) #1

I have a small request… Is there an ODT that would simulate D65 on a DCI-P3 projector. I would like to turn the DCI WP to D65 for a project that’s coming up.

@nick: Would you be able drum up a DCTL?

Technically we could always just use the DCI-P3 ODT and add A DCTL to simulate D65…

Thanks!


(Charles Boileau) #2

PS: I don’t want to recalibrate.


(Nick Shaw) #3

Making a modified ODT in CTL which produced a “D65 sim” output on a P3 DCI projector would be a relatively straightforward modification on the P3 DCI ODT. You would add a chromatic adaptation matrix and then an additional scale factor to keep everything within the P3 0-1 range.

Unfortunately, converting this to DCTL would be far more complex. The CTL RRT and ODTs use various library functions for the tone curves, and those would have to be written from scratch in DCTL. I suspect the result might seriously impact real time performance. I have found this with my previous experiments with writing complex functions in DCTL.

Simpler would be to create a transform which could be applied downstream of the standard P3 DCI ODT. Unfortunately I do not believe Resolve allows you to use DCTL after the ODT. I could probably create a LUT implementation.


(Charles Boileau) #4

would a 3x3 matrix OFX work?


(Nick Shaw) #5

A 3x3 matrix would do the chromatic adaptation and the scale, but would need to be inserted in the right place in the middle of the ODT, which is not possible. Resolve applies the concatenation of the RRT and ODT as one operation, or you choose “None” and get ACES 2065-1 output, in which case you would have to apply the RRT yourself as well.

Bear in mind, there’s nothing wrong with a well constructed LUT implementation, as long as it has a sufficiently large mesh, and applies input range scaling and a 1D shaper where necessary. Most of Baselight’s DRTs (including the ACES ones) are currently implemented with LUTs.


(Charles Boileau) #6

Thanks @nick. But to my understanding a .cube cannot include a shaper LUT… Do we any other options?


(Nick Shaw) #7

Not all .cube implementations support shaper LUTs, but Resolve does.


(Charles Boileau) #8

No idea how ti implement a shaper 1d into a Resolve .cube… any info on this? Thanks!


(Rémi Achard) #9

I think you can find all the info. in this post https://forum.blackmagicdesign.com/viewtopic.php?f=21&t=40284#p232952, I don’t know if there is any official document though.


(Charles Boileau) #10

Thanks @remia… Looks like it’s possible. But not sure how to create one… Manually? I’ll see with Lattice…

Thanks!


(Rémi Achard) #11

Quickly checked with Lattice and I don’t think you can do that, the only time I used it I think I did it by hand, and of course the 3D LUT that follows must be generated for the output encoding of that shaper…

I’m not sure what @nick suggest but maybe a shaper function is not even needed here (we after the ODT so on display-referred P3-DCI Gamma 2.6 encoded data) but I guess it depends on the complexity of the transformation ?

For reference, I found this ODT P3 D65 Sim (not sure if it’s allowed to use it) : https://github.com/JGoldstone/aces-dev/blob/dev/transforms/ctl/odt/p3/ODT.Codex.P3DCI_48nits_D65sim.ctl


(Nick Shaw) #12

I am not aware of any software which creates LUTs with shapers automatically. I build them by hand in Python, using some libraries I have written.

A shaper is not needed if creating a LUT to convert the output of the standard P3 DCI ODT to D65. You just concatenate the reverse P3 DCI ODT with the Joseph Goldstone ODT, which Lattice should be able to do for you.

You would need a shaper if designing a LUT to replace an ODT entirely, which took linear AP0 as input.


(Nick Shaw) #13

Peter’s example would be slightly clearer if there was a blank line separating the 1D shaper and the 3D cube:

LUT_1D_SIZE 6
LUT_1D_INPUT_RANGE 0.0 1.0

LUT_3D_SIZE 3
LUT_3D_INPUT_RANGE 0.0 1.0

1.0 1.0 1.0
0.8 0.8 0.8
0.6 0.6 0.6
0.4 0.4 0.4
0.2 0.2 0.2
0.0 0.0 0.0

1.0 1.0 1.0
0.5 1.0 1.0
0.0 1.0 1.0
1.0 0.5 1.0
0.5 0.5 1.0
0.0 0.5 1.0
1.0 0.0 1.0
0.5 0.0 1.0
0.0 0.0 1.0
1.0 1.0 0.5
0.5 1.0 0.5
0.0 1.0 0.5
1.0 0.5 0.5
0.5 0.5 0.5
0.0 0.5 0.5
1.0 0.0 0.5
0.5 0.0 0.5
0.0 0.0 0.5
1.0 1.0 0.0
0.5 1.0 0.0
0.0 1.0 0.0
1.0 0.5 0.0
0.5 0.5 0.0
0.0 0.5 0.0
1.0 0.0 0.0
0.5 0.0 0.0
0.0 0.0 0.0

And note that INPUT_RANGE lines can be omitted if they are simply 0.0 1.0, as that is assumed by default.


(Charles Boileau) #14

Ok so… Just concatenate Ok so I just ad the INV P3 ODT and then add the JGoldstone ODT into a 3d Lut… (in that order? I still have to apply the P3 ODT in Resolve right? Thanks!


(Nick Shaw) #15

Correct. You use the P3 ODT, but then cancel out its effect, because its inverse is baked into the LUT, leaving you with the effect of only the J Goldstone ODT.


(Charles Boileau) #16

Thanks! I’ll give it a go! Cheers


(Charles Boileau) #17

Seems to work very well! Now this LUT needs to be rendered with the footage at the end… Correct?


(Nick Shaw) #18

Correct. Make sure you use a large mesh size LUT (e.g. 64^3) when baking it into a deliverable.

If you need a DCP, you are can either bake this LUT into a P3 master, and use that as a source to make the DCP from, or else make a new modifying LUT which goes to X’Y’Z’ with P3 gamut and D65 white. The former approach is probably simpler.


(Charles Boileau) #19

got it! We always master to P3 and produce de DCPs from there. So I’m all good.

Now in Resolve: should this go directly on the clip (right clip thumbnail) or on the output LUT position?

Thanks for the help!


(Charles Boileau) #20

@nick: I’m trying to include the 1D shaper but I have no idea. Should I “write” it in manually in the LUT? I’m not too sure what I should do here.