From a062798b76ae5134cd2c7e10b8c2632d335ea299 Mon Sep 17 00:00:00 2001 From: clayjohn Date: Mon, 12 Dec 2022 13:25:40 -0800 Subject: Ensure that rim lighting uses a exponent base greater than zero This avoids the undefined behavior that happens if the base is zero and the exponent is zero --- servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl index ba31b9c6dd..b30b0c8169 100644 --- a/servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl +++ b/servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl @@ -134,7 +134,8 @@ void light_compute(vec3 N, vec3 L, vec3 V, float A, vec3 light_color, float atte #endif #if defined(LIGHT_RIM_USED) - float rim_light = pow(max(0.0, 1.0 - cNdotV), max(0.0, (1.0 - roughness) * 16.0)); + // Epsilon min to prevent pow(0, 0) singularity which results in undefined behavior. + float rim_light = pow(max(1e-4, 1.0 - cNdotV), max(0.0, (1.0 - roughness) * 16.0)); diffuse_light += rim_light * rim * mix(vec3(1.0), albedo, rim_tint) * light_color; #endif -- cgit v1.2.3