diff options
author | Brecht Van Lommel <brecht@blender.org> | 2022-05-23 21:54:09 +0300 |
---|---|---|
committer | Brecht Van Lommel <brecht@blender.org> | 2022-05-23 23:09:44 +0300 |
commit | bdab538b3019406cfbd53d99bc40c4dbae27393c (patch) | |
tree | b99f06195bdbd647c275e15f72095c8c4af28eae /source/blender/nodes | |
parent | a22ad7fbd391acc65b99336eae0df5c2a49553d9 (diff) |
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
Diffstat (limited to 'source/blender/nodes')
3 files changed, 10 insertions, 15 deletions
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<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); 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<float *>(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 |