Title: GaussianSplatComponent — stale visibility set after close-range camera approach (iOS 27 beta 4, still unfixed)
Filed this as a radar during beta 3; still reproduces unchanged on beta 4, so posting here in case anyone from the RealityKit team can confirm it's tracked before this ships.
Radar: FB23749559 (filed against beta 3, re-verified on beta 4)
Summary
On iOS, GaussianSplatComponent keeps a stale visibility set after the camera moves close to and then away from the splat.
Moving the camera in close causes a large portion of splats to be culled — expected. But pulling the camera back out does not repopulate them. The visible set stays stale for as long as the current camera transform is held. The missing splats only return once the camera transform changes again — any pan/orbit/zoom delta triggers a recompute and the full splat snaps back.
Net effect: after any close inspection, the splat renders permanently partially-culled until the user happens to nudge the camera.
The recovery-on-movement / no-recovery-when-stationary signature suggests the iOS render path recomputes splat residency on camera-transform change events rather than every frame.
This also reproduces in AR mode, with a completely different camera driver. Since the only thing the two paths share is the splat residency code, that's where the stale set has to be coming from — which also means there's no app-side fix available to me. The camera transform in AR is driven by ARKit, not by my code, so I can't force the perturbation that would otherwise work around it. visionOS 27, running the same component, is unaffected — the visible set is re-evaluated per frame and the splat stays complete.
Steps to reproduce
- Attach a
GaussianSplatComponent(~400k splats) to an entity in a boundedRealityViewwith orbit controls. - Move the camera close until a visible portion of the splats is culled.
- Move the camera back out so the full splat is within the frustum.
- Hold the camera still.
Expected: full splat visible once pulled back. Actual: previously-culled splats stay missing while the camera is stationary; they reappear only on the next camera transform delta.
Configuration
- iOS 27 beta 4 (originally filed against beta 3)
- iPhone 16 Pro
- ~400k splats
- Bounded
RealityView+ orbit controls; also reproduces in AR
Screenshots attached: full splat, stale-culled state after pull-back, and the close-range view that triggers it.
This is still present in beta 4 and in the public beta. I'd like to know whether it's tracked, or whether I should plan around splats being unreliable on iOS 27. Thanks!
Thanks for the detailed report, and for the clean write-up in FB23749559, including the beta 3 versus beta 4 re-verification and the visionOS comparison. That is a well-isolated case.
On the API question first: your reading is correct that there is no app-side control here. In the iOS 27 SDK, GaussianSplatComponent is new this cycle, and its only public surface is the splat resource it carries. It exposes nothing for the visible set, culling, or forcing a re-evaluation, so there is no property you are missing. I can describe the behavior you documented, but I cannot speak to the internal recompute trigger. So I would treat the per-frame versus on-transform-change detail as your observation rather than something I can confirm.
On tracking: I can confirm your Feedback was received. Reports filed and re-verified this way are the right channel for reaching the team that owns the framework. I am not able to share internal status or timelines. Keeping FB23749559 open and updating it as you test is what keeps it up to date.
For planning: GaussianSplatComponent is a new API in the 27 cycle and is still in beta, so its behavior can change from one beta to the next. The most reliable way to track this specific case is to retest it on each new beta and note the result in your Feedback. That is more dependable than designing around a fixed assumption about the current beta's behavior.
Please continue to test your software on the release and pre-release versions of system software available through your developer.apple.com account. Update your bug reports whenever you do. For beta pre-release versions, see https://developer.apple.com/download/.
For reference: