Share via


Handtracking in Unreal

Das Handverfolgungssystem verwendet die Handflächen und Finger einer Person als Eingabe. Daten zur Position und Drehung jedes Fingers, der gesamten Handfläche und Handgesten sind verfügbar. Ab Unreal 4.26 basiert die Handverfolgung auf dem Unreal HeadMountedDisplay-Plug-In und verwendet eine gemeinsame API auf allen XR-Plattformen und Geräten. Die Funktionalität ist für Windows Mixed Reality- und OpenXR-Systeme identisch.

Handpose

Mithilfe der Hand-Pose können Sie die Hände und Finger Ihrer Benutzer als Eingabe nachverfolgen und verwenden, auf die sowohl in Blueprints als auch in C++ zugegriffen werden kann. Die Unreal-API sendet die Daten als Koordinatensystem, wobei Teilstriche mit dem Unreal Engine synchronisiert werden.

Handskelettbild mit GelenküberlagerungHandskelett

Die Hierarchie wird durch EHandKeypoint Enumeration beschrieben:

Abbildung der Hand keypoint Bluprint-Optionen

Mit der Get Motion Controller Data-Funktion können Sie alle diese Daten aus den Händen eines Benutzers abrufen. Diese Funktion gibt eine XRMotionControllerData-Struktur zurück. Nachfolgend finden Sie ein Beispiel-Blueprint-Skript, das die XRMotionControllerData-Struktur analysiert, um handgelenkte Speicherorte abzurufen und ein Debugkoordinatensystem an der Position der einzelnen Gelenke zu zeichnet.

Blueprint des Abrufens von Blickdatenfunktion, die mit der Zeilenablaufverfolgung nach Kanalfunktion verbunden ist

Es ist wichtig zu überprüfen, ob die Struktur gültig ist und dass es sich um eine Hand handelt. Andernfalls erhalten Sie möglicherweise nicht definiertes Verhalten im Zugriff auf Positionen, Drehungen und Bogenradienarrays.

Handposen werden mithilfe des Live Link-Plug-Ins für Animation verfügbar gemacht.

Wenn die Plug-Ins für Windows Mixed Reality und Live Link aktiviert sind:

  1. Wählen Sie "Fenster Live Link" > aus, um das Live Link-Editor-Fenster zu öffnen.
  2. Quelle auswählen und Windows Mixed Reality Hand Tracking Source aktivieren

Quelle für Livelinks

Nachdem Sie die Quelle aktiviert und eine Animationsressource geöffnet haben, erweitern Sie den Abschnitt "Animation " auf der Registerkarte "Vorschauszene " zu weiteren Optionen.

Livelinkanimation

Die Handanimationshierarchie ist identisch mit in EWMRHandKeypoint. Animation kann mithilfe von WindowsMixedRealityHandTrackingLiveLinkRemapAsset retargeted werden:

Live Link Animation 2

Sie kann auch im Editor unterklassigt werden:

Live Link Remap

Handgitter

Wichtig

Handgitter erfordert OpenXR.

Das Microsoft OpenXR-Plug-In muss verwendet werden, verfügbar über den Unreal Marketplace oder über GitHub.

Handgitter als nachverfolgte Geometrie

Wichtig

Zum Abrufen von Handgittern als nachverfolgte Geometrie in OpenXR müssen Sie "Set Use Hand Mesh with Enabled Tracking Geometry" aufrufen.

Um diesen Modus zu aktivieren, sollten Sie "Handgitter verwenden" mit aktivierter Nachverfolgungsgeometrie aufrufen:

Blueprint des Ereignisses beginnt mit der Wiedergabe verbunden, um die Verwendung der Handgitterfunktion mit aktivierter Tracking-Geometriemodus festzulegen

Hinweis

Es ist nicht möglich, dass beide Modi gleichzeitig aktiviert werden. Wenn Sie eins aktivieren, wird der andere automatisch deaktiviert.

Zugreifen auf Handgitterdaten

Handgitter

Bevor Sie auf Handgitterdaten zugreifen können, müssen Sie:

  • Wählen Sie Ihre ARSessionConfig-Ressource aus, erweitern Sie die AR-Einstellungen –> World Mapping-Einstellungen, und aktivieren Sie "Gitterdaten aus nachverfolgter Geometrie generieren".

Nachfolgend sind die Standardgitterparameter aufgeführt:

  1. Verwenden von Gitterdaten für Okklusion
  2. Generieren von Kollisionen für Gitterdaten
  3. Generieren von Navigationsgittern für Gitterdaten
  4. Rendern von Gitterdaten in Wireframe – Debugparameter, der generiertes Gitter anzeigt

Diese Parameterwerte werden als Standardeinstellungen für räumliche Zuordnungsgitter und Handgitter verwendet. Sie können sie jederzeit in Blueprints oder Code für jedes Gitter ändern.

C++-API-Referenz

Wird verwendet EEARObjectClassification , um Handgitterwerte in allen nachverfolgbaren Objekten zu finden.

enum class EARObjectClassification : uint8
{
    // Other types
	HandMesh,
};

Die folgenden Stellvertretungen werden aufgerufen, wenn das System ein nachverfolgbares Objekt erkennt, einschließlich eines Handgitters.

class FARSupportInterface
{
    public:
    // Other params
	DECLARE_AR_SI_DELEGATE_FUNCS(OnTrackableAdded)
	DECLARE_AR_SI_DELEGATE_FUNCS(OnTrackableUpdated)
	DECLARE_AR_SI_DELEGATE_FUNCS(OnTrackableRemoved)
};

Stellen Sie sicher, dass die Stellvertretungshandler der folgenden Funktionssignatur folgen:

void UARHandMeshComponent::OnTrackableAdded(UARTrackedGeometry* Added)

Sie können über die Folgenden UARTrackedGeometry::GetUnderlyingMeshauf Gitterdaten zugreifen:

UMRMeshComponent* UARTrackedGeometry::GetUnderlyingMesh()

Blueprint-API-Referenz

So arbeiten Sie mit Handgittern in Blueprints:

  1. Hinzufügen einer ARTrackableNotify-Komponente zu einem Blueprint-Akteur

ARTrackable Notify

  1. Wechseln Sie zum Detailbereich , und erweitern Sie den Abschnitt "Ereignisse ".

ARTrackable Notify 2

  1. Überschreiben Sie "On Add/Update/Remove Tracked Geometry" mit den folgenden Knoten in Ihrem Ereignisdiagramm:

Bei ARTrackable Notify

Handgittervisualisierung in OpenXR

Die empfohlene Methode zum Visualisieren des Handgitters ist die Verwendung des XRVisualization-Plug-Ins von Epic zusammen mit dem Microsoft OpenXR-Plug-In.

Verwenden Sie dann im Blueprint-Editor die Funktion "Handgitter festlegen" aus dem Microsoft OpenXR-Plug-In mit "Enabled XRVisualization" als Parameter:

Blaupause des Ereignisses beginnt mit der Wiedergabe verbunden, um die Verwendung der Handgitterfunktion mit aktiviertem Xrvisualisierungsmodus festzulegen

Um den Renderingprozess zu verwalten, sollten Sie Render Motion Controller aus XRVisualization verwenden:

Blueprint für get motion controller data function connected to render motion controller function

Das Ergebnis:

Bild der digitalen Hand, die auf einer echten menschlichen Hand überlagert ist

Wenn Sie etwas komplizierter benötigen, z. B. das Zeichnen eines Handgitters mit einem benutzerdefinierten Shader, müssen Sie die Gitter als nachverfolgte Geometrie abrufen.

Handlichtstrahl

Das Abrufen von Handposen funktioniert für enge Interaktionen wie das Greifen von Objekten oder das Drücken von Tasten. Manchmal müssen Sie jedoch mit Hologrammen arbeiten, die weit von Ihren Benutzern entfernt sind. Dies kann mit Handstrahlen erreicht werden, die sowohl in C++ als auch in Blueprints als Zeigegeräte verwendet werden können. Sie können einen Strahl von Ihrer Hand bis zu einem weit entfernten Punkt zeichnen und mit hilfe von Unreal Ray Tracing ein Hologramm auswählen, das andernfalls nicht erreichbar wäre.

Wichtig

Da alle Funktionsergebnisse jeden Frame ändern, werden sie alle aufgerufen. Weitere Informationen zu reinen und unreinen oder aufrufbaren Funktionen finden Sie in der Blueprint-Benutzer-GUID für Funktionen.

Um die Daten für die Handstrahlen abzurufen, sollten Sie die Funktion "Bewegungscontroller-Daten abrufen" aus dem vorherigen Abschnitt verwenden. Die zurückgegebene Struktur enthält zwei Parameter, die Sie zum Erstellen eines Handstrahls verwenden können: Aim Position und Aim Rotation. Diese Parameter bilden einen Strahl, der von Ihrem Ellenbogen geleitet wird. Sie sollten sie nehmen und ein Hologramm finden, auf das verwiesen wird.

Im Folgenden finden Sie ein Beispiel für die Bestimmung, ob ein Handstrahl auf ein Widget trifft und ein benutzerdefiniertes Trefferergebnis festlegt:

Blaupause für die Datenfunktion zum Abrufen von Bewegungscontrollern

Gesten

Die HoloLens 2 verfolgt räumliche Gesten, was bedeutet, dass Sie diese Gesten als Eingabe erfassen können. Die Gestenverfolgung basiert auf einem Abonnementmodell. Verwenden Sie die Funktion "Gesten konfigurieren", um dem Gerät mitzuteilen, welche Gesten Sie nachverfolgen möchten. Weitere Details zu Gesten finden Sie im HoloLens 2 Basic Usage-Dokument .

Windows Mixed Reality

Blaupause des Ereignisses beginnt mit der Wiedergabe, die mit der Konfiguration der Gestenfunktion verbunden ist

Anschließend sollten Sie Code hinzufügen, um die folgenden Ereignisse zu abonnieren:

Blaupause für räumliche Windows-Eingabeeingabe, Tippen und linke ManipulationsgestenScreenshot der Gestikoptionen für windows-räumliche Eingabeeingabe im Detailbereich

OpenXR

In OpenXR werden Gestikereignisse über die Eingabepipeline nachverfolgt. Mithilfe der Handinteraktion kann das Gerät Gesten zum Tippen und Halten automatisch erkennen, aber nicht die anderen. Sie werden als OpenXRMsftHandInteraction Select- und Grip-Zuordnungen benannt. Sie müssen das Abonnement nicht aktivieren, sie sollten die Ereignisse in Project Einstellungen/Engine/Input wie folgt deklarieren:

Screenshot der OpenXR-Aktionszuordnungen

Nächster Entwicklungsprüfpunkt

Wenn Sie der Unreal-Entwicklungs-Journey folgen, die wir entworfen haben, befinden Sie sich mitten im Kennenlernen der MRTK-Grundbausteine. Von hier aus können Sie mit dem nächsten Baustein fortfahren:

Oder fahren Sie mit den Funktionen und APIs der Mixed Reality-Plattform fort:

Sie können jederzeit zu den Prüfpunkten für die Unreal-Entwicklung zurückkehren.