2 # -*- coding: utf-8 -*-
6 import aces_ocio.generateLUT as genlut
7 from aces_ocio.util import ColorSpace, mat44FromMat33
10 # RED color spaces to ACES
12 def createREDlogFilm(gamut, transferFunction, name, lutDir, lutResolution1d):
13 name = "%s - %s" % (transferFunction, gamut)
14 if transferFunction == "":
15 name = "Linear - %s" % gamut
17 name = "%s" % transferFunction
25 def cineonToLinear(codeValue):
29 codeValueToDensity = 0.002
31 blackLinear = pow(10.0, (blackPoint - whitePoint) * (codeValueToDensity / nGamma))
32 codeLinear = pow(10.0, (codeValue - whitePoint) * (codeValueToDensity / nGamma))
34 return (codeLinear - blackLinear)/(1.0 - blackLinear)
36 cs.toReferenceTransforms = []
38 if transferFunction == 'REDlogFilm':
39 data = array.array('f', "\0" * lutResolution1d * 4)
40 for c in range(lutResolution1d):
41 data[c] = cineonToLinear(1023.0*c/(lutResolution1d-1))
43 lut = "CineonLog_to_linear.spi1d"
44 genlut.writeSPI1D(lutDir + "/" + lut, 0.0, 1.0, data, lutResolution1d, 1)
46 cs.toReferenceTransforms.append( {
49 'interpolation':'linear',
53 if gamut == 'DRAGONcolor':
54 cs.toReferenceTransforms.append( {
56 'matrix':mat44FromMat33([0.532279, 0.376648, 0.091073,
57 0.046344, 0.974513, -0.020860,
58 -0.053976, -0.000320, 1.054267]),
61 elif gamut == 'DRAGONcolor2':
62 cs.toReferenceTransforms.append( {
64 'matrix':mat44FromMat33([0.468452, 0.331484, 0.200064,
65 0.040787, 0.857658, 0.101553,
66 -0.047504, -0.000282, 1.047756]),
69 elif gamut == 'REDcolor2':
70 cs.toReferenceTransforms.append( {
72 'matrix':mat44FromMat33([0.480997, 0.402289, 0.116714,
73 -0.004938, 1.000154, 0.004781,
74 -0.105257, 0.025320, 1.079907]),
77 elif gamut == 'REDcolor3':
78 cs.toReferenceTransforms.append( {
80 'matrix':mat44FromMat33([0.512136, 0.360370, 0.127494,
81 0.070377, 0.903884, 0.025737,
82 -0.020824, 0.017671, 1.003123]),
85 elif gamut == 'REDcolor4':
86 cs.toReferenceTransforms.append( {
88 'matrix':mat44FromMat33([0.474202, 0.333677, 0.192121,
89 0.065164, 0.836932, 0.097901,
90 -0.019281, 0.016362, 1.002889]),
94 cs.fromReferenceTransforms = []
97 # Generate all color spaces conversion
98 def createColorSpaces(lutDir, lutResolution1d):
102 REDlogFilmDRAGON = createREDlogFilm("DRAGONcolor", "REDlogFilm", "REDlogFilm", lutDir, lutResolution1d)
103 colorspaces.append(REDlogFilmDRAGON)
105 REDlogFilmDRAGON2 = createREDlogFilm("DRAGONcolor2", "REDlogFilm", "REDlogFilm", lutDir, lutResolution1d)
106 colorspaces.append(REDlogFilmDRAGON2)
108 REDlogFilmREDcolor2 = createREDlogFilm("REDcolor2", "REDlogFilm", "REDlogFilm", lutDir, lutResolution1d)
109 colorspaces.append(REDlogFilmREDcolor2)
111 REDlogFilmREDcolor3 = createREDlogFilm("REDcolor3", "REDlogFilm", "REDlogFilm", lutDir, lutResolution1d)
112 colorspaces.append(REDlogFilmREDcolor3)
114 REDlogFilmREDcolor4 = createREDlogFilm("REDcolor4", "REDlogFilm", "REDlogFilm", lutDir, lutResolution1d)
115 colorspaces.append(REDlogFilmREDcolor4)
118 REDlogFilmDRAGON = createREDlogFilm("", "REDlogFilm", "REDlogFilm", lutDir, lutResolution1d)
119 colorspaces.append(REDlogFilmDRAGON)
122 REDlogFilmDRAGON = createREDlogFilm("DRAGONcolor", "", "REDlogFilm", lutDir, lutResolution1d)
123 colorspaces.append(REDlogFilmDRAGON)
125 REDlogFilmDRAGON2 = createREDlogFilm("DRAGONcolor2", "", "REDlogFilm", lutDir, lutResolution1d)
126 colorspaces.append(REDlogFilmDRAGON2)
128 REDlogFilmREDcolor2 = createREDlogFilm("REDcolor2", "", "REDlogFilm", lutDir, lutResolution1d)
129 colorspaces.append(REDlogFilmREDcolor2)
131 REDlogFilmREDcolor3 = createREDlogFilm("REDcolor3", "", "REDlogFilm", lutDir, lutResolution1d)
132 colorspaces.append(REDlogFilmREDcolor3)
134 REDlogFilmREDcolor4 = createREDlogFilm("REDcolor4", "", "REDlogFilm", lutDir, lutResolution1d)
135 colorspaces.append(REDlogFilmREDcolor4)