SDraw / driver_leap

Self-sustainable fork of SteamVR driver for Leap Motion controller with updated vendor libraries
MIT License
128 stars 19 forks source link

Vrchat Beta Supports SteamVR Skeletal System Now! #16

Closed Reiko9 closed 1 month ago

Reiko9 commented 1 month ago

Which means full range of finger movement is supported as i have seen on a video (including finger spreading) and it includes gesture methods, so it does not need physical controller emulation.

The key to making this useful of course would be having the physical controllers used for movement, Not provide the hand tracking position, but instead rely on the hand tracking position (Provided by the cameras). This way you could use hand tracking and let go of the controllers and have it function fairly naturally. (Possibly with a means to toggle back to having physical controller position for hands for debugging)

The Work-around I used in the past was using a usb gamepad controller, which bypassed steamvr and required the vrchat window selected to move around in the world, while steamvr handled the hand tracking. So predictably when moving my hands it looked like they were holding an invisible gamepad. (Back then I also relied on the leapmotion-osc app to provide finger spreading)

Here is the Vrchat Beta release announcement from July 24th showing the Native SteamVR Skeletal system support https://docs.vrchat.com/docs/vrchat-202431

########################################################## "SteamVR Input 2.0 and PCVR Hand Tracking Support!

SteamVR Skeletal System - We now have PCVR support for SteamVR skeletal hand tracking and finger-based input similar to our native Quest release!
    Finger tracking for Index controllers has also been improved, as it directly uses the skeletal data from SteamVR.
A new button has been added to the Main Menu Controls page to open the SteamVR bindings UI for VRChat.
Full controller remapping via the SteamVR bindings UI - Remap any action to any button you want on any controller. The customization possibilities are nearly endless!
New gesture methods - Including new mappable "Gesture Direct" buttons that let you explicitly map gestures to any button. This is helpful for triggering avatar effects via explicit button presses!
Bonus Mappable Actions - Earmuffs, Nameplates, Chatbox, and more can be one button press away with an array of new mappable shortcuts.
Auto-Hold - Tired of holding the grip button for equipable items like pens and grappling hooks? The option to auto-hold them is now active if the new "Drop" action is mapped. Now you can press once to pick those equips up and press again to drop them!

"

The "Holy Grail" of course would be having the Controllers tracked to control laser positioning (Separately from Hands) and the Cameras hand tracking specifically to handle the Avatars hand position/gesture. That way you get the accuracy of the controllers lasers for use cases that do not involve "physical" buttons for hand interaction. (I have No idea if Vrchat supports Skeletal tracking as a separate input from a physical controller)

SDraw commented 1 month ago

Good for them, but I will not make any changes to this driver just for this game. Moreover, I don't like approach that VRChat uses for handling skeletal input, plus personal reasons. But it doesn't stop you to fork this repo and make own changes, just remember that those changes will never be accepted as pull request.

cadergator10 commented 3 weeks ago

So what I'm getting is this driver converts ultraleap tracking to controller input, but doesn't provide any data to the skeleton.

Is there any other drivers that only provide skeleton input to steam? That's really just what I'm curious about

SDraw commented 3 weeks ago

So what I'm getting is this driver converts ultraleap tracking to controller input, but doesn't provide any data to the skeleton.

Is there any other drivers that only provide skeleton input to steam? That's really just what I'm curious about

How did you come to this conclusion? Skeletal data is literally here: https://github.com/SDraw/driver_leap/blob/master/driver_leap/Devices/Controller/CLeapIndexController.cpp#L494-L549

cadergator10 commented 3 weeks ago

So what I'm getting is this driver converts ultraleap tracking to controller input, but doesn't provide any data to the skeleton.

Is there any other drivers that only provide skeleton input to steam? That's really just what I'm curious about

How did you come to this conclusion? Skeletal data is literally here: https://github.com/SDraw/driver_leap/blob/master/driver_leap/Devices/Controller/CLeapIndexController.cpp#L494-L549

Oh, I assumed that since vrchats new system used the skeleton and this issue report said it wouldn't be worked on, that it wasn't supported. So does this work at all for it?

SDraw commented 3 weeks ago

Oh, I assumed that since vrchats new system used the skeleton and this issue report said it wouldn't be worked on, that it wasn't supported. So does this work at all for it?

If game uses skeletal input in a right way (gets skeletal input from current active controllers), then it works as intended. Here is an example from SteamVR Home:

https://github.com/user-attachments/assets/3ce077ac-5989-4a48-8ffd-0adea873163a

Small addition: This was recorded by my friend (who can't run Gemini by unknown reasons and I've recompiled it for Orion version of tracking software):

https://github.com/user-attachments/assets/d4c1aed8-c8df-4567-9c02-41c8487be66c

As I can see, it works in VRChat. So, try for yourself. And small clarification: This driver will behave in a way of Valve's intentions, no deviations will be implemented (no matter what game needs those).

cadergator10 commented 3 weeks ago

Ah, so I might be an idiot and misread this entire thing. I had assumed this was something that converted gestures to controller inputs to simulate an index controller or something XD

Nope, it's actually exactly what I was looking for. Thank you and sorry for the confusion