Rozszerzenie OpenXR XR_ANDROID_face_tracking

Ciąg znaków nazwy

XR_ANDROID_face_tracking

Typ rozszerzenia

Rozszerzenie instancji

Zarejestrowany numer wewnętrzny

459

Wersja

3

Zależności rozszerzeń i wersji

OpenXR 1.0

Data ostatniej modyfikacji

2025-06-04

Stan adresu IP

Brak znanych roszczeń dotyczących własności intelektualnej.

Twórcy

Spencer Quin, Google

Jared Finder, Google

Levana Chen, Google

Omówienie

To rozszerzenie umożliwia aplikacjom uzyskiwanie wag kształtów mieszanych i renderowanie wyrazów twarzy w środowiskach XR.

To rozszerzenie ma na celu dostarczanie informacji potrzebnych do tworzenia realistycznych awatarów i wyrazistych reprezentacji użytkowników w przestrzeni wirtualnej. Aplikacja może sprawdzić aktywację kalibracji twarzy przed uzyskaniem wag kształtów mieszanych.

Śledzenie twarzy

Tracker twarzy to urządzenie wykrywające, które śledzi mimikę twarzy za pomocą strumieni obrazu skierowanych na użytkownika i kalibracji kamery. Głównym celem tego rozszerzenia jest mapowanie wyrazów twarzy użytkownika na jego awatary w scenie wirtualnej.

Dane śledzenia twarzy to wrażliwe dane osobowe, które są ściśle powiązane z prywatnością i integralnością osobistą. Zdecydowanie zalecamy, aby aplikacje, które przechowują lub przesyłają dane śledzenia twarzy, zawsze prosiły użytkownika o aktywną i konkretną zgodę na takie działanie.

  • Aplikacje będą otrzymywać XR_ERROR_PERMISSION_INSUFFICIENT podczas tworzenia aktywnego urządzenia śledzącego twarz, dopóki nie uzyskają do niego dostępu.
  • Podczas pobierania stanów twarzy za pomocą funkcji xrGetFaceStateANDROID funkcja XrFaceStateANDROID::isValid nie zwróci wartości XR_TRUE, chyba że aplikacja ma przyznany dostęp.

Sprawdzanie możliwości systemu

Struktura XrSystemFaceTrackingPropertiesANDROID jest zdefiniowana w ten sposób:

typedef struct XrSystemFaceTrackingPropertiesANDROID {
    XrStructureType    type;
    void*              next;
    XrBool32           supportsFaceTracking;
} XrSystemFaceTrackingPropertiesANDROID;

Opisy członków

  • type to XrStructureType tej struktury.
  • next to NULL lub wskaźnik do następnej struktury w łańcuchu struktur.
  • supportsFaceTracking to wartość XrBool32 wskazująca, czy bieżący system obsługuje śledzenie twarzy.

Aplikacja może sprawdzić, czy system obsługuje śledzenie twarzy, rozszerzając strukturę XrSystemProperties o strukturę XrSystemFaceTrackingPropertiesANDROID podczas wywoływania funkcji xrGetSystemProperties.

Jeśli środowisko wykonawcze zwraca XR_FALSE dla supportsFaceTracking, musi zwrócić XR_ERROR_FEATURE_UNSUPPORTED z funkcji xrCreateFaceTrackerANDROID.

Tworzenie uchwytu do śledzenia twarzy

XR_DEFINE_HANDLE(XrFaceTrackerANDROID)

Uchwyt XrFaceTrackerANDROID reprezentuje moduł śledzenia twarzy do śledzenia twarzy.

Ten uchwyt może być używany do uzyskiwania dostępu do danych śledzenia twarzy za pomocą innych funkcji w tym rozszerzeniu.

Funkcja xrCreateFaceTrackerANDROID jest zdefiniowana w ten sposób:

XrResult xrCreateFaceTrackerANDROID(
    XrSession                                   session,
    const XrFaceTrackerCreateInfoANDROID*       createInfo,
    XrFaceTrackerANDROID*                       faceTracker);

Opisy parametrów

Aplikacja może utworzyć uchwyt XrFaceTrackerANDROID za pomocą funkcji xrCreateFaceTrackerANDROID.

Jeśli system nie obsługuje śledzenia twarzy, funkcja xrCreateFaceTrackerANDROID zwróci wartość XR_ERROR_FEATURE_UNSUPPORTED.

Prawidłowe użycie (domyślne)

Kody zwrotne

Gotowe

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Błąd

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_VALIDATION_FAILURE
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_LIMIT_REACHED

Struktura XrFaceTrackerCreateInfoANDROID jest opisana w ten sposób:

typedef struct XrFaceTrackerCreateInfoANDROID {
    XrStructureType    type;
    void*              next;
} XrFaceTrackerCreateInfoANDROID;

Opisy członków

  • type to XrStructureType tej struktury.
  • next to NULL lub wskaźnik do następnej struktury w łańcuchu struktur. W podstawowej specyfikacji OpenXR ani w tym rozszerzeniu nie zdefiniowano takich struktur.

Struktura XrFaceTrackerCreateInfoANDROID zawiera informacje potrzebne do utworzenia uchwytu XrFaceTrackerANDROID.

Prawidłowe użycie (domyślne)

Funkcja xrDestroyFaceTrackerANDROID jest zdefiniowana w ten sposób:

XrResult xrDestroyFaceTrackerANDROID(
    XrFaceTrackerANDROID                        faceTracker);

Opisy parametrów

Funkcja xrDestroyFaceTrackerANDROID zwalnia faceTracker i zasoby bazowe po zakończeniu śledzenia twarzy.

Prawidłowe użycie (domyślne)

Bezpieczeństwo wątków

  • Dostęp do faceTracker i wszystkich uchwytów podrzędnych musi być synchronizowany zewnętrznie.

Kody zwrotne

Gotowe

  • XR_SUCCESS

Błąd

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID

Sprawdzanie kalibracji twarzy

Funkcja xrGetFaceCalibrationStateANDROID jest zdefiniowana w ten sposób:

XrResult xrGetFaceCalibrationStateANDROID(
    XrFaceTrackerANDROID                        faceTracker,
    XrBool32*                                   faceIsCalibratedOutput);

Opisy parametrów

Aplikacja może sprawdzić stan kalibracji twarzy za pomocą funkcji xrGetFaceCalibrationStateANDROID.

Gdy usługa śledzenia jest jeszcze w trakcie inicjowania, środowisko wykonawcze może zwrócić wartość XR_ERROR_SERVICE_NOT_READY_ANDROID z funkcji xrGetFaceCalibrationStateANDROID, aby wskazać, że aplikacja może ponowić próbę później.

Jeśli system nie obsługuje kalibracji twarzy, funkcja xrGetFaceCalibrationStateANDROID zwróci wartość XR_ERROR_FEATURE_UNSUPPORTED. W przeciwnym razie wartość faceIsCalibratedOutput może zostać ustawiona na XR_TRUE, aby odzwierciedlać stan kalibracji twarzy.

Prawidłowe użycie (domyślne)

Kody zwrotne

Gotowe

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Błąd

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_VALIDATION_FAILURE
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_SERVICE_NOT_READY_ANDROID

Uzyskiwanie wyrazów twarzy

Funkcja xrGetFaceStateANDROID zwraca kształty mieszane wyrazów twarzy w danym momencie.

XrResult xrGetFaceStateANDROID(
    XrFaceTrackerANDROID                        faceTracker,
    const XrFaceStateGetInfoANDROID*            getInfo,
    XrFaceStateANDROID*                         faceStateOutput);

Opisy parametrów

Prawidłowe użycie (domyślne)

Kody zwrotne

Gotowe

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Błąd

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_VALIDATION_FAILURE
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_TIME_INVALID

Struktura XrFaceStateGetInfoANDROID opisuje informacje, które należy uzyskać na temat wyrazu twarzy.

typedef struct XrFaceStateGetInfoANDROID {
    XrStructureType    type;
    void*              next;
    XrTime             time;
} XrFaceStateGetInfoANDROID;

Opisy członków

  • type to XrStructureType tej struktury.
  • next to NULL lub wskaźnik do następnej struktury w łańcuchu struktur. W podstawowej specyfikacji OpenXR ani w tym rozszerzeniu nie zdefiniowano takich struktur.
  • time to XrTime, w którym są wymagane wyrazy twarzy.

Aplikacje powinny żądać czasu równego przewidywanemu czasowi wyświetlania wyrenderowanej klatki.

Prawidłowe użycie (domyślne)

Struktura XrFaceStateANDROID zwraca stan śledzenia twarzy i wyrazy twarzy.

typedef struct XrFaceStateANDROID {
    XrStructureType               type;
    void*                         next;
    uint32_t                      parametersCapacityInput;
    uint32_t                      parametersCountOutput;
    float*                        parameters;
    XrFaceTrackingStateANDROID    faceTrackingState;
    XrTime                        sampleTime;
    XrBool32                      isValid;
    uint32_t                      regionConfidencesCapacityInput;
    uint32_t                      regionConfidencesCountOutput;
    float*                        regionConfidences;
} XrFaceStateANDROID;

Opisy członków

  • type to XrStructureType tej struktury.
  • next to NULL lub wskaźnik do następnej struktury w łańcuchu struktur. W podstawowej specyfikacji OpenXR ani w tym rozszerzeniu nie zdefiniowano takich struktur.
  • parametersCapacityInput to uint32_t opisująca pojemność tablicy parameters lub 0, jeśli chcesz pobrać wymagane zasoby.
  • parametersCountOutput to uint32_t opisująca liczbę parameters lub wymaganą pojemność w przypadku, gdy parametersCapacityInput jest niewystarczająca.
  • parameters to wskaźnik do tablicy float przydzielonej przez aplikację, która zostanie wypełniona wagami kształtów mieszanych wyrazu twarzy.
  • faceTrackingState to XrFaceTrackingStateANDROID stanu ważności śledzenia twarzy.
  • sampleTime to XrTime czas, w którym śledzone lub ekstrapolowane są zwracane wyrażenia. Jest to czas, w którym zażądano wag wyrażeń, jeśli ekstrapolacja w tym czasie się powiodła.
  • isValid wskazuje, czy dane są prawidłowe, nawet jeśli nie pochodzą z bieżącej klatki.
  • regionConfidencesCapacityInput to uint32_t opisująca pojemność tablicy regionConfidences lub 0, jeśli chcesz pobrać wymagane zasoby.
  • regionConfidencesCountOutput to uint32_t opisująca liczbę regionConfidences lub wymaganą pojemność w przypadku, gdy regionConfidencesCapacityInput jest niewystarczająca.
  • regionConfidences to wskaźnik do tablicy float przydzielonej przez aplikację, która zostanie wypełniona wartościami ufności dla każdego obszaru twarzy.
  • Szczegółowy opis pobierania wymaganych rozmiarów parametersregionConfidences znajdziesz w sekcji Parametry rozmiaru bufora.

Aplikacja może ustawić parametersCapacityInput na XR_FACE_PARAMETER_COUNT_ANDROID, aby uzyskać wyrazy twarzy indeksowane przez XrFaceParameterIndicesANDROID.

Zwrócone wartości parameters reprezentują wagi kształtów mieszanych bieżących wyrazów twarzy.

Aktualizacje tablicy parameters będą uporządkowane w taki sposób, aby aplikacja mogła indeksować elementy za pomocą odpowiedniego wyliczenia mimiki (np. XrFaceParameterIndicesANDROID).

Prawidłowe użycie (domyślne)

  • Rozszerzenie XR_ANDROID_face_tracking musi być włączone przed użyciem XrFaceStateANDROID.
  • type musi mieć wartość XR_TYPE_FACE_STATE_ANDROID
  • next musi być wartością NULL lub prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur.
  • Jeśli parametersCapacityInput nie jest 0, parameters, musi być wskaźnikiem do tablicy wartości parametersCapacityInput float.
  • Jeśli regionConfidencesCapacityInput nie jest 0, regionConfidences, musi być wskaźnikiem do tablicy wartości regionConfidencesCapacityInput float.
  • faceTrackingState musi być prawidłową wartością XrFaceTrackingStateANDROID

Wyliczenie XrFaceTrackingStateANDROID określa różne stany trackera twarzy.

typedef enum XrFaceTrackingStateANDROID {
    XR_FACE_TRACKING_STATE_PAUSED_ANDROID = 0,
    XR_FACE_TRACKING_STATE_STOPPED_ANDROID = 1,
    XR_FACE_TRACKING_STATE_TRACKING_ANDROID = 2
} XrFaceTrackingStateANDROID;

Wartości wyliczeniowe mają następujące znaczenia:

Enum

Opis

XR_FACE_TRACKING_STATE_PAUSED_ANDROID

Wskazuje, że śledzenie twarzy jest wstrzymane, ale może zostać wznowione w przyszłości.

XR_FACE_TRACKING_STATE_STOPPED_ANDROID

Śledzenie zostało zatrzymane, ale klient nadal ma aktywny moduł śledzenia twarzy.

XR_FACE_TRACKING_STATE_TRACKING_ANDROID

Twarz jest śledzona, a jej pozycja jest aktualna.

Regiony ufności

Rozszerzenie XR_ANDROID_face_tracking podaje też wartości ufności dla 3 obszarów twarzy: lewego oka, prawego oka i dolnej części twarzy. Te wartości, od 0 (brak pewności) do 1 (najwyższa pewność), wskazują dokładność śledzenia twarzy w każdym regionie.

Możesz używać tych wartości ufności, aby stopniowo wyłączać kształty mieszane lub stosować filtry wizualne (np. rozmycie) do odpowiedniego obszaru twarzy. W przypadku podstawowego sterowania włączaniem i wyłączaniem zalecamy użycie progu 0,3, aby całkowicie dezaktywować kształty mieszane w odpowiednim regionie twarzy.

Obszar „dolnej części twarzy” obejmuje wszystko poniżej oczu, w tym usta, podbródek, policzki i nos. Obszar oczu obejmuje oczy i brwi.

W tabeli poniżej opisujemy kształty mieszane powiązane z poszczególnymi obszarami ufności:

Region ufności Blendshapes
Dolna część twarzy `XR_FACE_PARAMETER_INDICES_CHEEK_PUFF_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_CHEEK_PUFF_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_CHEEK_RAISER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_CHEEK_RAISER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_CHEEK_SUCK_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_CHEEK_SUCK_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_CHIN_RAISER_B_ANDROID`, `XR_FACE_PARAMETER_INDICES_CHIN_RAISER_T_ANDROID`, `XR_FACE_PARAMETER_INDICES_DIMPLER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_DIMPLER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_JAW_DROP_ANDROID`, `XR_FACE_PARAMETER_INDICES_JAW_SIDEWAYS_LEFT_ANDROID`, `XR_FACE_PARAMETER_INDICES_JAW_SIDEWAYS_RIGHT_ANDROID`, `XR_FACE_PARAMETER_INDICES_JAW_THRUST_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_CORNER_DEPRESSOR_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_CORNER_DEPRESSOR_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_CORNER_PULLER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_CORNER_PULLER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_LB_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_LT_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_RB_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_RT_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_PRESSOR_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_PRESSOR_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_PUCKER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_PUCKER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_STRETCHER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_STRETCHER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_SUCK_LB_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_SUCK_LT_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_SUCK_RB_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_SUCK_RT_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_TIGHTENER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_TIGHTENER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIPS_TOWARD_ANDROID`, `XR_FACE_PARAMETER_INDICES_LOWER_LIP_DEPRESSOR_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_LOWER_LIP_DEPRESSOR_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_MOUTH_LEFT_ANDROID`, `XR_FACE_PARAMETER_INDICES_MOUTH_RIGHT_ANDROID`, `XR_FACE_PARAMETER_INDICES_NOSE_WRINKLER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_NOSE_WRINKLER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_UPPER_LID_RAISER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_UPPER_LID_RAISER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_UPPER_LIP_RAISER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_UPPER_LIP_RAISER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_TONGUE_OUT_ANDROID`, `XR_FACE_PARAMETER_INDICES_TONGUE_LEFT_ANDROID`, `XR_FACE_PARAMETER_INDICES_TONGUE_RIGHT_ANDROID`, `XR_FACE_PARAMETER_INDICES_TONGUE_UP_ANDROID`, `XR_FACE_PARAMETER_INDICES_TONGUE_DOWN_ANDROID`
Lewa/prawa górna część twarzy `XR_FACE_PARAMETER_INDICES_BROW_LOWERER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_BROW_LOWERER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_CLOSED_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_CLOSED_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_LOOK_DOWN_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_LOOK_DOWN_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_LOOK_LEFT_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_LOOK_LEFT_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_LOOK_RIGHT_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_LOOK_RIGHT_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_LOOK_UP_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_LOOK_UP_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_INNER_BROW_RAISER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_INNER_BROW_RAISER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_LID_TIGHTENER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_LID_TIGHTENER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_OUTER_BROW_RAISER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_OUTER_BROW_RAISER_R_ANDROID`

Konwencje dotyczące kształtów mieszanych

To rozszerzenie definiuje 68 kształtów mieszanych za pomocą XR_FACE_PARAMETER_COUNT_ANDROID w przypadku uproszczonego formatu G-Nome. Każdy parametr w tym wyliczeniu jest indeksem w tablicy kształtów mieszanych, której wartości są typu float, a środowisko wykonawcze normalizuje je do zakresu 1–0.

typedef enum XrFaceParameterIndicesANDROID {
    XR_FACE_PARAMETER_INDICES_BROW_LOWERER_L_ANDROID = 0,
    XR_FACE_PARAMETER_INDICES_BROW_LOWERER_R_ANDROID = 1,
    XR_FACE_PARAMETER_INDICES_CHEEK_PUFF_L_ANDROID = 2,
    XR_FACE_PARAMETER_INDICES_CHEEK_PUFF_R_ANDROID = 3,
    XR_FACE_PARAMETER_INDICES_CHEEK_RAISER_L_ANDROID = 4,
    XR_FACE_PARAMETER_INDICES_CHEEK_RAISER_R_ANDROID = 5,
    XR_FACE_PARAMETER_INDICES_CHEEK_SUCK_L_ANDROID = 6,
    XR_FACE_PARAMETER_INDICES_CHEEK_SUCK_R_ANDROID = 7,
    XR_FACE_PARAMETER_INDICES_CHIN_RAISER_B_ANDROID = 8,
    XR_FACE_PARAMETER_INDICES_CHIN_RAISER_T_ANDROID = 9,
    XR_FACE_PARAMETER_INDICES_DIMPLER_L_ANDROID = 10,
    XR_FACE_PARAMETER_INDICES_DIMPLER_R_ANDROID = 11,
    XR_FACE_PARAMETER_INDICES_EYES_CLOSED_L_ANDROID = 12,
    XR_FACE_PARAMETER_INDICES_EYES_CLOSED_R_ANDROID = 13,
    XR_FACE_PARAMETER_INDICES_EYES_LOOK_DOWN_L_ANDROID = 14,
    XR_FACE_PARAMETER_INDICES_EYES_LOOK_DOWN_R_ANDROID = 15,
    XR_FACE_PARAMETER_INDICES_EYES_LOOK_LEFT_L_ANDROID = 16,
    XR_FACE_PARAMETER_INDICES_EYES_LOOK_LEFT_R_ANDROID = 17,
    XR_FACE_PARAMETER_INDICES_EYES_LOOK_RIGHT_L_ANDROID = 18,
    XR_FACE_PARAMETER_INDICES_EYES_LOOK_RIGHT_R_ANDROID = 19,
    XR_FACE_PARAMETER_INDICES_EYES_LOOK_UP_L_ANDROID = 20,
    XR_FACE_PARAMETER_INDICES_EYES_LOOK_UP_R_ANDROID = 21,
    XR_FACE_PARAMETER_INDICES_INNER_BROW_RAISER_L_ANDROID = 22,
    XR_FACE_PARAMETER_INDICES_INNER_BROW_RAISER_R_ANDROID = 23,
    XR_FACE_PARAMETER_INDICES_JAW_DROP_ANDROID = 24,
    XR_FACE_PARAMETER_INDICES_JAW_SIDEWAYS_LEFT_ANDROID = 25,
    XR_FACE_PARAMETER_INDICES_JAW_SIDEWAYS_RIGHT_ANDROID = 26,
    XR_FACE_PARAMETER_INDICES_JAW_THRUST_ANDROID = 27,
    XR_FACE_PARAMETER_INDICES_LID_TIGHTENER_L_ANDROID = 28,
    XR_FACE_PARAMETER_INDICES_LID_TIGHTENER_R_ANDROID = 29,
    XR_FACE_PARAMETER_INDICES_LIP_CORNER_DEPRESSOR_L_ANDROID = 30,
    XR_FACE_PARAMETER_INDICES_LIP_CORNER_DEPRESSOR_R_ANDROID = 31,
    XR_FACE_PARAMETER_INDICES_LIP_CORNER_PULLER_L_ANDROID = 32,
    XR_FACE_PARAMETER_INDICES_LIP_CORNER_PULLER_R_ANDROID = 33,
    XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_LB_ANDROID = 34,
    XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_LT_ANDROID = 35,
    XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_RB_ANDROID = 36,
    XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_RT_ANDROID = 37,
    XR_FACE_PARAMETER_INDICES_LIP_PRESSOR_L_ANDROID = 38,
    XR_FACE_PARAMETER_INDICES_LIP_PRESSOR_R_ANDROID = 39,
    XR_FACE_PARAMETER_INDICES_LIP_PUCKER_L_ANDROID = 40,
    XR_FACE_PARAMETER_INDICES_LIP_PUCKER_R_ANDROID = 41,
    XR_FACE_PARAMETER_INDICES_LIP_STRETCHER_L_ANDROID = 42,
    XR_FACE_PARAMETER_INDICES_LIP_STRETCHER_R_ANDROID = 43,
    XR_FACE_PARAMETER_INDICES_LIP_SUCK_LB_ANDROID = 44,
    XR_FACE_PARAMETER_INDICES_LIP_SUCK_LT_ANDROID = 45,
    XR_FACE_PARAMETER_INDICES_LIP_SUCK_RB_ANDROID = 46,
    XR_FACE_PARAMETER_INDICES_LIP_SUCK_RT_ANDROID = 47,
    XR_FACE_PARAMETER_INDICES_LIP_TIGHTENER_L_ANDROID = 48,
    XR_FACE_PARAMETER_INDICES_LIP_TIGHTENER_R_ANDROID = 49,
    XR_FACE_PARAMETER_INDICES_LIPS_TOWARD_ANDROID = 50,
    XR_FACE_PARAMETER_INDICES_LOWER_LIP_DEPRESSOR_L_ANDROID = 51,
    XR_FACE_PARAMETER_INDICES_LOWER_LIP_DEPRESSOR_R_ANDROID = 52,
    XR_FACE_PARAMETER_INDICES_MOUTH_LEFT_ANDROID = 53,
    XR_FACE_PARAMETER_INDICES_MOUTH_RIGHT_ANDROID = 54,
    XR_FACE_PARAMETER_INDICES_NOSE_WRINKLER_L_ANDROID = 55,
    XR_FACE_PARAMETER_INDICES_NOSE_WRINKLER_R_ANDROID = 56,
    XR_FACE_PARAMETER_INDICES_OUTER_BROW_RAISER_L_ANDROID = 57,
    XR_FACE_PARAMETER_INDICES_OUTER_BROW_RAISER_R_ANDROID = 58,
    XR_FACE_PARAMETER_INDICES_UPPER_LID_RAISER_L_ANDROID = 59,
    XR_FACE_PARAMETER_INDICES_UPPER_LID_RAISER_R_ANDROID = 60,
    XR_FACE_PARAMETER_INDICES_UPPER_LIP_RAISER_L_ANDROID = 61,
    XR_FACE_PARAMETER_INDICES_UPPER_LIP_RAISER_R_ANDROID = 62,
    XR_FACE_PARAMETER_INDICES_TONGUE_OUT_ANDROID = 63,
    XR_FACE_PARAMETER_INDICES_TONGUE_LEFT_ANDROID = 64,
    XR_FACE_PARAMETER_INDICES_TONGUE_RIGHT_ANDROID = 65,
    XR_FACE_PARAMETER_INDICES_TONGUE_UP_ANDROID = 66,
    XR_FACE_PARAMETER_INDICES_TONGUE_DOWN_ANDROID = 67
} XrFaceParameterIndicesANDROID;
Indeks Nazwa Obraz referencyjny
0 BROW_LOWERER_L
Ilustracja przedstawiająca twarz bez wyrazu
BROW_LOWERER_L = 0.0
obraz referencyjny śledzenia twarzy,
BROW_LOWERER_L = 1.0
1 BROW_LOWERER_R
Ilustracja przedstawiająca twarz bez wyrazu
BROW_LOWERER_R = 0.0
obraz referencyjny śledzenia twarzy,
BROW_LOWERER_R = 1.0
2 CHEEK_PUFF_L
Ilustracja przedstawiająca twarz bez wyrazu
CHEEK_PUFF_L = 0.0
obraz referencyjny śledzenia twarzy,
CHEEK_PUFF_L = 1.0
3 CHEEK_PUFF_R
Ilustracja przedstawiająca twarz bez wyrazu
CHEEK_PUFF_R = 0.0
obraz referencyjny śledzenia twarzy,
CHEEK_PUFF_R = 1.0
4 CHEEK_RAISER_L
Ilustracja przedstawiająca twarz bez wyrazu
CHEEK_RAISER_L = 0.0
obraz referencyjny śledzenia twarzy,
CHEEK_RAISER_L = 1.0
5 CHEEK_RAISER_R
Ilustracja przedstawiająca twarz bez wyrazu
CHEEK_RAISER_R = 0.0
obraz referencyjny śledzenia twarzy,
CHEEK_RAISER_R = 1.0
6 CHEEK_SUCK_L
Ilustracja przedstawiająca twarz bez wyrazu
CHEEK_SUCK_L = 0.0
obraz referencyjny śledzenia twarzy,
CHEEK_SUCK_L = 1.0
7 CHEEK_SUCK_R
Ilustracja przedstawiająca twarz bez wyrazu
CHEEK_SUCK_R = 0.0
obraz referencyjny śledzenia twarzy,
CHEEK_SUCK_R = 1.0
8 CHIN_RAISER_B
Ilustracja przedstawiająca twarz bez wyrazu
CHIN_RAISER_B = 0.0
obraz referencyjny śledzenia twarzy,
CHIN_RAISER_B = 1.0
9 CHIN_RAISER_T
Ilustracja przedstawiająca twarz bez wyrazu
CHIN_RAISER_T = 0.0
obraz referencyjny śledzenia twarzy,
CHIN_RAISER_T = 1.0
10 DIMPLER_L
Ilustracja przedstawiająca twarz bez wyrazu
DIMPLER_L = 0.0
obraz referencyjny śledzenia twarzy,
DIMPLER_L = 1.0
11 DIMPLER_R
Ilustracja przedstawiająca twarz bez wyrazu
DIMPLER_R = 0.0
obraz referencyjny śledzenia twarzy,
DIMPLER_R = 1.0
12 EYES_CLOSED_L
Ilustracja przedstawiająca twarz bez wyrazu
EYES_CLOSED_L = 0.0
obraz referencyjny śledzenia twarzy,
EYES_CLOSED_L = 1.0
13 EYES_CLOSED_R
Ilustracja przedstawiająca twarz bez wyrazu
EYES_CLOSED_R = 0.0
obraz referencyjny śledzenia twarzy,
EYES_CLOSED_R = 1.0
14 EYES_LOOK_DOWN_L
Ilustracja przedstawiająca twarz bez wyrazu
EYES_LOOK_DOWN_L = 0.0
obraz referencyjny śledzenia twarzy,
EYES_LOOK_DOWN_L = 1.0
15 EYES_LOOK_DOWN_R
Ilustracja przedstawiająca twarz bez wyrazu
EYES_LOOK_DOWN_R = 0.0
obraz referencyjny śledzenia twarzy,
EYES_LOOK_DOWN_R = 1.0
16 EYES_LOOK_LEFT_L
Ilustracja przedstawiająca twarz bez wyrazu
EYES_LOOK_LEFT_L = 0.0
obraz referencyjny śledzenia twarzy,
EYES_LOOK_LEFT_L = 1.0
17 EYES_LOOK_LEFT_R
Ilustracja przedstawiająca twarz bez wyrazu
EYES_LOOK_LEFT_R = 0.0
obraz referencyjny śledzenia twarzy,
EYES_LOOK_LEFT_R = 1.0
18 EYES_LOOK_RIGHT_L
Ilustracja przedstawiająca twarz bez wyrazu
EYES_LOOK_RIGHT_L = 0.0
obraz referencyjny śledzenia twarzy,
EYES_LOOK_RIGHT_L = 1.0
19 EYES_LOOK_RIGHT_R
Ilustracja przedstawiająca twarz bez wyrazu
EYES_LOOK_RIGHT_R = 0.0
obraz referencyjny śledzenia twarzy,
EYES_LOOK_RIGHT_R = 1.0
20 EYES_LOOK_UP_L
Ilustracja przedstawiająca twarz bez wyrazu
EYES_LOOK_UP_L = 0.0
obraz referencyjny śledzenia twarzy,
EYES_LOOK_UP_L = 1.0
21 EYES_LOOK_UP_R
Ilustracja przedstawiająca twarz bez wyrazu
EYES_LOOK_UP_R = 0.0
obraz referencyjny śledzenia twarzy,
EYES_LOOK_UP_R = 1.0
22 INNER_BROW_RAISER_L
Ilustracja przedstawiająca twarz bez wyrazu
INNER_BROW_RAISER_L = 0.0
obraz referencyjny śledzenia twarzy,
INNER_BROW_RAISER_L = 1.0
23 INNER_BROW_RAISER_R
Ilustracja przedstawiająca twarz bez wyrazu
INNER_BROW_RAISER_R = 0.0
obraz referencyjny śledzenia twarzy,
INNER_BROW_RAISER_R = 1.0
24 JAW_DROP
Ilustracja przedstawiająca twarz bez wyrazu
JAW_DROP = 0.0
obraz referencyjny śledzenia twarzy,
JAW_DROP = 1.0
25 JAW_SIDEWAYS_LEFT
Ilustracja przedstawiająca twarz bez wyrazu
JAW_SIDEWAYS_LEFT = 0.0
obraz referencyjny śledzenia twarzy,
JAW_SIDEWAYS_LEFT = 1.0
26 JAW_SIDEWAYS_RIGHT
Ilustracja przedstawiająca twarz bez wyrazu
JAW_SIDEWAYS_RIGHT = 0.0
obraz referencyjny śledzenia twarzy,
JAW_SIDEWAYS_RIGHT = 1.0
27 JAW_THRUST
Ilustracja przedstawiająca twarz bez wyrazu
JAW_THRUST = 0.0
obraz referencyjny śledzenia twarzy,
JAW_THRUST = 1.0
28 LID_TIGHTENER_L
Ilustracja przedstawiająca twarz bez wyrazu
LID_TIGHTENER_L = 0.0
obraz referencyjny śledzenia twarzy,
LID_TIGHTENER_L = 1.0
29 LID_TIGHTENER_R
Ilustracja przedstawiająca twarz bez wyrazu
LID_TIGHTENER_R = 0.0
obraz referencyjny śledzenia twarzy,
LID_TIGHTENER_R = 1.0
30 LIP_CORNER_DEPRESSOR_L
Ilustracja przedstawiająca twarz bez wyrazu
LIP_CORNER_DEPRESSOR_L = 0.0
obraz referencyjny śledzenia twarzy,
LIP_CORNER_DEPRESSOR_L = 1.0
31 LIP_CORNER_DEPRESSOR_R
Ilustracja przedstawiająca twarz bez wyrazu
LIP_CORNER_DEPRESSOR_R = 0.0
obraz referencyjny śledzenia twarzy,
LIP_CORNER_DEPRESSOR_R = 1.0
32 LIP_CORNER_PULLER_L
Ilustracja przedstawiająca twarz bez wyrazu
LIP_CORNER_PULLER_L = 0.0
obraz referencyjny śledzenia twarzy,
LIP_CORNER_PULLER_L = 1.0
33 LIP_CORNER_PULLER_R
Ilustracja przedstawiająca twarz bez wyrazu
LIP_CORNER_PULLER_R = 0.0
obraz referencyjny śledzenia twarzy,
LIP_CORNER_PULLER_R = 1.0
34 LIP_FUNNELER_LB
Ilustracja przedstawiająca twarz bez wyrazu
LIP_FUNNELER_LB = 0.0
obraz referencyjny śledzenia twarzy,
LIP_FUNNELER_LB = 1.0
35 LIP_FUNNELER_LT
Ilustracja przedstawiająca twarz bez wyrazu
LIP_FUNNELER_LT = 0.0
obraz referencyjny śledzenia twarzy,
LIP_FUNNELER_LT = 1.0
36 LIP_FUNNELER_RB
Ilustracja przedstawiająca twarz bez wyrazu
LIP_FUNNELER_RB = 0.0
obraz referencyjny śledzenia twarzy,
LIP_FUNNELER_RB = 1.0
37 LIP_FUNNELER_RT
Ilustracja przedstawiająca twarz bez wyrazu
LIP_FUNNELER_RT = 0.0
obraz referencyjny śledzenia twarzy,
LIP_FUNNELER_RT = 1.0
38 LIP_PRESSOR_L
Ilustracja przedstawiająca twarz bez wyrazu
LIP_PRESSOR_L = 0.0
obraz referencyjny śledzenia twarzy,
LIP_PRESSOR_L = 1.0
39 LIP_PRESSOR_R
Ilustracja przedstawiająca twarz bez wyrazu
LIP_PRESSOR_R = 0.0
obraz referencyjny śledzenia twarzy,
LIP_PRESSOR_R = 1.0
40 LIP_PUCKER_L
Ilustracja przedstawiająca twarz bez wyrazu
LIP_PUCKER_L = 0.0
obraz referencyjny śledzenia twarzy,
LIP_PUCKER_L = 1.0
41 LIP_PUCKER_R
Ilustracja przedstawiająca twarz bez wyrazu
LIP_PUCKER_R = 0.0
obraz referencyjny śledzenia twarzy,
LIP_PUCKER_R = 1.0
42 LIP_STRETCHER_L
Ilustracja przedstawiająca twarz bez wyrazu
LIP_STRETCHER_L = 0.0
obraz referencyjny śledzenia twarzy,
LIP_STRETCHER_L = 1.0
43 LIP_STRETCHER_R
Ilustracja przedstawiająca twarz bez wyrazu
LIP_STRETCHER_R = 0.0
obraz referencyjny śledzenia twarzy,
LIP_STRETCHER_R = 1.0
44 LIP_SUCK_LB
Ilustracja przedstawiająca twarz bez wyrazu
LIP_SUCK_LB = 0.0
obraz referencyjny śledzenia twarzy,
LIP_SUCK_LB = 1.0
45 LIP_SUCK_LT
Ilustracja przedstawiająca twarz bez wyrazu
LIP_SUCK_LT = 0.0
obraz referencyjny śledzenia twarzy,
LIP_SUCK_LT = 1.0
46 LIP_SUCK_RB
Ilustracja przedstawiająca twarz bez wyrazu
LIP_SUCK_RB = 0.0
obraz referencyjny śledzenia twarzy,
LIP_SUCK_RB = 1.0
47 LIP_SUCK_RT
Ilustracja przedstawiająca twarz bez wyrazu
LIP_SUCK_RT = 0.0
obraz referencyjny śledzenia twarzy,
LIP_SUCK_RT = 1.0
48 LIP_TIGHTENER_L
Ilustracja przedstawiająca twarz bez wyrazu
LIP_TIGHTENER_L = 0.0
obraz referencyjny śledzenia twarzy,
LIP_TIGHTENER_L = 1.0
49 LIP_TIGHTENER_R
Ilustracja przedstawiająca twarz bez wyrazu
LIP_TIGHTENER_R = 0.0
obraz referencyjny śledzenia twarzy,
LIP_TIGHTENER_R = 1.0
50 LIPS_TOWARD
Ilustracja przedstawiająca twarz bez wyrazu
LIPS_TOWARD = 0.0
obraz referencyjny śledzenia twarzy,
JAW_DROP = 1.0 and LIPS_TOWARD = 1.0
51 LOWER_LIP_DEPRESSOR_L
Ilustracja przedstawiająca twarz bez wyrazu
LOWER_LIP_DEPRESSOR_L = 0.0
obraz referencyjny śledzenia twarzy,
LOWER_LIP_DEPRESSOR_L = 1.0
52 LOWER_LIP_DEPRESSOR_R
Ilustracja przedstawiająca twarz bez wyrazu
LOWER_LIP_DEPRESSOR_R = 0.0
obraz referencyjny śledzenia twarzy,
LOWER_LIP_DEPRESSOR_R = 1.0
53 MouthLeft
Ilustracja przedstawiająca twarz bez wyrazu
MOUTH_LEFT = 0.0
obraz referencyjny śledzenia twarzy,
MOUTH_LEFT = 1.0
54 MouthRight
Ilustracja przedstawiająca twarz bez wyrazu
MOUTH_RIGHT = 0.0
obraz referencyjny śledzenia twarzy,
MOUTH_RIGHT = 1.0
55 NOSE_WRINKLER_L
Ilustracja przedstawiająca twarz bez wyrazu
NOSE_WRINKLER_L = 0.0
obraz referencyjny śledzenia twarzy,
NOSE_WRINKLER_L = 1.0
56 NOSE_WRINKLER_R
Ilustracja przedstawiająca twarz bez wyrazu
NOSE_WRINKLER_R = 0.0
obraz referencyjny śledzenia twarzy,
NOSE_WRINKLER_R = 1.0
57 OUTER_BROW_RAISER_L
Ilustracja przedstawiająca twarz bez wyrazu
OUTER_BROW_RAISER_L = 0.0
obraz referencyjny śledzenia twarzy,
OUTER_BROW_RAISER_L = 1.0
58 OUTER_BROW_RAISER_R
Ilustracja przedstawiająca twarz bez wyrazu
OUTER_BROW_RAISER_R = 0.0
obraz referencyjny śledzenia twarzy,
OUTER_BROW_RAISER_R = 1.0
59 UPPER_LID_RAISER_L
Ilustracja przedstawiająca twarz bez wyrazu
UPPER_LID_RAISER_L = 0.0
obraz referencyjny śledzenia twarzy,
UPPER_LID_RAISER_L = 1.0
60 UPPER_LID_RAISER_R
Ilustracja przedstawiająca twarz bez wyrazu
UPPER_LID_RAISER_R = 0.0
obraz referencyjny śledzenia twarzy,
UPPER_LID_RAISER_R = 1.0
61 UPPER_LIP_RAISER_L
Ilustracja przedstawiająca twarz bez wyrazu
UPPER_LIP_RAISER_L = 0.0
obraz referencyjny śledzenia twarzy,
UPPER_LIP_RAISER_L = 1.0
62 UPPER_LIP_RAISER_R
Ilustracja przedstawiająca twarz bez wyrazu
UPPER_LIP_RAISER_R = 0.0
obraz referencyjny śledzenia twarzy,
UPPER_LIP_RAISER_R = 1.0
63 WYSUWANIE_JĘZYKA
Ilustracja przedstawiająca twarz bez wyrazu
TONGUE_OUT = 0.0
obraz referencyjny śledzenia twarzy,
TONGUE_OUT = 1.0
64 JĘZYK_LEWY
Ilustracja przedstawiająca twarz bez wyrazu
TONGUE_LEFT = 0.0
obraz referencyjny śledzenia twarzy,
TONGUE_LEFT = 1.0
65 TONGUE_RIGHT
Ilustracja przedstawiająca twarz bez wyrazu
TONGUE_RIGHT = 0.0
obraz referencyjny śledzenia twarzy,
TONGUE_RIGHT = 1.0
66 TONGUE_UP
Ilustracja przedstawiająca twarz bez wyrazu
TONGUE_UP = 0.0
obraz referencyjny śledzenia twarzy,
TONGUE_UP = 1.0
67 JĘZYK_W_DÓŁ
Ilustracja przedstawiająca twarz bez wyrazu
TONGUE_DOWN = 0.0
obraz referencyjny śledzenia twarzy,
TONGUE_DOWN = 1.0

Przykładowy kod śledzenia twarzy

Poniższy przykładowy kod pokazuje, jak uzyskać wszystkie wagi kształtów mieszanych wyrazu twarzy.

XrInstance instance; // previously initialized
XrSystemId systemId; // previously initialized
XrSession session; // previously initialized, e.g. created at app startup.

// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrCreateFaceTrackerANDROID xrCreateFaceTrackerANDROID; // previously initialized
PFN_xrDestroyFaceTrackerANDROID xrDestroyFaceTrackerANDROID; // previously initialized
PFN_xrGetFaceStateANDROID xrGetFaceStateANDROID; // previously initialized
PFN_xrGetFaceCalibrationStateANDROID xrGetFaceCalibrationStateANDROID; // previously initialized

// Inspect system capability
XrSystemProperties properties{XR_TYPE_SYSTEM_PROPERTIES};
XrSystemFaceTrackingPropertiesANDROID faceTrackingProperties{XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_ANDROID};
properties.next = &faceTrackingProperties;
CHK_XR(xrGetSystemProperties(instance, systemId, &properties));
if (!faceTrackingProperties.supportsFaceTracking) {
  // face tracking is not supported.
  return;
}

XrFaceTrackerANDROID faceTracker;
XrFaceTrackerCreateInfoANDROID
        createInfo{.type = XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID,
                    .next = nullptr};
CHK_XR(xrCreateFaceTrackerANDROID(session, &createInfo, &faceTracker));

// If the system supports face calibration:
XrBool32 isCalibrated;
CHK_XR(xrGetFaceCalibrationStateANDROID(faceTracker, &isCalibrated));
if (!isCalibrated) {
    // Redirect the user to system calibration setting.
}

XrFaceStateANDROID faceState;
float faceExpressionParameters[XR_FACE_PARAMETER_COUNT_ANDROID];
faceState.type = XR_TYPE_FACE_STATE_ANDROID;
faceState.next = nullptr;
faceState.parametersCapacityInput = XR_FACE_PARAMETER_COUNT_ANDROID;
faceState.parameters = faceExpressionParameters;
float regionConfidences[XR_FACE_REGION_CONFIDENCE_COUNT_ANDROID];
faceState.regionConfidencesCapacityInput = XR_FACE_REGION_CONFIDENCE_COUNT_ANDROID;
faceState.regionConfidences = regionConfidences;

while (1) {
    // ...
    // For every frame in the frame loop
    // ...
    XrFrameState frameState; // previously returned from xrWaitFrame

    XrFaceStateGetInfoANDROID faceGetInfo{
            .type = XR_TYPE_FACE_STATE_GET_INFO_ANDROID,
            .next = nullptr,
            .time = frameState.predictedDisplayTime,
    };

    CHK_XR(xrGetFaceStateANDROID(faceTracker, &faceGetInfo, &faceState));
    if (faceState.isValid) {
        for (uint32_t i = 0; i < XR_FACE_PARAMETER_COUNT_ANDROID; ++i) {
            // parameters[i] contains a weight of specific blend shape
        }
        for (uint32_t i = 0; i < XR_FACE_REGION_CONFIDENCE_COUNT_ANDROID; ++i) {
            // regionConfidences[i] contains a confidence value of a specific region
        }
    }
}

// after usage
CHK_XR(xrDestroyFaceTrackerANDROID(faceTracker));

Nowe typy obiektów

Nowe stałe wyliczeniowe

  • XR_FACE_PARAMETER_COUNT_ANDROID

Wyliczenie XrObjectType zostało rozszerzone o:

  • XR_OBJECT_TYPE_FACE_TRACKER_ANDROID

Wyliczenie XrStructureType zostało rozszerzone o:

  • XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID
  • XR_TYPE_FACE_STATE_GET_INFO_ANDROID
  • XR_TYPE_FACE_STATE_ANDROID
  • XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_ANDROID

Nowe wartości w polu enum

Nowe struktury

Nowe funkcje

Problemy

Historia wersji

  • Wersja 1, 5 września 2024 r. (Levana Chen)
    • Wstępny opis rozszerzenia
  • Wersja 2, 2025-04-01 (Kenny Vercaemer)
    • Dodano regiony ufności dotyczące twarzy
  • Wersja 3, 4 czerwca 2025 r. (Levana Chen)
    • Dodano nowy kod błędu.

OpenXR™ i logo OpenXR są znakami towarowymi należącymi do The Khronos Group Inc. i są zarejestrowane jako znaki towarowe w Chinach, Unii Europejskiej, Japonii i Wielkiej Brytanii.