AR Foundation spatial anchor incorrect after sleep/wake in Boundaryless
I'm seeing an issue with spatial anchors on Quest using Unity, OpenXR, and AR Foundation when running in Boundaryless mode.
Setup
- Unity
- OpenXR
- AR Foundation (ARAnchorManager)
- Quest 3
- Boundaryless mode
- Application remains running while the headset sleeps/wakes
Anchors are created through AR Foundation:
var result = await anchorManager.TryAddAnchorAsync(pose); if (result.status.IsSuccess()) { ARAnchor anchor = result.value; }
Everything works correctly initially.
Problem
When the headset goes to sleep and subsequently wakes, the OpenXR tracking space appears to relocalize/change.
In Boundary mode, the anchors continue to appear at the correct physical locations.
In Boundaryless mode, the ARAnchor GameObjects jump to incorrect world positions after wake.
The important observation is that the underlying Meta spatial anchor appears to have relocalized correctly.
After wake, if I query the spatial anchor directly using:
_locatable.TryGetSpatialAnchorPose(out var pose)
the returned pose correctly represents the anchor's location in the newly established tracking space.
However:
arAnchor.transform.position arAnchor.transform.rotation
do not represent that same correctly relocalized pose.
So after wake I effectively have:
Meta spatial anchor / TryGetSpatialAnchorPose() → correct AR Foundation ARAnchor.transform → incorrect
The anchor itself therefore appears to have successfully relocalized. The issue seems to be in propagating/converting that updated pose into the AR Foundation ARAnchor transform.
Boundaryless world-locking documentation
I'm aware of Meta's Boundaryless documentation explaining that Stage space is ill-defined without a boundary and recommending creating a spatial anchor and continuously aligning the application coordinate system against that anchor.
However, this seems like a separate issue.
I'm not expecting the XR Origin or entire Unity world coordinate system to automatically remain stable across relocalization. I'm expecting an individual ARAnchor to update its transform to represent the physical anchor's newly localized position.
The native spatial-anchor pose does update correctly. The AR Foundation representation does not.
Expected behavior
After tracking is lost/re-established:
- Quest relocalizes the spatial anchor.
- The spatial anchor gets a new pose relative to the current tracking/reference space.
- AR Foundation receives that updated trackable pose.
- ARAnchor.transform updates accordingly.
- Content parented to the ARAnchor remains attached to the same physical location.
Instead, I'm seeing steps 1–2 succeed while the resulting ARAnchor.transform is incorrect.
Has anyone seen this specifically with AR Foundation + Meta OpenXR + Boundaryless + sleep/wake?
I'm particularly interested in whether this is a known issue in the Meta OpenXR AR Foundation provider, or whether there is an additional step required after tracking-space relocalization to force AR Foundation anchors to refresh their poses.
Anecdotally, this may only be affecting Quest 3 and not 3S.
