diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2015-08-24 22:21:30 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2015-08-24 22:23:49 +0300 |
commit | 2fb639deedbdb0b0a821eb04ef69a7dd0080ea94 (patch) | |
tree | 3c246f984de6305fcf5d0145a0caa9d341188d78 | |
parent | 3633499f4ea93ad3313afd19a122c5e04b59b066 (diff) |
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.
-rw-r--r-- | intern/cycles/kernel/geom/geom_triangle_intersect.h | 3 |
1 files changed, 3 insertions, 0 deletions
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; |