TP — Interaction 3D : techniques de manipulation

Saisie directe, rayon virtuel, Near Far et manipulation bimanuelle : concevoir et comparer des techniques d’interaction en réalité virtuelle.

RVRA · RVSI · Interaction 3D
Tâche expérimentale
Construire une tour · 2 min par essai
Projet fourni
Unity 6.3 · XRI 3.3.0
OpenXR 1.16.0
Prérequis
Bases Unity et VR · Casque et contrôleurs

Vous allez comparer des techniques de manipulation sur une tâche commune : construire une tour de blocs bleus et jaunes en deux minutes. L’objectif est de comprendre comment la sélection, le point de saisie et l’interaction à distance influencent la précision, la rapidité et l’effort.

Ce TP prolonge les initiations à Unity et à la VR. La scène et les scripts de la tâche sont fournis : votre travail porte sur la configuration des interactions et leur évaluation.

IMT Atlantique · Brest TP original de Cédric Fleury, cours de RVRA, parcours RVSI de la FISE.

Plan du TP

La tâche : une tour bicolore

Le générateur bleu à gauche produit des blocs bleus ; le générateur jaune à droite produit des blocs jaunes. Transportez-les sur la plateforme centrale pour construire la tour.

  • Chaque étage comporte deux blocs de même couleur.
  • Les blocs d’un étage sont perpendiculaires à ceux de l’étage précédent.
  • La couleur alterne d’un étage au suivant : bleu, jaune, bleu…
  • Un essai dure 2 minutes. À la fin, comptez les étages complets encore debout qui respectent ces règles.

La scène du TP : générateurs à gauche et à droite, plateforme centrale et chronomètre.

Construisez une tour aussi haute que possible pendant chaque essai.

1. Prendre en main le projet et les interactions de base

Ouvrir la bonne version

  1. Téléchargez le projet Unity 6.3, décompressez-le, puis ajoutez le dossier Interaction3D dans Unity Hub > Add project from disk. Ouvrez le dossier qui contient Assets, Packages et ProjectSettings.
  2. Le projet a été enregistré avec 6000.3.1f1. Utilisez la version prévue pour votre séance et conservez une copie avant toute conversion. Attendez la résolution des packages et vérifiez l’absence d’erreurs dans Console.
  3. Ouvrez Assets/Scenes/Interaction.unity. Repérez les deux générateurs, la plateforme, le chronomètre et les contrôleurs.
  4. Pour un Quest autonome, vérifiez les modules Android de Unity, File > Build Profiles, la plateforme Android/Meta Quest, la scène à construire et les réglages XR. Suivez si nécessaire la partie déploiement du TP d’initiation VR. Faites Build And Run sur le casque préparé pour le développement.

Essayer la tâche

Les commandes ci-dessous sont celles du sujet fourni pour les contrôleurs Touch. Vérifiez leurs bindings dans le projet si vous utilisez un autre matériel.

CommandeAction
Joystick gaucheSe déplacer dans la scène.
Bouton XChanger de mode de navigation, notamment vers la téléportation.
Contact du contrôleur droit + gâchette de l’indexSaisir un bloc ou sélectionner un générateur / le bouton Reset.
Bouton B à droite / Y à gaucheChanger de technique sur la main correspondante, une fois plusieurs modes configurés.
  1. Essayez la navigation continue puis la téléportation. Choisissez une position qui permet d’atteindre les générateurs et la tour.
  2. Générez quelques blocs, saisissez-les, orientez-les puis relâchez-les sur la plateforme.
  3. Réinitialisez la scène et réalisez un premier essai chronométré. Le script fourni démarre le chronomètre à la première génération de bloc après réinitialisation.
  4. Notez votre premier score, puis votre meilleur score après quelques essais. Gardez le même nombre d’essais pour comparer les configurations.

À consigner — partie 1 du compte rendu : les deux scores, le mode de navigation préféré et les raisons de ce choix pour cette tâche.

2. Préparer le changement de technique sur chaque contrôleur

Le composant Controller Manager (ControllerManager.cs) permet de changer d’interactor en cours d’exécution, sans reconstruire l’application pour chaque comparaison.

  1. Sélectionnez le contrôleur droit, puis le gauche, et repérez Controller Manager et son action Switch Mode.
  2. Chaque mode doit être un enfant direct du contrôleur et porter le tag ControllerMode. Prenez le Direct Interactor existant comme exemple.
  3. Ajoutez les prochains modes comme frères du Direct Interactor, dans l’ordre où vous voulez les tester. Vous pouvez placer un ensemble de composants sous une racine de mode portant le tag.
  4. Au démarrage, le script recense ces enfants, désactive les modes puis active le premier. B ou Y passe au suivant en désactivant les autres. Avec un seul mode, le bouton ne produit aucun changement visible.

Exemple d’organisation des modes sous le contrôleur droit : Direct, Ray, Ray Force Grab et Near Far.

Exemple de hiérarchie du projet. Le nom des objets peut légèrement varier.

Vérification : après avoir ajouté un second mode, contrôlez en Play qu’une seule racine de mode est active sur chaque main. Relâchez les objets avant de changer de mode. Le tag doit être placé sur l’enfant direct, car le script ne parcourt pas les petits-enfants pour établir sa liste.

3. Modifier le point de saisie des blocs

La saisie initiale ramène le bloc vers son point d’attache configuré. Comparez-la à une saisie qui conserve le point de contact.

  1. Dupliquez chacun des deux générateurs. Distinguez visuellement les nouvelles versions, tout en gardant une famille bleue et une famille jaune.
  2. Dans Assets/Prefabs, dupliquez Blue_cube et Yellow_cube. Nommez les copies, par exemple, Blue_cube_Dynamic et Yellow_cube_Dynamic.
  3. Sur chaque copie, dans XR Grab Interactable, activez Use Dynamic Attach. Examinez Match Position, Match Rotation et Snap To Collider Volume. Comparez leur effet, un réglage à la fois.
  4. Dans le composant Generate Cube de chaque nouveau générateur, assignez le prefab correspondant au champ Cube. Conservez la référence au chronomètre.
  5. Testez la saisie près du centre puis à une extrémité. Comparez le placement et l’orientation à ceux des blocs d’origine, puis refaites la tâche.

À consigner — partie 3 : avantages et limites de Dynamic Attach pour saisir, tourner et poser les blocs. Appuyez-vous sur des situations observées.

4. Ajouter un rayon virtuel

Configurer la sélection à distance

  1. Ajoutez un XR Ray Interactor comme enfant du contrôleur droit : clic droit dans Hierarchy, XR > Ray Interactor. Nommez ce mode Ray et ajoutez le tag ControllerMode sur sa racine.
  2. Dans Interaction Layer Mask, autorisez les couches des blocs et des générateurs, mais excluez la couche réservée à la téléportation (nommée Teleport ou Teleport Layer selon le projet).
  3. Dans Input Configuration, configurez Select Input pour la gâchette droite, en reprenant la référence d’action du Direct Interactor fourni. Ne supposez pas que le binding Select du TP précédent utilise le même bouton.
  4. Désactivez UI Interaction pour cette activité. Vérifiez l’origine et la direction du rayon ainsi que ses composants de ligne.
  5. Exécutez, passez au mode Ray avec B, puis testez la génération et la saisie à distance.

Vérification : le rayon sélectionne les blocs et les générateurs, sans déclencher la téléportation. Un objet doit partager une couche d’interaction XRI avec l’interactor et être détectable par son raycast physique : Interaction Layer Mask et Raycast Mask sont deux filtres distincts.

Comparer les variantes

Dupliquez le mode Ray sous le même contrôleur et donnez un nom explicite à chaque variante. Conservez les entrées et les filtres pour ne changer que l’option étudiée.

VarianteRéglage à comparerObservation attendue
Rayon de baseForce Grab désactivéManipulation du bloc à distance.
Rayon avec rappelForce Grab activéLe bloc sélectionné est ramené à la main.
Attache manipulableManipulate Attach Transform activéDéplacement de l’attache au joystick ; vérifiez les entrées de translation/rotation.

Refaites un essai avec chaque variante. Examinez l’accès aux générateurs, le transport vers le centre, la rotation des blocs et la précision du relâchement. Si le joystick pilote plusieurs actions, vérifiez leurs bindings et leur concurrence avec la locomotion.

À consigner — partie 4 : bénéfices du rayon par rapport à la saisie directe, bénéfices de la saisie directe, intérêt et limites de Force Grab, utilité de Manipulate Attach Transform, configuration préférée et meilleur score obtenu.

5. Tester Near Far

  1. Dans Assets/Samples/XR Interaction Toolkit/3.1.2/Starter Assets/Prefabs/Interactors, trouvez Right_NearFarInteractor. Ajoutez-le sous le contrôleur droit comme un nouveau mode.
  2. Placez le tag ControllerMode sur sa racine. Vérifiez les références de main droite, les entrées Select et les filtres d’interaction, comme pour le rayon. Désactivez l’interaction UI pour garder les mêmes conditions.
  3. Testez la sélection d’un bloc proche, puis d’un bloc éloigné. Observez comment la technique combine l’interaction de proximité et à distance.
  4. Comparez Far Attach Mode = Near et Far : dans la documentation XRI 3.3, ce réglage contrôle le rappel à la main ou le maintien à distance. Repérez ce réglage dans le composant installé.
  5. Réalisez la tâche avec les deux variantes. Créez deux modes si vous souhaitez les comparer avec B, sans nouvelle compilation.

À consigner — partie 5 : technique vue en cours qui s’en rapproche le plus, avantages et inconvénients pour la tâche, et difficultés éventuelles lors des transitions proche/loin. Justifiez par vos essais.

6. Manipuler avec les deux mains

  1. Ajoutez aussi des modes de manipulation au contrôleur gauche. Utilisez le prefab Left_NearFarInteractor pour Near Far, ou adaptez les entrées et la latéralité d’un rayon à la main gauche.
  2. Vérifiez les tags et les actions. Y change le mode gauche et B le mode droit ; ne conservez pas les actions de la main droite sur les deux mains.
  3. Testez une combinaison symétrique puis une combinaison où chaque main a un rôle différent : par exemple, approvisionner d’un côté et positionner de l’autre.
  4. Comparez-les à votre meilleure configuration à une main, avec les mêmes règles et la même durée.

L’objectif est de manipuler deux blocs ou de répartir les actions entre les mains. Il n’est pas nécessaire d’activer la sélection simultanée d’un même bloc par les deux contrôleurs.

À consigner — partie 6 : bénéfices de deux techniques, combinaison la plus efficace, justification et meilleur nombre d’étages.

Comparer les résultats et rédiger le compte rendu

Suivez les consignes générales du compte rendu : rendez un rapport PDF avec en-tête, progression illustrée et bilan final. Fournissez le lien vers votre dépôt Git accessible à l’enseignant, avec les indications nécessaires pour lancer le projet. Les mentions « À consigner » renvoient aux étapes de ce TP : intégrez leurs réponses dans votre rapport, sans rendre de questionnaire séparé.

Compléments attendus pour ce TP

En plus des éléments demandés dans les consignes générales :

  • Étape 1 — référence initiale : indiquez le premier et le meilleur score, le nombre d’essais et le mode de navigation retenu, avec une justification.
  • Étape 2 — changement de modes : montrez la hiérarchie des modes et expliquez comment vous avez vérifié le changement sur chaque main. Cette étape fait partie de la progression à documenter.
  • Étape 3 — Dynamic Attach : précisez les réglages testés et leurs avantages et limites pour saisir, tourner et poser les blocs.
  • Étape 4 — rayon : comparez saisie directe et rayon, puis les effets de Force Grab et Manipulate Attach Transform. Justifiez votre configuration préférée et donnez son meilleur score.
  • Étape 5 — Near Far : rapprochez cette technique d’une technique vue en cours ; comparez les modes Near et Far et décrivez les avantages, limites et transitions proche/loin observés.
  • Étape 6 — deux mains : précisez la technique affectée à chaque main, les bénéfices observés et la combinaison la plus efficace, avec justification et meilleur score.
  • Bilan comparatif : rassemblez vos résultats dans le tableau ci-dessous, avec une ligne par variante réellement testée. Indiquez le nombre d’essais et les conditions de comparaison (durée de deux minutes, entraînement, navigation, matériel et personne réalisant les essais). Discutez précision, rapidité et effort à partir de vos observations, en distinguant scores et ressenti.

Utilisez des captures légendées de vos propres configurations et essais pour étayer ces points : hiérarchie des modes, réglages utiles et résultat de la tâche. Gardez les explications brèves ; les questions servent à guider l’analyse dans les étapes du rapport.

Pour chaque configuration, gardez une trace des réglages réellement testés :

ConfigurationMain gauche / droitePoint de saisieOptionsEssai 1Meilleur scoreObservations
Directe initialeÀ préciserInitialNavigation choisie………
Directe dynamiqueÀ préciserDynamiqueRéglages d’attache………
RayonÀ préciserÀ préciserForce Grab / attache………
Near FarÀ préciserÀ préciserFar Attach Mode………
Deux mainsÀ préciserÀ préciserCombinaison choisie………

Prévoyez un court entraînement comparable, réinitialisez entre les essais et notez le nombre de répétitions. Distinguez la performance mesurée du ressenti : une technique peut être rapide tout en demandant davantage d’effort. L’apprentissage peut améliorer les scores au fil de la séance ; ne concluez pas à la supériorité générale d’une technique sur la base du seul meilleur essai.

Avant de terminer : conservez la scène, les prefabs modifiés et les fichiers Packages. Votre application doit permettre de changer les modes sans reconstruire, de générer les deux couleurs, de réinitialiser la tâche et de la réaliser avec une ou deux mains.

En cas de difficulté

SymptômePoints à vérifier
B / Y ne change rienPlusieurs enfants directs tagués ControllerMode, action Switch Mode et ordre dans la hiérarchie.
Le rayon est visible, mais ne saisit rienSelect Input, colliders, Interaction Layer Mask, Raycast Mask et composant interactable sur la cible.
Le rayon déclenche la téléportationExclure sa couche des modes de manipulation et vérifier les entrées partagées.
Le nouveau générateur produit les anciens blocsChamp Cube du composant Generate Cube et prefab réellement modifié.
Near Far utilise la mauvaise mainPrefab gauche/droit, Handedness et références d’actions.
Plus de génération après la fin du tempsUtiliser Reset avant de relancer : le chronomètre fourni exige une réinitialisation.
Le casque ne lance pas la scèneScène de build, plateforme, fournisseur XR et connexion ; reprendre le TP d’initiation VR.