Commit: 3f067c61a077042d0d89f30aab2f55e82d318532 Author: Sergey Sharybin Date: Thu Oct 22 22:10:40 2015 +0500 Branches: blender-v2.76a-release https://developer.blender.org/rB3f067c61a077042d0d89f30aab2f55e82d318532
Cycles: Watertight fix for SSS intersection Same as previous commit, just was missing in there. =================================================================== 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 1ce4eea..970616e 100644 --- a/intern/cycles/kernel/geom/geom_triangle_intersect.h +++ b/intern/cycles/kernel/geom/geom_triangle_intersect.h @@ -142,8 +142,8 @@ ccl_device_inline bool triangle_intersect(KernelGlobals *kg, float U = Cx * By - Cy * Bx; float V = Ax * Cy - Ay * Cx; float W = Bx * Ay - By * Ax; - if ((U < 0.0f || V < 0.0f || W < 0.0f) && - (U > 0.0f || V > 0.0f || W > 0.0f)) + if((U < 0.0f || V < 0.0f || W < 0.0f) && + (U > 0.0f || V > 0.0f || W > 0.0f)) { return false; } @@ -242,13 +242,12 @@ ccl_device_inline void triangle_intersect_subsurface( /* Calculate scaled barycentric coordinates. */ float U = Cx * By - Cy * Bx; - int sign_mask = (__float_as_int(U) & 0x80000000); float V = Ax * Cy - Ay * Cx; - if(sign_mask != (__float_as_int(V) & 0x80000000)) { - return; - } float W = Bx * Ay - By * Ax; - if(sign_mask != (__float_as_int(W) & 0x80000000)) { + + if((U < 0.0f || V < 0.0f || W < 0.0f) && + (U > 0.0f || V > 0.0f || W > 0.0f)) + { return; } @@ -261,10 +260,11 @@ ccl_device_inline void triangle_intersect_subsurface( /* Calculate scaled z−coordinates of vertices and use them to calculate * the hit distance. */ + const int sign_det = (__float_as_int(det) & 0x80000000); const float T = (U * A_kz + V * B_kz + W * C_kz) * Sz; - const float sign_T = xor_signmask(T, sign_mask); + const float sign_T = xor_signmask(T, sign_det); if((sign_T < 0.0f) || - (sign_T > tmax * xor_signmask(det, sign_mask))) + (sign_T > tmax * xor_signmask(det, sign_det))) { return; } _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs