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.

../../_images/openxr_hand_skeleton.webp

Copyright (c) 2017-2022, The Khronos Group Inc. SPDX-Licenz-Identifikator: CC-BY-4.0

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:

OpenXR Handskelett

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:

../../_images/xr_enable_handtracking.webp

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:

HTC-Tracker

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