[Bf-blender-cvs] [3f57714] master: Cycles: Don't perform re-intersection if ray distance is zero

Sergey Sharybin noreply at git.blender.org
Fri Jan 30 21:51:04 CET 2015


Commit: 3f5771475d55ed981bd98ee5810e62b68bccbb38
Author: Sergey Sharybin
Date:   Sat Jan 31 01:19:08 2015 +0500
Branches: master
https://developer.blender.org/rB3f5771475d55ed981bd98ee5810e62b68bccbb38

Cycles: Don't perform re-intersection if ray distance is zero

It is possible that ray distance will be zero which would make intersection
refinement return NaN as the refined position which would later lead to all
sort of mathematical issues.

Don't think there are ways to improve intersection accuracy for such rays
so just return original intersection coordinate.

This should fix T43475.

TODO: Need to look into possible issues in Ashikhmin BSDF which might return
zero-length reflected/transmitted ray?

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

M	intern/cycles/kernel/geom/geom_triangle_intersect.h

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

diff --git a/intern/cycles/kernel/geom/geom_triangle_intersect.h b/intern/cycles/kernel/geom/geom_triangle_intersect.h
index 475ee50..bd5861d 100644
--- a/intern/cycles/kernel/geom/geom_triangle_intersect.h
+++ b/intern/cycles/kernel/geom/geom_triangle_intersect.h
@@ -309,6 +309,9 @@ ccl_device_inline float3 triangle_refine(KernelGlobals *kg,
 
 #ifdef __INTERSECTION_REFINE__
 	if(isect->object != OBJECT_NONE) {
+		if(UNLIKELY(t == 0.0f)) {
+			return P;
+		}
 #ifdef __OBJECT_MOTION__
 		Transform tfm = sd->ob_itfm;
 #else




More information about the Bf-blender-cvs mailing list