[Bf-blender-cvs] [d834759] master: Cycles: Fix difference in Ashikhmin Shirley shader between CPU and GPU

Sergey Sharybin noreply at git.blender.org
Thu Jul 28 18:50:28 CEST 2016


Commit: d834759423842fa16969b84ac79902aaa316e775
Author: Sergey Sharybin
Date:   Thu Jul 28 18:46:29 2016 +0200
Branches: master
https://developer.blender.org/rBd834759423842fa16969b84ac79902aaa316e775

Cycles: Fix difference in Ashikhmin Shirley shader between CPU and GPU

The issue was caused by some NaN appearing in calculations.

Visible with scifi_armor_concept.blend from the cloud.

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

M	intern/cycles/kernel/closure/bsdf_ashikhmin_shirley.h

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

diff --git a/intern/cycles/kernel/closure/bsdf_ashikhmin_shirley.h b/intern/cycles/kernel/closure/bsdf_ashikhmin_shirley.h
index 8d7d533..3ca6532 100644
--- a/intern/cycles/kernel/closure/bsdf_ashikhmin_shirley.h
+++ b/intern/cycles/kernel/closure/bsdf_ashikhmin_shirley.h
@@ -101,8 +101,14 @@ ccl_device float3 bsdf_ashikhmin_shirley_eval_reflect(const ShaderClosure *sc, c
 
 			float HdotX = dot(H, X);
 			float HdotY = dot(H, Y);
-			float e = (n_x * HdotX*HdotX + n_y * HdotY*HdotY) / (1.0f - HdotN*HdotN);
-			float lobe = powf(HdotN, e);
+			float lobe;
+			if(HdotN < 1.0f) {
+				float e = (n_x * HdotX*HdotX + n_y * HdotY*HdotY) / (1.0f - HdotN*HdotN);
+				lobe = powf(HdotN, e);
+			}
+			else {
+				lobe = 1.0f;
+			}
 			float norm = sqrtf((n_x + 1.0f)*(n_y + 1.0f)) / (8.0f * M_PI_F);
 			
 			out = NdotO * norm * lobe * pump;




More information about the Bf-blender-cvs mailing list