Browse Source

Clamp normal when calculating 2D lighting to avoid artifacts

clayjohn 2 years ago
parent
commit
ab603e347f

+ 1 - 1
drivers/gles3/shaders/canvas.glsl

@@ -589,7 +589,7 @@ void main() {
 		if (bool(read_draw_data_flags & FLAGS_FLIP_V)) {
 		if (bool(read_draw_data_flags & FLAGS_FLIP_V)) {
 			normal.y = -normal.y;
 			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;
 		normal_used = true;
 	} else {
 	} else {
 		normal = vec3(0.0, 0.0, 1.0);
 		normal = vec3(0.0, 0.0, 1.0);

+ 1 - 1
servers/rendering/renderer_rd/shaders/canvas.glsl

@@ -508,7 +508,7 @@ void main() {
 		if (bool(draw_data.flags & FLAGS_FLIP_V)) {
 		if (bool(draw_data.flags & FLAGS_FLIP_V)) {
 			normal.y = -normal.y;
 			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;
 		normal_used = true;
 	} else {
 	} else {
 		normal = vec3(0.0, 0.0, 1.0);
 		normal = vec3(0.0, 0.0, 1.0);