XR_ANDROID_face_tracking OpenXR 擴充功能

名稱字串

XR_ANDROID_face_tracking

擴充功能類型

執行個體擴充功能

擴充功能註冊編號

459

修訂版本

3

擴充功能和版本依附元件

OpenXR 1.0

上次修改日期

2025-06-04

IP 狀態

未發現任何智慧財產權聲明。

著作人

Google 的 Spencer Quin

Google 員工 Jared Finder

Google 的 Levana Chen

總覽

這項擴充功能可讓應用程式取得混合形狀的權重,並在 XR 體驗中算繪臉部表情。

這項擴充功能旨在提供必要資訊,以便在虛擬空間中建立逼真的虛擬人偶,以及使用者的生動呈現方式。應用程式可以先檢查臉部校正是否已啟用,再取得混合形狀的權重。

臉部追蹤器

臉部追蹤器是一種感應裝置,可透過面向使用者的影像串流和攝影機校正功能追蹤臉部表情。這項擴充功能的用途主要是將使用者臉部表情對應至虛擬場景中的虛擬人偶。

臉部追蹤資料屬於私密個人資訊,與個人隱私和完整性息息相關。強烈建議應用程式在儲存或轉移臉部追蹤資料時,一律要求使用者主動且明確同意。

  • 應用程式建立有效的臉部追蹤器時,會收到 XR_ERROR_PERMISSION_INSUFFICIENT,直到應用程式獲准存取臉部追蹤器為止。
  • 使用 xrGetFaceStateANDROID 取得臉部狀態時,除非已允許應用程式存取權,否則 XrFaceStateANDROID::isValid 不會傳回 XR_TRUE

檢查系統功能

XrSystemFaceTrackingPropertiesANDROID 結構體的定義如下:

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

成員說明

  • type 是這個結構的 XrStructureType
  • nextNULL,或是指向結構鏈中下一個結構的指標。
  • supportsFaceTrackingXrBool32,指出目前系統是否支援臉部追蹤。

應用程式可以透過 XrSystemFaceTrackingPropertiesANDROID 結構體擴充 XrSystemProperties,在呼叫 xrGetSystemProperties 時檢查系統是否支援臉部追蹤。

只有在執行階段針對 supportsFaceTracking 傳回 XR_FALSE 時,執行階段必須xrCreateFaceTrackerANDROID 傳回 XR_ERROR_FEATURE_UNSUPPORTED

建立臉部追蹤器控制代碼

XR_DEFINE_HANDLE(XrFaceTrackerANDROID)

XrFaceTrackerANDROID 控制代碼代表臉部追蹤的臉部追蹤器。

這個控制代碼可用於透過這個擴充功能中的其他函式存取臉部追蹤資料。

xrCreateFaceTrackerANDROID 函式定義如下:

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

參數說明

應用程式可以使用 xrCreateFaceTrackerANDROID 函式建立 XrFaceTrackerANDROID 控制代碼。

如果系統不支援臉部追蹤,xrCreateFaceTrackerANDROID 會傳回 XR_ERROR_FEATURE_UNSUPPORTED

有效用量 (隱含)

傳回代碼

成功

  • 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

XrFaceTrackerCreateInfoANDROID 結構體說明如下:

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

成員說明

  • type 是這個結構的 XrStructureType
  • nextNULL,或是指向結構鏈中下一個結構的指標。核心 OpenXR 或這個擴充功能中未定義這類結構。

XrFaceTrackerCreateInfoANDROID 結構會說明建立 XrFaceTrackerANDROID 控制代碼的資訊。

有效用量 (隱含)

xrDestroyFaceTrackerANDROID 函式定義如下:

XrResult xrDestroyFaceTrackerANDROID(
    XrFaceTrackerANDROID                        faceTracker);

參數說明

臉部追蹤體驗結束時,xrDestroyFaceTrackerANDROID 函式會釋出 faceTracker 和基礎資源。

有效用量 (隱含)

執行緒安全

  • faceTracker 和任何子項控制代碼的存取權必須在外部同步處理

傳回代碼

成功

  • XR_SUCCESS

失敗

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID

檢查臉部校正

xrGetFaceCalibrationStateANDROID 函式的定義如下:

XrResult xrGetFaceCalibrationStateANDROID(
    XrFaceTrackerANDROID                        faceTracker,
    XrBool32*                                   faceIsCalibratedOutput);

參數說明

應用程式可以使用 xrGetFaceCalibrationStateANDROID 函式檢查臉部校正狀態。

如果追蹤服務仍在初始化,執行階段「可能」會從 xrGetFaceCalibrationStateANDROID 傳回 XR_ERROR_SERVICE_NOT_READY_ANDROID,表示應用程式「可以」稍後重試。

如果系統不支援臉部校正,xrGetFaceCalibrationStateANDROID 會傳回 XR_ERROR_FEATURE_UNSUPPORTED。否則,faceIsCalibratedOutput 可能會設為 XR_TRUE,以反映臉部校正狀態。

有效用量 (隱含)

傳回代碼

成功

  • 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_SERVICE_NOT_READY_ANDROID

取得臉部表情

xrGetFaceStateANDROID 函式會在指定時間傳回臉部表情的混合形狀。

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

參數說明

有效用量 (隱含)

傳回代碼

成功

  • 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

XrFaceStateGetInfoANDROID 結構會說明要取得臉部表情的資訊。

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

成員說明

  • type 是這個結構的 XrStructureType
  • nextNULL,或是指向結構鏈中下一個結構的指標。核心 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
  • nextNULL,或是指向結構鏈中下一個結構的指標。核心 OpenXR 或這個擴充功能中未定義這類結構。
  • parametersCapacityInputparameters 陣列容量的 uint32_t,或是 0,表示要求擷取必要容量。
  • parametersCountOutputuint32_t,用於說明 parameters 的數量,或 parametersCapacityInput 不足時所需的容量。
  • parameters 是應用程式分配的 float 陣列指標,會填入臉部表情混合形狀的權重。
  • faceTrackingState 是臉部追蹤有效狀態的 XrFaceTrackingStateANDROID
  • sampleTimeXrTime 時間,系統會追蹤或推斷傳回的運算式。如果當時的推斷成功,這會等於要求運算式權重的時間。
  • isValid 表示資料是否有效,即使資料並非來自目前的影格也一樣。
  • regionConfidencesCapacityInputregionConfidences 陣列容量的 uint32_t,或是 0,表示要求擷取必要容量。
  • regionConfidencesCountOutputuint32_t,用於說明 regionConfidences 的數量,或 regionConfidencesCapacityInput 不足時所需的容量。
  • regionConfidences 是應用程式分配的 float 陣列指標,會填入每個臉部區域的信賴度值。
  • 如要詳細瞭解如何擷取必要的 parametersregionConfidences 大小,請參閱「緩衝區大小參數」一節。

應用程式可以parametersCapacityInput 設為 XR_FACE_PARAMETER_COUNT_ANDROID,取得以 XrFaceParameterIndicesANDROID 建立索引的臉部表情。

傳回的 parameters 代表目前臉部表情的混合形狀權重。

parameters 陣列更新會排序,讓應用程式可以使用對應的臉部表情列舉 (例如 XrFaceParameterIndicesANDROID) 索引元素。

有效用量 (隱含)

  • 使用 XrFaceStateANDROID 前,XR_ANDROID_face_tracking 擴充功能必須啟用
  • 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;

列舉的意義如下:

列舉

說明

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 的閾值,完全停用相應臉部區域的混合形狀。

「下半臉」區域代表眼睛以下的所有部位,包括嘴巴、下巴、臉頰和鼻子。眼部區域包括眼睛和眉毛區域。

下表說明與各個信賴區間相關的混合形狀:

信賴區域 混合形狀
下半臉 `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`
左/右臉上部 `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`

形狀混合的慣例

這個擴充功能會透過 XR_FACE_PARAMETER_COUNT_ANDROID 定義 68 個混合形狀,適用於縮減的 G-Nome 格式。這個列舉中的每個參數都是混合形狀陣列的索引,其值為 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 和 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));

新物件類型

新的列舉常數

  • 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

新列舉

新結構

新函式

問題

版本記錄

  • 修訂版本 1,2024-09-05 (Levana Chen)
    • 擴充功能初始說明
  • 修訂版本 2,2025-04-01 (Kenny Vercaemer)
    • 新增臉部信心區域
  • 修訂版本 3,2025-06-04 (Levana Chen)
    • 新增錯誤代碼。

OpenXR™ 和 OpenXR 標誌是 The Khronos Group Inc. 的商標,已在中國、歐盟、日本和英國註冊為商標。