Merge branch 'blender-v2.93-release'
authorClément Foucault <foucault.clem@gmail.com>
Fri, 28 May 2021 16:19:07 +0000 (18:19 +0200)
committerClément Foucault <foucault.clem@gmail.com>
Fri, 28 May 2021 16:19:07 +0000 (18:19 +0200)
source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl
source/blender/draw/intern/shaders/common_math_lib.glsl

index c8eaa06094ee8166d34de8ce520f2afe9992c2da..05496ad4ab066d06ea4b1839f8d9a7a500dcbe07 100644 (file)
@@ -164,8 +164,8 @@ vec3 ensure_valid_reflection(vec3 Ng, vec3 I, vec3 N)
   vec2 N_new;
   if (valid1 && valid2) {
     /* If both are possible, do the expensive reflection-based check. */
-    vec2 N1 = vec2(sqrt(1.0 - N1_z2), sqrt(N1_z2));
-    vec2 N2 = vec2(sqrt(1.0 - N2_z2), sqrt(N2_z2));
+    vec2 N1 = vec2(safe_sqrt(1.0 - N1_z2), safe_sqrt(N1_z2));
+    vec2 N2 = vec2(safe_sqrt(1.0 - N2_z2), safe_sqrt(N2_z2));
 
     float R1 = 2.0 * (N1.x * Ix + N1.y * Iz) * N1.y - Iz;
     float R2 = 2.0 * (N2.x * Ix + N2.y * Iz) * N2.y - Iz;
@@ -181,7 +181,7 @@ vec3 ensure_valid_reflection(vec3 Ng, vec3 I, vec3 N)
   }
   else if (valid1 || valid2) {
     float Nz2 = valid1 ? N1_z2 : N2_z2;
-    N_new = vec2(sqrt(1.0 - Nz2), sqrt(Nz2));
+    N_new = vec2(safe_sqrt(1.0 - Nz2), safe_sqrt(Nz2));
   }
   else {
     return Ng;
index 33deae0b0a1fa491a610d5cd96918c91aa0f5996..479f9cd182793725df9e7e5f051fe70a152f25fc 100644 (file)
@@ -86,6 +86,8 @@ float safe_rcp(float a) { return (a != 0.0) ? (1.0 / a) : 0.0; }
 vec2 safe_rcp(vec2 a) { return mix(vec2(0.0), (1.0 / a), notEqual(a, vec2(0.0))); }
 vec4 safe_rcp(vec4 a) { return mix(vec4(0.0), (1.0 / a), notEqual(a, vec4(0.0))); }
 
+float safe_sqrt(float a) { return sqrt(max(a, 0.0)); }
+
 float sqr(float a) { return a * a; }
 vec2 sqr(vec2 a) { return a * a; }
 vec3 sqr(vec3 a) { return a * a; }