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) * (
32 codeValueToDensity / nGamma))
33 codeLinear = pow(10.0, (codeValue - whitePoint) * (
34 codeValueToDensity / nGamma))
36 return (codeLinear - blackLinear) / (1.0 - blackLinear)
38 cs.toReferenceTransforms = []
40 if transferFunction == 'REDlogFilm':
41 data = array.array('f', "\0" * lutResolution1d * 4)
42 for c in range(lutResolution1d):
43 data[c] = cineonToLinear(1023.0 * c / (lutResolution1d - 1))
45 lut = "CineonLog_to_linear.spi1d"
46 genlut.writeSPI1D(lutDir + "/" + lut,
53 cs.toReferenceTransforms.append({
56 'interpolation': 'linear',
57 'direction': 'forward'
60 if gamut == 'DRAGONcolor':
61 cs.toReferenceTransforms.append({
63 'matrix': mat44FromMat33([0.532279, 0.376648, 0.091073,
64 0.046344, 0.974513, -0.020860,
65 -0.053976, -0.000320, 1.054267]),
66 'direction': 'forward'
68 elif gamut == 'DRAGONcolor2':
69 cs.toReferenceTransforms.append({
71 'matrix': mat44FromMat33([0.468452, 0.331484, 0.200064,
72 0.040787, 0.857658, 0.101553,
73 -0.047504, -0.000282, 1.047756]),
74 'direction': 'forward'
76 elif gamut == 'REDcolor2':
77 cs.toReferenceTransforms.append({
79 'matrix': mat44FromMat33([0.480997, 0.402289, 0.116714,
80 -0.004938, 1.000154, 0.004781,
81 -0.105257, 0.025320, 1.079907]),
82 'direction': 'forward'
84 elif gamut == 'REDcolor3':
85 cs.toReferenceTransforms.append({
87 'matrix': mat44FromMat33([0.512136, 0.360370, 0.127494,
88 0.070377, 0.903884, 0.025737,
89 -0.020824, 0.017671, 1.003123]),
90 'direction': 'forward'
92 elif gamut == 'REDcolor4':
93 cs.toReferenceTransforms.append({
95 'matrix': mat44FromMat33([0.474202, 0.333677, 0.192121,
96 0.065164, 0.836932, 0.097901,
97 -0.019281, 0.016362, 1.002889]),
98 'direction': 'forward'
101 cs.fromReferenceTransforms = []
105 # Generate all color spaces conversion
106 def createColorSpaces(lutDir, lutResolution1d):
110 REDlogFilmDRAGON = createREDlogFilm(
111 "DRAGONcolor", "REDlogFilm", "REDlogFilm", lutDir, lutResolution1d)
112 colorspaces.append(REDlogFilmDRAGON)
114 REDlogFilmDRAGON2 = createREDlogFilm(
115 "DRAGONcolor2", "REDlogFilm", "REDlogFilm", lutDir, lutResolution1d)
116 colorspaces.append(REDlogFilmDRAGON2)
118 REDlogFilmREDcolor2 = createREDlogFilm(
119 "REDcolor2", "REDlogFilm", "REDlogFilm", lutDir, lutResolution1d)
120 colorspaces.append(REDlogFilmREDcolor2)
122 REDlogFilmREDcolor3 = createREDlogFilm(
123 "REDcolor3", "REDlogFilm", "REDlogFilm", lutDir, lutResolution1d)
124 colorspaces.append(REDlogFilmREDcolor3)
126 REDlogFilmREDcolor4 = createREDlogFilm(
127 "REDcolor4", "REDlogFilm", "REDlogFilm", lutDir, lutResolution1d)
128 colorspaces.append(REDlogFilmREDcolor4)
131 REDlogFilmDRAGON = createREDlogFilm(
132 "", "REDlogFilm", "REDlogFilm", lutDir, lutResolution1d)
133 colorspaces.append(REDlogFilmDRAGON)
136 REDlogFilmDRAGON = createREDlogFilm(
137 "DRAGONcolor", "", "REDlogFilm", lutDir, lutResolution1d)
138 colorspaces.append(REDlogFilmDRAGON)
140 REDlogFilmDRAGON2 = createREDlogFilm(
141 "DRAGONcolor2", "", "REDlogFilm", lutDir, lutResolution1d)
142 colorspaces.append(REDlogFilmDRAGON2)
144 REDlogFilmREDcolor2 = createREDlogFilm(
145 "REDcolor2", "", "REDlogFilm", lutDir, lutResolution1d)
146 colorspaces.append(REDlogFilmREDcolor2)
148 REDlogFilmREDcolor3 = createREDlogFilm(
149 "REDcolor3", "", "REDlogFilm", lutDir, lutResolution1d)
150 colorspaces.append(REDlogFilmREDcolor3)
152 REDlogFilmREDcolor4 = createREDlogFilm(
153 "REDcolor4", "", "REDlogFilm", lutDir, lutResolution1d)
154 colorspaces.append(REDlogFilmREDcolor4)