Extensión OpenXR XR_ANDROID_unbounded_reference_space

Cadena de nombre

XR_ANDROID_unbounded_reference_space

Tipo de extensión

Extensión de la instancia

Número de extensión registrado

468

Revisión

1

Dependencias de extensiones y versiones

OpenXR 1.0

Fecha de última modificación

2024-09-12

Estado de la IP

No hay reclamos de IP conocidos.

Colaboradores

Spencer Quin, Google

Jared Finder, Google

Fengtao Fan, Google

Lachlan Ford, Google

Nihav Jain, Google

Levana Chen, Google

Descripción general

Esta extensión permite que las aplicaciones creen un espacio de referencia UNBOUNDED_ANDROID. Este espacio de referencia permite que el usuario se mueva libremente por un entorno complejo, a menudo a muchos metros de donde comenzó, y siempre optimiza la estabilidad del sistema de coordenadas cerca del usuario. A medida que el dispositivo detecta más de su entorno para comprender mejor la escena, el origen del espacio de referencia puede desviarse con ajustes enormes según sea necesario para mantener el seguimiento del dispositivo.

Para crear un espacio de referencia UNBOUNDED_ANDROID, la aplicación puede establecer XrReferenceSpaceCreateInfo::referenceSpaceType XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID y pasarlo a 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));

El espacio de referencia UNBOUNDED_ANDROID establece un origen bloqueado en el mundo de la posición de los auriculares cuando comienza el seguimiento del dispositivo. Está alineado con la gravedad para excluir el balanceo y el balanceo, con +X a la derecha, +Y hacia arriba y -Z hacia adelante.

El espacio UNBOUNDED_ANDROID es útil cuando una aplicación necesita renderizar contenido a escala mundial que abarca más allá de los límites de un solo STAGE, por ejemplo, un piso completo o varios pisos de un edificio.

Un espacio UNBOUNDED_ANDROID mantiene la estabilidad cerca del usuario ajustando su origen con el tiempo. Puede realizar ajustes ligeros y enormes según sea necesario para mantener el seguimiento de dispositivos.

  • El entorno de ejecución no debe poner en cola el evento XrEventDataReferenceSpaceChangePending en respuesta a ajustes menores.
  • El entorno de ejecución debe poner en cola el evento XrEventDataReferenceSpaceChangePending en respuesta a ajustes enormes. Por ejemplo, la pose en el espacio UNBOUNDED_ANDROID se restablece debido a una pérdida de seguimiento y el seguimiento se restablece en una estimación desconectada del mundo (un "mapa nuevo").
  • El sistema actualiza constantemente su comprensión del mundo y ajusta el seguimiento de dispositivos. Si una aplicación requiere una ubicación persistente independientemente de los restablecimientos de seguimiento, se puede usar un ancla en este caso.

Evento de cambio de espacio de referencia

Para los parámetros definidos por la estructura XrEventDataReferenceSpaceChangePending que se devolvieron en eventos de relocalización de cambio de mundo o optimización:

typedef struct XrEventDataReferenceSpaceChangePending {
    XrStructureType         type;
    const void*             next;
    XrSession               session;
    XrReferenceSpaceType    referenceSpaceType;
    XrTime                  changeTime;
    XrBool32                poseValid;
    XrPosef                 poseInPreviousSpace;
} XrEventDataReferenceSpaceChangePending;

Descripciones de los miembros

  • referenceSpaceType: XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID.
  • changeTime representará el XrTime en el que se completó la relocalización.
  • poseValid será false debido a la estimación de desconexión o true después de la reconexión.
  • poseInPreviousSpace no será válido cuando poseValid sea false.

Cuando las vistas, los controladores y otros espacios experimentan una pérdida de seguimiento en relación con el espacio UNBOUNDED_ANDROID, las aplicaciones pueden seguir recibiendo valores position y orientation inferidos o conocidos por última vez. Estas poses inferidas pueden, por ejemplo, basarse en actualizaciones del modelo del cuello, en la navegación inercial a ciegas o en una posición conocida por última vez. Una aplicación puede suponer que seguirá teniendo configurados XR_SPACE_LOCATION_POSITION_VALID_BIT y XR_VIEW_STATE_POSITION_VALID_BIT, pero el entorno de ejecución puede borrar XR_SPACE_LOCATION_POSITION_TRACKED_BIT y XR_VIEW_STATE_POSITION_TRACKED_BIT para indicar que la posición se infiere o se conoce por última vez de esta manera.

Cuando se recupera el seguimiento, el entorno de ejecución puede volver a centrar el origen de forma arbitraria, por ejemplo, moverlo para que coincida con el usuario. Una aplicación puede verificar el valor poseValid que se muestra desde el evento XrEventDataReferenceSpaceChangePending para determinar si está listo para usarse.

Nuevos tipos de objetos

Nuevos tipos de marcas

Nuevas constantes de enum

La enumeración XrReferenceSpaceType se extiende con lo siguiente:

  • XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID

Enumeraciones nuevas

Nuevas estructuras

Funciones nuevas

Problemas

Historial de versiones

  • Revisión 1, 12/9/2024 (Levana Chen)
    • Descripción inicial de la extensión