Namensstring
XR_ANDROID_face_tracking
Erweiterungstyp
Instanzerweiterung
Registrierte Durchwahlnummer
459
Revision
1
Erweiterungs- und Versionsabhängigkeiten
Datum der letzten Änderung
2024-09-06
IP-Status
Es sind keine Ansprüche aufgrund von Urheberrechten bekannt.
Mitwirkende
Spencer Quin, Google
Jared Finder, Google
Levana Chen, Google
Übersicht
Mit dieser Erweiterung können Anwendungen die Gewichte von Mischformen abrufen und Gesichtsausdrücke in XR-Umgebungen rendern.
Diese Erweiterung soll die Informationen liefern, die zum Erstellen realistischer Avatare und ausdrucksstarker Darstellungen von Nutzern im virtuellen Raum erforderlich sind. Die Anwendung kann prüfen, ob die Gesichtskalibrierung aktiviert ist, bevor die Gewichte der Mischformen abgerufen werden.
Gesichts-Tracker
Ein Gesichts-Tracker ist ein Sensor, der den Gesichtsausdruck anhand von Bildstreams, die auf den Nutzer gerichtet sind, und der Kamerakalibrierung erfasst. Der Hauptzweck dieser Erweiterung besteht darin, die Mimik der Nutzer auf ihre Avatare in einer virtuellen Szene abzubilden.
Daten zum Gesichtstracking sind sensible personenbezogene Daten und stehen in engem Zusammenhang mit dem Datenschutz und der Integrität von Personen. Bei Anwendungen, in denen Gesichtserkennungsdaten gespeichert oder übertragen werden, wird dringend empfohlen, den Nutzer immer um eine aktive und spezifische Einwilligung zu bitten.
- Apps erhalten
XR_ERROR_PERMISSION_INSUFFICIENT
, wenn ein aktiver Gesichtstracker erstellt wird, bis der App Zugriff auf den Gesichtstracker gewährt wurde. - Wenn Sie den Gesichtsstatus mit xrGetFaceStateANDROID abrufen, gibt XrFaceStateANDROID::isValid nur dann
XR_TRUE
zurück, wenn der App-Zugriff zugelassen wurde.
Handle für Gesichts-Tracker erstellen
XR_DEFINE_HANDLE(XrFaceTrackerANDROID)
Der Handle XrFaceTrackerANDROID steht für einen Gesichts-Tracker für das Gesichts-Tracking.
Über diesen Handle kann mit anderen Funktionen in dieser Erweiterung auf Daten für die Gesichtserkennung zugegriffen werden.
Die Funktion xrCreateFaceTrackerANDROID ist so definiert:
XrResult xrCreateFaceTrackerANDROID(
XrSession session,
const XrFaceTrackerCreateInfoANDROID* createInfo,
XrFaceTrackerANDROID* faceTracker);
Parameterbeschreibungen
session
ist ein XrSession-Handle, in dem der Gesichts-Tracker aktiv ist.createInfo
ist die XrFaceTrackerCreateInfoANDROID, mit der der Gesichtstracker angegeben wird.faceTracker
ist der zurückgegebene XrFaceTrackerANDROID-Handle.
Eine Anwendung kann mit der Funktion xrCreateFaceTrackerANDROID einen XrFaceTrackerANDROID-Handle erstellen.
Wenn das System das Gesichtstracking nicht unterstützt, gibt xrCreateFaceTrackerANDROID XR_ERROR_FEATURE_UNSUPPORTED
zurück.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_face_tracking
muss aktiviert sein, bevor xrCreateFaceTrackerANDROID aufgerufen wird. session
muss ein gültiger XrSession-Alias sein.createInfo
muss ein Zeiger auf eine gültige XrFaceTrackerCreateInfoANDROID-Struktur sein.faceTracker
muss ein Verweis auf einen XrFaceTrackerANDROID-Handle sein.
Rückgabecodes
XR_SUCCESS
XR_SESSION_LOSS_PENDING
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
Die Struktur XrFaceTrackerCreateInfoANDROID wird folgendermaßen beschrieben:
typedef struct XrFaceTrackerCreateInfoANDROID {
XrStructureType type;
void* next;
} XrFaceTrackerCreateInfoANDROID;
Beschreibungen von Mitgliedern
type
ist der XrStructureType dieser Struktur.next
istNULL
oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind in OpenXR oder dieser Erweiterung nicht definiert.
Die Struktur XrFaceTrackerCreateInfoANDROID beschreibt die Informationen zum Erstellen eines XrFaceTrackerANDROID-Handles.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_face_tracking
muss aktiviert sein, bevor XrFaceTrackerCreateInfoANDROID verwendet werden kann. type
mussXR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID
sein.next
mussNULL
oder ein gültiger Verweis auf die nächste Struktur in einer Strukturkette sein.
Die Funktion xrDestroyFaceTrackerANDROID ist so definiert:
XrResult xrDestroyFaceTrackerANDROID(
XrFaceTrackerANDROID faceTracker);
Parameterbeschreibungen
faceTracker
ist ein XrFaceTrackerANDROID, der zuvor mit xrCreateFaceTrackerANDROID erstellt wurde.
Die Funktion xrDestroyFaceTrackerANDROID gibt die faceTracker
und die zugrunde liegenden Ressourcen frei, wenn die Gesichtserkennung beendet ist.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_face_tracking
muss aktiviert sein, bevor xrDestroyFaceTrackerANDROID aufgerufen wird. faceTracker
muss ein gültiger XrFaceTrackerANDROID-Handle sein.
Threadsicherheit
- Der Zugriff auf
faceTracker
und alle untergeordneten Handles muss extern synchronisiert werden.
Rückgabecodes
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_HANDLE_INVALID
Gesichtskalibrierung prüfen
Die Funktion xrGetFaceCalibrationStateANDROID
ist so definiert:
XrResult xrGetFaceCalibrationStateANDROID(
XrFaceTrackerANDROID faceTracker,
XrBool32* faceIsCalibratedOutput);
Parameterbeschreibungen
faceTracker
ist ein XrFaceTrackerANDROID, der zuvor mit xrCreateFaceTrackerANDROID erstellt wurde.faceIsCalibratedOutput
gibt an, ob der Gesichtstracker kalibriert wurde oder nicht.
Eine Anwendung kann den Status der Gesichtskalibrierung mithilfe der Funktion xrGetFaceCalibrationStateANDROID prüfen.
Wenn das System die Gesichtskalibrierung nicht unterstützt, gibt xrGetFaceCalibrationStateANDROID XR_ERROR_FEATURE_UNSUPPORTED
zurück. Andernfalls wird faceIsCalibratedOutput
möglicherweise auf XR_TRUE
gesetzt, um den Status der Gesichtskalibrierung widerzuspiegeln.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_face_tracking
muss aktiviert sein, bevor xrGetFaceCalibrationStateANDROID aufgerufen wird. faceTracker
muss ein gültiger XrFaceTrackerANDROID-Handle sein.faceIsCalibratedOutput
muss ein Verweis auf einenXrBool32
-Wert sein
Rückgabecodes
XR_SUCCESS
XR_SESSION_LOSS_PENDING
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
Gesichtsausdrücke abrufen
Die Funktion xrGetFaceStateANDROID gibt die Zusammenführung von Gesichtsausdrücken zu einem bestimmten Zeitpunkt zurück.
XrResult xrGetFaceStateANDROID(
XrFaceTrackerANDROID faceTracker,
const XrFaceStateGetInfoANDROID* getInfo,
XrFaceStateANDROID* faceStateOutput);
Parameterbeschreibungen
faceTracker
ist ein XrFaceTrackerANDROID, der zuvor mit xrCreateFaceTrackerANDROID erstellt wurde.getInfo
ist ein Verweis auf XrFaceStateGetInfoANDROID, in dem Informationen zum Abrufen von Gesichtsausdrücken beschrieben werden.faceStateOutput
ist ein Verweis auf XrFaceStateANDROID, der den zurückgegebenen Status des Gesichtstrackings und die Gesichtsausdrücke empfängt.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_face_tracking
muss aktiviert sein, bevor xrGetFaceStateANDROID aufgerufen wird. faceTracker
muss ein gültiger XrFaceTrackerANDROID-Handle sein.getInfo
muss ein Verweis auf eine gültige XrFaceStateGetInfoANDROID-Struktur seinfaceStateOutput
muss ein Zeiger auf eine XrFaceStateANDROID-Struktur sein
Rückgabecodes
XR_SUCCESS
XR_SESSION_LOSS_PENDING
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
In der Struktur XrFaceStateGetInfoANDROID werden die Informationen beschrieben, mit denen Gesichtsausdrücke erfasst werden.
typedef struct XrFaceStateGetInfoANDROID {
XrStructureType type;
void* next;
XrTime time;
} XrFaceStateGetInfoANDROID;
Beschreibungen von Mitgliedern
type
ist der XrStructureType dieser Struktur.next
istNULL
oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind in OpenXR oder dieser Erweiterung nicht definiert.time
ist eineXrTime
, bei der die Gesichtsausdrücke angefordert werden.
Anwendungen sollten eine Zeit anfordern, die der prognostizierten Anzeigezeit für den gerenderten Frame entspricht.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_face_tracking
muss aktiviert sein, bevor XrFaceStateGetInfoANDROID verwendet werden kann. type
mussXR_TYPE_FACE_STATE_GET_INFO_ANDROID
sein.next
mussNULL
oder ein gültiger Verweis auf die nächste Struktur in einer Strukturkette sein.
Die Struktur XrFaceStateANDROID gibt den Status des Gesichtstrackings und die Gesichtsausdrücke zurück.
typedef struct XrFaceStateANDROID {
XrStructureType type;
void* next;
uint32_t parametersCapacityInput;
uint32_t parametersCountOutput;
float* parameters;
XrFaceTrackingStateANDROID faceTrackingState;
XrTime sampleTime;
XrBool32 isValid;
} XrFaceStateANDROID;
Beschreibungen von Mitgliedern
type
ist der XrStructureType dieser Struktur.next
istNULL
oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind in OpenXR oder dieser Erweiterung nicht definiert.parametersCapacityInput
ist einuint32_t
, das die Kapazität desparameters
-Arrays beschreibt, oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.parametersCountOutput
ist eineuint32_t
, die die Anzahl derparameters
oder die erforderliche Kapazität angibt, fallsparametersCapacityInput
nicht ausreicht.parameters
ist ein Verweis auf ein von der Anwendung zugewiesenes Array vonfloat
, das mit Gewichten von Formen für den Gesichtsausdruck gefüllt wird.faceTrackingState
ist derXrFaceTrackingStateANDROID
des Gültigkeitsstatus des Gesichtstrackings.sampleTime
ist einXrTime
-Zeitpunkt, zu dem die zurückgegebenen Ausdrücke erfasst oder extrapoliert werden. Sie entspricht der Zeit, zu der die Ausdrucksgewichte angefordert wurden, wenn die Extrapolation zu diesem Zeitpunkt erfolgreich war.isValid
gibt an, ob die Daten gültig sind, auch wenn sie nicht aus dem aktuellen Frame stammen.- Eine ausführliche Beschreibung zum Abrufen der erforderlichen
parameters
-Größe findest du im Abschnitt Parameter für die Puffergröße.
Die Anwendung kann parametersCapacityInput
auf XR_FACE_PARAMETER_COUNT_ANDROID
setzen, um Gesichtsausdrücke abzurufen, die von XrFaceParameterIndicesANDROID indexiert werden.
Die zurückgegebenen parameters
repräsentieren die Gewichte der Mischformen der aktuellen Gesichtsausdrücke.
Die parameters
-Array-Aktualisierungen werden so angeordnet, dass die Anwendung Elemente mit dem entsprechenden Enum für Gesichtsausdrücke indexieren kann (z.B. XrFaceParameterIndicesANDROID).
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_face_tracking
muss aktiviert sein, bevor XrFaceStateANDROID verwendet werden kann. type
mussXR_TYPE_FACE_STATE_ANDROID
sein.next
mussNULL
oder ein gültiger Verweis auf die nächste Struktur in einer Strukturkette sein.- Wenn
parametersCapacityInput
nicht0, parameters
ist, muss es ein Verweis auf ein Array vonparametersCapacityInput float
-Werten sein. faceTrackingState
muss ein gültiger Wert für XrFaceTrackingStateANDROID sein
Die Aufzählung XrFaceTrackingStateANDROID gibt die verschiedenen Status des Gesichts-Trackers an.
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;
Die Enumerationen haben folgende Bedeutungen:
Enum |
Beschreibung |
|
Das Gesichts-Tracking ist pausiert, kann aber in Zukunft fortgesetzt werden. |
|
Das Tracking wurde beendet, aber der Kunde hat weiterhin einen aktiven Gesichts-Tracker. |
|
Das Gesicht wird erfasst und die Körperhaltung ist aktuell. |
Konventionen für Überblendungsformen
Diese Erweiterung definiert 63 Übergangsformen über XR_FACE_PARAMETER_COUNT_ANDROID
für das reduzierte G-Nome-Format. Jeder Parameter in diesem Enum ist ein Index in einem Blendshape-Array, dessen Werte vom Typ float
sind und der Laufzeit auf 1–0 normalisiert wird.
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
} XrFaceParameterIndicesANDROID;
Index | Name | Referenzbild | |
---|---|---|---|
0 | BROW_LOWERER_L | ||
1 | BROW_LOWERER_R | ||
2 | CHEEK_PUFF_L | ||
3 | CHEEK_PUFF_R | ||
4 | CHEEK_RAISER_L | ||
5 | CHEEK_RAISER_R | ||
6 | CHEEK_SUCK_L | ||
7 | CHEEK_SUCK_R | ||
8 | CHIN_RAISER_B | ||
9 | CHIN_RAISER_T | ||
10 | DIMPLER_L | ||
11 | DIMPLER_R | ||
12 | EYES_CLOSED_L | ||
13 | EYES_CLOSED_R | ||
14 | EYES_LOOK_DOWN_L | ||
15 | EYES_LOOK_DOWN_R | ||
16 | EYES_LOOK_LEFT_L | ||
17 | EYES_LOOK_LEFT_R | ||
18 | EYES_LOOK_RIGHT_L | ||
19 | EYES_LOOK_RIGHT_R | ||
20 | EYES_LOOK_UP_L | ||
21 | EYES_LOOK_UP_R | ||
22 | INNER_BROW_RAISER_L | ||
23 | INNER_BROW_RAISER_R | ||
24 | JAW_DROP | ||
25 | JAW_SIDEWAYS_LEFT | ||
26 | JAW_SIDEWAYS_RIGHT | ||
27 | JAW_THRUST | ||
28 | LID_TIGHTENER_L | ||
29 | LID_TIGHTENER_R | ||
30 | LIP_CORNER_DEPRESSOR_L | ||
31 | LIP_CORNER_DEPRESSOR_R | ||
32 | LIP_CORNER_PULLER_L | ||
33 | LIP_CORNER_PULLER_R | ||
34 | LIP_FUNNELER_LB | ||
35 | LIP_FUNNELER_LT | ||
36 | LIP_FUNNELER_RB | ||
37 | LIP_FUNNELER_RT | ||
38 | LIP_PRESSOR_L | ||
39 | LIP_PRESSOR_R | ||
40 | LIP_PUCKER_L | ||
41 | LIP_PUCKER_R | ||
42 | LIP_STRETCHER_L | ||
43 | LIP_STRETCHER_R | ||
44 | LIP_SUCK_LB | ||
45 | LIP_SUCK_LT | ||
46 | LIP_SUCK_RB | ||
47 | LIP_SUCK_RT | ||
48 | LIP_TIGHTENER_L | ||
49 | LIP_TIGHTENER_R | ||
50 | LIPS_TOWARD | ||
51 | LOWER_LIP_DEPRESSOR_L | ||
52 | LOWER_LIP_DEPRESSOR_R | ||
53 | MOUTH_LEFT | ||
54 | MOUTH_RIGHT | ||
55 | NOSE_WRINKLER_L | ||
56 | NOSE_WRINKLER_R | ||
57 | OUTER_BROW_RAISER_L | ||
58 | OUTER_BROW_RAISER_R | ||
59 | UPPER_LID_RAISER_L | ||
60 | UPPER_LID_RAISER_R | ||
61 | UPPER_LIP_RAISER_L | ||
62 | UPPER_LIP_RAISER_R |
Beispielcode für das Gesichtstracking
Im folgenden Beispielcode wird gezeigt, wie Sie alle Gewichte für die Mischungsformen von Gesichtsausdrücken abrufen.
XrSession session; // previously initialized, for example 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
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:
bool 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;
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,
};
CHECK_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
}
}
}
// after usage
CHK_XR(xrDestroyFaceTrackerANDROID(faceTracker));
Neue Objekttypen
Neue Enum-Konstanten
XR_FACE_PARAMETER_COUNT_ANDROID
Die Aufzählung XrObjectType wurde um Folgendes erweitert:
XR_OBJECT_TYPE_FACE_TRACKER_ANDROID
Die Aufzählung XrStructureType wurde um folgende Elemente erweitert:
XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID
XR_TYPE_FACE_STATE_GET_INFO_ANDROID
XR_TYPE_FACE_STATE_ANDROID
Neue Enums
Neue Strukturen
Neue Funktionen
- xrCreateFaceTrackerANDROID
- xrDestroyFaceTrackerANDROID
- xrGetFaceStateANDROID
- xrGetFaceCalibrationStateANDROID
Probleme
Versionsverlauf
- Revision 1, 05.09.2024 (Levana Chen)
- Erste Beschreibung der Erweiterung