Design d'Interaction VR — Niveau 3 : Avancé
Résumé EN (abstract): This advanced VR interaction design course takes designers to production-ready skills. Students build Unity-based VR experiences using the XR Interaction Toolkit, implement multi-user networking, optimize GPU performance, integrate spatial AI, and apply accessibility standards and advanced research methods (IPQ, ESM). The capstone project is an exhibition-grade VR installation tested with ≥5 users using both SUS and IPQ, with a full operator README. Outline: Unity XR Toolkit architecture → Multi-user networking (Photon Fusion) → GPU performance → Spatial AI & generative VR → Accessibility checklist → Advanced research methods (IPQ/ESM) → Production readiness → Exhibition project.
Objectifs d'apprentissage
À la fin de ce cours, l'étudiant·e sera capable de :
- Concevoir (Bloom : creating) une expérience VR de niveau exposition dans Unity avec XR Interaction Toolkit.
- Implémenter (applying) un système multi-utilisateurs VR avec Photon Fusion.
- Évaluer (evaluating) et optimiser les performances GPU d'une scène VR (draw calls, LOD, foveated rendering).
- Intégrer (applying) des modules d'IA spatiale (détection d'objets, scène understanding) dans une expérience VR.
- Appliquer (applying) les standards d'accessibilité VR (WCAG 2.1 adapté, confort universel).
- Conduire (creating) une étude de présence avec IPQ (iGroup Presence Questionnaire) et ESM (Experience Sampling Method).
Module 1 — Architecture Unity XR Interaction Toolkit (2.5h)
Concept
L'XR Interaction Toolkit (XRI) est le framework officiel Unity pour les interactions VR/AR. Il abstrait les différences entre plateformes (Quest, SteamVR, PSVR, Vision Pro) via OpenXR.
Documentation : https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@latest
Les 5 composants clés :
| Composant | Rôle |
|---|---|
XR Origin | Rig VR : Camera, LeftHand, RightHand controllers |
XR Interactable | Objet qui peut être interagi (base class) |
XR Grab Interactable | Objet qui peut être saisi |
XR Interactor | Entité qui initie l'interaction (RayInteractor, DirectInteractor) |
XR Interaction Manager | Gestionnaire global des interactions (singleton de scène) |
Architecture d'une scène XRI :
XR Origin (GameObject)
├── Camera Offset
│ ├── Main Camera (XR Camera)
│ ├── LeftHand Controller (XR Controller + Ray Interactor)
│ └── RightHand Controller (XR Controller + Ray Interactor)
└── XR Interaction Manager (singleton)
Scene
├── XR Grab Interactable objects (saisissables)
├── XR Simple Interactable objects (cliquables)
└── Teleportation Area (NavMesh ou XR Teleportation Area)
Pipeline d'une interaction saisie :
XR Interactordétecte unXR Interactabledans sa zone d'influence- L'
XR Interactablepasse en état Hover → feedback visuel - L'utilisateur appuie sur le bouton configuré → état Select → l'objet suit la main
- Relâcher → état Deselect → l'objet reprend son comportement physique
Lab 1.1 — Setup XRI minimal
Étapes :
- Créer un nouveau projet Unity (LTS) → importer XR Interaction Toolkit + OpenXR
- Configurer l'XR Origin depuis le menu XR > Convert Main Camera to XR Rig
- Créer 1 cube → ajouter Rigidbody + XR Grab Interactable
- Construire en mode Play → tester la saisie avec clavier-souris (simulateur XR intégré)
Module 2 — Multi-utilisateurs avec Photon Fusion (2.5h)
Concept
Photon Fusion est le framework réseau temps-réel le plus utilisé pour la VR sociale. Il gère la synchronisation des positions, états et interactions entre plusieurs clients.
Documentation Photon Fusion : https://doc.photonengine.com/fusion/current/getting-started/sdk-download
Architecture Photon Fusion pour VR :
PhotonAppSettings (AppId)
├── NetworkRunner (singleton scène)
│ ├── PlayerRef → instanciation avatar réseau
│ └── SessionInfo → lobby + matchmaking
├── NetworkObject (chaque avatar ou objet partagé)
│ ├── NetworkTransform (sync position/rotation)
│ └── NetworkBehaviour (custom sync variables)
└── VoiceConnection (Photon Voice pour audio spatial)
Synchroniser une variable :
public class SharedObject : NetworkBehaviour {
[Networked] public bool IsGrabbed { get; set; }
[Rpc(RpcSources.InputAuthority, RpcTargets.All)]
public void RPC_Grab(bool grabbed) {
IsGrabbed = grabbed;
}
}
Bonnes pratiques multi-user VR :
- Donner un feedback visuel quand un autre utilisateur interagit avec un objet (highlight différent)
- Éviter les conflits de saisie simultanée (ownership lock)
- Voice chat spatial — les voix viennent de la position des avatars
Lab 2.1 — Hello multi-user VR
Étapes :
- Créer un compte Photon (plan gratuit), récupérer l'AppId
- Importer Fusion SDK dans Unity → configurer PhotonAppSettings
- Créer un prefab Avatar (capsule + XR Origin) avec NetworkTransform
- Tester avec 2 instances Unity en simultané (même réseau local)
Module 3 — Performance GPU et optimisation (2.5h)
Concept
Une VR lente est une VR inutilisable. La cybersickness apparaît dès que le framerate chute sous 60 fps. L'optimisation VR est une discipline à part entière.
Métriques cibles (Quest 3 standalone) :
- Draw calls : < 100 par frame
- Polygons : < 500 000 par frame
- GPU utilisation : < 80%
- CPU : < 10ms par frame (≈ 90 fps budget)
Outils de profiling :
- Unity Profiler (Window > Analysis > Profiler) — CPU, GPU, mémoire
- Unity Frame Debugger — visualiser chaque draw call
- Meta Quest Developer Hub — stats GPU directement sur le casque
Techniques d'optimisation :
| Technique | Gain potentiel | Quand l'utiliser |
|---|---|---|
| LOD (Level of Detail) | -30 à -70% polygons | Objets distants |
| GPU Instancing | -50 à -80% draw calls | Objets répétés (herbe, arbres, particules) |
| Occlusion culling | -20 à -40% draw calls | Scènes fermées avec murs |
| Texture compression | -50% VRAM | Toutes textures |
| Baked lighting | -60% GPU | Scènes statiques |
| Foveated rendering | -30% GPU | Casques avec eye tracking |
LOD en Unity :
GameObject
├── LOD Group (component)
│ ├── LOD0 : mesh haute résolution (distance 0–5m)
│ ├── LOD1 : mesh moyen (5–15m)
│ └── LOD2 : mesh basse résolution (15m+) ou culled
Lab 3.1 — Profiling et optimisation
Étapes :
- Ouvrir le Unity Profiler sur votre scène VR (N2 ou nouveau projet)
- Identifier les 3 draw calls les plus coûteux
- Appliquer GPU Instancing sur les objets répétés
- Mesurer le framerate avant/après → documenter le gain
Module 4 — IA spatiale et VR générative (2.5h)
Concept
L'IA transforme le pipeline VR en 2025–2026 : les environnements s'adaptent au comportement de l'utilisateur, les personnages VR répondent en langage naturel, et des scènes entières sont générées depuis une description.
Trois axes d'IA spatiale :
1 — Détection d'objets et scène understanding Sur Meta Quest 3, le Scene Understanding SDK détecte les meubles et surfaces physiques de la pièce en temps réel. Cela permet de créer des expériences qui s'adaptent à chaque espace.
2 — Personnages IA conversationnels Stack: LLM (API Claude/GPT) + synthèse vocale + animation procédurale. Le personnage comprend les questions de l'utilisateur et répond en voix naturelle.
Considération : latence réseau → pré-générer les réponses probables ; fallback local si réseau absent.
3 — Génération procédurale d'environnements Des outils comme ShapE (Meta), Point-E (OpenAI) ou Meshy.ai génèrent des assets 3D depuis des descriptions textuelles. Workflows de production : Blender + plugin IA → Unity.
Lab 4.1 — Prototype personnage IA
Étapes (version simplifiée sans casque) :
- Créer un personnage statique dans votre scène WebXR ou Unity
- Connecter un champ de saisie texte à l'API Claude (clé sandbox) → afficher la réponse dans un bubble speech
- Ajouter une animation "thinking" (rotation lente de la tête) pendant l'attente
- Tester avec 3 questions : le personnage répond-il de manière cohérente avec le contexte de la scène ?
Module 5 — Accessibilité VR (2.5h)
Concept
La VR inaccessible exclut une part significative du public (problèmes moteurs, épilepsie photosensible, vertigo, déficiences visuelles/auditives).
Checklist accessibilité VR (WCAG 2.1 adapté) :
Confort universel :
- [ ] Option pour désactiver la locomotion continue (téléportation alternative toujours disponible)
- [ ] Pas d'effets stroboscopiques ou clignotements > 3 Hz (risque épilepsie)
- [ ] Durée de session recommandée affichée (< 30 min pour débutants)
- [ ] Possibilité de jouer assis sans perte d'expérience significative
Accessibilité visuelle :
- [ ] Mode daltonisme (palette alternative déclenchable)
- [ ] Tous les éléments critiques ont un label textuel en plus de la couleur/forme
- [ ] Contraste minimum WCAG AA (4.5:1) pour les textes d'UI
Accessibilité auditive :
- [ ] Sous-titres ou transcription pour tous les dialogues/narrations
- [ ] Toutes les informations sonores ont un équivalent visuel (captioning, icônes)
Accessibilité motrice :
- [ ] Les interactions physiquement exigeantes ont une alternative (gaze, voice)
- [ ] Pas de durée maximale sur les interactions (pas de "tenir le bouton 3s" sans alternative)
Ressource : https://www.w3.org/TR/WCAG21/
Lab 5.1 — Audit accessibilité
Étapes :
- Reprendre votre projet de Niveau 2
- Appliquer la checklist (cocher / non-cocher)
- Identifier 3 problèmes d'accessibilité
- Implémenter 1 correction (ex. sous-titres sur un audio, ou option téléportation)
Module 6 — Recherche avancée : IPQ et ESM (2.5h)
Concept
Au niveau exposition, les tests utilisateurs doivent mesurer non seulement l'utilisabilité (SUS) mais aussi la présence (IPQ) et l'expérience vécue en contexte (ESM).
IPQ — iGroup Presence Questionnaire Mesure le sentiment de présence en VR sur 4 sous-échelles : General Presence, Spatial Presence, Involvement, Realness. Score standardisé, comparaison avec la base de données de référence.
Schubert, T., Friedmann, F., & Regenbrecht, H. (2001). The experience of presence: Factor analytic insights. Presence, 10(3), 266–281. Questionnaire : http://www.igroup.org/pq/ipq/index.php
ESM — Experience Sampling Method L'ESM consiste à interrompre l'utilisateur pendant l'expérience (ou à intervalles réguliers) pour recueillir son état émotionnel et cognitif à chaud. En VR, cela peut se faire via une interface intégrée qui s'affiche toutes les X minutes.
Questions ESM VR minimales :
- "Vous sentez-vous dans cet espace ? (1–7)"
- "Quel est votre niveau de confort en ce moment ? (1–7)"
- "Avez-vous envie de continuer ? (1–7)"
Protocole de recherche avancée (exposition) :
- Pre-test : SUS baseline + profil utilisateur
- Session VR : ESM toutes les 5 min (3 questions)
- Post-session : SUS final + IPQ complet + interview semi-directif 10 min
- Analyse : score IPQ vs baseline + corrélation présence/confort + thèmes qualitatifs
Lab 6.1 — Protocole de recherche pour le projet
Étapes :
- Rédiger votre protocole de recherche (1 page) : hypothèses, méthodes (SUS + IPQ + ESM), profil testeurs
- Préparer les formulaires IPQ (https://www.igroup.org/pq/ipq/download.php)
- Préparer 3 questions ESM adaptées à votre expérience
- Recruter 5 testeurs avec profils diversifiés (âge, expérience VR)
Module 7 — Production readiness (2.5h)
Concept
Une expérience de niveau exposition doit fonctionner pendant des heures sans surveillance, être reproductible sur plusieurs machines/casques, et être opérée par du personnel non-technique.
Checklist production :
Stabilité :
- [ ] Aucun crash après 2h de session continue (testé)
- [ ] Gestion des déconnexions réseau (mode offline gracieux)
- [ ] Reset automatique après N minutes d'inactivité
Opérabilité :
- [ ] README opérateur (< 2 pages) : démarrage, reset, troubleshooting
- [ ] Procédure de nettoyage entre sessions (confidentialité des données si collecte)
- [ ] Vérification pré-ouverture (checklist 5 items, < 2 min)
Accessibilité d'installation :
- [ ] Le casque fonctionne chargé ET sur secteur pendant l'exposition
- [ ] Un seul bouton/geste pour lancer l'expérience
- [ ] Instructions visuelles claires dans le casque au démarrage
Documentation technique :
- [ ] README développeur : stack, build, deploy
- [ ] Changelog des versions
- [ ] Contacts en cas de problème (numéro direct opérateur tech)
Lab 7.1 — README opérateur
Étapes :
- Rédiger le README opérateur de votre projet (< 2 pages) :
- Matériel requis (liste précise)
- Démarrage en 5 étapes max
- 3 scénarios de problème + solution
- Reset de l'expérience
- Le faire tester par une personne non-technique : peut-elle démarrer l'expérience seule ?
Module 8 — Revue de projet et préparation exposition (2.5h)
Concept
La préparation d'une exposition VR implique des décisions techniques, muséographiques et logistiques qui vont au-delà du code.
Questions à résoudre avant une exposition :
- Combien de sessions simultanées ? (1 casque = 1 utilisateur à la fois)
- Durée d'une session ? (impact sur le flux de visiteurs)
- Encadrement : l'expérience est-elle autonome ou animée ?
- Confort des non-initiés : briefing verbal, instructions dans le casque, présence d'un médiateur ?
- Nettoyage des masques entre sessions (hygiène)
- Sauvegarde des données si collecte (consentement, RGPD)
Format de documentation finale :
- Fiche technique (1 page) : hardware, software, espace requis, temps montage
- Fiche artistique (1 page) : intention, concept, notes de l'artiste
- Protocole de médiation (1 page) : comment présenter l'expérience à un visiteur
Lab 8.1 — Préparation à la présentation finale
Étapes :
- Préparer la fiche technique de votre projet
- Préparer une démo de 3 min (ce que vous montrez à un commissaire d'exposition)
- Préparer la grille d'évaluation SUS + IPQ complète pour le projet final
- Mettre à jour le README opérateur avec les retours du Lab 7.1
Projet fil rouge — "Expérience VR niveau exposition"
Brief
Créer une expérience VR de niveau exposition — un travail qui pourrait être présenté dans un festival d'art numérique, une galerie ou un espace culturel. Le projet doit démontrer des compétences techniques avancées ET une intention artistique/culturelle claire.
Contraintes
- Technologie : Unity XR Interaction Toolkit + OpenXR (ou WebXR Three.js avancé)
- Au minimum 3 patterns d'interaction distincts (grab, teleport, ray interaction)
- Design sonore professionnel (spatial, positionnel, ambiance)
- Tests : ≥ 5 testeurs, SUS + IPQ documentés, ≥ 1 itération
- README opérateur fonctionnel (testé par une personne non-technique)
- Durée d'expérience : 3–10 minutes
Livrables
- Build Unity ou fichier WebXR (fonctionnel sur le matériel de présentation)
- Documentation de design (3–4 pages) : intention, concept, personas, décisions d'interaction
- Rapport de recherche : protocole, grilles SUS + IPQ, scores, analyse thématique
- Rapport d'itération : problèmes P0 résolus, P1 planifiés
- README opérateur (≤ 2 pages)
- Présentation (10 min) : démo live + analyse des données de recherche + réflexion sur l'exposition
Rubrique d'évaluation
| Critère | Insuffisant (1) | Satisfaisant (2) | Bon (3) | Excellent (4) |
|---|---|---|---|---|
| Architecture technique | Prototype instable ou fonctionnel sur 1 seule plateforme | Fonctionne, quelques crashes | Stable, 3 patterns d'interaction, OpenXR | Stable multi-plateforme, architecture propre, commentée |
| Qualité d'interaction | Interactions non signalées ou peu cohérentes | 3 interactions fonctionnelles | 3 patterns distincts, 3 états, feedback riche | Interactions fluides, affordances spatiales, cohérence physique |
| Recherche utilisateur | Absente ou 1 testeur | SUS seul, 3 testeurs | SUS + IPQ, 5 testeurs, scores calculés | SUS + IPQ + ESM, analyse thématique, itération documentée |
| Accessibilité | Non prise en compte | Checklist partielle (< 5 items) | Checklist complète, 2 corrections implémentées | Checklist complète + mode daltonisme + sous-titres |
| Production readiness | Pas de README, crashes fréquents | README présent, quelques problèmes | README opérateur testé, reset fonctionnel | Checklist pré-expo, gestion offline, procédure nettoyage |
| Intention artistique | Inexistante ou décorative | Présente mais non développée | Cohérente avec les choix techniques | Dialogue fort entre technique et intention, documentation enrichie |
Lectures & ressources
- Unity XR Interaction Toolkit : https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@latest
- Photon Fusion : https://doc.photonengine.com/fusion/current/getting-started/sdk-download
- IPQ — iGroup Presence Questionnaire : http://www.igroup.org/pq/ipq/index.php
- Schubert, T. et al. (2001). The experience of presence. Presence, 10(3), 266–281.
- Witmer, B. G., & Singer, M. J. (1998). Measuring Presence in Virtual Environments. Presence, 7(3), 225–240. https://doi.org/10.1162/105474698565686
- Slater, M., & Wilbur, S. (1997). FIVE framework. Presence, 6(6), 603–616.
- W3C WCAG 2.1 : https://www.w3.org/TR/WCAG21/
- Meta Quest Developer Hub : https://developer.oculus.com/documentation/unity/ts-odh/
- Freesound.org (sons CC0) : https://freesound.org
- Steam Audio (Valve) : https://valvesoftware.github.io/steam-audio/
→ Continuer : Hub — Design d'Interaction AR+VR → Projet d'exposition ? Prendre rendez-vous — 30 min, gratuit
Workshop intensif (1–2 j) — écoles, studios, musées. Théorie condensée + labs + accompagnement projet.
Prendre rendez-vous (30 min, gratuit) →