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.
La hiérarchie est décrite par EHandKeypoint
enum :
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.
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.
Hand Live Link Animation
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 :
- Sélectionnez Window > Live Link pour ouvrir la fenêtre de l’éditeur Live Link.
- Sélectionnez Source et activez Windows Mixed Reality source de suivi de la main
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.
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 :
Il peut également être sous-classé dans l’éditeur :
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 :
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
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 :
- Utiliser des données de maillage pour l’occlusion
- Générer une collision pour les données de maillage
- Générer un maillage de navigation pour les données de maillage
- 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 :
- Ajouter un composant ARTrackableNotify à un acteur blueprint
- Accédez au panneau Détails et développez la section Événements .
- 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 :
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 :
Pour gérer le processus de rendu, vous devez utiliser render motion controller à partir de XRVisualization :
Résultat :
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é :
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
Vous devez ensuite ajouter du code pour vous abonner aux événements suivants :
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 :
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.