diff --git a/source/blender/compositor/shaders/library/gpu_shader_compositor_distance_matte.glsl b/source/blender/compositor/shaders/library/gpu_shader_compositor_distance_matte.glsl index 25933a829fe..3e99ab6a5a9 100644 --- a/source/blender/compositor/shaders/library/gpu_shader_compositor_distance_matte.glsl +++ b/source/blender/compositor/shaders/library/gpu_shader_compositor_distance_matte.glsl @@ -3,6 +3,7 @@ * SPDX-License-Identifier: GPL-2.0-or-later */ #include "gpu_shader_common_color_utils.glsl" +#include "gpu_shader_math_safe_lib.glsl" #define CMP_NODE_DISTANCE_MATTE_COLOR_SPACE_RGBA 0 #define CMP_NODE_DISTANCE_MATTE_COLOR_SPACE_YCCA 1 @@ -30,7 +31,7 @@ void node_composite_distance_matte(const float4 color, float difference = distance(color_vector.xyz(), key_vector.xyz()); bool is_opaque = difference > tolerance + falloff; - float alpha = is_opaque ? color.w : max(0.0f, difference - tolerance) / falloff; + float alpha = is_opaque ? color.w : safe_divide(max(0.0f, difference - tolerance), falloff); matte = min(alpha, color.w); result = color * matte; } diff --git a/source/blender/nodes/composite/nodes/node_composite_distance_matte.cc b/source/blender/nodes/composite/nodes/node_composite_distance_matte.cc index 35a133a44c7..f5f878496ee 100644 --- a/source/blender/nodes/composite/nodes/node_composite_distance_matte.cc +++ b/source/blender/nodes/composite/nodes/node_composite_distance_matte.cc @@ -105,7 +105,8 @@ static void distance_key(const float4 color, float difference = math::distance(color_vector.xyz(), key_vector.xyz()); bool is_opaque = difference > tolerance + falloff; - float alpha = is_opaque ? color.w : math::max(0.0f, difference - tolerance) / falloff; + float alpha = is_opaque ? color.w : + math::safe_divide(math::max(0.0f, difference - tolerance), falloff); matte = math::min(alpha, color.w); result = color * matte; }