# vr-app — canal VR MyInfoMate (Meta Quest) Repo du **cinquième front** de l'écosystème : l'application Unity qui tourne sur casque Meta Quest, et toute la documentation du module VR (back-office compris). Nommage aligné sur les autres repos : `manager-app`, `tablet-app`, `visitapp-web`, `vr-app`. ## Contenu | Chemin | Rôle | |---|---| | `docs/00-phase1-etat-des-lieux.md` | **À lire en premier.** Relevé du code existant des 4 repos, ce qui est réutilisable, ce qui manque, points de friction | | `docs/01-phase0-setup-unity.md` | Guide d'installation Unity + Meta XR, pas à pas, pour quelqu'un qui n'a jamais ouvert Unity | | `docs/02-decisions.md` | Les 6 arbitrages d'architecture du module (modèle de contenu, placement, viewer, kiosk, périmètre V1, personnages) | | `docs/03-phase2-conception.md` | Manifeste de scène, modèle de données, contrat d'API, flux de génération, structure Unity et viewer web | | `docs/04-phase3-plan.md` | **Le plan d'exécution.** 9 étapes, chacune avec ce que je génère / ce que tu fais / le critère de validation | | `unity-overlay/` | **Les fichiers Unity que je génère**, à recopier sur le projet une fois créé par Hub. Voir son README | | `tools/` | Générateur du repère de calibration (`make_calibration_glb.py`) | | `unity/` | Le projet Unity lui-même — l'APK unique, tous clients | | `viewer/` | **Le viewer et l'éditeur de scène web** (étape S3), autonome. Voir son README | ## Où vit le reste - Décisions déjà arrêtées sur le canal VR (pricing, moteur, types de section, POI sur GLB) : `../DOCS/v2/vr-quest-unity-plan.md` - Infrastructure dont ce module dépend (crédits, jobs, fournisseurs IA, personnages) : `../DOCS/v2/studio-plan.md` - Kanban : `../DOCS/kanban/cards/5-planifie/320-*` et `330-*` ## Statut **S0 terminé. S1 quasiment bouclé — 11/09/2026.** Le projet Unity existe (`unity/MyInfoMateVR/`, Unity 6000.0.83f1, URP, Meta XR SDK 205), l'APK se construit, s'installe et tourne sur un Quest 2 en Horizon OS v207. | Critère S1 | État | |---|---| | 1. Le monde s'affiche, on tourne la tête dedans | ✅ | | 2. Le marqueur par coordonnées coïncide avec le repère du GLB | ✅ **aucun miroir — `GltfSpace.Axis = NegateX` confirmé** | | 3. Personnage debout, à la bonne taille, animé, qui regarde le visiteur | ✅ | | 4. Cercle de navigation infranchissable | ❌ **on franchit toujours le cercle** — mesure tête/rig corrigée, contrainte toujours sans effet. Non bloquant pour S2, à reprendre | ### Les nombres que S1 devait produire Mesurés sur **Sponza** (50 Mo, glTF multi-fichiers), pas sur un monde Marble : | Mesure | Valeur | |---|---| | Chargement du décor | **1,4 à 1,8 s** — l'écran de progression est un détail, pas un sujet | | Chargement du repère / du personnage | 33-248 ms / 54-96 ms | | Images par seconde | **72/72 tenues**, mais `App=12,4 ms` sur 13,9 disponibles et **GPU au niveau maximum** | | Poids réel d'un monde Marble | ❌ **toujours inconnu** — crédits Marble insuffisants | ➡️ Lecture : un décor de 50 Mo bien texturé **sature déjà un Quest 2**. Le budget de scène devra être défini, et la question KTX2 côté serveur reste ouverte tant que le poids d'un vrai monde Marble n'est pas connu. Les assets de test sont des GLB libres (Khronos glTF Sample Assets : Sponza, CesiumMan) déposés dans `StreamingAssets/` — **non commités**, jetables, et sans valeur pour la mesure de poids. Les pièges rencontrés et leurs corrections sont consignés dans [unity-overlay/README.md](unity-overlay/README.md). ### S2 — validé le 11/09/2026 | Livrable S2 | État | |---|---| | La scène est construite depuis `scene.json`, plus depuis du code | ✅ | | Modifier le JSON et relancer **sans recompiler** déplace l'objet | ✅ manifeste poussé par `adb push`, lu en priorité sur celui de l'APK | | Un `world.kind` non supporté affiche une phrase lisible, pas une scène vide | ✅ testé avec `"kind": "panorama"` | | Un hotspot apparaît et joue son audio au raycast | ⏳ le `scene.json` d'exemple n'a pas d'audio | Le manifeste se pousse ainsi, l'app le préfère à celui embarqué : ``` adb push scene.json /sdcard/Android/data/com.unov.myinfomatevr/files/scene.json ``` Prochaine étape : **S3** de [04-phase3-plan.md](docs/04-phase3-plan.md) — le viewer web et son éditeur. C'est le jalon « démo vendable », et le plan y place un go/no-go explicite.