Extension OpenXR XR_ANDROID_unbounded_reference_space

Chaîne de nom

XR_ANDROID_unbounded_reference_space

Type d'extension

Extension d'instance

Numéro d'extension enregistré

468

Révision

1

Dépendances d'extension et de version

OpenXR 1.0

Date de dernière modification

2024-09-12

État de l'adresse IP

Aucune revendication d'adresse IP connue.

Contributeurs

Spencer Quin, Google

Jared Finder, Google

Fengtao Fan, Google

Lachlan Ford, Google

Nihav Jain, Google

Levana Chen, Google

Présentation

Cette extension permet aux applications de créer un espace de référence UNBOUNDED_ANDROID. Cet espace de référence permet au spectateur de se déplacer librement dans un environnement complexe, souvent à plusieurs mètres de son point de départ, tout en optimisant toujours la stabilité du système de coordonnées à proximité du spectateur. À mesure que l'appareil détecte davantage son environnement pour mieux comprendre la scène, l'origine de l'espace de référence peut dériver avec des ajustements énormes si nécessaire pour maintenir le suivi de l'appareil.

Pour créer un espace de référence UNBOUNDED_ANDROID, l'application peut définir XrReferenceSpaceCreateInfo::referenceSpaceType XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID et transmettre à 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));

L'espace de référence UNBOUNDED_ANDROID établit une origine mondiale de la position du casque lorsque le suivi de l'appareil commence. Il est aligné sur la gravité pour exclure le tangage et le roulis, avec +X à droite, +Y vers le haut et -Z vers l'avant.

L'espace UNBOUNDED_ANDROID est utile lorsqu'une application doit afficher un contenu à l'échelle mondiale qui s'étend au-delà des limites d'un seul STAGE, par exemple un étage entier ou plusieurs étages d'un bâtiment.

Un espace UNBOUNDED_ANDROID maintient la stabilité à proximité du spectateur en ajustant son origine au fil du temps. Il peut effectuer des ajustements légers et importants si nécessaire pour maintenir le suivi des appareils.

  • L'environnement d'exécution ne doit pas mettre en file d'attente l'événement XrEventDataReferenceSpaceChangePending en réponse à des ajustements mineurs.
  • L'environnement d'exécution doit mettre en file d'attente l'événement XrEventDataReferenceSpaceChangePending en réponse à des ajustements importants. Par exemple, la pose dans l'espace UNBOUNDED_ANDROID est réinitialisée en raison d'une perte de suivi, et le suivi est rétabli sur une estimation dissociée du monde (une "nouvelle carte").
  • Le système actualise en permanence sa compréhension du monde et ajuste le suivi des appareils. Si une application nécessite une position persistante, quelle que soit la réinitialisation du suivi, une ancre peut être utilisée dans ce cas.

Événement de modification de l'espace de référence

Pour les paramètres définis par la structure XrEventDataReferenceSpaceChangePending renvoyée lors de la modification du monde ou de l'optimisation des événements de relocalisation:

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

Descriptions des membres

  • referenceSpaceType - XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID.
  • changeTime représente le XrTime à partir duquel la relocalisation est terminée.
  • poseValid sera false en raison de l'estimation de la déconnexion ou true après la reconnexion.
  • poseInPreviousSpace n'est pas valide lorsque poseValid est false.

Lorsque des vues, des contrôleurs ou d'autres espaces enregistrent une perte de suivi par rapport à l'espace UNBOUNDED_ANDROID, les applications peuvent continuer à recevoir des valeurs position et orientation inférées ou connues pour la dernière fois. Ces poses inférées peuvent, par exemple, être basées sur les mises à jour du modèle de cou, la navigation inertielle ou la dernière position connue. Une application peut supposer que XR_SPACE_LOCATION_POSITION_VALID_BIT et XR_VIEW_STATE_POSITION_VALID_BIT continueront d'être définis, mais XR_SPACE_LOCATION_POSITION_TRACKED_BIT et XR_VIEW_STATE_POSITION_TRACKED_BIT peuvent être effacés par l'environnement d'exécution pour indiquer que la position est inférée ou connue pour la dernière fois de cette manière.

Lorsque le suivi est rétabli, l'environnement d'exécution peut recentrer l'origine de manière arbitraire, par exemple en la déplaçant pour qu'elle coïncide avec le lecteur. Une application peut vérifier la valeur poseValid renvoyée par l'événement XrEventDataReferenceSpaceChangePending pour déterminer si elle est prête à l'emploi.

Nouveaux types d'objets

Nouveaux types d'indicateurs

Nouvelles constantes d'énumération

L'énumération XrReferenceSpaceType est étendue avec:

  • XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID

Nouvelles énumérations

Nouvelles structures

Nouvelles fonctions

Problèmes

Historique des versions

  • Révision 1, 12/09/2024 (Levana Chen)
    • Description initiale de l'extension