Name String
XR_ANDROID_unbounded_reference_space
Extension Type
Instance extension
Registered Extension Number
468
Revision
1
Extension and Version Dependencies
Last Modified Date
2024-09-12
IP Status
No known IP claims.
Contributors
Spencer Quin, Google
Jared Finder, Google
Fengtao Fan, Google
Lachlan Ford, Google
Nihav Jain, Google
Levana Chen, Google
Overview
This extension allows applications to create an UNBOUNDED_ANDROID
reference
space. This reference space enables the viewer to move freely through a complex
environment, often many meters from where they started, while always optimizing
for coordinate system stability near the viewer. As the device senses more of
its environment to build a better scene understanding, the origin of the
reference space can drift with huge adjustments as necessary to maintain
device tracking.
To create an UNBOUNDED_ANDROID
reference space, the application can set
XrReferenceSpaceCreateInfo::referenceSpaceType
XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID
and pass to
xrCreateReferenceSpace.
XrInstance instance; // previously initialized
XrSession session; // previously initialized
XrPosef pose; // previously initialized
// Use the new reference space type in the create info struct
XrReferenceSpaceCreateInfo createInfo = {
.type = XR_REFERENCE_SPACE_CREATE_INFO;
.next = nullptr;
.referenceSpaceType = XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID;
.poseInReferenceSpace = pose;
}
XrSpace referenceSpace;
CHK_XR(xrCreateReferenceSpace(session, &createInfo, &referenceSpace));
// After usage
CHK_XR(xrDestroySpace(referenceSpace));
The UNBOUNDED_ANDROID
reference space establishes a world-locked origin of the
headset's position when the device tracking starts. It is gravity-aligned to
exclude pitch and roll, with +X to the right, +Y up, and -Z forward.
UNBOUNDED_ANDROID
space is useful when an application needs to render
world-scale content that spans beyond the bounds of a single STAGE
, for
example, an entire floor or multiple floors of a building.
An UNBOUNDED_ANDROID
space maintains stability near the viewer by adjusting
its origin over time. It can make slight and huge adjustments as
necessary to maintain device tracking.
- The runtime should not queue the XrEventDataReferenceSpaceChangePending event in response to minor adjustments.
- The runtime should queue the
XrEventDataReferenceSpaceChangePending event in response to
huge adjustments. For example, the pose in
UNBOUNDED_ANDROID
space is reset due to a tracking loss and the tracking is re-established on a disconnected estimate of the world (a "new map"). - The system is constantly updating its understanding of the world and adjusting device tracking. If an application requires a persisted location regardless of tracking resets, an anchor can be used in this case.
Reference space change event
For parameters defined by XrEventDataReferenceSpaceChangePending structure that returned on world changing or optimizing relocalization events:
typedef struct XrEventDataReferenceSpaceChangePending {
XrStructureType type;
const void* next;
XrSession session;
XrReferenceSpaceType referenceSpaceType;
XrTime changeTime;
XrBool32 poseValid;
XrPosef poseInPreviousSpace;
} XrEventDataReferenceSpaceChangePending;
Member Descriptions
referenceSpaceType
isXR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID
.changeTime
will represent theXrTime
at which relocalization completed.poseValid
will befalse
due to the disconnected estimate ortrue
after reconnected.poseInPreviousSpace
won't be valid whenposeValid
isfalse
.
When views, controllers or other spaces experience tracking loss relative to the
UNBOUNDED_ANDROID
space, applications can continue to receive inferred
or last-known position
and orientation
values. These inferred poses can,
for example, be based on neck model updates, inertial dead reckoning, or a
last-known position. An application can assume that it will continue to have the
XR_SPACE_LOCATION_POSITION_VALID_BIT
and
XR_VIEW_STATE_POSITION_VALID_BIT
set, but
XR_SPACE_LOCATION_POSITION_TRACKED_BIT
and
XR_VIEW_STATE_POSITION_TRACKED_BIT
may be cleared by the runtime to indicate
that the position is inferred or last-known in this way.
When tracking is recovered, the runtime may recenter the origin
arbitrarily, for example moving the origin to coincide with the viewer. An
application can check the poseValid
value returned from the
XrEventDataReferenceSpaceChangePending event to determine if it's ready to
use.
New Object Types
New Flag Types
New Enum Constants
XrReferenceSpaceType enumeration is extended with:
XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID
New Enums
New Structures
New Functions
Issues
Version History
- Revision 1, 2024-09-12 (Levana Chen)
- Initial extension description