Vive Focus (OG) Hand Tracking Pt 1
Since i got distortion figured out (mostly), i decided that it's time for a second sell point for me; a somewhat functional hand tracking.
(The first and main were freedom and lack of any account/registration requirement. Headset just WORKS. And it's also super cheap., almost like M-Quest 1) A little addition, im NOT talking about 2D point type of tracking, because it can be ran on any single-camera device, and does Not track fingers/depth. And it's Exclusively about Original HTC Vive Focus (with a single controller) in a vacuum, with no comparison to other headsets, because i like to tinker with things.
SOOooo, the brave souls who had tried (or found) any apps that included hand tracking could tell, that it's here clearly for a checkmark to say Oh yeah, it's here. And yes, it is indeed here, and poll rate (pps = polls per second) varies on an application's FPS. Here's some observations (doesn't matter if VBlank is on):
15 pps anything between (15-40fps), 20pps up to (70fps) and 25 when above 70.
It really depends of contrast lighting, so strapping a usb C LED in front of headset is a nice addition, that would also increase poll rate of cameras themselves during the day time, because headset don't need to change exposure for dark spots.
There is not interpolation between those poses. They are fed as is as an output in GestureProvider component. And even then, there's around 1/3 second of delay bettween the latest poll, hence, some kind of "motion prediction", or as i prefer to call it, a Motion Amplification needed. Same with rotation.
And it's Only the wrist tracking. You can get same thing by setting tracking pose from Skeletor to 3D Point to simplify things to yourself, and get rid of issues with fingers. (poll rate and tracking quality is the same as Skeleton tho), probably a good idea to include a hand tracking timeout, so hand won't disappear on immediate hand loss, and stays visible for 2-3 polls, in case the tracking itself looses the hand for whatever reason and finds it shortly after.
At last, the fingers themselves. Oh-h-h-h boy, where do i begin that one.. They are here. Yeah. And they probably are the lamest thing from entire hand tracking algoritm HTC had made until they released vive Flow. Asfar as i know Frooxius had to Modify the way it worked in Neos for Vive Pros just to make it a bit more stable. Fingers collapse on themselves, making weird stuff under most hand angles and just break on each joint Plus default MeshRender object for prefab hands is Super unoptimized and causes that joint jank on a first place.
Fixes i got on my mind are including a Heavy modification of that hand MeshRender hand script to Remove that joint jank and only set each finger' rotation on Y axis, so they at least won't go sideways (bisides the first bone in a finger), and make a Simple curl parameter for each finger that would return float, and Not 4 V3 vectors per finger. Plus, as far as i can tell, script tries to calculate finger length every frame. In my case, id would've been more like; When headset's proximity sensor detects user (Application.Unpaused), wait for user to bring hands and calibrate them for idk, 30-90 polls, and then use that hand&finger size calibration until proximity senser gets re-triggered by re-putting headset on (by Potentially, a different person)
There's gonna be more yapping about this headset later on, because i'm too invested into this thing, and i'm just in a mood for this type of stuff as of rn.
Most of XR plugins do not support OG Vive Focus, so their Deprecated hand tracking SDK is the only thing that allows hand tracking to work (how to Find & Get it? Wayback machine + old forum threads & archive SDK pages that are down.)