Shaper LUTs are now single channel. They were previously three channel, with the...
[OpenColorIO-Configs.git] / aces_1.0.0 / python / aces_ocio / create_aces_colorspaces.py
index c69fcac..c4ba524 100644 (file)
@@ -51,16 +51,26 @@ __all__ = ['ACES_AP1_TO_AP0',
            'get_LMTs_info',
            'create_colorspaces']
 
-# Matrix converting *ACES AP1* primaries to *AP0*.
+# Matrix converting *ACES AP1* primaries to *ACES AP0*.
 ACES_AP1_TO_AP0 = [0.6954522414, 0.1406786965, 0.1638690622,
                    0.0447945634, 0.8596711185, 0.0955343182,
                    -0.0055258826, 0.0040252103, 1.0015006723]
 
+# Matrix converting *ACES AP0* primaries to *ACES AP1*.
+ACES_AP0_TO_AP1 = [1.4514393161, -0.2365107469, -0.2149285693,
+                   -0.0765537734, 1.1762296998, -0.0996759264,
+                   0.0083161484, -0.0060324498, 0.9977163014]
+
 # Matrix converting *ACES AP0* primaries to *XYZ*.
 ACES_AP0_TO_XYZ = [0.9525523959, 0.0000000000, 0.0000936786,
                    0.3439664498, 0.7281660966, -0.0721325464,
                    0.0000000000, 0.0000000000, 1.0088251844]
 
+# Matrix converting *ACES AP0* primaries to *XYZ*.
+ACES_XYZ_TO_AP0 = [1.0498110175, 0.0000000000, -0.0000974845,
+                   -0.4959030231, 1.3733130458, 0.0982400361,
+                   0.0000000000, 0.0000000000, 0.9912520182]
+
 
 def create_ACES():
     """
@@ -86,7 +96,7 @@ def create_ACES():
     aces2065_1.family = 'ACES'
     aces2065_1.is_data = False
     aces2065_1.allocation_type = ocio.Constants.ALLOCATION_LG2
-    aces2065_1.allocation_vars = [-15, 6]
+    aces2065_1.allocation_vars = [-8, 5, 0.00390625]
 
     return aces2065_1
 
@@ -119,17 +129,13 @@ def create_ACEScc(aces_ctl_directory,
     cs.equality_group = ''
     cs.family = 'ACES'
     cs.is_data = False
+    cs.allocation_type = ocio.Constants.ALLOCATION_UNIFORM
+    cs.allocation_vars = [min_value, max_value]
 
     ctls = [os.path.join(aces_ctl_directory,
                          'ACEScc',
-                         'ACEScsc.ACEScc_to_ACES.a1.0.0.ctl'),
-            # This transform gets back to the *AP1* primaries.
-            # Useful as the 1d LUT is only covering the transfer function.
-            # The primaries switch is covered by the matrix below:
-            os.path.join(aces_ctl_directory,
-                         'ACEScg',
-                         'ACEScsc.ACES_to_ACEScg.a1.0.0.ctl')]
-    lut = '%s_to_ACES.spi1d' % name
+                         'ACEScsc.ACEScc_to_ACES.a1.0.0.ctl')]
+    lut = '%s_to_linear.spi1d' % name
 
     lut = sanitize(lut)
 
@@ -140,11 +146,12 @@ def create_ACEScc(aces_ctl_directory,
         'float',
         input_scale,
         1,
-        {},
+        {'transferFunctionOnly':1},
         cleanup,
         aces_ctl_directory,
         min_value,
-        max_value)
+        max_value,
+        1)
 
     cs.to_reference_transforms = []
     cs.to_reference_transforms.append({
@@ -192,13 +199,13 @@ def create_ACESproxy(aces_ctl_directory,
     ctls = [os.path.join(aces_ctl_directory,
                          'ACESproxy',
                          'ACEScsc.ACESproxy10i_to_ACES.a1.0.0.ctl'),
-            # This transform gets back to the *AP1* primaries.
-            # Useful as the 1d LUT is only covering the transfer function.
-            # The primaries switch is covered by the matrix below:
-            os.path.join(aces_ctl_directory,
-                         'ACEScg',
-                         'ACEScsc.ACES_to_ACEScg.a1.0.0.ctl')]
-    lut = '%s_to_aces.spi1d' % name
+                          # This transform gets back to the *AP1* primaries.
+                          # Useful as the 1d LUT is only covering the transfer function.
+                          # The primaries switch is covered by the matrix below:
+                          os.path.join(aces_ctl_directory,
+                                       'ACEScg',
+                                       'ACEScsc.ACES_to_ACEScg.a1.0.0.ctl')]
+    lut = '%s_to_linear.spi1d' % name
 
     lut = sanitize(lut)
 
@@ -211,7 +218,10 @@ def create_ACESproxy(aces_ctl_directory,
         1,
         {},
         cleanup,
-        aces_ctl_directory)
+        aces_ctl_directory,
+        0,
+        1,
+        1)
 
     cs.to_reference_transforms = []
     cs.to_reference_transforms.append({
@@ -258,6 +268,8 @@ def create_ACEScg(aces_ctl_directory,
     cs.equality_group = ''
     cs.family = 'ACES'
     cs.is_data = False
+    cs.allocation_type = ocio.Constants.ALLOCATION_LG2
+    cs.allocation_vars = [-8, 5, 0.00390625]
 
     cs.to_reference_transforms = []
 
@@ -455,6 +467,8 @@ def create_ACES_LMT(lmt_name,
     cs.equality_group = ''
     cs.family = 'Look'
     cs.is_data = False
+    cs.allocation_type = ocio.Constants.ALLOCATION_LG2
+    cs.allocation_vars = [-8, 5, 0.00390625]
 
     pprint.pprint(lmt_values)
 
@@ -465,7 +479,7 @@ def create_ACES_LMT(lmt_name,
      shaper_input_scale,
      shaper_params) = shaper_info
 
-    shaper_lut = '%s_to_aces.spi1d' % shaper_name
+    shaper_lut = '%s_to_linear.spi1d' % shaper_name
     if not os.path.exists(os.path.join(lut_directory, shaper_lut)):
         ctls = [shaper_to_ACES_CTL % aces_ctl_directory]
 
@@ -480,7 +494,10 @@ def create_ACES_LMT(lmt_name,
             1,
             shaper_params,
             cleanup,
-            aces_ctl_directory)
+            aces_ctl_directory,
+            0,
+            1,
+            1)
 
     shaper_OCIO_transform = {
         'type': 'lutFile',
@@ -522,9 +539,7 @@ def create_ACES_LMT(lmt_name,
 
     if 'transformCTLInverse' in lmt_values:
         ctls = [os.path.join(aces_ctl_directory,
-                             # TODO: Investigate "odt_values" undeclared
-                             # variable.
-                             odt_values['transformCTLInverse']),
+                             lmt_values['transformCTLInverse']),
                 shaper_from_ACES_CTL % aces_ctl_directory]
         lut = 'Inverse.%s.%s.spi3d' % (odt_name, shaper_name)
 
@@ -539,7 +554,10 @@ def create_ACES_LMT(lmt_name,
             shaper_input_scale,
             shaper_params,
             cleanup,
-            aces_ctl_directory)
+            aces_ctl_directory,
+            0,
+            1,
+            1)
 
         cs.to_reference_transforms.append({
             'type': 'lutFile',
@@ -602,7 +620,7 @@ def create_ACES_RRT_plus_ODT(odt_name,
     else:
         shaper_params['legalRange'] = 0
 
-    shaper_lut = '%s_to_aces.spi1d' % shaper_name
+    shaper_lut = '%s_to_linear.spi1d' % shaper_name
     if not os.path.exists(os.path.join(lut_directory, shaper_lut)):
         ctls = [shaper_to_ACES_CTL % aces_ctl_directory]
 
@@ -617,7 +635,10 @@ def create_ACES_RRT_plus_ODT(odt_name,
             1,
             shaper_params,
             cleanup,
-            aces_ctl_directory)
+            aces_ctl_directory,
+            0,
+            1,
+            1)
 
     shaper_OCIO_transform = {
         'type': 'lutFile',
@@ -764,7 +785,7 @@ def create_generic_log(aces_ctl_directory,
         aces_ctl_directory,
         'utilities',
         'ACESlib.OCIO_shaper_log2_to_lin_param.a1.0.0.ctl')]
-    lut = '%s_to_aces.spi1d' % name
+    lut = '%s_to_linear.spi1d' % name
 
     lut = sanitize(lut)
 
@@ -781,7 +802,8 @@ def create_generic_log(aces_ctl_directory,
         cleanup,
         aces_ctl_directory,
         min_value,
-        max_value)
+        max_value,
+        1)
 
     cs.to_reference_transforms = []
     cs.to_reference_transforms.append({
@@ -1276,7 +1298,8 @@ def create_colorspaces(aces_ctl_directory,
     ACES = create_ACES()
 
     ACEScc = create_ACEScc(aces_ctl_directory, lut_directory,
-                           lut_resolution_1d, cleanup)
+                           lut_resolution_1d, cleanup, 
+                           min_value=-0.35840, max_value=1.468)
     colorspaces.append(ACEScc)
 
     ACESproxy = create_ACESproxy(aces_ctl_directory, lut_directory,