תוסף OpenXR‏ XR_ANDROID_face_tracking

מחרוזת שם

XR_ANDROID_face_tracking

סוג התוסף

הרחבת המכונה

מספר שלוחה רשום

459

Revision

3

תלות בתוסף ובגרסה

OpenXR 1.0

תאריך השינוי האחרון

2025-06-04

סטטוס כתובת ה-IP

לא ידוע על תלונות בנושא קניין רוחני.

שותפים ביצירת התוכן

ספנסר קווין, Google

Jared Finder, Google

לבנה צ'ן, Google

סקירה כללית

התוסף הזה מאפשר לאפליקציות לקבל משקלים של צורות משולבות ולהציג הבעות פנים בחוויות XR.

התוסף הזה נועד לספק את המידע שנדרש ליצירת אווטרים ריאליסטיים וייצוגים הבעתיים של משתמשים במרחב וירטואלי. האפליקציה יכולה לבדוק את ההפעלה של כיול הפנים לפני קבלת המשקלים של צורות המיזוג.

מעקב אחרי הבעות הפנים

מכשיר למעקב אחרי פנים הוא מכשיר חישה שעוקב אחרי הבעות פנים באמצעות זרמי תמונות שמוצגים למשתמש וכיול של המצלמה. המטרה העיקרית של התוסף הזה היא למפות את הבעות הפנים של המשתמשים לדמויות שלהם בסצנה וירטואלית.

נתונים של מעקב אחרי הפנים הם מידע אישי רגיש, והם קשורים קשר הדוק לפרטיות ולשלמות האישית. מומלץ מאוד שאפליקציות שמאחסנות או מעבירות נתונים של מעקב אחרי הפנים תמיד יבקשו מהמשתמש אישור פעיל וספציפי לעשות זאת.

  • אפליקציות יקבלו XR_ERROR_PERMISSION_INSUFFICIENT כשיוצרים חיישן פעיל למעקב אחרי תנועות הפנים, עד שהאפליקציה תקבל גישה לחיישן.
  • כשמקבלים מצבי פנים באמצעות xrGetFaceStateANDROID,‏ XrFaceStateANDROID::isValid לא יחזיר XR_TRUE אלא אם הגישה לאפליקציה אושרה

בדיקת יכולות המערכת

המבנה XrSystemFaceTrackingPropertiesANDROID מוגדר כך:

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

תיאורי חברים

  • type הוא XrStructureType של המבנה הזה.
  • next הוא NULL או מצביע למבנה הבא בשרשרת המבנים.
  • supportsFaceTracking הוא XrBool32 שמציין אם המערכת הנוכחית תומכת במעקב אחרי הפנים.

אפליקציה יכולה לבדוק אם המערכת מסוגלת לעקוב אחרי הפנים על ידי הרחבת XrSystemProperties עם המבנה XrSystemFaceTrackingPropertiesANDROID כשקוראים ל-xrGetSystemProperties.

אם זמן הריצה מחזיר XR_FALSE עבור supportsFaceTracking, זמן הריצה חייב להחזיר XR_ERROR_FEATURE_UNSUPPORTED מהפונקציה xrCreateFaceTrackerANDROID.

יצירת כינוי לכלי למעקב אחרי פנים

XR_DEFINE_HANDLE(XrFaceTrackerANDROID)

ה-handle‏ XrFaceTrackerANDROID מייצג כלי למעקב אחרי פנים לצורך מעקב אחרי פנים.

אפשר להשתמש בכינוי הזה כדי לגשת לנתוני מעקב תנועות הפנים באמצעות פונקציות אחרות בתוסף הזה.

הפונקציה xrCreateFaceTrackerANDROID מוגדרת כך:

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

תיאורים של פרמטרים

אפליקציה יכולה ליצור נקודת אחיזה XrFaceTrackerANDROID באמצעות הפונקציה xrCreateFaceTrackerANDROID.

אם המערכת לא תומכת במעקב אחרי הפנים, הפונקציה xrCreateFaceTrackerANDROID תחזיר XR_ERROR_FEATURE_UNSUPPORTED.

שימוש תקין (מרומז)

קודי החזרה

הצלחה

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Failure

  • 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

המבנה XrFaceTrackerCreateInfoANDROID מתואר באופן הבא:

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

תיאורי חברים

  • type הוא XrStructureType של המבנה הזה.
  • next הוא NULL או מצביע למבנה הבא בשרשרת המבנים. לא מוגדרים מבנים כאלה ב-OpenXR הליבה או בתוסף הזה.

המבנה XrFaceTrackerCreateInfoANDROID מתאר את המידע ליצירת נקודת אחיזה XrFaceTrackerANDROID.

שימוש תקין (מרומז)

הפונקציה xrDestroyFaceTrackerANDROID מוגדרת כך:

XrResult xrDestroyFaceTrackerANDROID(
    XrFaceTrackerANDROID                        faceTracker);

תיאורים של פרמטרים

הפונקציה xrDestroyFaceTrackerANDROID משחררת את faceTracker ואת המשאבים הבסיסיים כשהחוויה של מעקב הפנים מסתיימת.

שימוש תקין (מרומז)

Thread Safety

  • הגישה אל faceTracker ואל כל הכינויים של הילדים חייבת להיות מסונכרנת חיצונית

קודי החזרה

הצלחה

  • XR_SUCCESS

Failure

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID

בדיקת כיול הפנים

הפונקציה xrGetFaceCalibrationStateANDROID מוגדרת כך:

XrResult xrGetFaceCalibrationStateANDROID(
    XrFaceTrackerANDROID                        faceTracker,
    XrBool32*                                   faceIsCalibratedOutput);

תיאורים של פרמטרים

אפליקציה יכולה לבדוק את מצב הכיול של הפנים באמצעות הפונקציה xrGetFaceCalibrationStateANDROID.

אם שירות המעקב עדיין נמצא בתהליך אתחול, סביבת זמן הריצה עשויה להחזיר את הערך XR_ERROR_SERVICE_NOT_READY_ANDROID מהפונקציה xrGetFaceCalibrationStateANDROID כדי לציין שהאפליקציה יכולה לנסות שוב מאוחר יותר.

אם המערכת לא תומכת בכיול הפנים, הפונקציה xrGetFaceCalibrationStateANDROID תחזיר XR_ERROR_FEATURE_UNSUPPORTED. אחרת, יכול להיות שהערך של faceIsCalibratedOutput יהיה XR_TRUE כדי לשקף את מצב הכיול של הפנים.

שימוש תקין (מרומז)

קודי החזרה

הצלחה

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Failure

  • 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

הבעות פנים

הפונקציה xrGetFaceStateANDROID מחזירה צורות מיזוג של הבעות פנים בזמן נתון.

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

תיאורים של פרמטרים

שימוש תקין (מרומז)

קודי החזרה

הצלחה

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Failure

  • 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

המבנה XrFaceStateGetInfoANDROID מתאר את המידע שצריך לקבל כדי להשיג הבעות פנים.

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

תיאורי חברים

  • type הוא XrStructureType של המבנה הזה.
  • next הוא NULL או מצביע למבנה הבא בשרשרת המבנים. לא מוגדרים מבנים כאלה ב-OpenXR הליבה או בתוסף הזה.
  • time הוא XrTime שבו מתבקשות הבעות הפנים.

אפליקציות צריכות לבקש זמן ששווה לזמן התצוגה החזוי של הפריים שעבר רינדור.

שימוש תקין (מרומז)

המבנה XrFaceStateANDROID מחזיר את מצב מעקב הפנים ואת הבעות הפנים.

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;

תיאורי חברים

  • type הוא XrStructureType של המבנה הזה.
  • next הוא NULL או מצביע למבנה הבא בשרשרת המבנים. לא מוגדרים מבנים כאלה ב-OpenXR הליבה או בתוסף הזה.
  • parametersCapacityInput הוא uint32_t שמתאר את הקיבולת של מערך parameters, או 0 שמציין בקשה לאחזור הקיבולת הנדרשת.
  • parametersCountOutput הוא uint32_t שמתאר את מספר parameters, או את הקיבולת הנדרשת במקרה ש-parametersCapacityInput לא מספיק.
  • parameters הוא מצביע למערך שהוקצה לאפליקציה של float שימולא במשקלים של צורות תערובת של הבעות פנים.
  • faceTrackingState הוא XrFaceTrackingStateANDROID של סטטוס התוקף של מעקב הפנים.
  • sampleTime הוא זמן XrTime שבו הביטויים המוחזרים נמדדים או מחושבים. הערך הזה שווה לזמן שבו נשלחה בקשה למשקלים של הביטוי, אם האקסטרפולציה באותו זמן הצליחה.
  • isValid מציין אם הנתונים תקפים גם אם הם לא מהמסגרת הנוכחית.
  • regionConfidencesCapacityInput הוא uint32_t שמתאר את הקיבולת של מערך regionConfidences, או 0 שמציין בקשה לאחזור הקיבולת הנדרשת.
  • regionConfidencesCountOutput הוא uint32_t שמתאר את מספר regionConfidences, או את הקיבולת הנדרשת במקרה ש-regionConfidencesCapacityInput לא מספיק.
  • regionConfidences הוא מצביע למערך שהוקצה לאפליקציה של float, שימולא בערכי מהימנות לכל אזור בפנים.
  • בקטע פרמטרים של גודל המאגר מופיע תיאור מפורט של אחזור הגודל הנדרש של parameters ושל regionConfidences.

האפליקציה יכולה להגדיר את parametersCapacityInput ל-XR_FACE_PARAMETER_COUNT_ANDROID כדי לקבל הבעות פנים שמסודרות באינדקס לפי XrFaceParameterIndicesANDROID.

הערכים parameters שמוחזרים מייצגים את המשקלים של צורות המיזוג של הבעות הפנים הנוכחיות.

עדכוני המערך parameters יסודרו כך שהאפליקציה תוכל לאנדקס רכיבים באמצעות ספירת הבעות הפנים התואמת (לדוגמה, XrFaceParameterIndicesANDROID).

שימוש תקין (מרומז)

  • XR_ANDROID_face_tracking התוסף חייב להיות מופעל לפני השימוש ב-XrFaceStateANDROID
  • הערך של type חייב להיות XR_TYPE_FACE_STATE_ANDROID
  • הערך next חייב להיות NULL או מצביע תקין אל המבנה הבא בשרשרת מבנים
  • אם parametersCapacityInput הוא לא 0, parameters חייב להיות מצביע למערך של ערכי parametersCapacityInput float
  • אם regionConfidencesCapacityInput הוא לא 0, regionConfidences חייב להיות מצביע למערך של ערכי regionConfidencesCapacityInput float
  • faceTrackingState חייב להיות ערך חוקי של XrFaceTrackingStateANDROID

הספירה XrFaceTrackingStateANDROID מזהה את המצבים השונים של הכלי למעקב אחרי פנים.

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;

המשמעויות של סוגי ה-enum הן:

Enum

תיאור

XR_FACE_TRACKING_STATE_PAUSED_ANDROID

מציין שמעקב הפנים מושהה, אבל יכול להיות שהוא יופעל מחדש בעתיד.

XR_FACE_TRACKING_STATE_STOPPED_ANDROID

המעקב הופסק, אבל עדיין יש ללקוח מעקב פנים פעיל.

XR_FACE_TRACKING_STATE_TRACKING_ANDROID

המעקב אחרי הפנים מתבצע והפוזה שלהן עדכנית.

אזורי סמך

XR_ANDROID_face_tracking התוסף מספק גם ערכי מהימנות לשלושה אזורים בפנים: עין ימין, עין שמאל והחלק התחתון של הפנים. הערכים האלה, שנעים בין 0 (ללא ודאות) ל-1 (הודאות הגבוהה ביותר), מציינים את הדיוק של מעקב הפנים בכל אזור.

אפשר להשתמש בערכי הביטחון האלה כדי להשבית בהדרגה את צורות התערובת או להחיל מסננים חזותיים (כמו טשטוש) על אזור הפנים המתאים. כדי להפעיל או להשבית את השליטה הבסיסית, מומלץ להשתמש בסף של 0.3 כדי להשבית לגמרי את צורות המיזוג באזור הפנים המתאים.

האזור 'חלק הפנים התחתון' מייצג את כל מה שמתחת לעיניים, כולל הפה, הסנטר, הלחי והאף. אזור העיניים כולל את העיניים ואת אזור הגבות.

בטבלה הבאה מתוארים ה-blendshapes שמשויכים לכל אזור מהימנות:

אזור מהימנות Blendshapes
החלק התחתון של הפנים ‪`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`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_CORNER_PULLER_R_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_LB_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_LT_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_RB_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_RT_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_PRESSOR_L_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_PRESSOR_R_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_PUCKER_L_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_PUCKER_R_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_STRETCHER_L_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_STRETCHER_R_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_SUCK_LB_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_SUCK_LT_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_SUCK_RB_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_SUCK_RT_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_TIGHTENER_L_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_TIGHTENER_R_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIPS_TOWARD_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LOWER_LIP_DEPRESSOR_L_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LOWER_LIP_DEPRESSOR_R_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_MOUTH_LEFT_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_MOUTH_RIGHT_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_NOSE_WRINKLER_L_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_NOSE_WRINKLER_R_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_UPPER_LID_RAISER_L_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_UPPER_LID_RAISER_R_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_UPPER_LIP_RAISER_L_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_UPPER_LIP_RAISER_R_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_TONGUE_OUT_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_TONGUE_LEFT_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_TONGUE_RIGHT_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_TONGUE_UP_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_TONGUE_DOWN_ANDROID`
פנים שמאליות/ימניות עליונות ‪`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`

מוסכמות של צורות מיזוג

התוסף הזה מגדיר 68 צורות מיזוג באמצעות XR_FACE_PARAMETER_COUNT_ANDROID, לפורמט G-Nome המצומצם. כל פרמטר ב-enum הזה הוא אינדקס למערך של צורות מעורבות, שהערכים שלהן הם מסוג float, ובזמן הריצה מתבצעת נורמליזציה ל-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;
אינדקס שם תמונה לדוגמה
0 BROW_LOWERER_L
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
BROW_LOWERER_L = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
BROW_LOWERER_L = 1.0
1 BROW_LOWERER_R
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
BROW_LOWERER_R = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
BROW_LOWERER_R = 1.0
2 CHEEK_PUFF_L
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
CHEEK_PUFF_L = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
CHEEK_PUFF_L = 1.0
3 CHEEK_PUFF_R
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
CHEEK_PUFF_R = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
CHEEK_PUFF_R = 1.0
4 CHEEK_RAISER_L
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
CHEEK_RAISER_L = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
CHEEK_RAISER_L = 1.0
5 CHEEK_RAISER_R
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
CHEEK_RAISER_R = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
CHEEK_RAISER_R = 1.0
6 CHEEK_SUCK_L
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
CHEEK_SUCK_L = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
CHEEK_SUCK_L = 1.0
7 CHEEK_SUCK_R
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
CHEEK_SUCK_R = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
CHEEK_SUCK_R = 1.0
8 CHIN_RAISER_B
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
CHIN_RAISER_B = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
CHIN_RAISER_B = 1.0
9 CHIN_RAISER_T
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
CHIN_RAISER_T = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
CHIN_RAISER_T = 1.0
10 DIMPLER_L
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
DIMPLER_L = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
DIMPLER_L = 1.0
11 DIMPLER_R
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
DIMPLER_R = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
DIMPLER_R = 1.0
12 EYES_CLOSED_L
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
EYES_CLOSED_L = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
EYES_CLOSED_L = 1.0
13 EYES_CLOSED_R
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
EYES_CLOSED_R = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
EYES_CLOSED_R = 1.0
14 EYES_LOOK_DOWN_L
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
EYES_LOOK_DOWN_L = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
EYES_LOOK_DOWN_L = 1.0
15 EYES_LOOK_DOWN_R
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
EYES_LOOK_DOWN_R = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
EYES_LOOK_DOWN_R = 1.0
16 EYES_LOOK_LEFT_L
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
EYES_LOOK_LEFT_L = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
EYES_LOOK_LEFT_L = 1.0
17 EYES_LOOK_LEFT_R
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
EYES_LOOK_LEFT_R = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
EYES_LOOK_LEFT_R = 1.0
18 EYES_LOOK_RIGHT_L
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
EYES_LOOK_RIGHT_L = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
EYES_LOOK_RIGHT_L = 1.0
19 EYES_LOOK_RIGHT_R
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
EYES_LOOK_RIGHT_R = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
EYES_LOOK_RIGHT_R = 1.0
20 EYES_LOOK_UP_L
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
EYES_LOOK_UP_L = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
EYES_LOOK_UP_L = 1.0
21 EYES_LOOK_UP_R
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
EYES_LOOK_UP_R = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
EYES_LOOK_UP_R = 1.0
22 INNER_BROW_RAISER_L
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
INNER_BROW_RAISER_L = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
INNER_BROW_RAISER_L = 1.0
23 INNER_BROW_RAISER_R
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
INNER_BROW_RAISER_R = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
INNER_BROW_RAISER_R = 1.0
24 JAW_DROP
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
JAW_DROP = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
JAW_DROP = 1.0
25 JAW_SIDEWAYS_LEFT
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
JAW_SIDEWAYS_LEFT = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
JAW_SIDEWAYS_LEFT = 1.0
26 JAW_SIDEWAYS_RIGHT
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
JAW_SIDEWAYS_RIGHT = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
JAW_SIDEWAYS_RIGHT = 1.0
27 JAW_THRUST
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
JAW_THRUST = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
JAW_THRUST = 1.0
28 LID_TIGHTENER_L
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
LID_TIGHTENER_L = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
LID_TIGHTENER_L = 1.0
29 LID_TIGHTENER_R
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
LID_TIGHTENER_R = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
LID_TIGHTENER_R = 1.0
30 LIP_CORNER_DEPRESSOR_L
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
LIP_CORNER_DEPRESSOR_L = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
LIP_CORNER_DEPRESSOR_L = 1.0
31 LIP_CORNER_DEPRESSOR_R
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
LIP_CORNER_DEPRESSOR_R = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
LIP_CORNER_DEPRESSOR_R = 1.0
32 LIP_CORNER_PULLER_L
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
LIP_CORNER_PULLER_L = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
LIP_CORNER_PULLER_L = 1.0
33 LIP_CORNER_PULLER_R
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
LIP_CORNER_PULLER_R = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
LIP_CORNER_PULLER_R = 1.0
34 LIP_FUNNELER_LB
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
LIP_FUNNELER_LB = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
LIP_FUNNELER_LB = 1.0
35 LIP_FUNNELER_LT
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
LIP_FUNNELER_LT = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
LIP_FUNNELER_LT = 1.0
36 LIP_FUNNELER_RB
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
LIP_FUNNELER_RB = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
LIP_FUNNELER_RB = 1.0
37 LIP_FUNNELER_RT
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
LIP_FUNNELER_RT = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
LIP_FUNNELER_RT = 1.0
38 LIP_PRESSOR_L
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
LIP_PRESSOR_L = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
LIP_PRESSOR_L = 1.0
39 LIP_PRESSOR_R
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
LIP_PRESSOR_R = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
LIP_PRESSOR_R = 1.0
40 LIP_PUCKER_L
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
LIP_PUCKER_L = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
LIP_PUCKER_L = 1.0
41 LIP_PUCKER_R
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
LIP_PUCKER_R = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
LIP_PUCKER_R = 1.0
42 LIP_STRETCHER_L
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
LIP_STRETCHER_L = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
LIP_STRETCHER_L = 1.0
43 LIP_STRETCHER_R
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
LIP_STRETCHER_R = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
LIP_STRETCHER_R = 1.0
44 LIP_SUCK_LB
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
LIP_SUCK_LB = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
LIP_SUCK_LB = 1.0
45 LIP_SUCK_LT
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
LIP_SUCK_LT = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
LIP_SUCK_LT = 1.0
46 LIP_SUCK_RB
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
LIP_SUCK_RB = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
LIP_SUCK_RB = 1.0
47 LIP_SUCK_RT
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
LIP_SUCK_RT = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
LIP_SUCK_RT = 1.0
48 LIP_TIGHTENER_L
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
LIP_TIGHTENER_L = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
LIP_TIGHTENER_L = 1.0
49 LIP_TIGHTENER_R
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
LIP_TIGHTENER_R = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
LIP_TIGHTENER_R = 1.0
50 LIPS_TOWARD
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
LIPS_TOWARD = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
JAW_DROP = 1.0 and LIPS_TOWARD = 1.0
51 LOWER_LIP_DEPRESSOR_L
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
LOWER_LIP_DEPRESSOR_L = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
LOWER_LIP_DEPRESSOR_L = 1.0
52 LOWER_LIP_DEPRESSOR_R
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
LOWER_LIP_DEPRESSOR_R = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
LOWER_LIP_DEPRESSOR_R = 1.0
53 MOUTH_LEFT
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
MOUTH_LEFT = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
MOUTH_LEFT = 1.0
54 MOUTH_RIGHT
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
MOUTH_RIGHT = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
MOUTH_RIGHT = 1.0
55 NOSE_WRINKLER_L
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
NOSE_WRINKLER_L = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
NOSE_WRINKLER_L = 1.0
56 NOSE_WRINKLER_R
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
NOSE_WRINKLER_R = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
NOSE_WRINKLER_R = 1.0
57 OUTER_BROW_RAISER_L
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
OUTER_BROW_RAISER_L = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
OUTER_BROW_RAISER_L = 1.0
58 OUTER_BROW_RAISER_R
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
OUTER_BROW_RAISER_R = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
OUTER_BROW_RAISER_R = 1.0
59 UPPER_LID_RAISER_L
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
UPPER_LID_RAISER_L = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
UPPER_LID_RAISER_L = 1.0
60 UPPER_LID_RAISER_R
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
UPPER_LID_RAISER_R = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
UPPER_LID_RAISER_R = 1.0
61 UPPER_LIP_RAISER_L
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
UPPER_LIP_RAISER_L = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
UPPER_LIP_RAISER_L = 1.0
62 UPPER_LIP_RAISER_R
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
UPPER_LIP_RAISER_R = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
UPPER_LIP_RAISER_R = 1.0
63 TONGUE_OUT
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
TONGUE_OUT = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
TONGUE_OUT = 1.0
64 TONGUE_LEFT
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
TONGUE_LEFT = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
TONGUE_LEFT = 1.0
65 TONGUE_RIGHT
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
TONGUE_RIGHT = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
TONGUE_RIGHT = 1.0
66 TONGUE_UP
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
TONGUE_UP = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
TONGUE_UP = 1.0
67 TONGUE_DOWN
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
TONGUE_DOWN = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
TONGUE_DOWN = 1.0

קוד לדוגמה לשליטה בעכבר ובמקלדת בעזרת תנועות של הפנים

בדוגמת הקוד הבאה אפשר לראות איך מקבלים את כל המשקלים של צורות תערובת של הבעות פנים.

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

סוגי אובייקטים חדשים

New Enum Constants

  • XR_FACE_PARAMETER_COUNT_ANDROID

הספירה XrObjectType הורחבה עם:

  • XR_OBJECT_TYPE_FACE_TRACKER_ANDROID

הספירה XrStructureType הורחבה עם:

  • 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

New Enums

מבנים חדשים

פונקציות חדשות

בעיות

היסטוריית הגרסאות

  • Revision 1, 2024-09-05 (Levana Chen)
    • תיאור ראשוני של התוסף
  • ‫Revision 2, 2025-04-01 (Kenny Vercaemer)
    • נוספו אזורים של רמת מהימנות לזיהוי פנים
  • ‫Revision 3, 2025-06-04 (Levana Chen)
    • נוסף קוד שגיאה חדש.

‫OpenXR™‎ והלוגו של OpenXR הם סימנים מסחריים בבעלות The Khronos Group Inc. ‎ והם רשומים כסימן מסחרי בסין, באיחוד האירופי, ביפן ובבריטניה.