X-Git-Url: http://users.mur.at/ms/git/gitweb/?a=blobdiff_plain;f=aces_1.0.0%2Fpython%2Faces_ocio%2Fcreate_red_colorspaces.py;h=49c547b28e5c3a5e1ee6b38cc572ebeeced50f38;hb=e01006569dceecf813d49a22d3ea6ec7b486b2c0;hp=4c091518a7471adf3fae4bcb51feb6bb5f163226;hpb=6eac5f132b3888eee16a8306d91b9405346f3ac2;p=OpenColorIO-Configs.git diff --git a/aces_1.0.0/python/aces_ocio/create_red_colorspaces.py b/aces_1.0.0/python/aces_ocio/create_red_colorspaces.py index 4c09151..49c547b 100644 --- a/aces_1.0.0/python/aces_ocio/create_red_colorspaces.py +++ b/aces_1.0.0/python/aces_ocio/create_red_colorspaces.py @@ -5,7 +5,12 @@ Implements support for *RED* 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_RED_log_film(gamut, transfer_function, name, lut_directory, - lut_resolution_1d): + lut_resolution_1d, + aliases=[]): """ Object description. @@ -42,45 +48,52 @@ def create_RED_log_film(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 = 'RED' + cs.family = 'Input/RED' 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 cineon_to_linear(code_value): n_gamma = 0.6 - black_point = 95.0 - white_point = 685.0 + black_point = 95 + white_point = 685 code_value_to_density = 0.002 - black_linear = pow(10.0, (black_point - white_point) * ( + black_linear = pow(10, (black_point - white_point) * ( code_value_to_density / n_gamma)) - code_linear = pow(10.0, (code_value - white_point) * ( + code_linear = pow(10, (code_value - white_point) * ( code_value_to_density / n_gamma)) - return (code_linear - black_linear) / (1.0 - black_linear) + return (code_linear - black_linear) / (1 - black_linear) cs.to_reference_transforms = [] if transfer_function == 'REDlogFilm': - data = array.array('f', "\0" * lut_resolution_1d * 4) + data = array.array('f', '\0' * lut_resolution_1d * 4) for c in range(lut_resolution_1d): - data[c] = cineon_to_linear(1023.0 * c / (lut_resolution_1d - 1)) + data[c] = cineon_to_linear(1023 * c / (lut_resolution_1d - 1)) - lut = "CineonLog_to_linear.spi1d" - genlut.write_SPI_1d(lut_directory + "/" + lut, - 0.0, - 1.0, - data, - lut_resolution_1d, - 1) + lut = 'CineonLog_to_linear.spi1d' + genlut.write_SPI_1d( + os.path.join(lut_directory, lut), + 0, + 1, + data, + lut_resolution_1d, + 1) cs.to_reference_transforms.append({ 'type': 'lutFile', @@ -92,36 +105,43 @@ def create_RED_log_film(gamut, cs.to_reference_transforms.append({ 'type': 'matrix', 'matrix': mat44_from_mat33([0.532279, 0.376648, 0.091073, - 0.046344, 0.974513, -0.020860, - -0.053976, -0.000320, 1.054267]), + 0.046344, 0.974513, -0.020860, + -0.053976, -0.000320, 1.054267]), 'direction': 'forward'}) elif gamut == 'DRAGONcolor2': cs.to_reference_transforms.append({ 'type': 'matrix', 'matrix': mat44_from_mat33([0.468452, 0.331484, 0.200064, - 0.040787, 0.857658, 0.101553, - -0.047504, -0.000282, 1.047756]), + 0.040787, 0.857658, 0.101553, + -0.047504, -0.000282, 1.047756]), + 'direction': 'forward'}) + elif gamut == 'REDcolor': + cs.to_reference_transforms.append({ + 'type': 'matrix', + 'matrix': mat44_from_mat33([0.451464, 0.388498, 0.160038, + 0.062716, 0.866790, 0.070491, + -0.017541, 0.086921, 0.930590]), 'direction': 'forward'}) elif gamut == 'REDcolor2': cs.to_reference_transforms.append({ 'type': 'matrix', 'matrix': mat44_from_mat33([0.480997, 0.402289, 0.116714, - -0.004938, 1.000154, 0.004781, - -0.105257, 0.025320, 1.079907]), + -0.004938, 1.000154, 0.004781, + -0.105257, 0.025320, 1.079907]), 'direction': 'forward'}) elif gamut == 'REDcolor3': cs.to_reference_transforms.append({ 'type': 'matrix', 'matrix': mat44_from_mat33([0.512136, 0.360370, 0.127494, - 0.070377, 0.903884, 0.025737, - -0.020824, 0.017671, 1.003123]), + 0.070377, 0.903884, 0.025737, + -0.020824, 0.017671, 1.003123]), 'direction': 'forward'}) elif gamut == 'REDcolor4': cs.to_reference_transforms.append({ 'type': 'matrix', 'matrix': mat44_from_mat33([0.474202, 0.333677, 0.192121, - 0.065164, 0.836932, 0.097901, - -0.019281, 0.016362, 1.002889]), + 0.065164, 0.836932, 0.097901, + -0.019281, 0.016362, 1.002889]), 'direction': 'forward'}) cs.from_reference_transforms = [] @@ -147,93 +167,122 @@ def create_colorspaces(lut_directory, lut_resolution_1d): # Full conversion RED_log_film_dragon = create_RED_log_film( - "DRAGONcolor", - "REDlogFilm", - "REDlogFilm", + 'DRAGONcolor', + 'REDlogFilm', + 'REDlogFilm', lut_directory, - lut_resolution_1d) + lut_resolution_1d, + ["rlf_dgn"]) colorspaces.append(RED_log_film_dragon) RED_log_film_dragon2 = create_RED_log_film( - "DRAGONcolor2", - "REDlogFilm", - "REDlogFilm", + 'DRAGONcolor2', + 'REDlogFilm', + 'REDlogFilm', lut_directory, - lut_resolution_1d) + lut_resolution_1d, + ["rlf_dgn2"]) colorspaces.append(RED_log_film_dragon2) + RED_log_film_color = create_RED_log_film( + 'REDcolor', + 'REDlogFilm', + 'REDlogFilm', + lut_directory, + lut_resolution_1d, + ["rlf_rc"]) + colorspaces.append(RED_log_film_color) + RED_log_film_color2 = create_RED_log_film( - "REDcolor2", - "REDlogFilm", - "REDlogFilm", + 'REDcolor2', + 'REDlogFilm', + 'REDlogFilm', lut_directory, - lut_resolution_1d) + lut_resolution_1d, + ["rlf_rc2"]) colorspaces.append(RED_log_film_color2) RED_log_film_color3 = create_RED_log_film( - "REDcolor3", - "REDlogFilm", - "REDlogFilm", + 'REDcolor3', + 'REDlogFilm', + 'REDlogFilm', lut_directory, - lut_resolution_1d) + lut_resolution_1d, + ["rlf_rc3"]) colorspaces.append(RED_log_film_color3) RED_log_film_color4 = create_RED_log_film( - "REDcolor4", - "REDlogFilm", - "REDlogFilm", + 'REDcolor4', + 'REDlogFilm', + 'REDlogFilm', lut_directory, - lut_resolution_1d) + lut_resolution_1d, + ["rlf_rc4"]) colorspaces.append(RED_log_film_color4) # Linearization only - RED_log_film_dragon = create_RED_log_film( - "", - "REDlogFilm", - "REDlogFilm", + RED_log_film = create_RED_log_film( + '', + 'REDlogFilm', + 'REDlogFilm', lut_directory, - lut_resolution_1d) - colorspaces.append(RED_log_film_dragon) + lut_resolution_1d, + ["crv_rlf"]) + colorspaces.append(RED_log_film) # Primaries only - RED_log_film_dragon = create_RED_log_film( - "DRAGONcolor", - "", - "REDlogFilm", + RED_dragon = create_RED_log_film( + 'DRAGONcolor', + '', + 'REDlogFilm', lut_directory, - lut_resolution_1d) - colorspaces.append(RED_log_film_dragon) - - RED_log_film_dragon2 = create_RED_log_film( - "DRAGONcolor2", - "", - "REDlogFilm", + lut_resolution_1d, + ["lin_dgn"]) + colorspaces.append(RED_dragon) + + RED_dragon2 = create_RED_log_film( + 'DRAGONcolor2', + '', + 'REDlogFilm', lut_directory, - lut_resolution_1d) - colorspaces.append(RED_log_film_dragon2) - - RED_log_film_color2 = create_RED_log_film( - "REDcolor2", - "", - "REDlogFilm", + lut_resolution_1d, + ["lin_dgn2"]) + colorspaces.append(RED_dragon2) + + RED_color = create_RED_log_film( + 'REDcolor', + '', + 'REDlogFilm', lut_directory, - lut_resolution_1d) - colorspaces.append(RED_log_film_color2) - - RED_log_film_color3 = create_RED_log_film( - "REDcolor3", - "", - "REDlogFilm", + lut_resolution_1d, + ["lin_rc"]) + colorspaces.append(RED_color) + + RED_color2 = create_RED_log_film( + 'REDcolor2', + '', + 'REDlogFilm', lut_directory, - lut_resolution_1d) - colorspaces.append(RED_log_film_color3) - - RED_log_film_color4 = create_RED_log_film( - "REDcolor4", - "", - "REDlogFilm", + lut_resolution_1d, + ["lin_rc2"]) + colorspaces.append(RED_color2) + + RED_color3 = create_RED_log_film( + 'REDcolor3', + '', + 'REDlogFilm', lut_directory, - lut_resolution_1d) - colorspaces.append(RED_log_film_color4) + lut_resolution_1d, + ["lin_rc3"]) + colorspaces.append(RED_color3) + + RED_color4 = create_RED_log_film( + 'REDcolor4', + '', + 'REDlogFilm', + lut_directory, + lut_resolution_1d, + ["lin_rc4"]) + colorspaces.append(RED_color4) return colorspaces