Skip to content

Commit 975e205

Browse files
committed
Implement support for "Look" transform.
Signed-off-by: Thomas Mansencal <[email protected]>
1 parent 0d903b9 commit 975e205

File tree

5 files changed

+287
-41
lines changed

5 files changed

+287
-41
lines changed

docs/opencolorio_config_aces.config.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ Config Generation Common Objects
1919

2020
colorspace_factory
2121
view_transform_factory
22+
look_factory
2223
ConfigData
2324
validate_config
2425
generate_config

opencolorio_config_aces/config/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# Copyright Contributors to the OpenColorIO Project.
33

44
from .generation import (ConfigData, colorspace_factory,
5-
view_transform_factory, generate_config,
5+
view_transform_factory, look_factory, generate_config,
66
validate_config)
77
from .reference import (
88
ColorspaceDescriptionStyle, build_aces_conversion_graph,
@@ -13,7 +13,7 @@
1313

1414
__all__ = [
1515
'ConfigData', 'colorspace_factory', 'view_transform_factory',
16-
'generate_config', 'validate_config'
16+
'look_factory', 'generate_config', 'validate_config'
1717
]
1818
__all__ += [
1919
'ColorspaceDescriptionStyle', 'build_aces_conversion_graph',
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
# SPDX-License-Identifier: BSD-3-Clause
22
# Copyright Contributors to the OpenColorIO Project.
33

4-
from .common import (colorspace_factory, view_transform_factory, ConfigData,
5-
validate_config, generate_config)
4+
from .common import (colorspace_factory, view_transform_factory, look_factory,
5+
ConfigData, validate_config, generate_config)
66

77
__all__ = [
8-
'colorspace_factory', 'view_transform_factory', 'ConfigData',
9-
'validate_config', 'generate_config'
8+
'colorspace_factory', 'view_transform_factory', 'look_factory',
9+
'ConfigData', 'validate_config', 'generate_config'
1010
]

opencolorio_config_aces/config/generation/common.py

Lines changed: 78 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929

3030
__all__ = [
3131
'LOG_ALLOCATION_VARS', 'colorspace_factory', 'view_transform_factory',
32-
'ConfigData', 'validate_config', 'generate_config'
32+
'look_factory', 'ConfigData', 'validate_config', 'generate_config'
3333
]
3434

3535
LOG_ALLOCATION_VARS = (-8, 5, 2**-8)
@@ -223,6 +223,64 @@ def view_transform_factory(name,
223223
return view_transform
224224

225225

226+
@required('OpenColorIO')
227+
def look_factory(name,
228+
process_space=None,
229+
description=None,
230+
forward_transform=None,
231+
inverse_transform=None,
232+
base_look=None):
233+
"""
234+
*OpenColorIO* look factory.
235+
236+
Parameters
237+
----------
238+
name : unicode
239+
*OpenColorIO* look name.
240+
process_space : unicode, optional
241+
*OpenColorIO* look process space, e.g. *OpenColorIO* colorspace or role
242+
name.
243+
description : unicode, optional
244+
*OpenColorIO* look description.
245+
forward_transform : object, optional
246+
*To Reference* *OpenColorIO* look transform.
247+
inverse_transform : object, optional
248+
*From Reference* *OpenColorIO* look transform.
249+
base_look : ViewTransform, optional
250+
Inherited *OpenColorIO* base look.
251+
252+
Returns
253+
-------
254+
Look
255+
*OpenColorIO* look.
256+
"""
257+
258+
import PyOpenColorIO as ocio
259+
260+
if process_space is None:
261+
process_space = ocio.ROLE_SCENE_LINEAR
262+
263+
if base_look is not None:
264+
look = base_look
265+
else:
266+
look = ocio.Look()
267+
268+
look.setProcessSpace(process_space)
269+
270+
if forward_transform is not None:
271+
look.setTransform(forward_transform)
272+
273+
if inverse_transform is not None:
274+
look.setInverseTransform(inverse_transform)
275+
276+
look.setName(name)
277+
278+
if description is not None:
279+
look.setDescription(description)
280+
281+
return look
282+
283+
226284
@dataclass
227285
class ConfigData:
228286
"""
@@ -239,6 +297,9 @@ class ConfigData:
239297
colorspaces : array_like
240298
Config colorspaces, an iterable of
241299
:attr:`PyOpenColorIO.ColorSpace` class instances.
300+
looks : array_like, optional
301+
Config looks, an iterable of :attr:`PyOpenColorIO.Look` class
302+
instances.
242303
view_transforms : array_like, optional
243304
Config view transforms, an iterable of
244305
:attr:`PyOpenColorIO.ViewTransform` class instances.
@@ -265,6 +326,7 @@ class ConfigData:
265326
description
266327
roles
267328
colorspaces
329+
looks
268330
view_transforms
269331
inactive_colorspaces
270332
shared_views
@@ -280,6 +342,7 @@ class ConfigData:
280342
'An "OpenColorIO" config generated by "OpenColorIO-Config-ACES".')
281343
roles: Union[dict, OrderedDict] = field(default_factory=dict)
282344
colorspaces: Union[list, tuple] = field(default_factory=list)
345+
looks: Union[list, tuple] = field(default_factory=list)
283346
view_transforms: Union[list, tuple] = field(default_factory=list)
284347
inactive_colorspaces: Union[list, tuple] = field(default_factory=list)
285348
shared_views: Union[list, tuple] = field(default_factory=list)
@@ -354,6 +417,10 @@ def generate_config(data, config_name=None, validate=True):
354417
logging.debug(f'Adding "{view_transform.getName()}" view transform.')
355418
config.addViewTransform(view_transform)
356419

420+
for look in data.looks:
421+
logging.debug(f'Adding "{look.getName()}" look.')
422+
config.addLook(look)
423+
357424
if data.profile_version >= 2:
358425
logging.debug(f'Disabling "{data.inactive_colorspaces}" colorspaces.')
359426
config.setInactiveColorSpaces(','.join(data.inactive_colorspaces))
@@ -479,6 +546,10 @@ def generate_config(data, config_name=None, validate=True):
479546
'Colorspace',
480547
to_reference=ocio.ColorSpaceTransform('CCTF - sRGB', 'Gamut - sRGB'))
481548
colorspace_4 = colorspace_factory('Utility - Raw', 'Utility', is_data=True)
549+
_red_cdl_transform = ocio.CDLTransform()
550+
_red_cdl_transform.setSlope([0, 0, 0])
551+
_red_cdl_transform.setOffset([1, 0, 0])
552+
look_1 = look_factory('Look - Red', forward_transform=_red_cdl_transform)
482553
display_1 = colorspace_factory(
483554
'View - sRGB Monitor - sRGB', 'View', base_colorspace=colorspace_3)
484555

@@ -487,6 +558,7 @@ def generate_config(data, config_name=None, validate=True):
487558
colorspaces=[
488559
colorspace_1, colorspace_2, colorspace_3, colorspace_4, display_1
489560
],
561+
looks=[look_1],
490562
views=[
491563
{
492564
'display': 'sRGB Monitor',
@@ -526,6 +598,10 @@ def generate_config(data, config_name=None, validate=True):
526598
colorspace_4 = colorspace_factory(
527599
'CCTF - sRGB', 'CCTF', to_reference=transform)
528600
colorspace_5 = colorspace_factory('Utility - Raw', 'Utility', is_data=True)
601+
_red_cdl_transform = ocio.CDLTransform()
602+
_red_cdl_transform.setSlope([0, 0, 0])
603+
_red_cdl_transform.setOffset([1, 0, 0])
604+
look_1 = look_factory('Look - Red', forward_transform=_red_cdl_transform)
529605
interchange = colorspace_factory('CIE-XYZ D65')
530606
display_1 = colorspace_factory(
531607
'sRGB Monitor',
@@ -567,6 +643,7 @@ def generate_config(data, config_name=None, validate=True):
567643
colorspace_1, colorspace_2, colorspace_3, colorspace_4,
568644
colorspace_5, interchange, display_1, display_2
569645
],
646+
looks=[look_1],
570647
view_transforms=[view_transform_1, view_transform_2],
571648
inactive_colorspaces=['CIE-XYZ D65'],
572649
shared_views=shared_views,

0 commit comments

Comments
 (0)