Up to date
This page is up to date for Godot 4.2
.
If you still find outdated information, please open an issue.
Das OpenXR-Handtracking¶
Beim Handtracking werden die Position und die Ausrichtung der Spielerhände, einschließlich der Ausrichtung der Spielerfinger, verfolgt. Wir können dabei 3 Kategorien unterscheiden:
Erstens: Hand-Tracking durch externe Sensoren wie Kameras. Das ist es, was Hololens, Quest, UltraLeap und ähnliche Geräte tun. Dies führt oft zu einem sehr genauen Tracking aller Finger der Spielerhände.
Zweitens: Hand-Tracking durch VR-Handschuhe. Diese Methode ist noch weitgehend experimentell, wird aber wahrscheinlich bald an Popularität gewinnen. Handschuhe verfügen oft über gute Tracking-Funktionen für die Finger, aber ihr eigentliches Verkaufsargument ist die Fähigkeit, die Bewegung einzuschränken. Dadurch wird das Gefühl von Berührung ermöglicht. Handschuhe werden oft auch als Controller erkannt und haben oft zusätzliche Steuerelemente wie Tasten integriert.
Drittens: Inferiertes Hand-Tracking. Dies ist seit den Anfängen der VR der De-facto-Ansatz. Da wir wissen, dass der Spieler einen Controller in der Hand hält und wir die Position dieses Controllers kennen, können wir ableiten, wo die Hand des Spielers gerendert werden soll. Die Finger können auf der Grundlage der Bedienelemente, mit denen der Spieler interagiert, positioniert werden. Viele moderne VR-Controller verfügen über zusätzliche Sensoren, die bei der Bestimmung der Fingerpositionen auf dem Controller helfen.
Bemerkung
Traditionell liegt das Hand-Tracking in der Verantwortung des Spiels. Allerdings haben die Prinzipien hinter der Action Map die möglichen Optionen hier etwas eingeschränkt. Valve ist derzeit die einzige XR-Runtime, die abgeleitetes Hand-Tracking als Teil der Hand-Tracking-Erweiterung implementiert hat. Es ist zu erwarten, dass andere XR Runtimes diesem Beispiel in naher Zukunft folgen werden.
Bis dahin empfehlen wir, wenn Ihr Spiel auf inferiertes Hand-Tracking angewiesen ist, die Hand-Assets zu verwenden, die Teil der Godot XR-Tools sind.
Tracking durch Interaktionsprofile¶
Das Tracken des Ortes und des Zustands von Controllern erfolgt über Interaktionsprofile. Bindings können innerhalb der Action Map festgelegt werden.
Es ist jedoch wichtig zu wissen, dass in OpenXR-Controller an Pfade gebunden sind, welche die Verwendung dieser Controller anzeigt. D.h. der Controller, der in der linken Hand des Spielers gehalten wird, ist an /user/hand/left
gebunden, während der Controller in der rechten Hand des Spielers an /user/hand/right
gebunden ist. Und obwohl es noch nicht außerhalb der HTC-Tracker-Erweiterung unterstützt wird, ist es wahrscheinlich, dass OpenXR später einmal mit Pfaden wie /user/foot/left
und /user/foot/right
erweitert wird.
Warnung
Dieses Paradigma wirft daher die Frage auf, was mit einem Controller geschieht, der sich nicht in der Hand eines Benutzers befindet. Auf diese Frage gibt es noch keine Antwort, sie wird noch diskutiert und die Spezifikation könnte sich in naher Zukunft ändern. Das Verhalten ist also undefiniert und kann für verschiedene Plattformen unterschiedlich sein.
Die häufigste ist, dass der Controller gebunden bleibt, unabhängig davon, ob der Spieler den Controller tatsächlich hält.
Es gibt jedoch Runtimes, wie z.B. Quest, die das Binding eines Controllers aufheben können, wenn er nicht vom Benutzer gehalten wird.
Dies könnte in Zukunft zur Norm werden, und es wird erwartet, dass das System der Action Maps entsprechend verbessert wird.
Die Hand-Tracking-Erweiterung¶
OpenXR verfügt über eine Erweiterung um die Funktionalität des Hand-Tracking zur Verfügung zu stellen. Diese Erweiterung ermöglicht es einem Spiel, das Handskelett mit allen Knochenpositionen für jede Hand anzufordern.
Die obige Abbildung zeigt die Verbindungen, die von jeder XR-Runtime, die diese Erweiterung implementiert, bereitgestellt werden müssen.
Derzeit stellt Godot diese Funktionalität über den Node OpenXRHand zur Verfügung. Dies ist ein Helper-Node, der die Hand Tracking-Daten von OpenXR abruft und sie auf ein Skelett in Godot anwendet. Sie wählen entweder die linke oder die rechte Hand über die Property hand
auf diesem Node aus.
Das Hand-Asset selbst muss vom Entwickler bereitgestellt werden und ist daher vom OpenXRHand-Node getrennt. Man setzt den Parameter hand_skeleton
auf dem OpenXRHand Node auf das Skelett, auf das die Tracking Daten angewendet werden sollen.
Wenn es von der XR-Runtime unterstützt wird, können Sie auch die Property motion_range
setzen, um zu begrenzen, wie weit sich die Hand schließen kann.
Das Skelett für dieses Asset muss die folgenden Knochen haben:
Linke Hand |
Rechte Hand |
---|---|
Palm_L |
Palm_R |
Wrist_L |
Wrist_R |
Thumb_Metacarpal_L |
Thumb_Metacarpal_R |
Thumb_Proximal_L |
Thumb_Proximal_R |
Thumb_Distal_L |
Thumb_Distal_R |
Thumb_Tip_L |
Thumb_Tip_R |
Index_Metacarpal_L |
Index_Metacarpal_R |
Index_Proximal_L |
Index_Proximal_R |
Index_Intermediate_L |
Index_Intermediate_R |
Index_Distal_L |
Index_Distal_R |
Index_Tip_L |
Index_Tip_R |
Middle_Metacarpal_L |
Middle_Metacarpal_R |
Middle_Proximal_L |
Middle_Proximal_R |
Middle_Intermediate_L |
Middle_Intermediate_R |
Middle_Distal_L |
Middle_Distal_R |
Middle_Tip_L |
Middle_Tip_R |
Ring_Metacarpal_L |
Ring_Metacarpal_R |
Ring_Proximal_L |
Ring_Proximal_R |
Ring_Intermediate_L |
Ring_Intermediate_R |
Ring_Distal_L |
Ring_Distal_R |
Ring_Tip_L |
Ring_Tip_R |
Little_Metacarpal_L |
Little_Metacarpal_R |
Little_Proximal_L |
Little_Proximal_R |
Little_Intermediate_L |
Little_Intermediate_R |
Little_Distal_L |
Little_Distal_R |
Little_Tip_L |
Little_Tip_R |
Warnung
Die von verschiedenen XR-Runtimes zurückgegebenen Skelettdaten sind oft nicht kompatibel, was ein Problem für die plattformübergreifende Entwicklung darstellt.
So basieren beispielsweise sowohl die Microsoft- als auch die Meta-Runtimes auf den tatsächlichen Händen des Spielers als Skelett. Diese Skelette passen sich also an die Größe der Spielerhand an.
Im Gegensatz dazu wird bei Valve ein festes Skelett verwendet, wenn das Hand-Tracking angewendet wird.
Wir sind noch dabei, Erfahrungen zu sammeln, wie wir am besten mit diesen Unterschieden in den Plattformen umgehen können.
Beim Exportieren nach Meta Quest müssen Sie die folgende Einstellung aktivieren:
Body-Tracking¶
Zum Zeitpunkt der Erstellung dieses Artikels unterstützt OpenXR kein Body Tracking als Teil der Kernspezifikation. Wir gehen davon aus, dass sich dies in naher Zukunft ändern wird, da mehr und mehr Body Tracking-Lösungen auf den Markt kommen.
Im Moment ist die einzige Option, die hier verfügbar ist, durch HTC-Tracker. Es gibt eine Erweiterung, die verfügbar wird, wenn HTC-Tracker von der XR Runtime unterstützt werden. Diese werden vollständig durch das Action Map-System zugänglich gemacht.
Godot bietet volle Unterstützung dafür, und Sie können die Tracker in der Action Map einrichten. Jedem Tracker wird eine Verwendung innerhalb des SteamVR-Interface zugewiesen.
Diese werden über die folgenden Tracker angezeigt:
/user/vive_tracker_htcx/role/handheld_object |
user/vive_tracker_htcx/role/left_foot |
/user/vive_tracker_htcx/role/right_foot |
/user/vive_tracker_htcx/role/left_shoulder |
/user/vive_tracker_htcx/role/right_shoulder |
/user/vive_tracker_htcx/role/left_elbow |
/user/vive_tracker_htcx/role/right_elbow |
/user/vive_tracker_htcx/role/left_knee |
/user/vive_tracker_htcx/role/right_knee |
/user/vive_tracker_htcx/role/waist |
/user/vive_tracker_htcx/role/chest |
/user/vive_tracker_htcx/role/camera |
/user/vive_tracker_htcx/role/keyboard |
Einige abschließende Worte¶
Das Hand-Tracking ist ein Bereich, der noch aktiv entwickelt wird, und wir erwarten in naher Zukunft Verbesserungen.
Das zugrundeliegende Prinzip, das sich hoffentlich durchsetzen wird, ist, dass die Action Map für die Interaktionen verwendet wird, während die Hand-Tracking-Erweiterung in erster Linie ein Mittel zur Visualisierung der Spielerhand ist. Wir hoffen, dass Verbesserungen an der OpenXR-Spezifikation eine bessere Portabilität zwischen verschiedenen Plattformen gewährleisten werden.