RealityKit portal crossing leaves a hard PBR lighting seam despite environmentLightingWeight being 0
I’m seeing a device-only lighting discontinuity on PBR entities that intersect a RealityKit portal plane in visionOS 27.
A sharp brightness boundary appears exactly where the portal plane cuts through the entity. The portion outside the portal receives a different physical environment-probe contribution from the portion inside.
The behavior is reproducible with two independent cases:
A completely static blue sphere positioned across the portal plane.
An orange sphere moved through the portal using ManipulationComponent and the standard visionOS pinch gesture.
Both spheres use:
var material = PhysicallyBasedMaterial()
material.baseColor = .init(tint: .orange)
material.metallic = 0
material.roughness = 1
Each sphere has the crossing and lighting components attached directly:
sphere.components.set(PortalCrossingComponent())
sphere.components.set(
ImageBasedLightReceiverComponent(
imageBasedLight: portalImageBasedLight
)
)
var lightingConfiguration =
EnvironmentLightingConfigurationComponent()
lightingConfiguration.environmentLightingWeight = 0
sphere.components.set(lightingConfiguration)
The portal is created using the visionOS 27 factory API:
let portal = PortalComponent.makePortal(
surfaceStyle: .init(width: 1.2, height: 0.8),
boundaryStyle: .infinitePlane(),
boundaryMode: .clippingAndCrossing
)
if var component =
portal.portalEntity.components[PortalComponent.self] {
component.lightingBlendDistance = 0.2
portal.portalEntity.components.set(component)
}
For the moving sphere, environmentLightingWeight stays at 0 for the entire interval in which any part of the sphere intersects the portal. The realtime environment-probe contribution only begins fading from 0 to 1 after the complete sphere has cleared the plane.
However, a spatially sharp edge remains:
In a bright physical environment, the outside portion is brighter.
In a dark physical environment, the outside portion is darker.
With UnlitMaterial, the edge disappears completely.
With PBR—even metallic 0 and roughness 1—the edge returns.
The static sphere reproduces the issue, so it does not appear to be caused by gesture or lighting-update timing.
Changing lightingBlendDistance does not soften this remaining edge.
The issue is visible on Apple Vision Pro but not in visionOS Simulator.
I watched the portal-lighting section of WWDC24 session 10103 and implemented the recommended EnvironmentLightingConfigurationComponent solution. I have also reviewed the documentation for PortalComponent, PortalCrossingComponent, PortalComponent.makePortal, ImageBasedLightReceiverComponent, and environmentLightingWeight.
Is there another component or entity-hierarchy requirement needed to fully suppress the physical environment probe on the host-side fragments of a crossing PBR entity? Or is this a RealityKit rendering issue on physical hardware?
Environment:
Apple Vision Pro (M5)
visionOS 27.0 (24M5326g)
Xcode 27.0 (27A5228h)
visionOS SDK 27.0 (24M5326e)
Here is a minimal standalone Xcode reproduction containing both the static and pinch-draggable spheres: https://drive.google.com/file/d/13qqOlDJVCCtlFcMaHCBpDkVJgRzmNjBK/view?usp=sharing
1
0
641