oscavmgr icon indicating copy to clipboard operation
oscavmgr copied to clipboard

HTC (eye only) and not face

Open fire opened this issue 1 year ago • 6 comments

What is blocking face tracking for HTC?

Wanted to investigate.

fire avatar Oct 03 '24 20:10 fire

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.

galister avatar Oct 03 '24 20:10 galister

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;

Untitled

fire avatar Oct 03 '24 20:10 fire

// 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;


fire avatar Oct 03 '24 20:10 fire

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

dfgHiatus avatar Jan 24 '25 21:01 dfgHiatus

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.

galister avatar Feb 04 '25 15:02 galister

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)

Awzri avatar Feb 09 '25 02:02 Awzri