-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add OpenXR hand tracking demo #973
Add OpenXR hand tracking demo #973
Conversation
5bc34f8
to
5f436f8
Compare
5f436f8
to
a5add68
Compare
Turns out we don't need to change anything for |
a5add68
to
cb6700d
Compare
I've removed the hand tracking interaction changes for now. Planning on completing this just for hand tracking visualisation first. Then will add the interaction bits once hand interaction profiles are better supported. |
8fac2d3
to
9dc358b
Compare
I did a serious rewrite of this demo so that it now uses the new nodes in Godot 4.3, makes use of hand meshes that work across platforms, and makes use of the hand interaction profile extension (if available) when hand tracking is used. Sadly we are still awaiting adoption of this extension, see the readme.md for further information on this. |
9dc358b
to
7b16d79
Compare
7b16d79
to
705fb11
Compare
OK, a bit of good news. It turns out that Meta Quest does support the I have added info related to this in the readme. Further more, there is an HTC hand interaction extension and a Microsoft hand interaction extension. The Microsoft extension is also supported by Meta. Both extensions however are variations of the simple controller interaction profile and only serve to more easily identify whether optical hand tracking is used, or some unknown controller is used. I've also been able to confirm that UltraLeap and by extension the Lynx R1 also support the full OpenXR hand interaction profile extension and thus work fully as intended. |
705fb11
to
89d74fc
Compare
Also added some info that shows what we're actually tracking. |
89d74fc
to
6a5ed8a
Compare
6a5ed8a
to
677dc46
Compare
Now that #93075 has been merged, I've added the MSFT hand interaction profile to this demo project and making a grabbing motion while hand tracking on a Quest works perfectly. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is working fine for me using:
- Godot 4.3-beta2
- Godot Openxr Vendors 3.0.0 beta 2
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I tested on the Meta Quest 3 with Godot 4.3-beta2 and it worked great, both with real hand-tracking and and the inferred hand-tracking when using controllers. I skimmed the code, and that looks good to me too!
I wonder if this is an issue with multiview support? @skyace65 What GPU do you have? |
AMD 6950XT (16GB VRAM) |
Make sure you're on the latest drivers, there were issues with AMD drivers in the past, though I'm sure you've checked that already. I would also open the headset preview in SteamVR itself, see if it's Godot that's messing up or if it's further down the pipeline. The controllers not working is likely because I didn't setup additional profiles. Officially according to the OpenXR spec, every runtime should fall back on other profiles, but that is a promise very few runtimes actually fulfil but only soso. (note that it should show the hands, that goes through SteamVRs own inferred hand tracking system and completely bypasses the action set system) |
Thanks! I had been hoping I could maybe Google your GPU and get more info, but no such luck. :-) Could you try using GLview and get a list of the OpenGL extensions supported by your GPU? If you've got |
I downloaded the program and it said I have both. I've opened an issue for this in the Godot Repo. godotengine/godot#93921 Full details are in there but I figured out more after doing more testing, This is only happening in the compatibility renderer, it's also happening... In a weird way in one of the XR Tools demo scenes. |
The hands are visible in the left eye, they're just not in that screenshot since I had the controllers out of view |
@skyace65 can you test if this has the same result? |
I took your demo project and changed it to the compatability renderer since that's the one with issues. Still having the problem Also I'm assuming this isn't supposed to output to the headset, because it's not EDIT: Do you want to keep discussion about this in the engine repo issue? |
We should move it into the engine issue, this is obviously not related to this demo :) |
Note that @skyace65 issue #93921 was resolved with #94095 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Everything is working for me now in 4.3 Beta 3. The issue with the right eye is gone and I can pick up the cubes.
Thanks! |
This demo shows how to use the hand tracking functionality available in Godot XR.
This demo does expect certain OpenXR extensions to be implemented so this is with a view to the future. This is further explained in the readme.
I've attempted to keep things simple and not cloud the demo with all forms of fallback logic.
Todos: