diff options
author | Brecht Van Lommel <brecht@blender.org> | 2022-02-17 21:37:55 +0300 |
---|---|---|
committer | Brecht Van Lommel <brecht@blender.org> | 2022-02-17 21:51:43 +0300 |
commit | da6b534274d88de590ab978c596a5d8b10a70a69 (patch) | |
tree | 52d3220fc73f1591a8543722151b5445b9468fb4 /intern/cycles | |
parent | a04300c436d77bf47b94d033c1d832d86425945c (diff) |
Fix T95368: wrong white point adaptation for Linear ACES color space
This affected loading of EXR files with set to Linear ACES colorspace, as
well as the sky texture for in some custom OpenColorIO configurations.
Use the builtin OpenColorIO transform from ACES AP0 to XYZ D65 to fix this.
Diffstat (limited to 'intern/cycles')
-rw-r--r-- | intern/cycles/scene/shader.cpp | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/intern/cycles/scene/shader.cpp b/intern/cycles/scene/shader.cpp index 0b286aba9cf..e6c79c5faf9 100644 --- a/intern/cycles/scene/shader.cpp +++ b/intern/cycles/scene/shader.cpp @@ -830,28 +830,28 @@ void ShaderManager::init_xyz_transforms() Transform xyz_to_rgb; if (config->hasRole("aces_interchange")) { - /* Standard OpenColorIO role, defined as ACES2065-1. */ - const Transform xyz_E_to_aces = make_transform(1.0498110175f, - 0.0f, - -0.0000974845f, - 0.0f, - -0.4959030231f, - 1.3733130458f, - 0.0982400361f, - 0.0f, - 0.0f, - 0.0f, - 0.9912520182f, - 0.0f); - const Transform xyz_D65_to_E = make_transform( - 1.0521111f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.9184170f, 0.0f); - + /* Standard OpenColorIO role, defined as ACES AP0 (ACES2065-1). */ Transform aces_to_rgb; if (!to_scene_linear_transform(config, "aces_interchange", aces_to_rgb)) { return; } - xyz_to_rgb = aces_to_rgb * xyz_E_to_aces * xyz_D65_to_E; + /* This is the OpenColorIO builtin transform: + * UTILITY - ACES-AP0_to_CIE-XYZ-D65_BFD. */ + const Transform ACES_AP0_to_xyz_D65 = make_transform(0.938280, + -0.004451, + 0.016628, + 0.000000, + 0.337369, + 0.729522, + -0.066890, + 0.000000, + 0.001174, + -0.003711, + 1.091595, + 0.000000); + const Transform xyz_to_aces = transform_inverse(ACES_AP0_to_xyz_D65); + xyz_to_rgb = aces_to_rgb * xyz_to_aces; } else if (config->hasRole("XYZ")) { /* Custom role used before the standard existed. */ |