From 1c892e6814adf7431aa9abbe1bd560547f7144d2 Mon Sep 17 00:00:00 2001 From: Stefan Werner Date: Mon, 17 Aug 2020 16:04:01 +0200 Subject: Cycles: Fix local intersections in Embree for non-instancd geometry. Embree's occlusion filter was checking against the wrong object ID and not exiting correctly in case of a mismatch. Fixes T79723 --- intern/cycles/bvh/bvh_embree.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'intern/cycles/bvh/bvh_embree.cpp') diff --git a/intern/cycles/bvh/bvh_embree.cpp b/intern/cycles/bvh/bvh_embree.cpp index 17e1f86a589..4ef873634f0 100644 --- a/intern/cycles/bvh/bvh_embree.cpp +++ b/intern/cycles/bvh/bvh_embree.cpp @@ -126,9 +126,13 @@ static void rtc_filter_occluded_func(const RTCFilterFunctionNArguments *args) } else { kernel_embree_convert_hit(kg, ray, hit, ¤t_isect); - if (ctx->local_object_id != current_isect.object) { + int object = (current_isect.object == OBJECT_NONE) ? + kernel_tex_fetch(__prim_object, current_isect.prim) : + current_isect.object; + if (ctx->local_object_id != object) { /* This tells Embree to continue tracing. */ *args->valid = 0; + break; } } -- cgit v1.2.3