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. Les données sur la position et la rotation de chaque doigt, la paume entière et les mouvements de 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 sur toutes les plateformes et appareils XR. La fonctionnalité est la même 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 comme entrée, qui sont accessibles à la fois dans Blueprints et C++. L’API Unreal envoie les données en tant que système de coordonnées, avec des graduations synchronisées avec le moteur Unreal.
La hiérarchie est décrite par EHandKeypoint
énumération :
Vous pouvez obtenir toutes ces données à partir 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 . Vous trouverez ci-dessous 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’elle est une main. Sinon, vous pouvez obtenir un comportement non défini dans l’accès aux positions, rotations et tableaux de radii.
Hand Live Link Animation
Les poses manuelles sont exposées à Animation à l’aide du plug-in Live Link.
Si les plug-ins Windows Mixed Reality et Live Link sont activés :
- Sélectionnez Fenêtre > Live Link pour ouvrir la fenêtre de l’éditeur Live Link.
- Sélectionnez Source et activez la source de suivi des mains Windows Mixed Reality
Une fois que vous avez activé la source et ouvert une ressource d’animation, développez la section Animation sous l’onglet Scène d’aperçu , voir également des options supplémentaires.
La hiérarchie d’animation manuelle est la même que dans EWMRHandKeypoint
. L’animation peut être retargetée à l’aide de WindowsMixedRealityHandTrackingLiveLinkRemapAsset :
Il peut également être sous-classé dans l’éditeur :
Maille à main
Important
Le maillage de main nécessite OpenXR.
Vous devez télécharger le plug-in Microsoft OpenXR, disponible sur la marketplace Unreal ou GitHub.
Maille manuelle en tant que géométrie suivie
Important
L’obtention de maillages de main en tant que géométrie suivie dans OpenXR vous oblige à appeler Set Use Hand Mesh with Enabled Tracking Geometry.
Pour activer ce mode, vous devez appeler Set Hand Mesh avec enabled Tracking Geometry :
Remarque
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 Paramètres -> World Mapping et case activée Générer des données mesh à partir d’une géométrie suivie.
Voici les paramètres de maillage par défaut :
- Utiliser mesh Data for Occlusion
- Générer une collision pour les données mesh
- Générer une maille de navigation pour les données mesh
- Render Mesh Data in 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 les valeurs par défaut du maillage de la main. Vous pouvez les modifier à tout moment dans Blueprints ou code pour n’importe quel maillage.
Informations de référence sur l’API C++
Permet EEARObjectClassification
de 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 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 par le biais des UARTrackedGeometry::GetUnderlyingMesh
points suivants :
UMRMeshComponent* UARTrackedGeometry::GetUnderlyingMesh()
Informations de référence sur l’API Blueprint
Pour utiliser des maillages main dans des blueprints :
- Ajouter un composant ARTrackableNotify à un acteur blueprint
- Accédez au panneau Détails et développez la section Événements .
- Remplacer sur l’extension/mise à jour/supprimer la géométrie suivie avec les nœuds suivants dans votre graphique d’événements :
Visualisation Hand Mesh dans OpenXR
La méthode recommandée pour visualiser le maillage de main 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 à partir 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 en tant que géométrie suivie.
Rayons émanant de la main
L’obtention d’une pose manuelle fonctionne pour des interactions étroites, comme saisir des objets ou appuyer sur des boutons. Toutefois, vous devez parfois utiliser des hologrammes éloignés de vos utilisateurs. Cela peut être effectué avec des rayons de main, qui peuvent être utilisés comme pointage des appareils dans C++ et Blueprints. Vous pouvez dessiner un rayon de votre main jusqu’à un point lointain et, avec une aide du traçage des rayons Unreal, sélectionnez un hologramme qui serait autrement hors de portée.
Important
Étant donné que tous les résultats de la fonction changent chaque image, ils sont tous appelants. Pour plus d’informations sur les fonctions pures et impurables ou appelantes, consultez le guid utilisateur blueprint sur les fonctions.
Pour obtenir les données des rayons de 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 main : position de l’objectif et rotation de l’objectif. Ces paramètres forment un rayon dirigé par votre coude. Vous devez les prendre et trouver un hologramme pointé par.
Vous trouverez ci-dessous un exemple de détermination si un rayon de main atteint un widget et définit un résultat d’accès personnalisé :
Mouvements
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. Vous trouverez plus d’informations sur les mouvements dans le document d’utilisation de base HoloLens 2.
Windows Mixed Reality
Ensuite, vous devez 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 conservation, mais pas les autres. Ils sont nommés comme mappages OpenXRMsftHandInteraction Select et Grip. Vous n’avez pas besoin d’activer l’abonnement. Vous devez déclarer les événements dans Project Paramètres/Engine/Input, comme suit :
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 d’ici, vous pouvez passer au composant 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.