Thomas Fransolet 0310d28b5e Canal VR Meta Quest : projet Unity, viewer web et documentation
Premier commit du cinquième front. Trois parties :

- `unity/MyInfoMateVR/` : le projet Unity (6000.0.83f1, URP, Meta XR SDK 205),
  un APK unique pour tous les clients. Menu flottant à sélection au regard,
  appairage, chargement de scène GLB, POI, cache de contenu, télémétrie.
- `unity-overlay/` : les mêmes scripts à recopier sur un projet Unity neuf, avec
  les pièges rencontrés consignés dans son README.
- `viewer/` : viewer et éditeur de scène web autonome (Vite, TypeScript,
  three.js), partagé avec les autres fronts.
- `docs/` : état des lieux, setup Unity, décisions d'architecture et plan
  d'exécution en 9 étapes.

La scène est décrite par un `scene.json` poussé par `adb push` : l'app le
préfère à celui embarqué dans l'APK.

Les binaires (GLB, textures de l'échantillon Sponza, DLL Meta XR) passent par
Git LFS dès ce premier commit — les y faire entrer après coup demanderait de
réécrire l'historique. Les artefacts régénérés par l'éditeur et par CMake
(`Library/`, `.utmp/`, Burst debug) sont ignorés.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 15:26:07 +02:00

111 lines
2.7 KiB
JSON

{
"manifestVersion": 1,
"sceneId": "sec_e2_local",
"instanceId": "inst_local",
"configurationId": "cfg_local",
"version": 1,
"publishedAt": "2026-09-11T00:00:00Z",
"languages": ["fr", "nl", "en", "de"],
"defaultLanguage": "fr",
"coordinateSystem": "gltf/y-up/right-handed/meters",
"navigation": {
"spawn": { "position": [0, 0, 0], "rotation": [0, 0, 0, 1] },
"radiusMeters": 3.0,
"showBoundary": true
},
"environment": {
"lightingPreset": "neutral-indoor",
"hdriAssetId": null,
"exposure": 1.0
},
"world": {
"kind": "mesh",
"assetId": "a_world",
"transform": { "position": [0, 0, 0], "rotation": [0, 0, 0, 1], "scale": [1, 1, 1] }
},
"objects": [
{
"id": "o_calibration",
"label": "Repere de calibration",
"assetId": "a_calibration",
"transform": { "position": [1.0, 0, -1.0], "rotation": [0, 0, 0, 1], "scale": [1, 1, 1] }
}
],
"personas": [
{
"id": "p_1",
"personaId": null,
"name": "Personnage de test",
"assetId": "a_persona",
"transform": { "position": [-1.5, 0, -1.0], "rotation": [0, 0, 0, 1], "scale": [1, 1, 1] },
"animation": { "idleClip": "Idle", "loop": true },
"gazeAtVisitor": true,
"audio": [],
"script": [{ "language": "fr", "value": "Bienvenue." }]
}
],
"hotspots": [
{
"id": "h_1",
"geoPointId": 0,
"transform": { "position": [0.4, 1.4, -2.1], "rotation": [0, 0, 0, 1] },
"title": [{ "language": "fr", "value": "Point de test" }],
"description": [{ "language": "fr", "value": "Vise ce point avec la manette." }],
"contents": [
{
"order": 0,
"title": [{ "language": "fr", "value": "Commentaire" }],
"description": [{ "language": "fr", "value": "" }],
"assetId": null
}
]
}
],
"assets": [
{
"id": "a_world",
"resourceId": "res_local_world",
"url": "world.glb",
"mimeType": "model/gltf-binary",
"sizeBytes": 3085416,
"sha256": "",
"variants": []
},
{
"id": "a_calibration",
"resourceId": "res_local_calibration",
"url": "calibration.glb",
"mimeType": "model/gltf-binary",
"sizeBytes": 4224,
"sha256": "",
"variants": []
},
{
"id": "a_persona",
"resourceId": "res_local_persona",
"url": "persona.glb",
"mimeType": "model/gltf-binary",
"sizeBytes": 438044,
"sha256": "",
"variants": []
}
],
"budget": { "totalBytes": 3527684, "limitBytes": 1073741824 },
"provenance": {
"aiGenerated": false,
"rightsHolder": "Unov - scene de test E2",
"sources": []
}
}