From 377d272f72cdf0e7a7e1eb65f229368b38afa4bb Mon Sep 17 00:00:00 2001 From: Omar Emara Date: Mon, 2 Dec 2024 13:45:35 +0200 Subject: [PATCH] Fix: Zero division in Tone Map Photoreceptor node --- .../shaders/compositor_tone_map_photoreceptor.glsl | 3 ++- source/blender/nodes/composite/nodes/node_composite_tonemap.cc | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/source/blender/compositor/realtime_compositor/shaders/compositor_tone_map_photoreceptor.glsl b/source/blender/compositor/realtime_compositor/shaders/compositor_tone_map_photoreceptor.glsl index bcc90c4f2c8..9ede8e4a664 100644 --- a/source/blender/compositor/realtime_compositor/shaders/compositor_tone_map_photoreceptor.glsl +++ b/source/blender/compositor/realtime_compositor/shaders/compositor_tone_map_photoreceptor.glsl @@ -7,6 +7,7 @@ * physiology." IEEE transactions on visualization and computer graphics 11.1 (2005): 13-24. */ #include "gpu_shader_compositor_texture_utilities.glsl" +#include "gpu_shader_math_vector_lib.glsl" void main() { @@ -21,7 +22,7 @@ void main() /* Equation (1) from Reinhard's 2005 paper, assuming Vmax is 1. */ vec4 semi_saturation = pow(intensity * adaptation_level, vec4(contrast)); - vec4 tone_mapped_color = input_color / (input_color + semi_saturation); + vec4 tone_mapped_color = safe_divide(input_color, input_color + semi_saturation); imageStore(output_img, texel, vec4(tone_mapped_color.rgb, input_color.a)); } diff --git a/source/blender/nodes/composite/nodes/node_composite_tonemap.cc b/source/blender/nodes/composite/nodes/node_composite_tonemap.cc index f188c0b21bf..6e84859db4a 100644 --- a/source/blender/nodes/composite/nodes/node_composite_tonemap.cc +++ b/source/blender/nodes/composite/nodes/node_composite_tonemap.cc @@ -284,7 +284,7 @@ class ToneMapOperation : public NodeOperation { /* Equation (1) from Reinhard's 2005 paper, assuming `Vmax` is 1. */ float4 semi_saturation = math::pow(intensity * adaptation_level, contrast); - float4 tone_mapped_color = input_color / (input_color + semi_saturation); + float4 tone_mapped_color = math::safe_divide(input_color, input_color + semi_saturation); output.store_pixel(texel, float4(tone_mapped_color.xyz(), input_color.w)); });