[Bf-blender-cvs] [91bbaaa] master: Cycles: Fix visibility check for instanced nodes
Sergey Sharybin
noreply at git.blender.org
Sat Dec 27 19:35:36 CET 2014
Commit: 91bbaaa271d348776269a125a9e545a3a4edcce8
Author: Sergey Sharybin
Date: Sat Dec 27 23:33:50 2014 +0500
Branches: master
https://developer.blender.org/rB91bbaaa271d348776269a125a9e545a3a4edcce8
Cycles: Fix visibility check for instanced nodes
The issue is that only instance node contains proper visibility flags,
nodes from instanced BVH are not correct.
===================================================================
M intern/cycles/kernel/geom/geom_qbvh_shadow.h
M intern/cycles/kernel/geom/geom_qbvh_traversal.h
===================================================================
diff --git a/intern/cycles/kernel/geom/geom_qbvh_shadow.h b/intern/cycles/kernel/geom/geom_qbvh_shadow.h
index 2d1ad49..09d05f1 100644
--- a/intern/cycles/kernel/geom/geom_qbvh_shadow.h
+++ b/intern/cycles/kernel/geom/geom_qbvh_shadow.h
@@ -194,6 +194,15 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(QBVH)(KernelGlobals *kg,
/* If node is leaf, fetch triangle list. */
if(nodeAddr < 0) {
float4 leaf = kernel_tex_fetch(__bvh_nodes, (-nodeAddr-1)*BVH_QNODE_SIZE+6);
+#ifdef __VISIBILITY_FLAG__
+ if((__float_as_uint(leaf.z) & PATH_RAY_SHADOW) == 0) {
+ /* Pop. */
+ nodeAddr = traversalStack[stackPtr].addr;
+ --stackPtr;
+ continue;
+ }
+#endif
+
int primAddr = __float_as_int(leaf.x);
#if BVH_FEATURE(BVH_INSTANCING)
@@ -205,12 +214,6 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(QBVH)(KernelGlobals *kg,
nodeAddr = traversalStack[stackPtr].addr;
--stackPtr;
-#ifdef __VISIBILITY_FLAG__
- if((__float_as_uint(leaf.z) & PATH_RAY_SHADOW) == 0) {
- continue;
- }
-#endif
-
/* Primitive intersection. */
while(primAddr < primAddr2) {
bool hit;
diff --git a/intern/cycles/kernel/geom/geom_qbvh_traversal.h b/intern/cycles/kernel/geom/geom_qbvh_traversal.h
index fdb2272..9989f83 100644
--- a/intern/cycles/kernel/geom/geom_qbvh_traversal.h
+++ b/intern/cycles/kernel/geom/geom_qbvh_traversal.h
@@ -247,7 +247,14 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(QBVH)(KernelGlobals *kg,
/* If node is leaf, fetch triangle list. */
if(nodeAddr < 0) {
- if(UNLIKELY(nodeDist > isect->t)) {
+ float4 leaf = kernel_tex_fetch(__bvh_nodes, (-nodeAddr-1)*BVH_QNODE_SIZE+6);
+
+ if(UNLIKELY((nodeDist > isect->t)
+#ifdef __VISIBILITY_FLAG__
+ || ((__float_as_uint(leaf.z) & visibility) == 0)
+#endif
+ ))
+ {
/* Pop. */
nodeAddr = traversalStack[stackPtr].addr;
nodeDist = traversalStack[stackPtr].dist;
@@ -255,7 +262,6 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(QBVH)(KernelGlobals *kg,
continue;
}
- float4 leaf = kernel_tex_fetch(__bvh_nodes, (-nodeAddr-1)*BVH_QNODE_SIZE+6);
int primAddr = __float_as_int(leaf.x);
#if BVH_FEATURE(BVH_INSTANCING)
@@ -268,12 +274,6 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(QBVH)(KernelGlobals *kg,
nodeDist = traversalStack[stackPtr].dist;
--stackPtr;
-#ifdef __VISIBILITY_FLAG__
- if((__float_as_uint(leaf.z) & visibility) == 0) {
- continue;
- }
-#endif
-
/* Primitive intersection. */
while(primAddr < primAddr2) {
bool hit;
More information about the Bf-blender-cvs
mailing list