Commit: 44923200245cdf432501cd283013c487029c0552
Author: Lukas Stockner
Date:   Wed Jul 27 21:42:40 2016 +0200
Branches: soc-2016-cycles_denoising
https://developer.blender.org/rB44923200245cdf432501cd283013c487029c0552

Cycles: Fix another cause for NaN normals and a potential divide-by-zero in the 
background texture

===================================================================

M       intern/cycles/kernel/kernel_projection.h
M       intern/cycles/kernel/svm/svm_displace.h
M       intern/cycles/kernel/svm/svm_image.h

===================================================================

diff --git a/intern/cycles/kernel/kernel_projection.h 
b/intern/cycles/kernel/kernel_projection.h
index 8be6742..7252179 100644
--- a/intern/cycles/kernel/kernel_projection.h
+++ b/intern/cycles/kernel/kernel_projection.h
@@ -57,6 +57,9 @@ ccl_device float3 spherical_to_direction(float theta, float 
phi)
 
 ccl_device float2 direction_to_equirectangular_range(float3 dir, float4 range)
 {
+       if(is_zero(dir))
+               return make_float2(0.0f, 0.0f);
+
        float u = (atan2f(dir.y, dir.x) - range.y) / range.x;
        float v = (acosf(dir.z / len(dir)) - range.w) / range.z;
 
diff --git a/intern/cycles/kernel/svm/svm_displace.h 
b/intern/cycles/kernel/svm/svm_displace.h
index 8d4b07c..7b20032 100644
--- a/intern/cycles/kernel/svm/svm_displace.h
+++ b/intern/cycles/kernel/svm/svm_displace.h
@@ -54,8 +54,13 @@ ccl_device void svm_node_set_bump(KernelGlobals *kg, 
ShaderData *sd, float *stac
        strength = max(strength, 0.0f);
 
        /* compute and output perturbed normal */
-       float3 normal_out = normalize(absdet*normal_in - 
distance*signf(det)*surfgrad);
-       normal_out = normalize(strength*normal_out + (1.0f - 
strength)*normal_in);
+       float3 normal_out = safe_normalize(absdet*normal_in - 
distance*signf(det)*surfgrad);
+       if(is_zero(normal_out)) {
+               normal_out = normal_in;
+       }
+       else {
+               normal_out = normalize(strength*normal_out + (1.0f - 
strength)*normal_in);
+       }
        stack_store_float3(stack, node.w, normal_out);
 #endif
 }
diff --git a/intern/cycles/kernel/svm/svm_image.h 
b/intern/cycles/kernel/svm/svm_image.h
index 4473273..7bbade4 100644
--- a/intern/cycles/kernel/svm/svm_image.h
+++ b/intern/cycles/kernel/svm/svm_image.h
@@ -467,8 +467,8 @@ ccl_device void svm_node_tex_environment(KernelGlobals *kg, 
ShaderData *sd, floa
        float3 co = stack_load_float3(stack, co_offset);
        float2 uv;
 
-       co = normalize(co);
-       
+       co = safe_normalize(co);
+
        if(projection == 0)
                uv = direction_to_equirectangular(co);
        else

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to