XR_ANDROID_face_tracking OpenXR 확장 프로그램

이름 문자열

XR_ANDROID_face_tracking

확장 프로그램 유형

인스턴스 확장

등록된 내선 번호

459

버전

3

확장 프로그램 및 버전 종속 항목

OpenXR 1.0

최종 수정일

2025-06-04

IP 상태

알려진 IP 소유권 주장이 없습니다.

도움을 주신 분들

스펜서 퀸, Google

Jared Finder, Google

레바나 첸, Google

개요

이 확장 프로그램을 사용하면 애플리케이션이 블렌드 셰이프의 가중치를 가져와 XR 환경에서 얼굴 표정을 렌더링할 수 있습니다.

이 확장 프로그램은 가상 공간에서 사실적인 아바타와 표현력 있는 사용자 표현을 만드는 데 필요한 정보를 제공하기 위한 것입니다. 애플리케이션은 블렌드 셰이프의 가중치를 가져오기 전에 얼굴 보정 활성화를 확인할 수 있습니다.

얼굴 추적기

얼굴 추적기는 사용자 쪽 이미지 스트림과 카메라 보정을 통해 얼굴 표정을 추적하는 감지 기기입니다. 이 확장 프로그램의 주요 목적은 가상 장면에서 사용자 얼굴 표정을 아바타에 매핑하는 것입니다.

얼굴 추적 데이터는 민감한 개인 정보이며 개인 정보 보호 및 무결성과 밀접하게 연결되어 있습니다. 얼굴 추적 데이터를 저장하거나 전송하는 애플리케이션은 항상 사용자에게 이를 수행할 수 있는 적극적이고 구체적인 수락을 요청하는 것이 좋습니다.

  • 애플리케이션이 얼굴 추적기에 대한 액세스가 허용될 때까지 활성 얼굴 추적기를 만들 때 애플리케이션은 XR_ERROR_PERMISSION_INSUFFICIENT를 수신합니다.
  • xrGetFaceStateANDROID를 사용하여 얼굴 상태를 가져올 때 애플리케이션 액세스가 허용되지 않으면 XrFaceStateANDROID::isValidXR_TRUE를 반환하지 않습니다.

시스템 기능 검사

XrSystemFaceTrackingPropertiesANDROID 구조는 다음과 같이 정의됩니다.

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

회원 설명

  • type은 이 구조의 XrStructureType입니다.
  • nextNULL이거나 구조체 체인의 다음 구조체에 대한 포인터입니다.
  • supportsFaceTracking는 현재 시스템이 얼굴 추적을 지원하는지 나타내는 XrBool32입니다.

애플리케이션은 xrGetSystemProperties를 호출할 때 XrSystemFaceTrackingPropertiesANDROID 구조로 XrSystemProperties를 확장하여 시스템이 얼굴 추적을 지원하는지 검사할 수 있습니다.

런타임이 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입니다.
  • 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를 반환하여 애플리케이션이 나중에 다시 시도할 수 있음을 나타낼 수 있습니다.

시스템에서 얼굴 보정을 지원하지 않으면 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입니다.
  • 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입니다.
  • parametersCountOutputparameters의 수를 설명하는 uint32_t이거나 parametersCapacityInput이 부족한 경우 필요한 용량입니다.
  • parameters은 얼굴 표정 블렌드 셰이프의 가중치로 채워질 애플리케이션 할당 float 배열의 포인터입니다.
  • faceTrackingState는 얼굴 추적의 유효성 상태의 XrFaceTrackingStateANDROID입니다.
  • sampleTime는 반환된 표현식이 추적되거나 추정되는 XrTime 시간입니다. 이 값은 해당 시점의 외삽이 성공한 경우 표현식 가중치가 요청된 시간과 같습니다.
  • isValid는 데이터가 현재 프레임에서 가져온 것이 아니더라도 유효한지 여부를 나타냅니다.
  • regionConfidencesCapacityInputregionConfidences 배열의 용량을 설명하는 uint32_t이거나 필요한 용량을 가져오는 요청을 나타내는 0입니다.
  • regionConfidencesCountOutputregionConfidences의 수를 설명하는 uint32_t이거나 regionConfidencesCapacityInput이 부족한 경우 필요한 용량입니다.
  • regionConfidences는 각 얼굴 영역의 신뢰도 값으로 채워질 애플리케이션 할당 float 배열에 대한 포인터입니다.
  • 필요한 parametersregionConfidences 크기를 가져오는 방법에 관한 자세한 설명은 버퍼 크기 매개변수 섹션을 참고하세요.

애플리케이션은 parametersCapacityInputXR_FACE_PARAMETER_COUNT_ANDROID로 설정하여 XrFaceParameterIndicesANDROID로 색인이 생성된 얼굴 표정을 가져올 수 있습니다.

반환된 parameters는 현재 얼굴 표정의 블렌드 셰이프 가중치를 나타냅니다.

parameters 배열 업데이트는 애플리케이션이 해당 얼굴 표정 enum (예: XrFaceParameterIndicesANDROID)을 사용하여 요소를 색인화할 수 있도록 정렬됩니다.

유효한 사용 (암시적)

  • XrFaceStateANDROID를 사용하기 전에 XR_ANDROID_face_tracking 확장 프로그램을 사용 설정해야 합니다.
  • typeXR_TYPE_FACE_STATE_ANDROID이어야 합니다.
  • nextNULL이거나 구조 체인의 다음 구조를 가리키는 유효한 포인터여야 합니다.
  • parametersCapacityInput이 아닌 경우 0, parametersparametersCapacityInput float 값의 배열을 가리키는 포인터여야 합니다.
  • regionConfidencesCapacityInput이 아닌 경우 0, regionConfidencesregionConfidencesCapacityInput 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 확장 프로그램은 왼쪽 눈, 오른쪽 눈, 아래쪽 얼굴의 세 얼굴 영역에 대한 신뢰도 값도 제공합니다. 이 값은 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 = 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 (레바나 첸)
    • 초기 확장 프로그램 설명
  • 버전 2, 2025-04-01 (케니 베르카에머)
    • 얼굴 신뢰도 영역 추가
  • 버전 3, 2025년 6월 4일 (레바나 첸)
    • 새 오류 코드가 추가되었습니다.

OpenXR™ 및 OpenXR 로고는 The Khronos Group Inc. 소유의 상표이며 중국, 유럽 연합, 일본, 영국에 상표로 등록되어 있습니다.