[Bf-blender-cvs] [c59ed14619e] soc-2018-hair-shader: Remove two possible sources of NaNs

L. E. Segovia noreply at git.blender.org
Sun Jun 17 00:21:03 CEST 2018


Commit: c59ed14619e7b2e3bad075ec6e04edf0c7fc70ec
Author: L. E. Segovia
Date:   Sat Jun 16 20:42:04 2018 +0000
Branches: soc-2018-hair-shader
https://developer.blender.org/rBc59ed14619e7b2e3bad075ec6e04edf0c7fc70ec

Remove two possible sources of NaNs

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

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

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

diff --git a/intern/cycles/kernel/closure/bsdf_hair_principled.h b/intern/cycles/kernel/closure/bsdf_hair_principled.h
index 4de7335bbda..972fe08f975 100644
--- a/intern/cycles/kernel/closure/bsdf_hair_principled.h
+++ b/intern/cycles/kernel/closure/bsdf_hair_principled.h
@@ -72,7 +72,8 @@ ccl_device_inline float logistic(float x, float s)
 ccl_device_inline float logistic_cdf(float x, float s)
 {
 	float arg = -x/s;
-	if(arg > 100.0f) return 0.0f;
+	// exp overflows if arg >= 89.0f
+	if(arg > 88.0f) return 0.0f;
 	return 1.0f / (1.0f + expf(arg));
 }
 
@@ -114,7 +115,7 @@ ccl_device_inline float trimmed_logistic(float x, float s)
 	 * Therefore, logistic_cdf(x, s)-logistic_cdf(-x, s) = 1 - 2*logistic_cdf(-x, s) */
 	float scaling_fac = 1.0f - 2.0f*logistic_cdf(-M_PI_F, s);
 	float val = logistic(x, s);
-	return val / scaling_fac;
+	return safe_divide(val, scaling_fac);
 }
 
 ccl_device_inline float sample_trimmed_logistic(float u, float s)



More information about the Bf-blender-cvs mailing list