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=67f8f251eec6312a8bcead477a0dda63e5696506;hp=b87eb4abe0ed7bf5ec01e56dd1f62e511c1c176d;hpb=2158c15470d514412974585e84210cbc2c909011;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 b87eb4a..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. @@ -50,37 +56,44 @@ def create_RED_log_film(gamut, 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) 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) + genlut.write_SPI_1d( + os.path.join(lut_directory, lut), + 0, + 1, + data, + lut_resolution_1d, + 1) cs.to_reference_transforms.append({ 'type': 'lutFile', @@ -102,6 +115,13 @@ def create_RED_log_film(gamut, 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', @@ -151,7 +171,8 @@ def create_colorspaces(lut_directory, lut_resolution_1d): '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( @@ -159,15 +180,26 @@ def create_colorspaces(lut_directory, lut_resolution_1d): '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', lut_directory, - lut_resolution_1d) + lut_resolution_1d, + ["rlf_rc2"]) colorspaces.append(RED_log_film_color2) RED_log_film_color3 = create_RED_log_film( @@ -175,7 +207,8 @@ def create_colorspaces(lut_directory, lut_resolution_1d): '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( @@ -183,57 +216,73 @@ def create_colorspaces(lut_directory, lut_resolution_1d): '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( + 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( + RED_dragon = create_RED_log_film( 'DRAGONcolor', '', 'REDlogFilm', lut_directory, - lut_resolution_1d) - colorspaces.append(RED_log_film_dragon) + lut_resolution_1d, + ["lin_dgn"]) + colorspaces.append(RED_dragon) - RED_log_film_dragon2 = create_RED_log_film( + RED_dragon2 = create_RED_log_film( 'DRAGONcolor2', '', 'REDlogFilm', lut_directory, - lut_resolution_1d) - colorspaces.append(RED_log_film_dragon2) + lut_resolution_1d, + ["lin_dgn2"]) + colorspaces.append(RED_dragon2) - RED_log_film_color2 = create_RED_log_film( + RED_color = create_RED_log_film( + 'REDcolor', + '', + 'REDlogFilm', + lut_directory, + 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_color2) + lut_resolution_1d, + ["lin_rc2"]) + colorspaces.append(RED_color2) - RED_log_film_color3 = create_RED_log_film( + RED_color3 = create_RED_log_film( 'REDcolor3', '', 'REDlogFilm', lut_directory, - lut_resolution_1d) - colorspaces.append(RED_log_film_color3) + lut_resolution_1d, + ["lin_rc3"]) + colorspaces.append(RED_color3) - RED_log_film_color4 = create_RED_log_film( + RED_color4 = create_RED_log_film( 'REDcolor4', '', 'REDlogFilm', lut_directory, - lut_resolution_1d) - colorspaces.append(RED_log_film_color4) + lut_resolution_1d, + ["lin_rc4"]) + colorspaces.append(RED_color4) return colorspaces