OpenXR-Erweiterung „XR_ANDROID_unbounded_reference_space“

Namensstring

XR_ANDROID_unbounded_reference_space

Erweiterungstyp

Instanzerweiterung

Registrierte Durchwahlnummer

468

Revision

1

Erweiterungs- und Versionsabhängigkeiten

OpenXR 1.0

Datum der letzten Änderung

2024-09-12

IP-Status

Es sind keine Ansprüche aufgrund von Urheberrechten bekannt.

Mitwirkende

Spencer Quin, Google

Jared Finder, Google

Fengtao Fan, Google

Lachlan Ford, Google

Nihav Jain, Google

Levana Chen, Google

Übersicht

Mit dieser Erweiterung können Anwendungen einen UNBOUNDED_ANDROID-Referenzbereich erstellen. Dieser Referenzraum ermöglicht es dem Betrachter, sich frei durch eine komplexe Umgebung zu bewegen, oft viele Meter von seinem Ausgangspunkt entfernt, und dabei immer die Stabilität des Koordinatensystems in der Nähe des Betrachters zu optimieren. Da das Gerät mehr von seiner Umgebung erfasst, um ein besseres Szenenverständnis zu erhalten, kann der Ursprung des Referenzraums abweichen und es sind große Anpassungen erforderlich, um das Geräte-Tracking aufrechtzuerhalten.

Um einen UNBOUNDED_ANDROID-Referenzbereich zu erstellen, kann die Anwendung XrReferenceSpaceCreateInfo::referenceSpaceType auf XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID setzen und an xrCreateReferenceSpace übergeben.

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));

Der UNBOUNDED_ANDROID-Referenzraum legt den Ursprung der Position des Headsets fest, wenn das Geräte-Tracking beginnt. Es ist gewichtsorientiert, um Neigung und Rollung auszuschließen, wobei +X nach rechts, +Y nach oben und -Z nach vorne zeigt.

UNBOUNDED_ANDROID-Bereiche sind nützlich, wenn eine Anwendung Inhalte in Weltmaßstab rendern muss, die über die Grenzen eines einzelnen STAGE hinausgehen, z. B. ein ganzes Stockwerk oder mehrere Stockwerke eines Gebäudes.

Ein UNBOUNDED_ANDROID-Raum bleibt in der Nähe des Betrachters stabil, da sich sein Ursprung im Laufe der Zeit anpasst. Es kann kleine und große Anpassungen vornehmen, um das Geräte-Tracking aufrechtzuerhalten.

  • Die Laufzeit darf das Ereignis XrEventDataReferenceSpaceChangePending nicht als Reaktion auf geringfügige Anpassungen in die Warteschlange stellen.
  • Die Laufzeit sollte das Ereignis XrEventDataReferenceSpaceChangePending als Reaktion auf große Anpassungen in die Warteschlange stellen. Beispiel: Die Pose im UNBOUNDED_ANDROID-Raum wird aufgrund eines Tracking-Verlusts zurückgesetzt und das Tracking wird auf einer getrennten Schätzung der Welt (einer „neuen Karte“) wiederhergestellt.
  • Das System aktualisiert ständig sein Weltbild und passt das Geräte-Tracking an. Wenn für eine Anwendung unabhängig von Tracking-Zurücksetzungen ein gespeicherter Standort erforderlich ist, kann in diesem Fall ein Anker verwendet werden.

Ereignis „Gruppenbereich geändert“

Für Parameter, die durch die Struktur XrEventDataReferenceSpaceChangePending definiert sind und bei Weltänderungen oder bei der Optimierung von Relokalisierungsereignissen zurückgegeben wurden:

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

Beschreibungen von Mitgliedern

  • referenceSpaceType ist XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID.
  • changeTime steht für die XrTime, an der die Relokalisierung abgeschlossen wurde.
  • poseValid ist false aufgrund der Schätzung für die Unterbrechung oder true nach der Reaktivierung.
  • poseInPreviousSpace ist ungültig, wenn poseValid = false ist.

Wenn bei Ansichten, Controllern oder anderen Bereichen die Verfolgung im Vergleich zum Bereich UNBOUNDED_ANDROID unterbrochen wird, können Anwendungen weiterhin abgeleitete oder zuletzt bekannte position- und orientation-Werte erhalten. Diese abgeleiteten Posen können beispielsweise auf Aktualisierungen des Nackenmodells, dem Trägheitsnavigationssystem oder der zuletzt bekannten Position basieren. Eine Anwendung kann davon ausgehen, dass XR_SPACE_LOCATION_POSITION_VALID_BIT und XR_VIEW_STATE_POSITION_VALID_BIT weiterhin festgelegt sind. XR_SPACE_LOCATION_POSITION_TRACKED_BIT und XR_VIEW_STATE_POSITION_TRACKED_BIT können jedoch von der Laufzeit gelöscht werden, um anzugeben, dass die Position auf diese Weise abgeleitet oder als letzte bekannte Position festgelegt wurde.

Wenn das Tracking wiederhergestellt wird, kann die Laufzeit den Ursprung beliebig neu ausrichten, z. B. so, dass er mit dem Betrachter übereinstimmt. Eine Anwendung kann den Wert poseValid prüfen, der vom Ereignis XrEventDataReferenceSpaceChangePending zurückgegeben wird, um festzustellen, ob es einsatzbereit ist.

Neue Objekttypen

Neue Flaggentypen

Neue Enum-Konstanten

Die Aufzählung XrReferenceSpaceType wird um Folgendes erweitert:

  • XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID

Neue Enums

Neue Strukturen

Neue Funktionen

Probleme

Versionsverlauf

  • Revision 1, 12.09.2024 (Levana Chen)
    • Erste Beschreibung der Erweiterung