Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'intern/cycles/kernel/bvh/local.h')
-rw-r--r--intern/cycles/kernel/bvh/local.h26
1 files changed, 24 insertions, 2 deletions
diff --git a/intern/cycles/kernel/bvh/local.h b/intern/cycles/kernel/bvh/local.h
index 79cde69699e..4d0e6aac901 100644
--- a/intern/cycles/kernel/bvh/local.h
+++ b/intern/cycles/kernel/bvh/local.h
@@ -148,12 +148,23 @@ ccl_device_inline
/* intersect ray against primitive */
for (; prim_addr < prim_addr2; prim_addr++) {
kernel_assert(kernel_tex_fetch(__prim_type, prim_addr) == type);
+
+ /* Only intersect with matching object, for instanced objects we
+ * already know we are only intersecting the right object. */
+ if (object == OBJECT_NONE) {
+ if (kernel_tex_fetch(__prim_object, prim_addr) != local_object) {
+ continue;
+ }
+ }
+
+ const int prim = kernel_tex_fetch(__prim_index, prim_addr);
+
if (triangle_intersect_local(kg,
local_isect,
P,
dir,
- object,
local_object,
+ prim,
prim_addr,
isect_t,
lcg_state,
@@ -168,13 +179,24 @@ ccl_device_inline
/* intersect ray against primitive */
for (; prim_addr < prim_addr2; prim_addr++) {
kernel_assert(kernel_tex_fetch(__prim_type, prim_addr) == type);
+
+ /* Only intersect with matching object, for instanced objects we
+ * already know we are only intersecting the right object. */
+ if (object == OBJECT_NONE) {
+ if (kernel_tex_fetch(__prim_object, prim_addr) != local_object) {
+ continue;
+ }
+ }
+
+ const int prim = kernel_tex_fetch(__prim_index, prim_addr);
+
if (motion_triangle_intersect_local(kg,
local_isect,
P,
dir,
ray->time,
- object,
local_object,
+ prim,
prim_addr,
isect_t,
lcg_state,