From 3f5771475d55ed981bd98ee5810e62b68bccbb38 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Sat, 31 Jan 2015 01:19:08 +0500 Subject: [PATCH] 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? --- intern/cycles/kernel/geom/geom_triangle_intersect.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/intern/cycles/kernel/geom/geom_triangle_intersect.h b/intern/cycles/kernel/geom/geom_triangle_intersect.h index 475ee50f876..bd5861d018e 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