HTC (eye only) and not face
What is blocking face tracking for HTC?
Wanted to investigate.
WiVRn doesn't pass thru HTC face tracking yet. here's how i did the FB one: https://github.com/WiVRn/WiVRn/commit/e6f3ae0113a086ad9ba4bcab3349f2b9a619aa50
it's made in a way so that a HTC implementation can live alongside the FB one.
https://registry.khronos.org/OpenXR/specs/1.1/man/html/XR_HTC_body_tracking.html
https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XR_HTC_body_tracking
Notes for implementation.
// Provided by XR_HTC_body_tracking
typedef enum XrBodyJointHTC {
XR_BODY_JOINT_PELVIS_HTC = 0,
XR_BODY_JOINT_LEFT_HIP_HTC = 1,
XR_BODY_JOINT_LEFT_KNEE_HTC = 2,
XR_BODY_JOINT_LEFT_ANKLE_HTC = 3,
XR_BODY_JOINT_LEFT_FEET_HTC = 4,
XR_BODY_JOINT_RIGHT_HIP_HTC = 5,
XR_BODY_JOINT_RIGHT_KNEE_HTC = 6,
XR_BODY_JOINT_RIGHT_ANKLE_HTC = 7,
XR_BODY_JOINT_RIGHT_FEET_HTC = 8,
XR_BODY_JOINT_WAIST_HTC = 9,
XR_BODY_JOINT_SPINE_LOWER_HTC = 10,
XR_BODY_JOINT_SPINE_MIDDLE_HTC = 11,
XR_BODY_JOINT_SPINE_HIGH_HTC = 12,
XR_BODY_JOINT_CHEST_HTC = 13,
XR_BODY_JOINT_NECK_HTC = 14,
XR_BODY_JOINT_HEAD_HTC = 15,
XR_BODY_JOINT_LEFT_CLAVICLE_HTC = 16,
XR_BODY_JOINT_LEFT_SCAPULA_HTC = 17,
XR_BODY_JOINT_LEFT_ARM_HTC = 18,
XR_BODY_JOINT_LEFT_ELBOW_HTC = 19,
XR_BODY_JOINT_LEFT_WRIST_HTC = 20,
XR_BODY_JOINT_RIGHT_CLAVICLE_HTC = 21,
XR_BODY_JOINT_RIGHT_SCAPULA_HTC = 22,
XR_BODY_JOINT_RIGHT_ARM_HTC = 23,
XR_BODY_JOINT_RIGHT_ELBOW_HTC = 24,
XR_BODY_JOINT_RIGHT_WRIST_HTC = 25,
XR_BODY_JOINT_MAX_ENUM_HTC = 0x7FFFFFFF
} XrBodyJointHTC;
// Provided by XR_HTC_facial_tracking
typedef enum XrEyeExpressionHTC {
XR_EYE_EXPRESSION_LEFT_BLINK_HTC = 0,
XR_EYE_EXPRESSION_LEFT_WIDE_HTC = 1,
XR_EYE_EXPRESSION_RIGHT_BLINK_HTC = 2,
XR_EYE_EXPRESSION_RIGHT_WIDE_HTC = 3,
XR_EYE_EXPRESSION_LEFT_SQUEEZE_HTC = 4,
XR_EYE_EXPRESSION_RIGHT_SQUEEZE_HTC = 5,
XR_EYE_EXPRESSION_LEFT_DOWN_HTC = 6,
XR_EYE_EXPRESSION_RIGHT_DOWN_HTC = 7,
XR_EYE_EXPRESSION_LEFT_OUT_HTC = 8,
XR_EYE_EXPRESSION_RIGHT_IN_HTC = 9,
XR_EYE_EXPRESSION_LEFT_IN_HTC = 10,
XR_EYE_EXPRESSION_RIGHT_OUT_HTC = 11,
XR_EYE_EXPRESSION_LEFT_UP_HTC = 12,
XR_EYE_EXPRESSION_RIGHT_UP_HTC = 13,
XR_EYE_EXPRESSION_MAX_ENUM_HTC = 0x7FFFFFFF
} XrEyeExpressionHTC;
// Provided by XR_HTC_facial_tracking
typedef enum XrLipExpressionHTC {
XR_LIP_EXPRESSION_JAW_RIGHT_HTC = 0,
XR_LIP_EXPRESSION_JAW_LEFT_HTC = 1,
XR_LIP_EXPRESSION_JAW_FORWARD_HTC = 2,
XR_LIP_EXPRESSION_JAW_OPEN_HTC = 3,
XR_LIP_EXPRESSION_MOUTH_APE_SHAPE_HTC = 4,
XR_LIP_EXPRESSION_MOUTH_UPPER_RIGHT_HTC = 5,
XR_LIP_EXPRESSION_MOUTH_UPPER_LEFT_HTC = 6,
XR_LIP_EXPRESSION_MOUTH_LOWER_RIGHT_HTC = 7,
XR_LIP_EXPRESSION_MOUTH_LOWER_LEFT_HTC = 8,
XR_LIP_EXPRESSION_MOUTH_UPPER_OVERTURN_HTC = 9,
XR_LIP_EXPRESSION_MOUTH_LOWER_OVERTURN_HTC = 10,
XR_LIP_EXPRESSION_MOUTH_POUT_HTC = 11,
XR_LIP_EXPRESSION_MOUTH_SMILE_RIGHT_HTC = 12,
XR_LIP_EXPRESSION_MOUTH_SMILE_LEFT_HTC = 13,
XR_LIP_EXPRESSION_MOUTH_SAD_RIGHT_HTC = 14,
XR_LIP_EXPRESSION_MOUTH_SAD_LEFT_HTC = 15,
XR_LIP_EXPRESSION_CHEEK_PUFF_RIGHT_HTC = 16,
XR_LIP_EXPRESSION_CHEEK_PUFF_LEFT_HTC = 17,
XR_LIP_EXPRESSION_CHEEK_SUCK_HTC = 18,
XR_LIP_EXPRESSION_MOUTH_UPPER_UPRIGHT_HTC = 19,
XR_LIP_EXPRESSION_MOUTH_UPPER_UPLEFT_HTC = 20,
XR_LIP_EXPRESSION_MOUTH_LOWER_DOWNRIGHT_HTC = 21,
XR_LIP_EXPRESSION_MOUTH_LOWER_DOWNLEFT_HTC = 22,
XR_LIP_EXPRESSION_MOUTH_UPPER_INSIDE_HTC = 23,
XR_LIP_EXPRESSION_MOUTH_LOWER_INSIDE_HTC = 24,
XR_LIP_EXPRESSION_MOUTH_LOWER_OVERLAY_HTC = 25,
XR_LIP_EXPRESSION_TONGUE_LONGSTEP1_HTC = 26,
XR_LIP_EXPRESSION_TONGUE_LEFT_HTC = 27,
XR_LIP_EXPRESSION_TONGUE_RIGHT_HTC = 28,
XR_LIP_EXPRESSION_TONGUE_UP_HTC = 29,
XR_LIP_EXPRESSION_TONGUE_DOWN_HTC = 30,
XR_LIP_EXPRESSION_TONGUE_ROLL_HTC = 31,
XR_LIP_EXPRESSION_TONGUE_LONGSTEP2_HTC = 32,
XR_LIP_EXPRESSION_TONGUE_UPRIGHT_MORPH_HTC = 33,
XR_LIP_EXPRESSION_TONGUE_UPLEFT_MORPH_HTC = 34,
XR_LIP_EXPRESSION_TONGUE_DOWNRIGHT_MORPH_HTC = 35,
XR_LIP_EXPRESSION_TONGUE_DOWNLEFT_MORPH_HTC = 36,
XR_LIP_EXPRESSION_MAX_ENUM_HTC = 0x7FFFFFFF
} XrLipExpressionHTC;
Possibly relevant, this PR enables the Vive Facial Tracker's camera to be used with Project Babble. The current VRCFT Babble module should work for this as well: https://github.com/Project-Babble/ProjectBabble/pull/82
This issue is for standalone HTC, wired HTC can be used via Babble.
Standalone HTC seems to not be possible with pure OpenXR, even though the extensions are there. Starting the actual face tracker requires WaveSDK.
WiVRn (as of v0.23) passes face tracking data now, just a heads up!
(though, atm, you may want to build oscavmgr from master, as your eyes will cross with the current release)