- # -------------------------------------------------------------------------
- # *Generic Log Transform*
- # -------------------------------------------------------------------------
- def create_generic_log(name='log',
- min_value=0.0,
- max_value=1.0,
- input_scale=1.0,
- middle_grey=0.18,
- min_exposure=-6.0,
- max_exposure=6.5,
- lut_resolution_1d=lut_resolution_1d):
- cs = ColorSpace(name)
- cs.description = 'The %s color space' % name
- cs.equality_group = name
- cs.family = 'Utility'
- cs.is_data = False
-
- ctls = [os.path.join(
- aces_CTL_directory,
- 'utilities',
- 'ACESlib.OCIO_shaper_log2_to_lin_param.a1.0.0.ctl')]
- lut = '%s_to_aces.spi1d' % name
-
- lut = sanitize_path(lut)
-
- generate_1d_LUT_from_CTL(
- os.path.join(lut_directory, lut),
- ctls,
- lut_resolution_1d,
- 'float',
- input_scale,
- 1.0,
- {'middleGrey': middle_grey,
- 'minExposure': min_exposure,
- 'maxExposure': max_exposure},
- cleanup,
- aces_CTL_directory,
- min_value,
- max_value)
-
- cs.to_reference_transforms = []
- cs.to_reference_transforms.append({
- 'type': 'lutFile',
- 'path': lut,
- 'interpolation': 'linear',
- 'direction': 'forward'})
-
- cs.from_reference_transforms = []
- return cs
-
- # -------------------------------------------------------------------------
- # *ACES LMTs*
- # -------------------------------------------------------------------------
- def create_ACES_LMT(lmt_name,
- lmt_values,
- shaper_info,
- lut_resolution_1d=1024,
- lut_resolution_3d=64,
- cleanup=True):
- cs = ColorSpace('%s' % lmt_name)
- cs.description = 'The ACES Look Transform: %s' % lmt_name
- cs.equality_group = ''
- cs.family = 'Look'
- cs.is_data = False
-
- pprint.pprint(lmt_values)
-
- # Generating the *shaper* transform.
- (shaper_name,
- shaper_to_ACES_CTL,
- shaper_from_ACES_CTL,
- shaper_input_scale,
- shaper_params) = shaper_info
-
- shaper_lut = '%s_to_aces.spi1d' % shaper_name
- if not os.path.exists(os.path.join(lut_directory, shaper_lut)):
- ctls = [shaper_to_ACES_CTL % aces_CTL_directory]
-
- shaper_lut = sanitize_path(shaper_lut)
-
- generate_1d_LUT_from_CTL(
- os.path.join(lut_directory, shaper_lut),
- ctls,
- lut_resolution_1d,
- 'float',
- 1.0 / shaper_input_scale,
- 1.0,
- shaper_params,
- cleanup,
- aces_CTL_directory)
-
- shaper_OCIO_transform = {
- 'type': 'lutFile',
- 'path': shaper_lut,
- 'interpolation': 'linear',
- 'direction': 'inverse'}
-
- # Generating the forward transform.
- cs.from_reference_transforms = []
-
- if 'transformCTL' in lmt_values:
- ctls = [shaper_to_ACES_CTL % aces_CTL_directory,
- os.path.join(aces_CTL_directory,
- lmt_values['transformCTL'])]
- lut = '%s.%s.spi3d' % (shaper_name, lmt_name)
-
- lut = sanitize_path(lut)
-
- generate_3d_LUT_from_CTL(
- os.path.join(lut_directory, lut),
- ctls,
- lut_resolution_3d,
- 'float',
- 1.0 / shaper_input_scale,
- 1.0,
- shaper_params,
- cleanup,
- aces_CTL_directory)
-
- cs.from_reference_transforms.append(shaper_OCIO_transform)
- cs.from_reference_transforms.append({
- 'type': 'lutFile',
- 'path': lut,
- 'interpolation': 'tetrahedral',
- 'direction': 'forward'
- })
-
- # Generating the inverse transform.
- cs.to_reference_transforms = []
-
- if 'transformCTLInverse' in lmt_values:
- ctls = [os.path.join(aces_CTL_directory,
- odt_values['transformCTLInverse']),
- shaper_from_ACES_CTL % aces_CTL_directory]
- lut = 'Inverse.%s.%s.spi3d' % (odt_name, shaper_name)
-
- lut = sanitize_path(lut)
-
- generate_3d_LUT_from_CTL(
- os.path.join(lut_directory, lut),
- ctls,
- lut_resolution_3d,
- 'half',
- 1.0,
- shaper_input_scale,
- shaper_params,
- cleanup,
- aces_CTL_directory)
-
- cs.to_reference_transforms.append({
- 'type': 'lutFile',
- 'path': lut,
- 'interpolation': 'tetrahedral',
- 'direction': 'forward'})
-
- shaper_inverse = shaper_OCIO_transform.copy()
- shaper_inverse['direction'] = 'forward'
- cs.to_reference_transforms.append(shaper_inverse)
-
- return cs
-
- # -------------------------------------------------------------------------
- # *LMT Shaper*
- # -------------------------------------------------------------------------
-
- lmt_lut_resolution_1d = max(4096, lut_resolution_1d)
- lmt_lut_resolution_3d = max(65, lut_resolution_3d)
-
- # Defining the *Log 2* shaper.
- lmt_shaper_name = 'LMT Shaper'
- lmt_params = {
- 'middleGrey': 0.18,
- 'minExposure': -10.0,
- 'maxExposure': 6.5}
-
- lmt_shaper = create_generic_log(name=lmt_shaper_name,
- middle_grey=lmt_params['middleGrey'],
- min_exposure=lmt_params['minExposure'],
- max_exposure=lmt_params['maxExposure'],
- lut_resolution_1d=lmt_lut_resolution_1d)
- config_data['colorSpaces'].append(lmt_shaper)
-
- shaper_input_scale_generic_log2 = 1.0
-
- # *Log 2* shaper name and *CTL* transforms bundled up.
- lmt_shaper_data = [
- lmt_shaper_name,
- os.path.join('%s',
- 'utilities',
- 'ACESlib.OCIO_shaper_log2_to_lin_param.a1.0.0.ctl'),
- os.path.join('%s',
- 'utilities',
- 'ACESlib.OCIO_shaper_lin_to_log2_param.a1.0.0.ctl'),
- shaper_input_scale_generic_log2,
- lmt_params]
-
- sorted_LMTs = sorted(lmt_info.iteritems(), key=lambda x: x[1])
- print(sorted_LMTs)
- for lmt in sorted_LMTs:
- (lmt_name, lmt_values) = lmt
- cs = create_ACES_LMT(
- lmt_values['transformUserName'],
- lmt_values,
- lmt_shaper_data,
- lmt_lut_resolution_1d,
- lmt_lut_resolution_3d,
- cleanup)