Rozszerzenie OpenXR XR_ANDROID_unbounded_reference_space

Ciąg znaków nazwy

XR_ANDROID_unbounded_reference_space

Typ rozszerzenia

Rozszerzenie instancji

Zarejestrowany numer wewnętrzny

468

Weryfikacja

1

Zależności rozszerzenia i wersji

OpenXR 1.0

Data ostatniej modyfikacji

2024-09-12

Stan adresu IP

Brak znanych roszczeń dotyczących adresu IP.

Twórcy

Spencer Quin, Google

Jared Finder, Google

Fengtao Fan, Google

Lachlan Ford, Google

Nihav Jain, Google

Levana Chen, Google

Omówienie

To rozszerzenie umożliwia aplikacjom tworzenie przestrzeni referencyjnej UNBOUNDED_ANDROID. To metryczne środowisko odniesienia umożliwia widzowi swobodne poruszanie się w złożonym środowisku, często wiele metrów od miejsca, w którym się znajdował na początku, przy jednoczesnym optymalizowaniu stabilności układu współrzędnych w pobliżu widza. Gdy urządzenie rejestruje więcej informacji o otoczeniu, aby lepiej zrozumieć scenę, punkt początkowy przestrzeni odniesienia może się przesuwać, wprowadzając znaczne korekty, aby zachować śledzenie urządzenia.

Aby utworzyć UNBOUNDED_ANDROID przestrzeń referencyjną, aplikacja może ustawić XrReferenceSpaceCreateInfo::referenceSpaceType XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID i przekazać go do 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));

Przestrzeń odniesienia UNBOUNDED_ANDROID określa punkt początkowy na mapie świata, w którym znajduje się słuchawka, gdy rozpoczyna się śledzenie urządzenia. Jest ona dopasowana do grawitacji, aby wykluczyć pochylenie i obrót. Oś X jest skierowana w prawo, oś Y w górę, a oś Z do przodu.

UNBOUNDED_ANDROID jest przydatna, gdy aplikacja musi renderować treści na skalę światową, które wykraczają poza granice pojedynczego STAGE, na przykład całą kondygnację lub kilka kondygnacji budynku.

UNBOUNDED_ANDROID przestrzeń zachowuje stabilność w pobliżu widza, dostosowując swoje położenie w czasie. Może wprowadzić niewielkieznaczne zmiany w miarę potrzeby, aby zachować śledzenie urządzenia.

  • W ramach działania nie należy umieszczać w kole zdarzeń XrEventDataReferenceSpaceChangePending w odpowiedzi na niewielkie zmiany.
  • W ramach działania należy umieścić w kole zdarzenie XrEventDataReferenceSpaceChangePending w odpowiedzi na duże zmiany. Na przykład pozycja w pomieszczenie UNBOUNDED_ANDROID jest resetowana z powodu utraty śledzenia, a śledzenie jest ponownie ustanawiane na podstawie niespójnych szacunków świata (tzw. „nowej mapy”).
  • System stale aktualizuje swoją wiedzę o świecie i dostosowuje śledzenie urządzeń. Jeśli aplikacja wymaga trwałej lokalizacji niezależnie od resetowania śledzenia, w tym przypadku można użyć kotwicy.

Zdarzenie zmiany pokoju odniesienia

W przypadku parametrów zdefiniowanych przez strukturę XrEventDataReferenceSpaceChangePending zwróconą w przypadku zdarzeń zmiany świata lub optymalizacji zdarzeń relokalizacji:

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

Opisy członków

  • referenceSpaceType: XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID.
  • changeTime będzie reprezentować wartość XrTime, przy której zakończono relokalizację.
  • poseValid będzie false z powodu prognozy po odłączeniu lub true po ponownym połączeniu.
  • Wartość poseInPreviousSpace nie będzie prawidłowa, jeśli wartość poseValid to false.

Gdy widoki, kontrolery lub inne przestrzenie tracą możliwość śledzenia w stosunku do przestrzeni UNBOUNDED_ANDROID, aplikacje mogą nadal otrzymywać wywnioskowane lub ostatnie znane wartości positionorientation. Te wywnioskowane pozy mogą być na przykład oparte na aktualizacjach modelu szyi, bezwładności lub ostatniej znanej pozycji. Aplikacja może założyć, że nadal będzie mieć ustawione wartości XR_SPACE_LOCATION_POSITION_VALID_BITXR_VIEW_STATE_POSITION_VALID_BIT, ale XR_SPACE_LOCATION_POSITION_TRACKED_BITXR_VIEW_STATE_POSITION_TRACKED_BIT mogą zostać wyczyszczone w czasie działania, aby wskazać, że pozycja jest wywnioskowana lub ostatnio znana.

Gdy śledzenie zostanie przywrócone, środowisko uruchomieniowe może dowolnie wyśrodkować punkt początkowy, np. przesuwając go, aby pokrywał się z widżetem. Aplikacja może sprawdzić wartość poseValid zwracaną przez zdarzenie XrEventDataReferenceSpaceChangePending, aby określić, czy jest gotowa do użycia.

Nowe typy obiektów

Nowe typy flag

Nowe stałe typu wyliczeniowego

Wyliczenie XrReferenceSpaceType zostało rozszerzone o:

  • XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID

Nowe wartości w polu enum

Nowe struktury

Nowe funkcje

Problemy

Historia wersji

  • Wersja 1, 12 września 2024 r. (Levana Chen)
    • Wstępny opis rozszerzenia