XR_ANDROID_face_tracking OpenXR 확장 프로그램

이름 문자열

XR_ANDROID_face_tracking

확장 프로그램 유형

인스턴스 연장

등록된 부속 번호

459

버전

1

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

OpenXR 1.0

최종 수정일

2024-09-06

IP 상태

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

도움을 주신 분들

스펜서 퀸, Google

재러드 파인더, Google

레바나 첸, Google

개요

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

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

얼굴 추적기

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

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

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

얼굴 추적기 핸들 만들기

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 함수를 사용하여 얼굴 보정 상태를 확인할 있습니다.

시스템에서 얼굴 보정을 지원하지 않으면 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

얼굴 표정 가져오기

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;
} XrFaceStateANDROID;

회원 설명

  • type은 이 구조의 XrStructureType입니다.
  • nextNULL 또는 구조 체인의 다음 구조에 대한 포인터입니다. 핵심 OpenXR 또는 이 확장 프로그램에는 이러한 구조가 정의되어 있지 않습니다.
  • parametersCapacityInputparameters 배열의 용량을 설명하는 uint32_t이거나 필요한 용량을 검색하라는 요청을 나타내는 0입니다.
  • parametersCountOutputparameters의 개수를 나타내는 uint32_t이거나 parametersCapacityInput가 충분하지 않은 경우 필요한 용량입니다.
  • parameters는 얼굴 표정 혼합 도형의 가중치로 채워질 애플리케이션 할당 float 배열의 포인터입니다.
  • faceTrackingState는 얼굴 추적의 유효성 상태의 XrFaceTrackingStateANDROID입니다.
  • sampleTime는 반환된 표현식이 추적되거나 추론되는 XrTime 시간입니다. 이 값은 당시에 추론이 성공한 경우 표현식 가중치가 요청된 시간과 같습니다.
  • isValid는 데이터가 현재 프레임에서 가져온 것이 아니더라도 데이터가 유효한지 여부를 나타냅니다.
  • 필요한 parameters 크기를 검색하는 방법에 관한 자세한 설명은 버퍼 크기 매개변수 섹션을 참고하세요.

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

반환된 parameters는 현재 표정의 혼합 도형의 가중치를 나타냅니다.

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

유효한 사용 (암시적)

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

얼굴이 추적되고 현재 자세를 취하고 있습니다.

혼합 도형의 규칙

이 확장은 축소된 G-Nome 형식의 XR_FACE_PARAMETER_COUNT_ANDROID를 통해 63개의 블렌드 도형을 정의합니다. 이 열거형의 각 매개변수는 블렌드 모양 배열의 색인으로, 값은 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
} 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

얼굴 추적 코드 예시

다음 예시 코드는 얼굴 표정 블렌드 도형의 모든 가중치를 가져오는 방법을 보여줍니다.

XrSession session; // previously initialized, for example created at app startup.

// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrCreateFaceTrackerANDROID xrCreateFaceTrackerANDROID; // previously initialized
PFN_xrDestroyFaceTrackerANDROID xrDestroyFaceTrackerANDROID; // previously initialized
PFN_xrGetFaceStateANDROID xrGetFaceStateANDROID; // previously initialized
PFN_xrGetFaceCalibrationStateANDROID xrGetFaceCalibrationStateANDROID; // previously initialized

XrFaceTrackerANDROID faceTracker;
XrFaceTrackerCreateInfoANDROID
        createInfo{.type = XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID,
                    .next = nullptr};
CHK_XR(xrCreateFaceTrackerANDROID(session, &createInfo, &faceTracker));

// If the system supports face calibration:
bool isCalibrated;
CHK_XR(xrGetFaceCalibrationStateANDROID(faceTracker, &isCalibrated));
if (!isCalibrated) {
    // Redirect the user to system calibration setting.
}

XrFaceStateANDROID faceState;
float faceExpressionParameters[XR_FACE_PARAMETER_COUNT_ANDROID];
faceState.type = XR_TYPE_FACE_STATE_ANDROID;
faceState.next = nullptr;
faceState.parametersCapacityInput = XR_FACE_PARAMETER_COUNT_ANDROID;
faceState.parameters = faceExpressionParameters;

while (1) {
    // ...
    // For every frame in the frame loop
    // ...
    XrFrameState frameState; // previously returned from xrWaitFrame

    XrFaceStateGetInfoANDROID faceGetInfo{
            .type = XR_TYPE_FACE_STATE_GET_INFO_ANDROID,
            .next = nullptr,
            .time = frameState.predictedDisplayTime,
    };

    CHECK_XR(xrGetFaceStateANDROID(faceTracker, &faceGetInfo, &faceState));
    if (faceState.isValid) {
        for (uint32_t i = 0; i < XR_FACE_PARAMETER_COUNT_ANDROID; ++i) {
            // parameters[i] contains a weight of specific blend shape
        }
    }
}

// after usage
CHK_XR(xrDestroyFaceTrackerANDROID(faceTracker));

새로운 객체 유형

새로운 enum 상수

  • 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

새로운 enum

새로운 구조

새로운 함수

문제

버전 기록

  • 버전 1, 2024년 9월 5일 (레바나 첸)
    • 초기 확장 프로그램 설명