X-Git-Url: http://users.mur.at/ms/git/gitweb/?a=blobdiff_plain;f=aces_1.0.0%2Fpython%2Faces_ocio%2Fcreate_sony_colorspaces.py;h=ac6738214d66cc30f7a139812ce094c5e83ca396;hb=e01006569dceecf813d49a22d3ea6ec7b486b2c0;hp=3867e87232c5c066272f59ea23509a997ad6e081;hpb=516185e8542092bcd40d2db16758c5c84a13e7c8;p=OpenColorIO-Configs.git diff --git a/aces_1.0.0/python/aces_ocio/create_sony_colorspaces.py b/aces_1.0.0/python/aces_ocio/create_sony_colorspaces.py index 3867e87..ac67382 100644 --- a/aces_1.0.0/python/aces_ocio/create_sony_colorspaces.py +++ b/aces_1.0.0/python/aces_ocio/create_sony_colorspaces.py @@ -5,7 +5,12 @@ Implements support for *Sony* colorspaces conversions and transfer functions. """ +from __future__ import division + import array +import os + +import PyOpenColorIO as ocio import aces_ocio.generate_lut as genlut from aces_ocio.utilities import ColorSpace, mat44_from_mat33 @@ -25,7 +30,8 @@ def create_s_log(gamut, transfer_function, name, lut_directory, - lut_resolution_1d): + lut_resolution_1d, + aliases): """ Object description. @@ -42,32 +48,37 @@ def create_s_log(gamut, Return value description. """ - name = "%s - %s" % (transfer_function, gamut) - if transfer_function == "": - name = "Linear - %s" % gamut - if gamut == "": - name = "%s" % transfer_function + name = '%s - %s' % (transfer_function, gamut) + if transfer_function == '': + name = 'Linear - %s' % gamut + if gamut == '': + name = '%s' % transfer_function cs = ColorSpace(name) cs.description = name + cs.aliases = aliases cs.equality_group = '' - cs.family = 'Sony' + cs.family = 'Input/Sony' cs.is_data = False + # A linear space needs allocation variables + if transfer_function == '': + cs.allocation_type = ocio.Constants.ALLOCATION_LG2 + cs.allocation_vars = [-8, 5, 0.00390625] + def s_log1_to_linear(s_log): b = 64. ab = 90. w = 940. - if (s_log >= ab): + if s_log >= ab: linear = ((pow(10., - ( ((s_log - b) / - (w - b) - 0.616596 - 0.03) / 0.432699)) - + (((s_log - b) / + (w - b) - 0.616596 - 0.03) / 0.432699)) - 0.037584) * 0.9) else: - linear = ( - ((s_log - b) / ( - w - b) - 0.030001222851889303) / 5.) * 0.9 + linear = (((s_log - b) / ( + w - b) - 0.030001222851889303) / 5.) * 0.9 return linear def s_log2_to_linear(s_log): @@ -75,7 +86,7 @@ def create_s_log(gamut, ab = 90. w = 940. - if (s_log >= ab): + if s_log >= ab: linear = ((219. * (pow(10., (((s_log - b) / (w - b) - 0.616596 - 0.03) / 0.432699)) - @@ -86,79 +97,73 @@ def create_s_log(gamut, return linear def s_log3_to_linear(code_value): - if code_value >= (171.2102946929): - linear = (pow(10.0, ((code_value - 420.0) / 261.5)) * + if code_value >= 171.2102946929: + linear = (pow(10, ((code_value - 420) / 261.5)) * (0.18 + 0.01) - 0.01) else: - linear = (code_value - 95.0) * 0.01125000 / (171.2102946929 - 95.0) - # print(codeValue, linear) + linear = (code_value - 95) * 0.01125000 / (171.2102946929 - 95) + return linear cs.to_reference_transforms = [] - if transfer_function == "S-Log1": - data = array.array('f', "\0" * lut_resolution_1d * 4) + if transfer_function == 'S-Log1': + data = array.array('f', '\0' * lut_resolution_1d * 4) for c in range(lut_resolution_1d): - data[c] = s_log1_to_linear(1023.0 * c / (lut_resolution_1d - 1)) - - lut = "%s_to_linear.spi1d" % transfer_function - genlut.write_SPI_1d(lut_directory + "/" + lut, - 0.0, - 1.0, - data, - lut_resolution_1d, - 1) + data[c] = s_log1_to_linear(1023 * c / (lut_resolution_1d - 1)) - # print("Writing %s" % lut) + lut = '%s_to_linear.spi1d' % transfer_function + genlut.write_SPI_1d( + os.path.join(lut_directory, lut), + 0, + 1, + data, + lut_resolution_1d, + 1) cs.to_reference_transforms.append({ 'type': 'lutFile', 'path': lut, 'interpolation': 'linear', - 'direction': 'forward' - }) - elif transfer_function == "S-Log2": - data = array.array('f', "\0" * lut_resolution_1d * 4) + 'direction': 'forward'}) + elif transfer_function == 'S-Log2': + data = array.array('f', '\0' * lut_resolution_1d * 4) for c in range(lut_resolution_1d): - data[c] = s_log2_to_linear(1023.0 * c / (lut_resolution_1d - 1)) - - lut = "%s_to_linear.spi1d" % transfer_function - genlut.write_SPI_1d(lut_directory + "/" + lut, - 0.0, - 1.0, - data, - lut_resolution_1d, - 1) + data[c] = s_log2_to_linear(1023 * c / (lut_resolution_1d - 1)) - # print("Writing %s" % lut) + lut = '%s_to_linear.spi1d' % transfer_function + genlut.write_SPI_1d( + os.path.join(lut_directory, lut), + 0, + 1, + data, + lut_resolution_1d, + 1) cs.to_reference_transforms.append({ 'type': 'lutFile', 'path': lut, 'interpolation': 'linear', - 'direction': 'forward' - }) - elif transfer_function == "S-Log3": - data = array.array('f', "\0" * lut_resolution_1d * 4) + 'direction': 'forward'}) + elif transfer_function == 'S-Log3': + data = array.array('f', '\0' * lut_resolution_1d * 4) for c in range(lut_resolution_1d): - data[c] = s_log3_to_linear(1023.0 * c / (lut_resolution_1d - 1)) + data[c] = s_log3_to_linear(1023 * c / (lut_resolution_1d - 1)) - lut = "%s_to_linear.spi1d" % transfer_function - genlut.write_SPI_1d(lut_directory + "/" + lut, - 0.0, - 1.0, - data, - lut_resolution_1d, - 1) - - # print("Writing %s" % lut) + lut = '%s_to_linear.spi1d' % transfer_function + genlut.write_SPI_1d( + os.path.join(lut_directory, lut), + 0, + 1, + data, + lut_resolution_1d, + 1) cs.to_reference_transforms.append({ 'type': 'lutFile', 'path': lut, 'interpolation': 'linear', - 'direction': 'forward' - }) + 'direction': 'forward'}) if gamut == 'S-Gamut': cs.to_reference_transforms.append({ @@ -222,121 +227,135 @@ def create_colorspaces(lut_directory, lut_resolution_1d): colorspaces = [] - # S-Log1 + # *S-Log1* s_log1_s_gamut = create_s_log( - "S-Gamut", - "S-Log1", - "S-Log", + 'S-Gamut', + 'S-Log1', + 'S-Log', lut_directory, - lut_resolution_1d) + lut_resolution_1d, + ["slog1_sgamut"]) colorspaces.append(s_log1_s_gamut) - # S-Log2 + # *S-Log2* s_log2_s_gamut = create_s_log( - "S-Gamut", - "S-Log2", - "S-Log2", + 'S-Gamut', + 'S-Log2', + 'S-Log2', lut_directory, - lut_resolution_1d) + lut_resolution_1d, + ["slog2_sgamut"]) colorspaces.append(s_log2_s_gamut) s_log2_s_gamut_daylight = create_s_log( - "S-Gamut Daylight", - "S-Log2", - "S-Log2", + 'S-Gamut Daylight', + 'S-Log2', + 'S-Log2', lut_directory, - lut_resolution_1d) + lut_resolution_1d, + ["slog2_sgamutday"]) colorspaces.append(s_log2_s_gamut_daylight) s_log2_s_gamut_tungsten = create_s_log( - "S-Gamut Tungsten", - "S-Log2", - "S-Log2", + 'S-Gamut Tungsten', + 'S-Log2', + 'S-Log2', lut_directory, - lut_resolution_1d) + lut_resolution_1d, + ["slog2_sgamuttung"]) colorspaces.append(s_log2_s_gamut_tungsten) - # S-Log3 + # *S-Log3* s_log3_s_gamut3Cine = create_s_log( - "S-Gamut3.Cine", - "S-Log3", - "S-Log3", + 'S-Gamut3.Cine', + 'S-Log3', + 'S-Log3', lut_directory, - lut_resolution_1d) + lut_resolution_1d, + ["slog3_sgamutcine"]) colorspaces.append(s_log3_s_gamut3Cine) s_log3_s_gamut3 = create_s_log( - "S-Gamut3", - "S-Log3", - "S-Log3", + 'S-Gamut3', + 'S-Log3', + 'S-Log3', lut_directory, - lut_resolution_1d) + lut_resolution_1d, + ["slog3_sgamut3"]) colorspaces.append(s_log3_s_gamut3) - # Linearization only + # Linearization Only s_log1 = create_s_log( - "", - "S-Log1", - "S-Log", + '', + 'S-Log1', + 'S-Log', lut_directory, - lut_resolution_1d) + lut_resolution_1d, + ["crv_slog1"]) colorspaces.append(s_log1) s_log2 = create_s_log( - "", - "S-Log2", - "S-Log2", + '', + 'S-Log2', + 'S-Log2', lut_directory, - lut_resolution_1d) + lut_resolution_1d, + ["crv_slog2"]) colorspaces.append(s_log2) s_log3 = create_s_log( - "", - "S-Log3", - "S-Log3", + '', + 'S-Log3', + 'S-Log3', lut_directory, - lut_resolution_1d) + lut_resolution_1d, + ["crv_slog3"]) colorspaces.append(s_log3) - # Primaries only + # Primaries Only s_gamut = create_s_log( - "S-Gamut", - "", - "S-Log", + 'S-Gamut', + '', + 'S-Log', lut_directory, - lut_resolution_1d) + lut_resolution_1d, + ["lin_sgamut"]) colorspaces.append(s_gamut) s_gamut_daylight = create_s_log( - "S-Gamut Daylight", - "", - "S-Log2", + 'S-Gamut Daylight', + '', + 'S-Log2', lut_directory, - lut_resolution_1d) + lut_resolution_1d, + ["lin_sgamutday"]) colorspaces.append(s_gamut_daylight) s_gamut_tungsten = create_s_log( - "S-Gamut Tungsten", - "", - "S-Log2", + 'S-Gamut Tungsten', + '', + 'S-Log2', lut_directory, - lut_resolution_1d) + lut_resolution_1d, + ["lin_sgamuttung"]) colorspaces.append(s_gamut_tungsten) s_gamut3Cine = create_s_log( - "S-Gamut3.Cine", - "", - "S-Log3", + 'S-Gamut3.Cine', + '', + 'S-Log3', lut_directory, - lut_resolution_1d) + lut_resolution_1d, + ["lin_sgamut3cine"]) colorspaces.append(s_gamut3Cine) s_gamut3 = create_s_log( - "S-Gamut3", - "", - "S-Log3", + 'S-Gamut3', + '', + 'S-Log3', lut_directory, - lut_resolution_1d) + lut_resolution_1d, + ["lin_sgamut3"]) colorspaces.append(s_gamut3) return colorspaces