Skip to content

Commit ad02a76

Browse files
committed
Implement better ordering support.
Signed-off-by: Thomas Mansencal <[email protected]>
1 parent 428fd11 commit ad02a76

File tree

5 files changed

+147
-96
lines changed

5 files changed

+147
-96
lines changed

opencolorio_config_aces/config/cg/generate/config.py

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -983,6 +983,7 @@ def yield_from_config_mapping():
983983
data.description = config_description_cg(build_configuration, describe)
984984

985985
# Colorspaces, Looks and View Transforms Filtering
986+
# ================================================
986987
transforms = data.colorspaces + data.view_transforms
987988
implicit_transforms = [
988989
a["name"] for a in transforms if a.get("transforms_data") is None
@@ -1024,6 +1025,7 @@ def filter_all(array, filterers):
10241025
return filtered
10251026

10261027
# "Colorspaces" Filtering
1028+
# =======================
10271029
any_colorspace_filterers = [
10281030
implicit_transform_filterer,
10291031
transform_filterer,
@@ -1040,6 +1042,7 @@ def filter_all(array, filterers):
10401042
)
10411043

10421044
# "Looks" Filtering
1045+
# =================
10431046
any_look_filterers = [
10441047
implicit_transform_filterer,
10451048
transform_filterer,
@@ -1051,6 +1054,7 @@ def filter_all(array, filterers):
10511054
LOGGER.info('Filtered "Look" transforms: %s ', [a["name"] for a in data.looks])
10521055

10531056
# "View Transform" Filtering
1057+
# ==========================
10541058
any_view_transform_filterers = [
10551059
implicit_transform_filterer,
10561060
transform_filterer,
@@ -1071,6 +1075,7 @@ def filter_all(array, filterers):
10711075
)
10721076

10731077
# "Views & Shared Views" Filtering
1078+
# ================================
10741079
display_names = [
10751080
a["name"] for a in data.colorspaces if a.get("family") == "Display"
10761081
]
@@ -1098,6 +1103,7 @@ def view_filterer(transform):
10981103
return False
10991104

11001105
# "Shared Views" Filtering
1106+
# ========================
11011107
any_shared_view_filterers = [
11021108
implicit_view_filterer,
11031109
view_filterer,
@@ -1124,15 +1130,18 @@ def view_filterer(transform):
11241130
LOGGER.info('Filtered "View(s)": %s.', [a["view"] for a in data.views])
11251131

11261132
# "Active Displays" Filtering
1133+
# ===========================
11271134
data.active_displays = [a for a in data.active_displays if a in display_names]
11281135
LOGGER.info("Filtered active displays: %s.", data.active_displays)
11291136

11301137
# "Active Views" Filtering
1138+
# ========================
11311139
views = [view["view"] for view in data.views]
11321140
data.active_views = [view for view in data.active_views if view in views]
11331141
LOGGER.info("Filtered active views: %s.", data.active_views)
11341142

11351143
# CLF Transforms & BuiltinTransform Creation
1144+
# ==========================================
11361145
for transform_data in yield_from_config_mapping():
11371146
# Inherited from the "Reference" config.
11381147
if (
@@ -1217,14 +1226,8 @@ def view_filterer(transform):
12171226
colorspace["transforms_data"] = [transform_data]
12181227
data.colorspaces.append(colorspace)
12191228

1220-
# Reordering the "Raw" colorspace for aesthetics.
1221-
data.colorspaces.extend(
1222-
data.colorspaces.pop(i)
1223-
for i, a in enumerate(data.colorspaces[:])
1224-
if a["name"] == "Raw"
1225-
)
1226-
12271229
# Inactive Colorspaces Filtering
1230+
# ==============================
12281231
colorspace_named_transform_names = [a["name"] for a in data.colorspaces]
12291232
inactive_colorspaces = []
12301233
for colorspace in data.inactive_colorspaces:
@@ -1243,6 +1246,7 @@ def view_filterer(transform):
12431246
]
12441247

12451248
# Roles Filtering & Update
1249+
# ========================
12461250
for role in (
12471251
# A config contains multiple possible "Rendering" color spaces.
12481252
ocio.ROLE_RENDERING,
@@ -1269,6 +1273,25 @@ def view_filterer(transform):
12691273
}
12701274
)
12711275

1276+
# Ordering
1277+
# ========
1278+
def ordering(element):
1279+
"""Return the ordering key for given element."""
1280+
1281+
return int(
1282+
next(iter(element.get("transforms_data", [{"ordering": 0}])))["ordering"]
1283+
)
1284+
1285+
data.colorspaces = sorted(data.colorspaces, key=lambda x: ordering(x))
1286+
data.colorspaces.extend(
1287+
data.colorspaces.pop(i)
1288+
for i, a in enumerate(data.colorspaces[:])
1289+
if a["name"] == "Raw"
1290+
)
1291+
data.named_transforms = sorted(data.named_transforms, key=lambda x: ordering(x))
1292+
data.view_transforms = sorted(data.view_transforms, key=lambda x: ordering(x))
1293+
data.looks = sorted(data.looks, key=lambda x: ordering(x))
1294+
12721295
data.profile_version = build_configuration.ocio
12731296

12741297
config = generate_config(data, config_name, validate)

opencolorio_config_aces/config/cg/generate/resources/OpenColorIO-Config-ACES CG and Studio Transforms - v3 - CG Config - Mapping.csv

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@ Ordering,Colorspace,Legacy,ACEStransformID,CLFtransformID,Interface,BuiltinTrans
33
100,ACEScct,TRUE,urn:ampas:aces:transformId:v2.0:CSC.Academy.ACEScct_to_ACES.a2.v1,,ColorSpace,ACEScct_to_ACES2065-1,"acescct,acescct_ap1,ACES - ACEScct",log,"file-io,working-space"
44
100,ACEScg,TRUE,urn:ampas:aces:transformId:v2.0:CSC.Academy.ACEScg_to_ACES.a2.v1,,ColorSpace,ACEScg_to_ACES2065-1,"acescg,lin_ap1,lin_ap1_scene,ACES - ACEScg",scene-linear,"file-io,working-space,texture"
55
300,ACES 1.3 Reference Gamut Compression,FALSE,urn:ampas:aces:transformId:v2.0:Look.Academy.ReferenceGamutCompress.a2.v1,,Look,,,scene-linear,
6-
400,P3-D65_48nit_in_P3-D65_Gamma2pt6,FALSE,urn:ampas:aces:transformId:v2.0:Output.Academy.P3-D65_48nit_in_P3-D65_Gamma2pt6.a2.v1,,ViewTransform,ACES-OUTPUT - ACES2065-1_to_CIE-XYZ-D65 - SDR-100nit-P3-D65_2.0,,sdr-video,file-io
7-
415,Rec709-D65_100nit_in_Rec709-D65_sRGB-Piecewise,FALSE,urn:ampas:aces:transformId:v2.0:Output.Academy.Rec709-D65_100nit_in_Rec709-D65_sRGB-Piecewise.a2.v1,,ViewTransform,ACES-OUTPUT - ACES2065-1_to_CIE-XYZ-D65 - SDR-100nit-REC709_2.0,,sdr-video,file-io
8-
420,P3-D65_1000nit_in_Rec2100-D65_ST2084,FALSE,urn:ampas:aces:transformId:v2.0:Output.Academy.P3-D65_1000nit_in_Rec2100-D65_ST2084.a2.v1,,ViewTransform,ACES-OUTPUT - ACES2065-1_to_CIE-XYZ-D65 - HDR-1000nit-P3-D65_2.0,,hdr-video,file-io
9-
420,Rec2100-D65_1000nit_in_Rec2100-D65_ST2084,FALSE,urn:ampas:aces:transformId:v2.0:Output.Academy.Rec2100-D65_1000nit_in_Rec2100-D65_ST2084.a2.v1,,ViewTransform,ACES-OUTPUT - ACES2065-1_to_CIE-XYZ-D65 - HDR-1000nit-REC2020_2.0,,hdr-video,file-io
10-
425,P3-D65_1000nit_in_P3-D65_sRGB-Piecewise,FALSE,urn:ampas:aces:transformId:v2.0:Output.Academy.P3-D65_1000nit_in_P3-D65_sRGB-Piecewise.a2.v1,,ViewTransform,ACES-OUTPUT - ACES2065-1_to_CIE-XYZ-D65 - HDR-1000nit-P3-D65_2.0,,hdr-video,file-io
11-
425,P3-D65_100nit_in_P3-D65_sRGB-Piecewise,FALSE,urn:ampas:aces:transformId:v2.0:Output.Academy.P3-D65_100nit_in_P3-D65_sRGB-Piecewise.a2.v1,,ViewTransform,ACES-OUTPUT - ACES2065-1_to_CIE-XYZ-D65 - SDR-100nit-P3-D65_2.0,,sdr-video,file-io
6+
400,Rec709-D65_100nit_in_Rec709-D65_sRGB-Piecewise,FALSE,urn:ampas:aces:transformId:v2.0:Output.Academy.Rec709-D65_100nit_in_Rec709-D65_sRGB-Piecewise.a2.v1,,ViewTransform,ACES-OUTPUT - ACES2065-1_to_CIE-XYZ-D65 - SDR-100nit-REC709_2.0,,sdr-video,file-io
7+
410,P3-D65_100nit_in_P3-D65_sRGB-Piecewise,FALSE,urn:ampas:aces:transformId:v2.0:Output.Academy.P3-D65_100nit_in_P3-D65_sRGB-Piecewise.a2.v1,,ViewTransform,ACES-OUTPUT - ACES2065-1_to_CIE-XYZ-D65 - SDR-100nit-P3-D65_2.0,,sdr-video,file-io
8+
412,P3-D65_1000nit_in_P3-D65_sRGB-Piecewise,FALSE,urn:ampas:aces:transformId:v2.0:Output.Academy.P3-D65_1000nit_in_P3-D65_sRGB-Piecewise.a2.v1,,ViewTransform,ACES-OUTPUT - ACES2065-1_to_CIE-XYZ-D65 - HDR-1000nit-P3-D65_2.0,,hdr-video,file-io
9+
420,P3-D65_48nit_in_P3-D65_Gamma2pt6,FALSE,urn:ampas:aces:transformId:v2.0:Output.Academy.P3-D65_48nit_in_P3-D65_Gamma2pt6.a2.v1,,ViewTransform,ACES-OUTPUT - ACES2065-1_to_CIE-XYZ-D65 - SDR-100nit-P3-D65_2.0,,sdr-video,file-io
1210
430,Rec709-D65_100nit_in_Rec709-D65_BT1886,FALSE,urn:ampas:aces:transformId:v2.0:Output.Academy.Rec709-D65_100nit_in_Rec709-D65_BT1886.a2.v1,,ViewTransform,ACES-OUTPUT - ACES2065-1_to_CIE-XYZ-D65 - SDR-100nit-REC709_2.0,,sdr-video,file-io
1311
440,sRGB - Curve,TRUE,,urn:aswf:ocio:transformId:1.0:OCIO:Utility:Linear_to_sRGB-Curve:1.0,NamedTransform,,"crv_srgb,Utility - Curve - sRGB",sdr-video,file-io
12+
441,P3-D65_1000nit_in_Rec2100-D65_ST2084,FALSE,urn:ampas:aces:transformId:v2.0:Output.Academy.P3-D65_1000nit_in_Rec2100-D65_ST2084.a2.v1,,ViewTransform,ACES-OUTPUT - ACES2065-1_to_CIE-XYZ-D65 - HDR-1000nit-P3-D65_2.0,,hdr-video,file-io
1413
441,Rec.1886 - Curve,TRUE,,urn:aswf:ocio:transformId:1.0:OCIO:Utility:Linear_to_Rec1886-Curve:1.0,NamedTransform,,"crv_rec1886,Utility - Curve - Rec.1886",sdr-video,file-io
14+
451,Rec2100-D65_1000nit_in_Rec2100-D65_ST2084,FALSE,urn:ampas:aces:transformId:v2.0:Output.Academy.Rec2100-D65_1000nit_in_Rec2100-D65_ST2084.a2.v1,,ViewTransform,ACES-OUTPUT - ACES2065-1_to_CIE-XYZ-D65 - HDR-1000nit-REC2020_2.0,,hdr-video,file-io
1515
500,sRGB Encoded Rec.709 (sRGB),TRUE,,urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_sRGB-Encoded-Rec709:1.0,ColorSpace,,"srgb_texture,srgb_rec709_scene,Utility - sRGB - Texture,Input - Generic - sRGB - Texture,sRGB - Texture,srgb_tx",sdr-video,"file-io,texture"
1616
501,Gamma 1.8 Encoded Rec.709,TRUE,,urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_Gamma1.8_Encoded_Rec709:1.0,ColorSpace,,"g18_rec709,Utility - Gamma 1.8 - Rec.709 - Texture,Gamma 1.8 Rec.709 - Texture,g18_rec709_tx,g18_rec709_scene",sdr-video,"file-io,texture"
1717
502,Gamma 2.2 Encoded Rec.709,TRUE,,urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_Gamma2.2_Encoded_Rec709:1.0,ColorSpace,,"g22_rec709,Utility - Gamma 2.2 - Rec.709 - Texture,Gamma 2.2 Rec.709 - Texture,g22_rec709_tx,g22_rec709_scene",sdr-video,"file-io,texture"

opencolorio_config_aces/config/reference/generate/config.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1253,6 +1253,18 @@ def generate_config_aces(
12531253
if colorspace not in colorspaces:
12541254
colorspaces.append(colorspace)
12551255

1256+
# Ordering displays, "sRGB" first and then shared views.
1257+
display_names = sorted(display_names)
1258+
for i, display_name in enumerate(display_names[:]):
1259+
if display_name.startswith("sRGB"):
1260+
display_names.insert(0, display_names.pop(i))
1261+
1262+
shared_views, unordered_shared_views = [], shared_views
1263+
for display_name in display_names:
1264+
for shared_view in unordered_shared_views:
1265+
if shared_view["display"] == display_name:
1266+
shared_views.append(shared_view)
1267+
12561268
untonemapped_view_transform = {
12571269
"name": "Un-tone-mapped",
12581270
"from_reference": {
@@ -1271,16 +1283,17 @@ def generate_config_aces(
12711283
untonemapped_shared_view["view"],
12721284
display_name,
12731285
)
1286+
12741287
if untonemapped_shared_view not in shared_views:
12751288
shared_views.append(untonemapped_shared_view)
12761289

1277-
for display_name in display_names:
12781290
raw_view = {
12791291
"display": display_name,
12801292
"view": "Raw",
12811293
"colorspace": raw_colorspace["name"],
12821294
}
12831295
LOGGER.info('Adding "%s" view to "%s" display.', raw_view["view"], display_name)
1296+
12841297
if raw_view not in views:
12851298
views.append(raw_view)
12861299

0 commit comments

Comments
 (0)