TP — Navigation 3D en réalité virtuelle

Comparer déplacement continu, téléportation, navigation multi-échelle et Grabbing-the-Air dans une ville et un labyrinthe virtuels.

RVRA · RVSI · Navigation 3D
Objectif
Comparer les locomotions
Environnement
Unity 6.3 · XRI 3.3.0
Projet fourni · Casque VR
Prérequis
Bases Unity et VR

Comment se déplacer efficacement dans un environnement virtuel ? Vous allez tester plusieurs techniques de navigation, régler leurs paramètres et comparer leurs effets sur la recherche de cibles, l’orientation et le confort.

Le projet propose une ville et un petit labyrinthe contenant des boutons rouges, les « buzzers ». Dans le labyrinthe, mesurez le temps nécessaire pour en activer 8. Dans la ville, activez-en le plus possible en 2 minutes.

Ce TP prolonge Les bases d’Unity 3D et Une première application de réalité virtuelle. La tâche de recherche est déjà implémentée : votre travail porte sur les techniques de locomotion et leur évaluation.

TP original : Cédric Fleury, cours de RVRA, parcours RVSI de la FISE IMT Atlantique, campus de Brest. Adaptation web bilingue à partir du sujet et des projets fournis.

Plan du TP

Ressources et projet de départ

Téléchargez les deux archives d’une même version et extrayez-les dans un même dossier parent : leurs contenus se réunissent dans Navigation3D. Le dossier final doit contenir Assets, Packages et ProjectSettings, avec Assets/VRTemplateAssets. Ajoutez ensuite ce dossier Navigation3D dans Unity Hub. Ne mélangez pas les deux versions.

VersionProjet et scèneAssets du template VR
Unity 6.3 — parcours principalProjet 6000.3Assets 6000.3
Unity 2022.3 — alternativeProjet 2022.3Assets 2022.3

Les téléchargements conservent les fichiers pédagogiques des projets fournis. Les builds, caches et fichiers locaux de l’éditeur ont été écartés ; les fichiers Assets, Packages et ProjectSettings sont conservés sans modification.

1. Tester la navigation de base

Ouvrir et exécuter la scène

  1. Ouvrez Assets/Scenes/Navigation.unity. Attendez la fin de l’import et corrigez les erreurs bloquantes de Console avant de construire l’application.
  2. Pour un casque autonome Android, vérifiez les modules Android de Unity Hub et la configuration XR de la plateforme cible. Dans File > Build Profiles (Unity 6) ou Build Settings (2022.3), sélectionnez Android ou le profil adapté au casque. Vérifiez que la scène Navigation est cochée.
  3. Reprenez si nécessaire les étapes de déploiement du TP d’introduction VR. Sélectionnez le casque, puis lancez Build And Run. Les réglages Android concernent le build autonome ; un essai PC VR dans Play nécessite une configuration et un runtime PC adaptés.
  4. Dans le casque, repérez le panneau de score, le chronomètre, la ville, l’entrée et la sortie du labyrinthe.

Manipuler et mesurer

Commande initialeEffet
Joystick gaucheAvancer, reculer, se déplacer latéralement.
Joystick droitTourner, en complément de la rotation réelle de la tête.
Contrôleur droit au contact d’un buzzer + gâchette sous l’indexActiver la cible : elle devient verte.
  1. Faites un essai libre pour comprendre la tâche et les commandes.
  2. Labyrinthe : activez le buzzer devant le panneau de score, trouvez et activez les 8 buzzers du labyrinthe, puis notez le temps à la sortie.
  3. Ville : démarrez une nouvelle tentative et relevez le nombre de buzzers activés en 2 minutes. Utilisez la remise à zéro du panneau entre les tentatives.
  4. Reportez vos résultats initiaux dans la partie 1 du compte rendu.

Vue d’ensemble de la ville virtuelle

Environnements de la tâche de recherche. Illustration issue du sujet original de Cédric Fleury.

2. Configurer le déplacement continu

  1. Dans Hierarchy, dépliez XR Origin, puis Locomotion. Repérez les objets Move et Turn, leurs providers et leurs références d’actions.
  2. Explorez les entrées des deux composants pour choisir la répartition des commandes entre joysticks gauche et droit. Testez une modification à la fois et conservez un moyen de revenir à la configuration initiale.
  3. Réglez la vitesse de translation et celle de rotation. Cherchez un compromis entre déplacement rapide dans les rues, précision dans les couloirs et confort.
  4. Réalisez les deux tâches avec la même configuration et les mêmes paramètres dans la ville et le labyrinthe.
  5. Dans la partie 2 du compte rendu, indiquez les actions assignées à chaque joystick, les vitesses retenues, le temps dans le labyrinthe et le score dans la ville. Justifiez vos choix.

Vérification : le déplacement et la rotation répondent séparément ; une seule commande ne doit pas déclencher deux comportements concurrents.

3. Basculer entre plusieurs techniques

Le script fourni NavigationModeManager, sur Locomotion, permet de changer de technique sans reconstruire l’application à chaque essai.

  1. Inspectez sa référence Switch Mode. Le sujet prévoit le bouton Y du contrôleur gauche ; vérifiez le binding effectivement utilisé sur votre matériel.
  2. Ouvrez le script : il parcourt les enfants directs de l’objet porteur et retient ceux dont le tag est NavigationTechnique. Au démarrage, il active le premier ; chaque appui active le suivant et désactive les autres.
  3. Vérifiez le tag de Move, puis celui des techniques à intégrer. Gardez au moins un enfant correctement tagué. L’ordre des enfants détermine l’ordre de parcours.
  4. Laissez le manager, les actions communes et les composants nécessaires à toutes les techniques actifs. Les objets utilitaires ne doivent pas recevoir ce tag.

Vérification : en Play ou au casque, appuyez plusieurs fois sur Y et observez les objets actifs. Une seule technique de la liste doit être active à la fois. Turn peut rester commun : contrôlez ses entrées avant de réutiliser le joystick droit pour l’échelle.

4. Ajouter la téléportation

L’objet Teleportation est déjà présent dans Locomotion. Vous devez lui associer un rayon de sélection et vérifier ses liens avec les surfaces téléportables.

  1. Retrouvez Teleport Interactor dans Assets/Samples/XR Interaction Toolkit/3.1.2/Starter Assets/Prefabs/Interactors et ajoutez-le sous le contrôleur gauche du rig fourni.
  2. Dans XR Ray Interactor, réglez Interaction Layer Mask pour inclure Teleport. Vérifiez aussi le Raycast Mask et les colliders du sol. Les couches d’interaction XRI et les couches physiques sont deux filtres distincts.
  3. Désactivez UI Interaction et Manipulate Attach Transform pour cet exercice. Assignez Attach Transform et Ray Origin Transform aux transforms appropriés du contrôleur gauche.
  4. Dans Input Configuration, assignez les deux entrées Select à XRI Left Locomotion/Teleport Mode, comme dans le sujet. Vérifiez les références dans l’asset d’actions du projet.
  5. Dans le script Disable Interactor de l’objet Teleportation, affectez le GameObject Teleport Interactor au champ Associated Interactor. Son activation suivra ainsi celle de la technique.
  6. Vérifiez le tag NavigationTechnique de Teleportation, le provider et ses références de locomotion. Vérifiez que le sol possède une surface de téléportation compatible avec la couche Teleport.
  7. Passez à ce mode avec Y. Testez plusieurs destinations au sol, puis revenez au déplacement continu : le rayon de téléportation doit se désactiver.
  8. Comparez les formes de rayon et leurs paramètres de portée. Pour un rayon droit, examinez Max Raycast Distance ; pour une courbe, examinez les paramètres propres à sa forme. Rejouez les deux tâches avec vos réglages retenus.

À consigner — partie 4 : forme et portée du rayon, justification, temps dans le labyrinthe, score dans la ville, avantages et limites par rapport au déplacement continu.

Référence : XR Ray Interactor — paramètres et types de ligne.

5. Ajouter la navigation multi-échelle

L’objectif est de modifier l’échelle de l’utilisateur dans le monde pour observer autrement et parcourir de plus grandes distances. Cette commande doit rester disponible avec le déplacement continu et la téléportation.

  1. Créez un nouvel enfant sous Locomotion pour le contrôle d’échelle. Ne lui donnez pas le tag NavigationTechnique : il doit rester actif quand Y change de technique.
  2. Ajoutez le script fourni ContinuousScaleChangeProvider et renseignez sa référence au Locomotion Mediator du rig.
  3. Dans les Input Actions, recherchez l’action d’échelle prévue par le sujet, XRI RightHand Locomotion/scale, et contrôlez son existence et son binding. Si elle est absente de l’archive utilisée, créez une action Value / Vector2 liée au joystick droit et activez son action map via l’Input Action Manager. Assignez-la à Right Hand Scale Action. Évitez qu’elle déclenche aussi la rotation de Turn.
  4. Lisez le script : les propriétés d’actions et la lecture des joysticks sont fournies, mais Update() contient encore les étapes TODO.
  5. Complétez la lecture de l’entrée, puis la modification de l’échelle uniforme du Transform du XR Origin. Utilisez le temps écoulé pour que la vitesse ne dépende pas de la fréquence d’affichage. Imposez des bornes strictement positives et progressives, et vérifiez la référence au mediator avant de l’utiliser.
  6. Testez d’abord de petites variations. Observez la hauteur, le point autour duquel l’échelle change, la portée des interactions, la vitesse apparente et les collisions.
  7. Ajustez le Teleport Interactor, notamment sa portée et le repère utilisé par le rayon, pour conserver des destinations utilisables aux différentes échelles. Vérifiez séparément le rayon calculé et sa représentation visible.
  8. Ajoutez si possible une commande qui restaure l’échelle initiale, puis testez son utilité lorsque vous perdez vos repères.
  9. Rejouez la tâche de 2 minutes dans la ville avec déplacement continu + échelle, puis téléportation + échelle.

À consigner — partie 5 : scores des deux combinaisons, bénéfices et inconvénients du multi-échelle, technique la plus adaptée et intérêt d’une remise à l’échelle initiale. Décrivez aussi les adaptations nécessaires.

6. Tester Grabbing-the-Air

Cette technique permet de déplacer le monde virtuel par des gestes de saisie, en translation et en rotation.

  1. Inspectez l’objet Grab Move, déjà présent dans Locomotion, et les actions de ses composants. Vérifiez son intégration à la liste des techniques.
  2. Activez ce mode avec Y et identifiez les commandes de saisie. Testez le déplacement avec une main, puis deux mains ; observez le sens du déplacement et les effets sur l’orientation.
  3. Répétez les essais à plusieurs échelles, puis cherchez les 8 buzzers du labyrinthe. Notez le temps et les difficultés rencontrées.
  4. Dans la ville, combinez cette technique avec le contrôle d’échelle et mesurez le score sur 2 minutes.
  5. Pour explorer le déplacement sans blocage par le sol ou les bâtiments, le sujet propose de désactiver le CharacterController du XR Origin. Faites-en un essai distinct, notez ce changement dans le rapport et réactivez-le pour revenir aux conditions précédentes.

À consigner — partie 6 : avantages, limites, précision, effort gestuel et pertinence pour la navigation multi-échelle. Appuyez vos réponses sur des situations observées dans les deux environnements.

Référence du sujet : Grabbing-the-Air — HCI Museum.

7. Bonus : World-in-Miniature et téléportation

Créez une représentation miniature de la ville pour faciliter la recherche des buzzers et choisir une destination à distance.

  1. Affichez une miniature du monde, distincte du décor à l’échelle normale. Évitez d’y dupliquer la logique du score, le rig ou les interactions de la scène principale.
  2. Permettez de viser un point de cette miniature avec un rayon virtuel.
  3. Convertissez le point sélectionné du repère de la miniature vers celui du monde, puis déplacez le rig vers une destination valide. Prenez en compte translation, rotation et échelle de la miniature.
  4. Vérifiez que la destination se trouve dans une zone accessible et que la miniature reste utilisable après le déplacement.
  5. Comparez cette aide à la recherche avec la navigation multi-échelle : repérage des cibles, orientation et précision de la destination.

Sources du sujet : Stoakley, Conway et Pausch, Virtual Reality on a WIM, 1995, démonstration vidéo et exemple UnityWorldInMiniature.

Compte rendu et bilan

Complétez le modèle original. Il est fourni en anglais ; les questions correspondantes sont reprises en français dans cette page. Le tableau ci-dessous sert à rassembler vos résultats ; indiquez les unités, les paramètres et le nombre d’essais.

ConditionLabyrinthe : temps pour 8 buzzersVille : buzzers en 2 minRéglages et observations
Navigation initialeÀ mesurerÀ mesurerConfiguration fournie
Continu configuréÀ mesurerÀ mesurerMêmes paramètres dans les deux environnements
TéléportationÀ mesurerÀ mesurerForme et portée du rayon
Continu + multi-échelle—À mesurerBornes et commande d’échelle
Téléportation + multi-échelle—À mesurerAdaptations du rayon
Grabbing-the-AirÀ mesurerÀ mesurer avec multi-échelleUne/deux mains, collisions

Concluez en reliant les performances aux caractéristiques de chaque environnement. Quelle technique choisiriez-vous pour une recherche dans la ville ? Pour un parcours dans un espace étroit ? Discutez le compromis entre efficacité, orientation et confort, ainsi que les limites de vos essais.

Dépannage et repères

ProblèmePoints à vérifier
Caméra immobile au casqueDésactiver le simulateur avant le build ; vérifier le suivi XR et le fournisseur de la plateforme cible.
Y ne change pas de techniqueAction Switch Mode active, binding du contrôleur, enfants directs tagués NavigationTechnique, liste non vide.
Rayon visible mais téléportation impossibleCouche XRI Teleport, masque physique, collider et surface du sol, actions Select, provider et mediator.
Rayon présent dans tous les modesRéférence Associated Interactor et activation de l’objet Teleportation par le manager.
Échelle sans effet ou exceptionScript complété, mediator assigné, action Vector2 active, XR Origin ciblé.
Rotation et échelle simultanéesActions du joystick droit utilisées à la fois par Turn et le provider d’échelle.
Changements absents au casqueSauvegarder la scène, reconstruire et réinstaller la bonne scène de la bonne copie du projet.

Le XR Interaction Simulator fourni permet de vérifier la logique dans l’éditeur : activez-le pour un essai sans casque et consultez son aide de commandes. Désactivez-le avant les essais casque et le build. La performance, l’échelle perçue et le confort doivent être évalués au casque. Faites des pauses et interrompez un essai en cas d’inconfort.

Documentation : locomotion XRI 3.3 pour le projet Unity 6 ; manuel XRI 3.1 pour l’alternative 2022.3.

Crédits : sujet, tâche de recherche et projets de départ de Cédric Fleury, cours de RVRA, parcours RVSI, FISE IMT Atlantique — campus de Brest. Les noms des scripts et des actions sont conservés pour faciliter le lien avec les ressources originales.