diff --git a/servers/rendering/renderer_scene_cull.cpp b/servers/rendering/renderer_scene_cull.cpp index 06eeb427557..0c84348b699 100644 --- a/servers/rendering/renderer_scene_cull.cpp +++ b/servers/rendering/renderer_scene_cull.cpp @@ -212,6 +212,11 @@ void RendererSceneCull::_instance_pair(Instance *p_A, Instance *p_B) { } } else if (self->geometry_instance_pair_mask & (1 << RS::INSTANCE_REFLECTION_PROBE) && B->base_type == RS::INSTANCE_REFLECTION_PROBE && ((1 << A->base_type) & RS::INSTANCE_GEOMETRY_MASK)) { + if (!(A->layer_mask & RSG::light_storage->reflection_probe_get_reflection_mask(B->base))) { + // Early return if the object's layer mask doesn't match the reflection mask. + return; + } + InstanceReflectionProbeData *reflection_probe = static_cast(B->base_data); InstanceGeometryData *geom = static_cast(A->base_data); diff --git a/servers/rendering/renderer_scene_cull.h b/servers/rendering/renderer_scene_cull.h index 0e1141761b6..6f7c303ff08 100644 --- a/servers/rendering/renderer_scene_cull.h +++ b/servers/rendering/renderer_scene_cull.h @@ -504,10 +504,10 @@ public: case Dependency::DEPENDENCY_CHANGED_PARTICLES: case Dependency::DEPENDENCY_CHANGED_MULTIMESH: case Dependency::DEPENDENCY_CHANGED_DECAL: - case Dependency::DEPENDENCY_CHANGED_LIGHT: - case Dependency::DEPENDENCY_CHANGED_REFLECTION_PROBE: { + case Dependency::DEPENDENCY_CHANGED_LIGHT: { singleton->_instance_queue_update(instance, true, true); } break; + case Dependency::DEPENDENCY_CHANGED_REFLECTION_PROBE: case Dependency::DEPENDENCY_CHANGED_LIGHT_SOFT_SHADOW_AND_PROJECTOR: case Dependency::DEPENDENCY_CHANGED_CULL_MASK: { //requires repairing