From bdab538b3019406cfbd53d99bc40c4dbae27393c Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Mon, 23 May 2022 20:54:09 +0200 Subject: Fix Eevee blackbody wrong with non-default scene linear color space * Port over new code tables from Cycles * Convert Rec.709 to scene linear for lookup table. * Move code for wavelength and blackbody to IMB so they can access the required transforms, which are not in blenlib. * Remove clamping from blackbody shader to bypass the texture read. Since it's variable now easiest to just always read from the texture than pass additional parameters. * Fold XYZ to RGB conversion into the wavelength table. Ref T68926 --- .../blender/nodes/shader/nodes/node_shader_blackbody.cc | 4 +++- .../nodes/shader/nodes/node_shader_volume_principled.cc | 4 +++- .../nodes/shader/nodes/node_shader_wavelength.cc | 17 ++++------------- 3 files changed, 10 insertions(+), 15 deletions(-) (limited to 'source/blender/nodes') diff --git a/source/blender/nodes/shader/nodes/node_shader_blackbody.cc b/source/blender/nodes/shader/nodes/node_shader_blackbody.cc index 62e631efb57..9f382e5a3bb 100644 --- a/source/blender/nodes/shader/nodes/node_shader_blackbody.cc +++ b/source/blender/nodes/shader/nodes/node_shader_blackbody.cc @@ -3,6 +3,8 @@ #include "node_shader_util.hh" +#include "IMB_colormanagement.h" + namespace blender::nodes::node_shader_blackbody_cc { static void node_declare(NodeDeclarationBuilder &b) @@ -20,7 +22,7 @@ static int node_shader_gpu_blackbody(GPUMaterial *mat, const int size = CM_TABLE + 1; float *data = static_cast(MEM_mallocN(sizeof(float) * size * 4, "blackbody texture")); - blackbody_temperature_to_rgb_table(data, size, 965.0f, 12000.0f); + IMB_colormanagement_blackbody_temperature_to_rgb_table(data, size, 800.0f, 12000.0f); float layer; GPUNodeLink *ramp_texture = GPU_color_band(mat, size, data, &layer); diff --git a/source/blender/nodes/shader/nodes/node_shader_volume_principled.cc b/source/blender/nodes/shader/nodes/node_shader_volume_principled.cc index 07e700e550a..4c4122a905f 100644 --- a/source/blender/nodes/shader/nodes/node_shader_volume_principled.cc +++ b/source/blender/nodes/shader/nodes/node_shader_volume_principled.cc @@ -3,6 +3,8 @@ #include "node_shader_util.hh" +#include "IMB_colormanagement.h" + namespace blender::nodes::node_shader_volume_principled_cc { static void node_declare(NodeDeclarationBuilder &b) @@ -109,7 +111,7 @@ static int node_shader_gpu_volume_principled(GPUMaterial *mat, float *data, layer; if (use_blackbody) { data = (float *)MEM_mallocN(sizeof(float) * size * 4, "blackbody texture"); - blackbody_temperature_to_rgb_table(data, size, 965.0f, 12000.0f); + IMB_colormanagement_blackbody_temperature_to_rgb_table(data, size, 800.0f, 12000.0f); } else { data = (float *)MEM_callocN(sizeof(float) * size * 4, "blackbody black"); diff --git a/source/blender/nodes/shader/nodes/node_shader_wavelength.cc b/source/blender/nodes/shader/nodes/node_shader_wavelength.cc index 522928a30fa..34fa639dd07 100644 --- a/source/blender/nodes/shader/nodes/node_shader_wavelength.cc +++ b/source/blender/nodes/shader/nodes/node_shader_wavelength.cc @@ -3,6 +3,8 @@ #include "node_shader_util.hh" +#include "IMB_colormanagement.h" + namespace blender::nodes::node_shader_wavelength_cc { static void node_declare(NodeDeclarationBuilder &b) @@ -20,22 +22,11 @@ static int node_shader_gpu_wavelength(GPUMaterial *mat, const int size = CM_TABLE + 1; float *data = static_cast(MEM_mallocN(sizeof(float) * size * 4, "cie_xyz texture")); - wavelength_to_xyz_table(data, size); + IMB_colormanagement_wavelength_to_rgb_table(data, size); float layer; GPUNodeLink *ramp_texture = GPU_color_band(mat, size, data, &layer); - XYZ_to_RGB xyz_to_rgb; - get_XYZ_to_RGB_for_gpu(&xyz_to_rgb); - return GPU_stack_link(mat, - node, - "node_wavelength", - in, - out, - ramp_texture, - GPU_constant(&layer), - GPU_uniform(xyz_to_rgb.r), - GPU_uniform(xyz_to_rgb.g), - GPU_uniform(xyz_to_rgb.b)); + return GPU_stack_link(mat, node, "node_wavelength", in, out, ramp_texture, GPU_constant(&layer)); } } // namespace blender::nodes::node_shader_wavelength_cc -- cgit v1.2.3