From 2fb639deedbdb0b0a821eb04ef69a7dd0080ea94 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Mon, 24 Aug 2015 21:21:30 +0200 Subject: [PATCH] Fix T45778: Objects scaled to 0 cause black artifacts with Static BVH The issue was caused by some numeric instability in triangle intersection which was visible on avx2 CPUs and GPUs (at least sm_20 here) but maybe some others too. Committing rather a workaround for now to be safe for the release, still need some investigation. From tests with grass field from Gooseberry project didn't see measurable slowdown. --- 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 3ef918dc842..7ca046f565b 100644 --- a/intern/cycles/kernel/geom/geom_triangle_intersect.h +++ b/intern/cycles/kernel/geom/geom_triangle_intersect.h @@ -173,6 +173,9 @@ ccl_device_inline bool triangle_intersect(KernelGlobals *kg, if(kernel_tex_fetch(__prim_visibility, triAddr) & visibility) #endif { + if(len_squared(cross(tri_a, tri_b)) < 1e-14f) { + return false; + } /* Normalize U, V, W, and T. */ const float inv_det = 1.0f / det; isect->prim = triAddr;