Suivi de la main dans UnrealHand tracking in Unreal

Le système de suivi de la main utilise les paumes et les doigts d’une personne comme entrée.The hand tracking system uses a person’s palms and fingers as input. Les données sur la position et la rotation de chaque doigt, le Palm entier et les gestes manuel sont disponibles.Data on position and rotation of every finger, the entire palm, and hand gestures is available. À partir de 4,26, le suivi manuel est basé sur le plug-in HeadMountedDisplay et utilise une API commune sur l’ensemble des plateformes et appareils XR.Starting in Unreal 4.26, hand tracking is based on the Unreal HeadMountedDisplay plugin and uses a common API across all XR platforms and devices. Les fonctionnalités sont les mêmes pour les systèmes Windows Mixed Reality et OpenXR.Functionality is the same for both Windows Mixed Reality and OpenXR systems.

Poser à la mainHand pose

La pose de main vous permet de suivre et d’utiliser les mains et les doigts de vos utilisateurs comme entrée, qui sont accessibles à la fois dans les plans et C++.Hand pose lets you track and use the hands and fingers of your users as input, which can be accessed in both Blueprints and C++. L’API inréelle envoie les données sous forme de système de coordonnées, avec les battements synchronisés avec le moteur inréel.The Unreal API sends the data as a coordinate system, with ticks synchronized with the Unreal Engine.

Squelette de main

La hiérarchie est décrite par EHandKeypoint enum :The hierarchy is described by EHandKeypoint enum:

Image des options bluprint de KEYpoint de la main

Vous pouvez obtenir toutes ces données à partir de la main d’un utilisateur à l’aide de la fonction de données obtenir le contrôleur de mouvement .You can get all this data from a user’s hands using the Get Motion Controller Data function. Cette fonction retourne une structure XRMotionControllerData .That function returns an XRMotionControllerData structure. Vous trouverez ci-dessous un exemple de script Blueprint qui analyse la structure XRMotionControllerData pour obtenir les emplacements joints et dessine un système de coordonnées de débogage à chaque emplacement de la jointure.Below is a sample Blueprint script that parses the XRMotionControllerData structure to get hand joint locations and draws a debug coordinate system at each joint’s location.

Plan de la fonction d’extraction de données de regard connectée à la trace de ligne par fonction de canal

Il est important de vérifier si la structure est valide et qu’elle est une main.It's important to check if the structure is valid and that it's a hand. Dans le cas contraire, vous risquez d’avoir un comportement indéfini dans l’accès aux positions, aux rotations et aux rayons.Otherwise, you may get undefined behavior in access to positions, rotations, and radii arrays.

Les poses de main sont exposées à l’animation à l’aide du plug-in Live Link.Hand poses are exposed to Animation using the Live Link plugin.

Si les plug-ins Windows Mixed Reality et Live Link sont activés :If the Windows Mixed Reality and Live Link plugins are enabled:

  1. Sélectionnez fenêtre > lien dynamique pour ouvrir la fenêtre de l’éditeur de liens actifs.Select Window > Live Link to open the Live Link editor window.
  2. Sélectionner la source et activer la source de suivi de la main Windows Mixed RealitySelect Source and enable Windows Mixed Reality Hand Tracking Source

Source de la liaison dynamique

Une fois que vous avez activé la source et ouvert une ressource d’animation, développez la section animation sous l’onglet Aperçu de la scène . vous pouvez également voir d’autres options.After you enable the source and open an animation asset, expand the Animation section in the Preview Scene tab too see additional options.

Animation des liens dynamiques

La hiérarchie d’animation manuelle est la même que dans EWMRHandKeypoint .The hand animation hierarchy is the same as in EWMRHandKeypoint. L’animation peut être reciblée à l’aide de WindowsMixedRealityHandTrackingLiveLinkRemapAsset:Animation can be retargeted using WindowsMixedRealityHandTrackingLiveLinkRemapAsset:

Animation de lien dynamique 2

Elle peut également être sous-classée dans l’éditeur :It can also be subclassed in the editor:

Remappage de liaison dynamique

Maille manuelleHand Mesh

Maille de main en tant que géométrie suivieHand Mesh as a Tracked Geometry

Important

L’obtention de maillages de main en tant que géométrie suivie dans OpenXR vous oblige à appeler Set use main Mesh avec la géométrie de suivi activée.Getting hand meshes as a tracked geometry in OpenXR requires you to call Set Use Hand Mesh with Enabled Tracking Geometry.

Pour activer ce mode, vous devez appeler Set use main Mesh avec Geometry de suivi activé:To enable that mode you should call Set Use Hand Mesh with Enabled Tracking Geometry:

Plan de la lecture de début d’événement connecté pour définir la fonction de maillage à la main avec le mode de géométrie de suivi activé

Notes

Il n’est pas possible d’activer les deux modes en même temps.It’s not possible for both modes to be enabled at the same time. Si vous en activez un, l’autre est automatiquement désactivée.If you enable one, the other is automatically disabled.

Accès aux données de maillage de la mainAccessing Hand Mesh Data

Maille manuelle

Avant de pouvoir accéder aux données de maillage manuel, vous devez :Before you can access hand mesh data, you'll need to:

  • Sélectionnez votre ressource ARSessionConfig , développez les paramètres AR-> World Mapping Settings, puis cochez la case générer des données de maillage à partir de la géométrie suivie.Select your ARSessionConfig asset, expand the AR Settings -> World Mapping settings, and check Generate Mesh Data from Tracked Geometry.

Voici les paramètres de maillage par défaut :Below are the default mesh parameters:

  1. Utiliser les données de maillage pour l’occlusionUse Mesh Data for Occlusion
  2. Générer une collision pour les données de maillageGenerate Collision for Mesh Data
  3. Générer un maillage de navigation pour les données de maillageGenerate Nav Mesh for Mesh Data
  4. Rendu des données de maillage dans le paramètre filaire – débogage qui affiche le maillage généréRender Mesh Data in Wireframe – debug parameter that shows generated mesh

Ces valeurs de paramètre sont utilisées comme maillage de mappage spatial et par défaut.These parameter values are used as the spatial mapping mesh and hand mesh defaults. Vous pouvez les modifier à tout moment dans des plans ou du code pour n’importe quelle maille.You can change them at any time in Blueprints or code for any mesh.

Informations de référence sur l’API C++C++ API Reference

Utilisez EEARObjectClassification pour rechercher des valeurs de maillage de main dans tous les objets suivis.Use EEARObjectClassification to find hand mesh values in all trackable objects.

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

Les délégués suivants sont appelés lorsque le système détecte tout objet suivi, y compris un maillage de main.The following delegates are called when the system detects any trackable object, including a hand mesh.

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

Assurez-vous que vos gestionnaires de délégués suivent la signature de la fonction ci-dessous :Make sure your delegate handlers follow the function signature below:

void UARHandMeshComponent::OnTrackableAdded(UARTrackedGeometry* Added)

Vous pouvez accéder aux données de maillage par le biais des UARTrackedGeometry::GetUnderlyingMesh éléments suivants :You can access mesh data through the UARTrackedGeometry::GetUnderlyingMesh:

UMRMeshComponent* UARTrackedGeometry::GetUnderlyingMesh()

Informations de référence sur l’API BlueprintBlueprint API Reference

Pour travailler avec des maillages de main dans des plans :To work with Hand Meshes in Blueprints:

  1. Ajouter un composant ARTrackableNotify à un acteur BlueprintAdd an ARTrackableNotify Component to a Blueprint actor

Notification ARTrackable

  1. Accédez au panneau des Détails et développez la section événements .Go to the Details panel and expand the Events section.

ARTrackable Notify 2

  1. Remplacer sur l’ajout/la mise à jour/suppression de la géométrie suivie avec les nœuds suivants dans votre graphique d’événements :Overwrite On Add/Update/Remove Tracked Geometry with the following nodes in your Event Graph:

Sur ARTrackable Notify

Visualisation de maillage manuel dans OpenXRHand Mesh visualization in OpenXR

La méthode recommandée pour visualiser le maillage direct consiste à utiliser le plug-in XRVisualization de Epic avec le plug-in Microsoft OpenXR.The recommended way to visualize hand mesh is to use Epic’s XRVisualization plugin together with the Microsoft OpenXR plugin.

Ensuite, dans l’éditeur de modèle, vous devez utiliser la fonction de maille Set use main du plug-in OpenXR de Microsoft avec l' option XRVisualization activée comme paramètre :Then in the blueprint editor, you should use Set Use Hand Mesh function from the Microsoft OpenXR plugin with Enabled XRVisualization as a parameter:

Plan de la lecture de début d’événement connecté pour définir la fonction de maillage à la main avec le mode xrvisualization activé

Pour gérer le processus de rendu, vous devez utiliser le contrôleur de mouvement de rendu de XRVisualization :To manage the rendering process, you should use Render Motion Controller from XRVisualization:

Plan de la fonction de données d’obtenir le contrôleur de mouvement connecté à la fonction de contrôle de mouvement de rendu

Résultat :The result:

Image de la main numérique superposée sur une main humaine réelle

Si vous avez besoin de quelque chose de plus compliqué, par exemple en dessinant une maille avec un nuanceur personnalisé, vous devez obtenir les maillages sous la forme d’une géométrie suivie.If you need anything more complicated, such as drawing a hand mesh with a custom shader, you need to get the meshes as a tracked geometry.

Rayon émanant de la mainHand rays

La mise en place de la main fonctionne pour les interactions proches comme la saisie d’objets ou la pression sur les boutons.Getting hand pose works for close interactions like grabbing objects or pressing buttons. Toutefois, vous devez parfois travailler avec des hologrammes éloignés de vos utilisateurs.However, sometimes you need to work with holograms that are far away from your users. Cela peut être accompli avec des rayons de main, qui peuvent être utilisés comme périphériques de pointage à la fois dans le C++ et dans les plans.This can be accomplished with hand rays, which can be used as pointing devices in both C++ and Blueprints. Vous pouvez dessiner un rayon de votre main à un point éloigné et, avec une certaine aide du suivi de rayon inréel, sélectionner un hologramme qui n’est normalement pas accessible.You can draw a ray from your hand to a far point and, with some help from Unreal ray tracing, select a hologram that would otherwise be out of reach.

Important

Étant donné que tous les résultats de fonction changent chaque frame, ils sont tous rendus accessibles.Since all function results change every frame, they're all made callable. Pour plus d’informations sur les fonctions pures et impures ou pouvant être appelées, consultez le Guide de l’utilisateur Blueprint sur les fonctions.For more information about pure and impure or callable functions, see the Blueprint user guid on functions.

Pour obtenir les données des rayons de la main, vous devez utiliser la fonction de données obtenir le contrôleur de mouvement de la section précédente.To get the data for the hand rays, you should use the Get Motion Controller Data function from the previous section. La structure retournée contient deux paramètres que vous pouvez utiliser pour créer un rayon et une rotation AIM.The returned structure contains two parameters you can use to create a hand ray – Aim Position and Aim Rotation. Ces paramètres forment un rayon dirigé par votre coude.These parameters form a ray directed by your elbow. Vous devez les prendre et trouver un hologramme pointé par.You should take them and find a hologram being pointed by.

Voici un exemple qui montre comment déterminer si un rayon de main atteint un widget et comment définir un résultat d’accès personnalisé :Below is an example of determining whether a hand ray hits a Widget and setting a custom hit result:

Plan de la fonction de données de l’extraction de contrôle de mouvement

MouvementsGestures

HoloLens 2 effectue le suivi des mouvements spatiaux, ce qui signifie que vous pouvez capturer ces mouvements comme entrée.The HoloLens 2 tracks spatial gestures, which means you can capture those gestures as input. Le suivi des mouvements est basé sur un modèle d’abonnement.Gesture tracking is based on a subscription model. Vous devez utiliser la fonction « configurer les gestes » pour indiquer à l’appareil les gestes que vous souhaitez suivre. Vous trouverez plus d’informations sur les gestes dans le document sur l' utilisation de base de HoloLens 2 .You should use the “Configure Gestures” function to tell the device which gestures you want to track. You can find more details about gestures are the HoloLens 2 Basic Usage document.

Windows Mixed RealityWindows Mixed Reality

Plan de la lecture de début d’événement connecté à la fonction de configuration des mouvements

Vous devez ensuite ajouter du code pour vous abonner aux événements suivants :Then you should add code to subscribe to the following events:

Plan de la conservation des entrées spatiales Windows, du robinet et des gestes de manipulation gauche  capture d’écran des options de mouvement d’entrée spatiale Windows dans le volet d’informationsBlueprint of Windows spatial input hold, tap, and left manipulation gestures Screenshot of Windows spatial input tap gesture options in the details panel

OpenXROpenXR

Dans OpenXR, les événements de mouvement sont suivis via le pipeline d’entrée.In OpenXR, gesture events are tracked through the input pipeline. À l’aide de l’interaction manuelle, l’appareil peut reconnaître automatiquement les gestes TAP et Hold, mais pas les autres.Using hand interaction, the device can automatically recognize Tap and Hold gestures, but not the others. Elles sont nommées en tant que mappages de sélection et de préhension OpenXRMsftHandInteraction.They are named as OpenXRMsftHandInteraction Select and Grip mappings. Vous n’avez pas besoin d’activer l’abonnement, vous devez déclarer les événements dans paramètres du projet/moteur/entrée, comme suit :You don’t need to enable subscription, you should declare the events in Project Settings/Engine/Input, just like this:

Capture d’écran des mappages d’actions OpenXR

Point de contrôle de développement suivantNext Development Checkpoint

Si vous suivez le parcours de développement Unreal que nous avons mis en place, vous êtes en train d’explorer les modules de base du MRTK.If you're following the Unreal development journey we've laid out, you're in the midst of exploring the MRTK core building blocks. À partir de là, vous pouvez passer au module suivant :From here, you can continue to the next building block:

Ou accéder aux API et fonctionnalités de la plateforme Mixed Reality :Or jump to Mixed Reality platform capabilities and APIs:

Vous pouvez revenir aux points de contrôle de développement Unreal à tout moment.You can always go back to the Unreal development checkpoints at any time.