XR_ANDROID_face_tracking OpenXR 拡張機能

Name String

XR_ANDROID_face_tracking

拡張機能のタイプ

インスタンス拡張機能

Registered Extension Number

459

リビジョン

3

拡張機能とバージョンの依存関係

OpenXR 1.0

最終更新日

2025-06-04

IP ステータス

既知の IP 申し立てはありません。

寄与者

Spencer Quin(Google)

Jared Finder, Google

Levana Chen(Google)

概要

この拡張機能により、アプリケーションはブレンド シェイプの重みを取得し、XR エクスペリエンスで表情をレンダリングできます。

この拡張機能は、仮想空間でリアルなアバターやユーザーの表現を作成するために必要な情報を提供することを目的としています。アプリは、ブレンドシェイプの重みを取得する前に、顔のキャリブレーションの有効化を確認できます

顔トラッカー

顔トラッカーは、ユーザーを向いた画像ストリームとカメラのキャリブレーションを通じて表情を追跡するセンシング デバイスです。この拡張機能の主な目的は、仮想シーンでユーザーの表情をアバターにマッピングすることです。

顔追跡データは機密性の高い個人情報であり、個人のプライバシーと完全性に密接に関連しています。顔追跡データを保存または転送するアプリは、常にユーザーに明示的な同意を求めることが強く推奨されます。

  • アプリが顔トラッカーへのアクセスを許可されるまで、アクティブな顔トラッカーを作成する際に XR_ERROR_PERMISSION_INSUFFICIENT がアプリに返されます。
  • xrGetFaceStateANDROID を使用して顔の状態を取得する場合、アプリのアクセスが許可されていない限り、XrFaceStateANDROID::isValidXR_TRUE を返しません。

システムの性能を検査する

XrSystemFaceTrackingPropertiesANDROID 構造体は次のように定義されます。

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

メンバーの説明

  • type は、この構造の XrStructureType です。
  • next は、NULL または構造体チェーン内の次の構造体へのポインタです。
  • supportsFaceTracking は、現在のシステムが顔のトラッキングをサポートしているかどうかを示す XrBool32 です。

アプリケーションは、xrGetSystemProperties を呼び出すときに XrSystemPropertiesXrSystemFaceTrackingPropertiesANDROID 構造体で拡張することで、システムが顔トラッキングに対応しているかどうかを検査できます

ランタイムが 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 ハンドルを作成できます。

システムが顔トラッキングをサポートしていない場合、xrCreateFaceTrackerANDROIDXR_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 です。
  • next は、NULL または構造体チェーン内の次の構造体へのポインタです。コア 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 を返すことで、アプリが後で再試行できることを示すことがあります。

システムが顔のキャリブレーションをサポートしていない場合、xrGetFaceCalibrationStateANDROIDXR_ERROR_FEATURE_UNSUPPORTED を返します。それ以外の場合は、顔のキャリブレーション状態を反映するために faceIsCalibratedOutputXR_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 です。
  • 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 は、parameters 配列の容量を記述する uint32_t です。必要な容量を取得するリクエストを示す場合は 0 です。
  • parametersCountOutput は、parameters の数、または parametersCapacityInput が不十分な場合に必要な容量を記述する uint32_t です。
  • parameters は、アプリケーションによって割り当てられた float の配列へのポインタです。この配列には、表情のブレンド シェイプの重みが入力されます。
  • faceTrackingState は、顔トラッキングの有効性ステータスの XrFaceTrackingStateANDROID です。
  • sampleTime は、返された式が追跡または外挿される XrTime 時間です。その時点での外挿が成功した場合は、式重みがリクエストされた時刻に等しくなります。
  • isValid は、データが現在のフレームのものでなくても有効かどうかを示します。
  • regionConfidencesCapacityInput は、regionConfidences 配列の容量を記述する uint32_t です。必要な容量を取得するリクエストを示す場合は 0 です。
  • regionConfidencesCountOutput は、regionConfidences の数、または regionConfidencesCapacityInput が不十分な場合に必要な容量を記述する uint32_t です。
  • regionConfidences は、各顔領域の信頼値が入力される float のアプリ割り当て配列へのポインタです。
  • 必要な parametersregionConfidences のサイズを取得する方法について詳しくは、バッファサイズ パラメータのセクションをご覧ください。

アプリケーションは、parametersCapacityInputXR_FACE_PARAMETER_COUNT_ANDROID に設定して、XrFaceParameterIndicesANDROID でインデックス登録された表情を取得できます。

返される parameters は、現在の表情のブレンド シェイプの重みを表します。

parameters 配列の更新は、アプリケーションが対応する表情列挙型(XrFaceParameterIndicesANDROID など)を使用して要素をインデックス登録できるように順序付けられます。

有効な使用方法(暗黙的)

  • XrFaceStateANDROID を使用する前に、XR_ANDROID_face_tracking 拡張機能を有効にする必要があります
  • typeXR_TYPE_FACE_STATE_ANDROID でなければなりません。
  • next は、NULL または構造体チェーン内の次の構造体への有効なポインタでなければなりません。
  • parametersCapacityInput0, parameters でない場合、parametersCapacityInput float 値の配列へのポインタでなければなりません。
  • regionConfidencesCapacityInput0, 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

説明

XR_FACE_TRACKING_STATE_PAUSED_ANDROID

顔トラッキングが一時停止しているが、今後再開される可能性があることを示します。

XR_FACE_TRACKING_STATE_STOPPED_ANDROID

トラッキングは停止したが、クライアントにはまだアクティブなフェイストラッカーがある。

XR_FACE_TRACKING_STATE_TRACKING_ANDROID

顔がトラッキングされ、ポーズが最新の状態です。

信頼領域

XR_ANDROID_face_tracking 拡張機能は、左目、右目、下顔面の 3 つの顔領域の信頼値も提供します。これらの値は 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`

ブレンド シェイプの規則

この拡張機能は、縮小された G-Nome 形式用に XR_FACE_PARAMETER_COUNT_ANDROID を介して 68 個のブレンド シェイプを定義します。この列挙型の各パラメータは、値が 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 = 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 年 9 月 5 日(Levana Chen)
    • 拡張機能の最初の説明
  • リビジョン 2、2025 年 4 月 1 日(Kenny Vercaemer)
    • 顔の信頼度領域を追加
  • リビジョン 3、2025 年 6 月 4 日(Levana Chen)
    • 新しいエラーコードを追加しました。

OpenXR™ および OpenXR のロゴは、Khronos Group Inc. が所有する商標であり、中国、欧州連合、日本、英国で商標として登録されています。