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일 (레바나 첸)
    • 초기 확장 프로그램 설명

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