Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2016-07-28 19:46:29 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2016-07-28 19:46:29 +0300
commitd834759423842fa16969b84ac79902aaa316e775 (patch)
tree072102f56f5278278f68573e1b56990e0c42abf8 /intern/cycles/kernel/closure
parent85ccdf37c01e14d63560ef742c8eb81985f90317 (diff)
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.
Diffstat (limited to 'intern/cycles/kernel/closure')
-rw-r--r--intern/cycles/kernel/closure/bsdf_ashikhmin_shirley.h10
1 files changed, 8 insertions, 2 deletions
diff --git a/intern/cycles/kernel/closure/bsdf_ashikhmin_shirley.h b/intern/cycles/kernel/closure/bsdf_ashikhmin_shirley.h
index 8d7d533d6f8..3ca6532fef4 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;