From ab603e347f057737fdc0bdf47e2437ad32924cad Mon Sep 17 00:00:00 2001 From: clayjohn Date: Tue, 18 Apr 2023 17:26:17 -0700 Subject: [PATCH] Clamp normal when calculating 2D lighting to avoid artifacts --- drivers/gles3/shaders/canvas.glsl | 2 +- servers/rendering/renderer_rd/shaders/canvas.glsl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gles3/shaders/canvas.glsl b/drivers/gles3/shaders/canvas.glsl index ea0a0b660df6..ae3892fb61a1 100644 --- a/drivers/gles3/shaders/canvas.glsl +++ b/drivers/gles3/shaders/canvas.glsl @@ -589,7 +589,7 @@ void main() { if (bool(read_draw_data_flags & FLAGS_FLIP_V)) { normal.y = -normal.y; } - normal.z = sqrt(1.0 - dot(normal.xy, normal.xy)); + normal.z = sqrt(max(0.0, 1.0 - dot(normal.xy, normal.xy))); normal_used = true; } else { normal = vec3(0.0, 0.0, 1.0); diff --git a/servers/rendering/renderer_rd/shaders/canvas.glsl b/servers/rendering/renderer_rd/shaders/canvas.glsl index 1fb8b28b1547..c96524b5c93e 100644 --- a/servers/rendering/renderer_rd/shaders/canvas.glsl +++ b/servers/rendering/renderer_rd/shaders/canvas.glsl @@ -508,7 +508,7 @@ void main() { if (bool(draw_data.flags & FLAGS_FLIP_V)) { normal.y = -normal.y; } - normal.z = sqrt(1.0 - dot(normal.xy, normal.xy)); + normal.z = sqrt(max(0.0, 1.0 - dot(normal.xy, normal.xy))); normal_used = true; } else { normal = vec3(0.0, 0.0, 1.0);