410f8443033a3c961e27b6048d53d333f7dd68f4
[OpenColorIO-Configs.git] / aces_1.0.0 / python / aces_ocio / create_general_colorspaces.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 """
5 Implements support for general colorspaces conversions and transfer functions.
6 """
7
8 from __future__ import division
9
10 import aces_ocio.create_aces_colorspaces as aces
11 from aces_ocio.utilities import ColorSpace, mat44_from_mat33
12
13
14 __author__ = 'ACES Developers'
15 __copyright__ = 'Copyright (C) 2014 - 2015 - ACES Developers'
16 __license__ = ''
17 __maintainer__ = 'ACES Developers'
18 __email__ = 'aces@oscars.org'
19 __status__ = 'Production'
20
21 __all__ = ['create_generic_matrix',
22            'create_colorspaces']
23
24
25 def create_generic_matrix(name='matrix',
26                           from_reference_values=None,
27                           to_reference_values=None,
28                           aliases=[]):
29     """
30     Object description.
31
32     Parameters
33     ----------
34     parameter : type
35         Parameter description.
36
37     Returns
38     -------
39     type
40          Return value description.
41     """
42
43     if from_reference_values is None:
44         from_reference_values = []
45
46     if to_reference_values is None:
47         to_reference_values = []
48
49     cs = ColorSpace(name)
50     cs.description = 'The %s color space' % name
51     cs.aliases = aliases
52     cs.equality_group = name
53     cs.family = 'Utility'
54     cs.is_data = False
55
56     cs.to_reference_transforms = []
57     if to_reference_values:
58         for matrix in to_reference_values:
59             cs.to_reference_transforms.append({
60                 'type': 'matrix',
61                 'matrix': mat44_from_mat33(matrix),
62                 'direction': 'forward'})
63
64     cs.from_reference_transforms = []
65     if from_reference_values:
66         for matrix in from_reference_values:
67             cs.from_reference_transforms.append({
68                 'type': 'matrix',
69                 'matrix': mat44_from_mat33(matrix),
70                 'direction': 'forward'})
71
72     return cs
73
74
75 def create_colorspaces(lut_directory,
76                        lut_resolution_1d,
77                        lut_resolution_3d):
78     """
79     Generates the colorspace conversions.
80
81     Parameters
82     ----------
83     parameter : type
84         Parameter description.
85
86     Returns
87     -------
88     type
89          Return value description.
90     """
91
92     colorspaces = []
93
94     cs = create_generic_matrix('XYZ',
95                                from_reference_values=[aces.ACES_AP0_TO_XYZ],
96                                aliases=["lin_xyz"])
97     colorspaces.append(cs)
98
99     cs = create_generic_matrix(
100         'Linear - AP1',
101         to_reference_values=[aces.ACES_AP1_TO_AP0],
102         aliases=["lin_ap1"])
103     colorspaces.append(cs)
104
105     # *ACES* to *Linear*, *P3D60* primaries.
106     XYZ_to_P3D60 = [2.4027414142, -0.8974841639, -0.3880533700,
107                     -0.8325796487, 1.7692317536, 0.0237127115,
108                     0.0388233815, -0.0824996856, 1.0363685997]
109
110     cs = create_generic_matrix(
111         'Linear - P3-D60',
112         from_reference_values=[aces.ACES_AP0_TO_XYZ, XYZ_to_P3D60],
113         aliases=["lin_p3d60"])
114     colorspaces.append(cs)
115
116     # *ACES* to *Linear*, *P3DCI* primaries.
117     XYZ_to_P3DCI = [2.7253940305, -1.0180030062, -0.4401631952,
118                     -0.7951680258, 1.6897320548, 0.0226471906,
119                     0.0412418914, -0.0876390192, 1.1009293786]
120
121     cs = create_generic_matrix(
122         'Linear - P3-DCI',
123         from_reference_values=[aces.ACES_AP0_TO_XYZ, XYZ_to_P3DCI],
124         aliases=["lin_p3dci"])
125     colorspaces.append(cs)
126
127     # *ACES* to *Linear*, *Rec. 709* primaries.
128     XYZ_to_Rec709 = [3.2409699419, -1.5373831776, -0.4986107603,
129                      -0.9692436363, 1.8759675015, 0.0415550574,
130                      0.0556300797, -0.2039769589, 1.0569715142]
131
132     cs = create_generic_matrix(
133         'Linear - Rec.709',
134         from_reference_values=[aces.ACES_AP0_TO_XYZ, XYZ_to_Rec709],
135         aliases=["lin_rec709"])
136     colorspaces.append(cs)
137
138     # *ACES* to *Linear*, *Rec. 2020* primaries.
139     XYZ_to_Rec2020 = [1.7166511880, -0.3556707838, -0.2533662814,
140                       -0.6666843518, 1.6164812366, 0.0157685458,
141                       0.0176398574, -0.0427706133, 0.9421031212]
142
143     cs = create_generic_matrix(
144         'Linear - Rec.2020',
145         from_reference_values=[aces.ACES_AP0_TO_XYZ, XYZ_to_Rec2020],
146         aliases=["lin_rec2020"])
147     colorspaces.append(cs)
148
149     # *ACES* to *Linear*, *Pro Photo* primaries.
150     AP0_to_RIMM = [1.2412367771, -0.1685692287, -0.0726675484,
151                    0.0061203066, 1.083151174, -0.0892714806,
152                    -0.0032853314, 0.0099796402, 0.9933056912]
153
154     cs = create_generic_matrix(
155         'Linear - ProPhoto',
156         from_reference_values=[AP0_to_RIMM],
157         aliases=["lin_prophoto", "lin_rimm"])
158     colorspaces.append(cs)
159
160     # *ACES* to *Linear*, *Adobe RGB* primaries.
161     AP0_to_ADOBERGB = [1.7245603168, -0.4199935942, -0.3045667227,
162                        -0.2764799142, 1.3727190877, -0.0962391734,
163                        -0.0261255258, -0.0901747807, 1.1163003065]
164
165     cs = create_generic_matrix(
166         'Linear - Adobe RGB',
167         from_reference_values=[AP0_to_ADOBERGB],
168         aliases=["lin_adobergb"])
169     colorspaces.append(cs)
170
171     # *ACES* to *Linear*, *Adobe Wide Gamut RGB* primaries.
172     AP0_to_ADOBERGB = [1.3809814778, -0.1158594573, -0.2651220205,
173                        0.0057015535, 1.0402949043, -0.0459964578,
174                        -0.0038908746, -0.0597091815, 1.0636000561]
175
176     cs = create_generic_matrix(
177         'Linear - Adobe Wide Gamut RGB',
178         from_reference_values=[AP0_to_ADOBERGB],
179         aliases=["lin_adobewidegamutrgb"])
180     colorspaces.append(cs)
181
182     return colorspaces