Suivi de la main dans Unreal

Le système de suivi des mains utilise les paumes et les doigts d’une personne comme entrée. Des données sur la position et la rotation de chaque doigt, de la paume entière et des mouvements de la main sont disponibles. À compter d’Unreal 4.26, le suivi des mains est basé sur le plug-in Unreal HeadMountedDisplay et utilise une API commune à l’ensemble des plateformes et appareils XR. Les fonctionnalités sont les mêmes pour les systèmes Windows Mixed Reality et OpenXR.

Pose manuelle

La pose manuelle vous permet de suivre et d’utiliser les mains et les doigts de vos utilisateurs en tant qu’entrée, qui sont accessibles à la fois dans Blueprints et C++. L’API Unreal envoie les données sous forme de système de coordonnées, avec des graduations synchronisées avec le moteur Unreal.

Image du squelette de la main avec des joints superposantle squelette de la main

La hiérarchie est décrite par EHandKeypoint enum :

Image des options d’empreinte de point clé de la main

Vous pouvez obtenir toutes ces données des mains d’un utilisateur à l’aide de la fonction Obtenir les données du contrôleur de mouvement . Cette fonction retourne une structure XRMotionControllerData . Voici un exemple de script Blueprint qui analyse la structure XRMotionControllerData pour obtenir des emplacements de jointure manuelle et dessine un système de coordonnées de débogage à l’emplacement de chaque joint.

Blueprint de la fonction de données du regard connectée à la fonction de suivi de ligne par canal

Il est important de case activée si la structure est valide et qu’il s’agit d’une main. Sinon, vous risquez d’obtenir un comportement non défini dans l’accès aux positions, aux rotations et aux tableaux de rayons.

Les poses manuelles sont exposées à l’animation à l’aide du plug-in Live Link.

Si les plug-ins Windows Mixed Reality et Live Link sont activés :

  1. Sélectionnez Window > Live Link pour ouvrir la fenêtre de l’éditeur Live Link.
  2. Sélectionnez Source et activez Windows Mixed Reality source de suivi de la main

Live Link Source

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 pour afficher des options supplémentaires.

Live Link Animation

La hiérarchie d’animation de la main est la même que dans EWMRHandKeypoint. L’animation peut être recibée à l’aide de WindowsMixedRealityHandTrackingLiveLinkRemapAsset :

Animation Live Link 2

Il peut également être sous-classé dans l’éditeur :

Remappage Live Link

Maille à la main

Important

Le maillage des mains nécessite OpenXR.

Vous devez télécharger le plug-in Microsoft OpenXR, disponible sur la marketplace Unreal ou GitHub.

Maillage de main en tant que géométrie suivie

Important

Pour obtenir des maillages de main en tant que géométrie suivie dans OpenXR, vous devez appeler Set Use Hand Mesh with Enabled Tracking Geometry.

Pour activer ce mode, vous devez appeler Set Use Hand Mesh with Enabled Tracking Geometry :

Blueprint of event begin play connected to set use hand mesh function with enabled tracking geometry mode

Notes

Il n’est pas possible que les deux modes soient activés en même temps. Si vous activez l’un, l’autre est automatiquement désactivé.

Accès aux données hand mesh

Maille à la main

Avant de pouvoir accéder aux données de maillage de main, vous devez :

  • Sélectionnez votre ressource ARSessionConfig, développez les paramètres AR Settings -> World Mapping et case activée Generate Mesh Data from Tracked Geometry.

Voici les paramètres de maillage par défaut :

  1. Utiliser des données de maillage pour l’occlusion
  2. Générer une collision pour les données de maillage
  3. Générer un maillage de navigation pour les données de maillage
  4. Rendu des données de maillage dans wireframe : paramètre de débogage qui affiche le maillage généré

Ces valeurs de paramètre sont utilisées comme maillage de mappage spatial et maillage de main par défaut. Vous pouvez les modifier à tout moment dans blueprints ou code pour n’importe quel maillage.

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

Utilisez EEARObjectClassification pour rechercher des valeurs de maillage de main dans tous les objets pouvant être suivis.

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

Les délégués suivants sont appelés lorsque le système détecte tout objet pouvant être suivi, y compris un maillage de main.

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 fonction ci-dessous :

void UARHandMeshComponent::OnTrackableAdded(UARTrackedGeometry* Added)

Vous pouvez accéder aux données de maillage via :UARTrackedGeometry::GetUnderlyingMesh

UMRMeshComponent* UARTrackedGeometry::GetUnderlyingMesh()

Informations de référence sur l’API Blueprint

Pour utiliser des maillages de main dans des blueprints :

  1. Ajouter un composant ARTrackableNotify à un acteur blueprint

Notification ARTrackable

  1. Accédez au panneau Détails et développez la section Événements .

NOTIFICATION ARTrackable 2

  1. Remplacez lors de l’ajout/de la mise à jour/de la suppression d’une géométrie suivie par les nœuds suivants dans votre event Graph :

Sur la notification ARTrackable

Visualisation du maillage de main dans OpenXR

La méthode recommandée pour visualiser le maillage des mains consiste à utiliser le plug-in XRVisualization d’Epic avec le plug-in Microsoft OpenXR.

Ensuite, dans l’éditeur de blueprint, vous devez utiliser la fonction Set Use Hand Mesh du plug-in Microsoft OpenXR avec Enabled XRVisualization comme paramètre :

Blueprint of event begin play connected to set use hand mesh function with enabled xrvisualization mode

Pour gérer le processus de rendu, vous devez utiliser render motion controller à partir de XRVisualization :

Blueprint de la fonction de données du contrôleur de mouvement connectée à la fonction de contrôleur de mouvement de rendu

Résultat :

Image d’une main numérique écrasée sur une main humaine réelle

Si vous avez besoin de quelque chose de plus compliqué, comme dessiner un maillage de main avec un nuanceur personnalisé, vous devez obtenir les maillages sous forme de géométrie suivie.

Rayon émanant de la main

L’obtention de la pose manuelle fonctionne pour les interactions rapprochées, comme saisir des objets ou appuyer sur des boutons. Toutefois, vous devez parfois travailler avec des hologrammes éloignés de vos utilisateurs. Cela peut être effectué avec des rayons manuels, qui peuvent être utilisés comme appareils de pointage dans C++ et Blueprints. Vous pouvez dessiner un rayon de votre main jusqu’à un point lointain et, avec l’aide du traçage de rayons Unreal, sélectionner un hologramme qui serait autrement hors de portée.

Important

Étant donné que tous les résultats de fonction changent chaque image, ils sont tous rendus callables. Pour plus d’informations sur les fonctions pures et impures ou callables, consultez le guid utilisateur blueprint sur les fonctions.

Pour obtenir les données des rayons de la main, vous devez utiliser la fonction Obtenir les données du contrôleur de mouvement de la section précédente. La structure retournée contient deux paramètres que vous pouvez utiliser pour créer un rayon de la main : La position de l’objectif et la rotation de l’objectif. Ces paramètres forment un rayon dirigé par votre coude. Vous devez les prendre et trouver un hologramme pointé par.

Voici un exemple qui montre comment déterminer si un rayon de main atteint un widget et définir un résultat d’accès personnalisé :

Blueprint de la fonction obtenir les données du contrôleur de mouvement

Mouvements

Le HoloLens 2 effectue le suivi des mouvements spatiaux, ce qui signifie que vous pouvez capturer ces mouvements en tant qu’entrée. Le suivi des mouvements est basé sur un modèle d’abonnement. Vous devez utiliser la fonction « Configurer les mouvements » pour indiquer à l’appareil les mouvements que vous souhaitez suivre. Pour plus d’informations sur les mouvements, consultez le HoloLens 2 document Utilisation de base.

Windows Mixed Reality

Blueprint of event begin play connected to configure gestures function

Vous devez ensuite ajouter du code pour vous abonner aux événements suivants :

Blueprint des mouvements de conservation, d’appui et de manipulation gauche des entrées spatialesWindows Capture d’écran des options de mouvement d’entrée spatiale Windows dans le panneau d’informations

OpenXR

Dans OpenXR, les événements de mouvement sont suivis via le pipeline d’entrée. À l’aide de l’interaction manuelle, l’appareil peut reconnaître automatiquement les mouvements d’appui et de maintien, mais pas les autres. Ils sont nommés mappages OpenXRMsftHandInteraction Select et Grip. 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 ceci :

Capture d’écran des mappages d’actions OpenXR

Point de contrôle de développement suivant

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. À partir de là, vous pouvez passer au module suivant :

Ou accéder aux API et fonctionnalités de la plateforme Mixed Reality :

Vous pouvez revenir aux points de contrôle de développement Unreal à tout moment.