diff --git a/docs/technical/webgl-context-lost-investigation.md b/docs/technical/webgl-context-lost-investigation.md new file mode 100644 index 0000000..f6a2dd8 --- /dev/null +++ b/docs/technical/webgl-context-lost-investigation.md @@ -0,0 +1,367 @@ +# WebGL Context Lost - Investigation + +## Résumé court + +Le projet subit des pertes de contexte WebGL pendant les phases où le jeu active +ou prépare le hand tracking, les interactions physiques ou le repair game. + +Le symptôme visible côté console est : + +```txt +THREE.WebGLRenderer: Context Lost. +[ERROR] [WebGL] Context lost - attempting auto-restore +THREE.WebGLRenderer: Context Restored. +``` + +Le problème est bloquant parce que le hand tracking et le repair game sont au +coeur de l'expérience. Quand le contexte WebGL saute, la scène Three.js peut se +remonter, le joueur peut revenir au spawn, le pointer lock peut être perdu, et +les tests de gameplay deviennent instables. + +## Ce qui fonctionne aujourd'hui + +La page principale monte un `` React Three Fiber dans +`src/pages/page.tsx`. + +`src/world/World.tsx` compose ensuite : + +- la scène de jeu ou la scène de test physique ; +- le player ; +- les systèmes visuels de monde ; +- les gants de hand tracking ; +- les systèmes de debug. + +Le hand tracking est centralisé dans +`src/providers/gameplay/HandTrackingProvider.tsx`. + +Il peut utiliser deux sources : + +- `browser` : MediaPipe JS dans le navigateur ; +- `backend` : backend Python local via WebSocket. + +L'activation est déclenchée par : + +- certaines étapes du repair game ; +- les zones d'interaction qui demandent explicitement les mains ; +- la scène Physique en debug, selon les objets présents. + +## Problème observé + +Les context lost arrivent dans plusieurs situations : + +- entrée dans une zone d'interaction ; +- lancement du hand tracking ; +- lancement d'un repair game ; +- scène Physique avec `TestMap`, `Physics`, `AnimatedModel`, waypoints GPS et + objets interactifs ; +- source browser JS ; +- source backend. + +Le fait que le crash existe avec les deux sources indique que le problème n'est +probablement pas limité au backend Python ni à MediaPipe JS seul. Le hand +tracking semble être un déclencheur fort, mais il arrive au moment où plusieurs +ressources GPU et systèmes runtime se réveillent ensemble. + +## Pourquoi c'est bloquant + +Ce bug bloque la feature principale du projet : + +- le repair game dépend du hand tracking pour valider certaines actions ; +- les interactions main sont nécessaires pour tester les objets grabbables ; +- un context lost casse la continuité du gameplay ; +- le joueur peut être replacé au spawn après reconstruction ; +- le pointer lock peut être perdu ; +- les logs deviennent difficiles à lire parce que le jeu tente de restaurer la + scène en boucle ; +- le comportement n'est pas fiable pour une démo ou un déploiement. + +Tant que ce problème n'est pas stable, on ne peut pas valider correctement : + +- la mission e-bike ; +- la mission pylône ; +- la mission ferme ; +- les interactions main ; +- le switch browser/backend ; +- le comportement en build de production. + +## Hypothèses principales + +### 1. Pression GPU au lancement du hand tracking + +MediaPipe browser peut créer ses propres ressources GPU. Si Three.js charge +déjà beaucoup de géométries, textures, ombres et modèles, l'ajout du hand +tracking peut faire passer le navigateur au-dessus d'une limite GPU. + +Le stash contient une tentative de mitigation en forçant MediaPipe browser et le +backend à utiliser le CPU. + +### 2. Activation trop brusque du runtime mains + +Les logs montrent des transitions rapides : + +```txt +Browser JS runtime starting +Runtime source selected +Runtime snapshot changed +Browser JS runtime stopped +Browser JS runtime starting +``` + +Ce type de start/stop rapide peut provoquer : + +- création webcam ; +- création MediaPipe ; +- montage des gants ; +- update du state React ; +- re-render du monde ; +- stress GPU au même moment. + +### 3. Les gants 3D sont montés trop tôt + +Si les gants de hand tracking sont montés avant d'avoir de vraies mains +détectées, le jeu charge et prépare des modèles GPU sans utilité immédiate. + +Le stash contient une tentative pour ne rendre les gants que lorsqu'une main +existe réellement dans le snapshot. + +### 4. Re-upload textures / GLTF trop agressif + +`src/utils/three/optimizeGLTFScene.ts` modifie des textures GLTF. Si cette +optimisation force trop souvent `needsUpdate`, mipmaps ou anisotropy, le +navigateur peut recharger beaucoup de textures vers le GPU. + +Le stash limite cette pression en évitant de forcer les mipmaps et en abaissant +l'anisotropy. + +### 5. Permission caméra au mauvais moment + +Demander la caméra au moment exact où le joueur entre dans une interaction ou +lance le repair game ajoute un gros événement runtime au pire moment. + +Le stash contient une tentative de warmup caméra pour obtenir la permission plus +tôt et réutiliser le stream au moment où le hand tracking devient nécessaire. + +### 6. La scène Physique ajoute du bruit + +La scène Physique est une scène de test volontairement riche : + +- `Physics` Rapier ; +- `GrabbableObject` ; +- `TriggerObject` ; +- `RepairGame` ; +- `AnimatedModel` ; +- GPS preview ; +- waypoints verts ; +- player ; +- debug overlay. + +Cette richesse est normale pour une scène de test, mais elle complique +l'investigation parce qu'elle active beaucoup de systèmes à la fois. + +## Fichiers modifiés dans le stash + +Le stash `stash@{0}` contient 28 fichiers modifiés, environ `+530 / -152`. +Il ne contient pas de fichiers untracked. + +| Fichier | Rôle dans l'investigation | +| --------------------------------------------------------- | ----------------------------------------------------------------------------------------- | +| `README.md` | Note sur les commandes backend depuis la racine du repo. | +| `backend/README.md` | Documentation plus claire pour lancer le backend et réparer un `.venv` cassé. | +| `backend/hand_tracker.py` | Force le backend MediaPipe en CPU. | +| `docs/user/main-feature.md` | Ajustements de documentation utilisateur. | +| `public/sounds/dialogue/subtitles/fr/electricienne.srt` | Ajustements de sous-titres, pas central pour le context lost. | +| `public/sounds/dialogue/subtitles/fr/narrateur.srt` | Ajustements de sous-titres, pas central pour le context lost. | +| `src/components/debug/DebugPlayerModel.tsx` | Ajustements de modèle debug player. | +| `src/components/three/handTracking/HandTrackingGlove.tsx` | Retire le preload automatique des gants pour réduire la pression GPU. | +| `src/components/three/interaction/GrabbableObject.tsx` | Marque les grabbables qui nécessitent vraiment le hand tracking. | +| `src/components/three/interaction/InteractableObject.tsx` | Ajoute le flag `handTracking` aux interactables. | +| `src/data/debug/testSceneConfig.ts` | Stabilise la scène Physique : sol, GPS, hauteur des waypoints. | +| `src/data/handTrackingConfig.ts` | Ajoute délai d'activation, TTL warmup caméra, delegate CPU browser. | +| `src/data/player/playerConfig.ts` | Corrige le spawn Physique avec `PLAYER_EYE_HEIGHT`. | +| `src/hooks/debug/useSceneMode.ts` | Force `game` hors debug actif pour éviter des scènes debug en prod. | +| `src/hooks/handTracking/useBothFistsHold.ts` | Sort le hold des deux poings de `useFrame` R3F vers `requestAnimationFrame`. | +| `src/hooks/handTracking/useBrowserHandTracking.ts` | Encadre `detectForVideo`, release MediaPipe en cleanup, gère les erreurs. | +| `src/hooks/three/useTerrainHeight.ts` | Ajustements terrain, liés au snap/player. | +| `src/lib/handTracking/browserHandTracking.ts` | Force delegate CPU, garde une instance MediaPipe, ajoute `releaseBrowserHandLandmarker`. | +| `src/lib/handTracking/handTrackingSession.ts` | Ajoute warmup caméra, cache stream, timeout et consommation du stream préparé. | +| `src/managers/InteractionManager.ts` | Ajoute `handTrackingNearby` pour ne pas activer les mains sur toute interaction. | +| `src/pages/page.tsx` | Gestion WebGL context lost/restored, DPR fixe, antialias off, release MediaPipe au crash. | +| `src/providers/gameplay/HandTrackingProvider.tsx` | Ajoute activation différée, snapshot queued, warmup runtime. | +| `src/types/interaction/interaction.ts` | Ajoute `handTracking` et `handTrackingNearby` aux types interaction. | +| `src/utils/debug/Debug.ts` | Synchronise l'affichage du controller hand tracking source. | +| `src/utils/three/optimizeGLTFScene.ts` | Réduit la pression GPU des textures GLTF. | +| `src/world/World.tsx` | Ne rend les gants que si une main correspondante est détectée. | +| `src/world/debug/TestMap.tsx` | Nettoie les logs, stabilise waypoints/GPS/scène Physique. | +| `src/world/player/PlayerCamera.tsx` | Ajustements pointer lock/canvas ciblé. | + +## Fichiers actuellement modifiés dans le worktree + +Etat observé au moment de cette note : + +| Fichier | Statut | +| --------------------------------------------------------- | --------------------------------------------------------- | +| `public/models/talkie/*` | Beaucoup d'anciennes textures/fichiers `.gltf` supprimés. | +| `public/models/talkie/model.glb` | Nouveau fichier non suivi. | +| `src/components/three/handTracking/HandTrackingGlove.tsx` | Modifié. | +| `src/data/debug/testSceneConfig.ts` | Modifié. | +| `src/data/gameplay/repairMissions.ts` | Modifié. | +| `src/data/handTrackingConfig.ts` | Modifié. | +| `src/data/player/playerConfig.ts` | Modifié. | +| `src/data/world/mapLodConfig.ts` | Modifié. | +| `src/hooks/handTracking/useBrowserHandTracking.ts` | Modifié. | +| `src/hooks/handTracking/useRemoteHandTracking.ts` | Modifié. | +| `src/lib/handTracking/browserHandTracking.ts` | Modifié. | +| `src/lib/handTracking/handTrackingSession.ts` | Modifié. | +| `src/pages/page.tsx` | Modifié. | +| `src/providers/gameplay/HandTrackingProvider.tsx` | Modifié. | +| `src/utils/debug/Debug.ts` | Modifié. | +| `src/utils/three/optimizeGLTFScene.ts` | Modifié. | +| `src/world/World.tsx` | Modifié. | +| `src/world/debug/TestMap.tsx` | Modifié. | +| `src/world/player/Player.tsx` | Modifié. | +| `src/world/player/PlayerCamera.tsx` | Modifié. | +| `src/world/player/PlayerController.tsx` | Modifié. | +| `src/components/ui/RuntimeLoadingIndicator.tsx` | Nouveau fichier non suivi. | +| `src/hooks/handTracking/useHandTrackingRuntimeWarmup.ts` | Nouveau fichier non suivi. | +| `src/world/player/playerRuntimeSnapshot.ts` | Nouveau fichier non suivi. | + +Attention : les fichiers supprimés/nouveaux du talkie semblent être un sujet +séparé du context lost. Il faut les garder séparés dans les commits. + +## Fichiers directement impactés par le bug + +### Canvas et WebGL + +- `src/pages/page.tsx` +- `src/world/World.tsx` +- `src/utils/three/optimizeGLTFScene.ts` + +Ces fichiers influencent directement la charge GPU, la configuration du canvas, +les ressources GLTF et le comportement au context lost/restored. + +### Hand tracking + +- `src/providers/gameplay/HandTrackingProvider.tsx` +- `src/hooks/handTracking/useBrowserHandTracking.ts` +- `src/hooks/handTracking/useRemoteHandTracking.ts` +- `src/hooks/handTracking/useBothFistsHold.ts` +- `src/hooks/handTracking/useHandTrackingRuntimeWarmup.ts` +- `src/lib/handTracking/browserHandTracking.ts` +- `src/lib/handTracking/handTrackingSession.ts` +- `src/data/handTrackingConfig.ts` +- `src/components/three/handTracking/HandTrackingGlove.tsx` +- `backend/hand_tracker.py` + +Ces fichiers contrôlent le déclenchement, la source, la caméra, MediaPipe, le +backend et le rendu visuel des mains. + +### Interactions et repair game + +- `src/components/three/interaction/GrabbableObject.tsx` +- `src/components/three/interaction/InteractableObject.tsx` +- `src/managers/InteractionManager.ts` +- `src/types/interaction/interaction.ts` +- `src/components/three/gameplay/RepairGame.tsx` +- `src/hooks/gameplay/useRepairMissionStep.ts` +- `src/hooks/gameplay/useRepairMovementLocked.ts` + +Ces fichiers sont impactés parce que l'entrée dans une zone ou une étape repair +peut déclencher le hand tracking. + +### Player et restauration après crash + +- `src/world/player/Player.tsx` +- `src/world/player/PlayerCamera.tsx` +- `src/world/player/PlayerController.tsx` +- `src/world/player/playerRuntimeSnapshot.ts` +- `src/data/player/playerConfig.ts` + +Ces fichiers influencent le spawn, la caméra, le pointer lock, et la possibilité +de récupérer la dernière position après un context lost. + +### Scène Physique / debug + +- `src/world/debug/TestMap.tsx` +- `src/data/debug/testSceneConfig.ts` +- `src/components/debug/DebugPlayerModel.tsx` +- `src/hooks/debug/useSceneMode.ts` +- `src/utils/debug/Debug.ts` + +Ces fichiers ne sont pas forcément la cause racine, mais ils créent une scène de +stress utile pour reproduire le bug. + +## Ce que le stash essayait de corriger + +Le stash essaye de réduire le risque de context lost avec plusieurs leviers : + +1. passer MediaPipe browser/backend en CPU ; +2. libérer MediaPipe quand le runtime s'arrête ou quand WebGL saute ; +3. éviter de monter les gants sans mains détectées ; +4. retarder l'activation du hand tracking pour éviter les start/stop violents ; +5. demander la caméra plus tôt et réutiliser le stream ; +6. réduire la charge GPU du canvas avec DPR fixe et antialias off ; +7. limiter les re-uploads de textures GLTF ; +8. distinguer les interactions qui demandent vraiment le hand tracking ; +9. restaurer WebGL avec une limite pour éviter les boucles infinies ; +10. conserver la position du joueur après restauration. + +## Ce qui reste à prouver + +Il faut encore isoler le déclencheur exact : + +- crash avec hand tracking désactivé complètement ; +- crash avec source browser JS seulement ; +- crash avec source backend seulement ; +- crash avec gants 3D désactivés ; +- crash avec MediaPipe CPU ; +- crash avec `AnimatedModel` de TestMap désactivé ; +- crash avec GPS preview/waypoints désactivés ; +- crash avec shadows/antialias/DPR réduits ; +- crash en scène game réelle, pas seulement scène Physique. + +## Plan d'investigation recommandé + +1. Stabiliser le worktree et ne pas mélanger assets talkie, LOD, docs backend et + context lost dans le même commit. +2. Garder le stash tant que le fix final n'est pas validé. +3. Créer un commit ou patch isolé pour les logs context lost seulement. +4. Ajouter un switch debug qui permet de couper séparément : + - hand tracking runtime ; + - gants 3D ; + - MediaPipe browser ; + - backend ; + - GPS preview ; + - AnimatedModel de TestMap. +5. Reproduire le bug avec une matrice claire. +6. Garder les changements qui diminuent réellement les context lost. +7. Supprimer les logs temporaires une fois le diagnostic terminé. + +## Recommandation Git + +Ne pas supprimer le stash maintenant. + +Il contient du travail réel sur le context lost. Même s'il n'est pas parfait, il +sert de trace d'investigation et contient des morceaux utiles. + +Avant de le supprimer, sauvegarder le patch : + +```bash +git stash show -p stash@{0} > context-lost-stash.patch +``` + +Ensuite seulement, si tout a été repris dans des commits propres : + +```bash +git stash drop stash@{0} +``` + +## Commits logiques proposés + +Séparer en plusieurs commits pour éviter un gros commit illisible : + +1. `docs: document webgl context lost investigation` +2. `fix: reduce handtracking gpu pressure` +3. `fix: delay handtracking activation` +4. `fix: preserve player state after webgl restore` +5. `fix: stabilize physics debug scene` +6. `docs: clarify backend handtracking setup` diff --git a/public/assets/world/UI/pylon-mission-notification.webm b/public/assets/world/UI/centrale.webm similarity index 100% rename from public/assets/world/UI/pylon-mission-notification.webm rename to public/assets/world/UI/centrale.webm diff --git a/public/assets/world/UI/ebike-mission-notification.webm b/public/assets/world/UI/ebike.webm similarity index 100% rename from public/assets/world/UI/ebike-mission-notification.webm rename to public/assets/world/UI/ebike.webm diff --git a/public/assets/world/UI/farm-mission-notification.webm b/public/assets/world/UI/laferme.webm similarity index 100% rename from public/assets/world/UI/farm-mission-notification.webm rename to public/assets/world/UI/laferme.webm diff --git a/public/models/arbre-LOD/model.glb b/public/models/arbre-LOD/model.glb new file mode 100644 index 0000000..b5246eb --- /dev/null +++ b/public/models/arbre-LOD/model.glb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7962823c3b07a0e8f5de35351fa45a16901198859478d07bc5389b2696c7451 +size 13900 diff --git a/public/models/buisson-LOD/model.glb b/public/models/buisson-LOD/model.glb new file mode 100644 index 0000000..3a7af71 --- /dev/null +++ b/public/models/buisson-LOD/model.glb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:755898b6d3f2b02c0092bcc79f42bedf501e1c9e1658a839cf69127700cc8111 +size 3868 diff --git a/public/models/ebike/model.bin b/public/models/ebike/model.bin index 872a8d9..437a2c7 100644 --- a/public/models/ebike/model.bin +++ b/public/models/ebike/model.bin @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c40a3e0a6a1a7101e5b6d05ae88f3f46cd54271b4617c2aaec805e4bca1fb437 -size 2152008 +oid sha256:8fdf5f011bdb4b1842a81c75ae7e37bf3bbd2cae1638e94c839eff9088115ce4 +size 258 diff --git a/public/models/ebike/model.gltf b/public/models/ebike/model.gltf index 53b91f2..4b94915 100644 --- a/public/models/ebike/model.gltf +++ b/public/models/ebike/model.gltf @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7e1b7c581c3416a2563f20a8331021e09e0861973bf615b5e13f343a5b71757e -size 80265 +oid sha256:5dd2f3faee9f6c5a22b1024353c422b39ee6432558f8cde2f6287cf4bdcd5868 +size 255 diff --git a/public/models/electricienne-animated/model.gltf b/public/models/electricienne-animated/model.gltf index 790a4a0..3586956 100644 --- a/public/models/electricienne-animated/model.gltf +++ b/public/models/electricienne-animated/model.gltf @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:91bd4603d2e76e55b0eac402935c1ef8fa80af30528d277691309ac0d539e040 -size 86432 +oid sha256:20ac103bf35040b9d8b2cce0f8c9e0812a8bce629d7430fb28f689244b52d07d +size 86385 diff --git a/public/models/pylone-LOD/model.gltf b/public/models/pylone-LOD/model.gltf index e72d715..5bbcebd 100644 --- a/public/models/pylone-LOD/model.gltf +++ b/public/models/pylone-LOD/model.gltf @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:06f375b482357753b1cfb212fa4f8398e9da1aa234f8259a7b1e0df9d7572afd -size 8540 +oid sha256:6e465b84186e43c2b2bbcb89b3e40d7a9c0a0fe170434f2e9fad0cf320b67c9f +size 8561 diff --git a/public/models/pylone/model.gltf b/public/models/pylone/model.gltf index e72d715..5bbcebd 100644 --- a/public/models/pylone/model.gltf +++ b/public/models/pylone/model.gltf @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:06f375b482357753b1cfb212fa4f8398e9da1aa234f8259a7b1e0df9d7572afd -size 8540 +oid sha256:6e465b84186e43c2b2bbcb89b3e40d7a9c0a0fe170434f2e9fad0cf320b67c9f +size 8561 diff --git a/public/models/sapin-LOD/model.glb b/public/models/sapin-LOD/model.glb new file mode 100644 index 0000000..96ee010 --- /dev/null +++ b/public/models/sapin-LOD/model.glb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:883871a80725f887de958d44a5e3c33deadbfdc546e307563cdf1fcac2b6a37f +size 9280 diff --git a/public/models/talkie-LOD/antenne_Base_color.png b/public/models/talkie-LOD/antenne_Base_color.png deleted file mode 100644 index db60934..0000000 --- a/public/models/talkie-LOD/antenne_Base_color.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fc5ba4130daed3b1edae078cc73ad5a4d9955c8c464abcbc6af2a80077842f7a -size 312866 diff --git a/public/models/talkie-LOD/antenne_Height.png b/public/models/talkie-LOD/antenne_Height.png deleted file mode 100644 index 713980d..0000000 --- a/public/models/talkie-LOD/antenne_Height.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:208daeea7306a6a576fbe1098c66d59571dd984635d7fb6c017fd767cde531ed -size 3178 diff --git a/public/models/talkie-LOD/antenne_Metallic.png b/public/models/talkie-LOD/antenne_Metallic.png deleted file mode 100644 index b46e54a..0000000 --- a/public/models/talkie-LOD/antenne_Metallic.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:60041773ef2d493f3547aa1b0fbdf5b1bb548a3da39164384293ef5292b2c5b3 -size 1118 diff --git a/public/models/talkie-LOD/antenne_Mixed_AO.png b/public/models/talkie-LOD/antenne_Mixed_AO.png deleted file mode 100644 index 3ba6e13..0000000 --- a/public/models/talkie-LOD/antenne_Mixed_AO.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f3ec5ee97080be475cf3f3da71ca440dac8ccbe104510f519d1b4ee928d5b2b9 -size 187817 diff --git a/public/models/talkie-LOD/antenne_Roughness.png b/public/models/talkie-LOD/antenne_Roughness.png deleted file mode 100644 index e6233e4..0000000 --- a/public/models/talkie-LOD/antenne_Roughness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:91c3fb77f1204027e6d0d46e59dc6b68cd13fc68099b20612b75749460a3c8b8 -size 69233 diff --git a/public/models/talkie-LOD/antenne_normal.png b/public/models/talkie-LOD/antenne_normal.png deleted file mode 100644 index bf16203..0000000 --- a/public/models/talkie-LOD/antenne_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:da8e995d1260a97d5f1c099aa51ccf35123316264751c940bb5e71e3d115c133 -size 205065 diff --git a/public/models/talkie-LOD/antenne_normal_opengl.png b/public/models/talkie-LOD/antenne_normal_opengl.png deleted file mode 100644 index 7c1dc2b..0000000 --- a/public/models/talkie-LOD/antenne_normal_opengl.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c1ec8c53b5e60fb3f13da3db4b787a6dd667f51c05eb92e925902b33c5fb68f5 -size 204007 diff --git a/public/models/talkie-LOD/boutona_Base_color.png b/public/models/talkie-LOD/boutona_Base_color.png deleted file mode 100644 index f493f55..0000000 --- a/public/models/talkie-LOD/boutona_Base_color.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ef47a91bfd020de0983e75bc8bc03277b651c894da0f006dc49d5bfb91e86623 -size 473199 diff --git a/public/models/talkie-LOD/boutona_Height.png b/public/models/talkie-LOD/boutona_Height.png deleted file mode 100644 index 713980d..0000000 --- a/public/models/talkie-LOD/boutona_Height.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:208daeea7306a6a576fbe1098c66d59571dd984635d7fb6c017fd767cde531ed -size 3178 diff --git a/public/models/talkie-LOD/boutona_Metallic.png b/public/models/talkie-LOD/boutona_Metallic.png deleted file mode 100644 index b46e54a..0000000 --- a/public/models/talkie-LOD/boutona_Metallic.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:60041773ef2d493f3547aa1b0fbdf5b1bb548a3da39164384293ef5292b2c5b3 -size 1118 diff --git a/public/models/talkie-LOD/boutona_Mixed_AO.png b/public/models/talkie-LOD/boutona_Mixed_AO.png deleted file mode 100644 index d28322d..0000000 --- a/public/models/talkie-LOD/boutona_Mixed_AO.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f45671cafcc91e40f67120f22f7b58c75a9bf5289f8dd67019d7c836253e8942 -size 244343 diff --git a/public/models/talkie-LOD/boutona_Roughness.png b/public/models/talkie-LOD/boutona_Roughness.png deleted file mode 100644 index daa6677..0000000 --- a/public/models/talkie-LOD/boutona_Roughness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:adaedf0e287c99669b47a0e3e3b99ed2c6f1f5a761e69168418e56610d7d8f9a -size 54561 diff --git a/public/models/talkie-LOD/boutona_normal.png b/public/models/talkie-LOD/boutona_normal.png deleted file mode 100644 index 4cf6138..0000000 --- a/public/models/talkie-LOD/boutona_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9c0e761804d0546dc6cd9d929fdecab8f6852866a6f2025c03c76c34b2040ee0 -size 175939 diff --git a/public/models/talkie-LOD/boutona_normal_opengl.png b/public/models/talkie-LOD/boutona_normal_opengl.png deleted file mode 100644 index 80416e2..0000000 --- a/public/models/talkie-LOD/boutona_normal_opengl.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:86c390222c74160382b92a5736664c37e3861937db2e2d58699643516fc52995 -size 176366 diff --git a/public/models/talkie-LOD/boutonb_Base_color.png b/public/models/talkie-LOD/boutonb_Base_color.png deleted file mode 100644 index ed59d49..0000000 --- a/public/models/talkie-LOD/boutonb_Base_color.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:84973c1c06bf83beacd0987c5d252560ec92e09701b3ac6b73289f39392c21da -size 496575 diff --git a/public/models/talkie-LOD/boutonb_Height.png b/public/models/talkie-LOD/boutonb_Height.png deleted file mode 100644 index 713980d..0000000 --- a/public/models/talkie-LOD/boutonb_Height.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:208daeea7306a6a576fbe1098c66d59571dd984635d7fb6c017fd767cde531ed -size 3178 diff --git a/public/models/talkie-LOD/boutonb_Metallic.png b/public/models/talkie-LOD/boutonb_Metallic.png deleted file mode 100644 index b46e54a..0000000 --- a/public/models/talkie-LOD/boutonb_Metallic.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:60041773ef2d493f3547aa1b0fbdf5b1bb548a3da39164384293ef5292b2c5b3 -size 1118 diff --git a/public/models/talkie-LOD/boutonb_Mixed_AO.png b/public/models/talkie-LOD/boutonb_Mixed_AO.png deleted file mode 100644 index 8292910..0000000 --- a/public/models/talkie-LOD/boutonb_Mixed_AO.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d58e8ec5e90125edd38f279ee1b9fee863b75d8396fef6a0c22a9af6a9c0a341 -size 239658 diff --git a/public/models/talkie-LOD/boutonb_Roughness.png b/public/models/talkie-LOD/boutonb_Roughness.png deleted file mode 100644 index acba391..0000000 --- a/public/models/talkie-LOD/boutonb_Roughness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ad833228a99505d0fea7495970bfbf47d3942a86d457aca379b99d8224d8633f -size 54522 diff --git a/public/models/talkie-LOD/boutonb_normal.png b/public/models/talkie-LOD/boutonb_normal.png deleted file mode 100644 index 943917e..0000000 --- a/public/models/talkie-LOD/boutonb_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:53e5d76fcd40986674d93f289cea51c6b839d720787d98ed4112164e20558bd2 -size 176052 diff --git a/public/models/talkie-LOD/boutonb_normal_opengl.png b/public/models/talkie-LOD/boutonb_normal_opengl.png deleted file mode 100644 index 47539e6..0000000 --- a/public/models/talkie-LOD/boutonb_normal_opengl.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4a1ea79411217de422f6f7fd160c673e01a2a09ebce1d95a6b5e63c8c1e5de18 -size 176723 diff --git a/public/models/talkie-LOD/cable1_Base_color.png b/public/models/talkie-LOD/cable1_Base_color.png deleted file mode 100644 index 0aa378c..0000000 --- a/public/models/talkie-LOD/cable1_Base_color.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:967d8771fbcd5427bf0005b147ecae38ab53271c4a99980f34db1102d0cb35f0 -size 178767 diff --git a/public/models/talkie-LOD/cable1_Height.png b/public/models/talkie-LOD/cable1_Height.png deleted file mode 100644 index 713980d..0000000 --- a/public/models/talkie-LOD/cable1_Height.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:208daeea7306a6a576fbe1098c66d59571dd984635d7fb6c017fd767cde531ed -size 3178 diff --git a/public/models/talkie-LOD/cable1_Metallic.png b/public/models/talkie-LOD/cable1_Metallic.png deleted file mode 100644 index b46e54a..0000000 --- a/public/models/talkie-LOD/cable1_Metallic.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:60041773ef2d493f3547aa1b0fbdf5b1bb548a3da39164384293ef5292b2c5b3 -size 1118 diff --git a/public/models/talkie-LOD/cable1_Mixed_AO.png b/public/models/talkie-LOD/cable1_Mixed_AO.png deleted file mode 100644 index 2003ade..0000000 --- a/public/models/talkie-LOD/cable1_Mixed_AO.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:73378e05b925c39d37e3cfdb1048d891b6216927fbd9eab111a61051d9c5fadd -size 142820 diff --git a/public/models/talkie-LOD/cable1_Roughness.png b/public/models/talkie-LOD/cable1_Roughness.png deleted file mode 100644 index c1c9096..0000000 --- a/public/models/talkie-LOD/cable1_Roughness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6a2a10008bf8a90ca1e7ef831944d8e6b2c41d5aa9b5a1f20f49d7dcc942b9f2 -size 56819 diff --git a/public/models/talkie-LOD/cable1_normal.png b/public/models/talkie-LOD/cable1_normal.png deleted file mode 100644 index 8f1338d..0000000 --- a/public/models/talkie-LOD/cable1_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cb4d0e26c8d16fcb471e2812585fb27ddfbce4500c526fce512d61f7611c5b99 -size 186292 diff --git a/public/models/talkie-LOD/cable1_normal_opengl.png b/public/models/talkie-LOD/cable1_normal_opengl.png deleted file mode 100644 index 456bcdb..0000000 --- a/public/models/talkie-LOD/cable1_normal_opengl.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8854c9b53ac97ce6113d351aa528d9a6664e90947678aee05731695e034d1c79 -size 187073 diff --git a/public/models/talkie-LOD/cable2_Base_color.png b/public/models/talkie-LOD/cable2_Base_color.png deleted file mode 100644 index ba3be72..0000000 --- a/public/models/talkie-LOD/cable2_Base_color.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4b1bdd610bf135a20471bc2b65e53f2a2333ab6e845380f55fed93d45dce1897 -size 210840 diff --git a/public/models/talkie-LOD/cable2_Height.png b/public/models/talkie-LOD/cable2_Height.png deleted file mode 100644 index 713980d..0000000 --- a/public/models/talkie-LOD/cable2_Height.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:208daeea7306a6a576fbe1098c66d59571dd984635d7fb6c017fd767cde531ed -size 3178 diff --git a/public/models/talkie-LOD/cable2_Metallic.png b/public/models/talkie-LOD/cable2_Metallic.png deleted file mode 100644 index b46e54a..0000000 --- a/public/models/talkie-LOD/cable2_Metallic.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:60041773ef2d493f3547aa1b0fbdf5b1bb548a3da39164384293ef5292b2c5b3 -size 1118 diff --git a/public/models/talkie-LOD/cable2_Mixed_AO.png b/public/models/talkie-LOD/cable2_Mixed_AO.png deleted file mode 100644 index e3a64cc..0000000 --- a/public/models/talkie-LOD/cable2_Mixed_AO.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:30e8e315f7950a91135bba6ac43d04563b1e501e83cfb4b57048320768602bc5 -size 167450 diff --git a/public/models/talkie-LOD/cable2_Roughness.png b/public/models/talkie-LOD/cable2_Roughness.png deleted file mode 100644 index a9440d4..0000000 --- a/public/models/talkie-LOD/cable2_Roughness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0d9e3cc7a29c90c1712196c05915bea480124dddc0db47db9415f738f895660c -size 60898 diff --git a/public/models/talkie-LOD/cable2_normal.png b/public/models/talkie-LOD/cable2_normal.png deleted file mode 100644 index acc99fd..0000000 --- a/public/models/talkie-LOD/cable2_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b09eae40cd4d52c348933f49347691f08dc6f25d929ddadbeddd2157444c706f -size 195384 diff --git a/public/models/talkie-LOD/cable2_normal_opengl.png b/public/models/talkie-LOD/cable2_normal_opengl.png deleted file mode 100644 index d184f94..0000000 --- a/public/models/talkie-LOD/cable2_normal_opengl.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ff1ae64895328cae7bf8816a43eb38ca4db82b7979d02db927bc307fa7ec66c6 -size 196010 diff --git a/public/models/talkie-LOD/cadre_Base_color.png b/public/models/talkie-LOD/cadre_Base_color.png deleted file mode 100644 index afbe925..0000000 --- a/public/models/talkie-LOD/cadre_Base_color.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:637e73b56419d8390e8aeb27433fdee21264c9d5b28e1caaf7e1357f6c191fd3 -size 280049 diff --git a/public/models/talkie-LOD/cadre_Height.png b/public/models/talkie-LOD/cadre_Height.png deleted file mode 100644 index 713980d..0000000 --- a/public/models/talkie-LOD/cadre_Height.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:208daeea7306a6a576fbe1098c66d59571dd984635d7fb6c017fd767cde531ed -size 3178 diff --git a/public/models/talkie-LOD/cadre_Metallic.png b/public/models/talkie-LOD/cadre_Metallic.png deleted file mode 100644 index b46e54a..0000000 --- a/public/models/talkie-LOD/cadre_Metallic.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:60041773ef2d493f3547aa1b0fbdf5b1bb548a3da39164384293ef5292b2c5b3 -size 1118 diff --git a/public/models/talkie-LOD/cadre_Mixed_AO.png b/public/models/talkie-LOD/cadre_Mixed_AO.png deleted file mode 100644 index 0151384..0000000 --- a/public/models/talkie-LOD/cadre_Mixed_AO.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e1f9912860e5f508e0e29ef1e03943101cdb287a1c34bd0278ac237824255da5 -size 157683 diff --git a/public/models/talkie-LOD/cadre_Roughness.png b/public/models/talkie-LOD/cadre_Roughness.png deleted file mode 100644 index 264a6e4..0000000 --- a/public/models/talkie-LOD/cadre_Roughness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:afb28f17a6f419356f49088c8c5b8d12b6aaf2471ee7e35ef42e0fda3a5365f2 -size 53784 diff --git a/public/models/talkie-LOD/cadre_normal.png b/public/models/talkie-LOD/cadre_normal.png deleted file mode 100644 index 8d2a5a3..0000000 --- a/public/models/talkie-LOD/cadre_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:982a042d28061ce926c80293129985733aba79bc7115e0f5b55e4f4186808f5a -size 52817 diff --git a/public/models/talkie-LOD/cadre_normal_opengl.png b/public/models/talkie-LOD/cadre_normal_opengl.png deleted file mode 100644 index 46032a3..0000000 --- a/public/models/talkie-LOD/cadre_normal_opengl.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:58d63de38e7fefca7ec94b4057b37256c477dbd2749f950f0bd373932b52cbf9 -size 52737 diff --git a/public/models/talkie-LOD/e_cran_base_color.png b/public/models/talkie-LOD/e_cran_base_color.png deleted file mode 100644 index a8c2149..0000000 --- a/public/models/talkie-LOD/e_cran_base_color.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f75363e70ffed07a182a3e61d7c301cb8fd053ac8ec784d56e9450335167dce8 -size 6502 diff --git a/public/models/talkie-LOD/e_cran_height.png b/public/models/talkie-LOD/e_cran_height.png deleted file mode 100644 index 713980d..0000000 --- a/public/models/talkie-LOD/e_cran_height.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:208daeea7306a6a576fbe1098c66d59571dd984635d7fb6c017fd767cde531ed -size 3178 diff --git a/public/models/talkie-LOD/e_cran_metallic.png b/public/models/talkie-LOD/e_cran_metallic.png deleted file mode 100644 index b46e54a..0000000 --- a/public/models/talkie-LOD/e_cran_metallic.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:60041773ef2d493f3547aa1b0fbdf5b1bb548a3da39164384293ef5292b2c5b3 -size 1118 diff --git a/public/models/talkie-LOD/e_cran_mixed_ao.png b/public/models/talkie-LOD/e_cran_mixed_ao.png deleted file mode 100644 index e91eb6e..0000000 --- a/public/models/talkie-LOD/e_cran_mixed_ao.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d4f3fd92f328f0733f9cb9865209466c251f4edf4750654eb0385b519300cf34 -size 329712 diff --git a/public/models/talkie-LOD/e_cran_normal.png b/public/models/talkie-LOD/e_cran_normal.png deleted file mode 100644 index 175152b..0000000 --- a/public/models/talkie-LOD/e_cran_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a07dd2bf8fe1d37b9a74d2ca09b8a77d8a97029d41a8483e34ba30bd8e9efc04 -size 74315 diff --git a/public/models/talkie-LOD/e_cran_normal_opengl.png b/public/models/talkie-LOD/e_cran_normal_opengl.png deleted file mode 100644 index e17d9b3..0000000 --- a/public/models/talkie-LOD/e_cran_normal_opengl.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ca90a32ea8b1dadb11a5cf2e41d4d096920fd7a2ab493dec96682a479d4e7a8c -size 74316 diff --git a/public/models/talkie-LOD/e_cran_roughness.png b/public/models/talkie-LOD/e_cran_roughness.png deleted file mode 100644 index ad642fa..0000000 --- a/public/models/talkie-LOD/e_cran_roughness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:700f97e34547f14a62a45858218e56eb3715a278380c2f1f14be9ca6feaae959 -size 72768 diff --git a/public/models/talkie-LOD/hautparleur_Base_color.png b/public/models/talkie-LOD/hautparleur_Base_color.png deleted file mode 100644 index 9e43314..0000000 --- a/public/models/talkie-LOD/hautparleur_Base_color.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:36168017b9c2d6961f869f461812a53ed4bdb49f24f350452f4604009acb6fe8 -size 658014 diff --git a/public/models/talkie-LOD/hautparleur_Height.png b/public/models/talkie-LOD/hautparleur_Height.png deleted file mode 100644 index 713980d..0000000 --- a/public/models/talkie-LOD/hautparleur_Height.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:208daeea7306a6a576fbe1098c66d59571dd984635d7fb6c017fd767cde531ed -size 3178 diff --git a/public/models/talkie-LOD/hautparleur_Metallic.png b/public/models/talkie-LOD/hautparleur_Metallic.png deleted file mode 100644 index b46e54a..0000000 --- a/public/models/talkie-LOD/hautparleur_Metallic.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:60041773ef2d493f3547aa1b0fbdf5b1bb548a3da39164384293ef5292b2c5b3 -size 1118 diff --git a/public/models/talkie-LOD/hautparleur_Mixed_AO.png b/public/models/talkie-LOD/hautparleur_Mixed_AO.png deleted file mode 100644 index f2bfd28..0000000 --- a/public/models/talkie-LOD/hautparleur_Mixed_AO.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:29ac8737a9eccff201ad351b4b403e93ed65c7a082052c1070455bc7c795bcbb -size 201135 diff --git a/public/models/talkie-LOD/hautparleur_Roughness.png b/public/models/talkie-LOD/hautparleur_Roughness.png deleted file mode 100644 index 17ac038..0000000 --- a/public/models/talkie-LOD/hautparleur_Roughness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9f7c1e238150662981d8a4d003045021ee0cca21af14dc79a9180671c6a82621 -size 74349 diff --git a/public/models/talkie-LOD/hautparleur_normal.png b/public/models/talkie-LOD/hautparleur_normal.png deleted file mode 100644 index 5d89a1c..0000000 --- a/public/models/talkie-LOD/hautparleur_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:65edaf688e31787da8deb864079aed068cc71775dbbde4c350481896c2d8a204 -size 98635 diff --git a/public/models/talkie-LOD/hautparleur_normal_opengl.png b/public/models/talkie-LOD/hautparleur_normal_opengl.png deleted file mode 100644 index 814a2b3..0000000 --- a/public/models/talkie-LOD/hautparleur_normal_opengl.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c689c9d28d984f54e5647de38423f34da442b8e8cac076052bfa5df07457fb1c -size 98768 diff --git a/public/models/talkie-LOD/model.bin b/public/models/talkie-LOD/model.bin deleted file mode 100644 index 7e13375..0000000 --- a/public/models/talkie-LOD/model.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:970717ff52a7275d1e6090a8699021ae57b74127b05c016eafb6dca45158420f -size 198456 diff --git a/public/models/talkie-LOD/model.gltf b/public/models/talkie-LOD/model.gltf deleted file mode 100644 index 5caa83b..0000000 --- a/public/models/talkie-LOD/model.gltf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:694acec3219e3cb0dbce0e9739bc3c6655dbf5360f104d50a52618e06d90c946 -size 63007 diff --git a/public/models/talkie-LOD/prise_Base_color.png b/public/models/talkie-LOD/prise_Base_color.png deleted file mode 100644 index 30d846f..0000000 --- a/public/models/talkie-LOD/prise_Base_color.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7e012c8775c6eb274a80856394fac6673f7beb754c2f78e1c51c842ac017fdd5 -size 472487 diff --git a/public/models/talkie-LOD/prise_Height.png b/public/models/talkie-LOD/prise_Height.png deleted file mode 100644 index 713980d..0000000 --- a/public/models/talkie-LOD/prise_Height.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:208daeea7306a6a576fbe1098c66d59571dd984635d7fb6c017fd767cde531ed -size 3178 diff --git a/public/models/talkie-LOD/prise_Metallic.png b/public/models/talkie-LOD/prise_Metallic.png deleted file mode 100644 index b46e54a..0000000 --- a/public/models/talkie-LOD/prise_Metallic.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:60041773ef2d493f3547aa1b0fbdf5b1bb548a3da39164384293ef5292b2c5b3 -size 1118 diff --git a/public/models/talkie-LOD/prise_Mixed_AO.png b/public/models/talkie-LOD/prise_Mixed_AO.png deleted file mode 100644 index 1ed1f71..0000000 --- a/public/models/talkie-LOD/prise_Mixed_AO.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9a7ae156409544d00bf3332fb542aaec0711d4ce4c9d39d4bd573fb4f0212051 -size 230780 diff --git a/public/models/talkie-LOD/prise_Roughness.png b/public/models/talkie-LOD/prise_Roughness.png deleted file mode 100644 index c827dba..0000000 --- a/public/models/talkie-LOD/prise_Roughness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:161c97c6ad56619ad702cc955a26ea92203575f31bb35ebc8ca398b48aae9889 -size 100073 diff --git a/public/models/talkie-LOD/prise_normal.png b/public/models/talkie-LOD/prise_normal.png deleted file mode 100644 index 5bcffa1..0000000 --- a/public/models/talkie-LOD/prise_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3c00bec06b1bbd954eb91872fa8cd817f247b275c16e6c372db52189ba6f3778 -size 212856 diff --git a/public/models/talkie-LOD/prise_normal_opengl.png b/public/models/talkie-LOD/prise_normal_opengl.png deleted file mode 100644 index 6bc3741..0000000 --- a/public/models/talkie-LOD/prise_normal_opengl.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:aa8e8d378a595f8aafc4cd34ecac65426a03847a402f955b7b0280f0383d40eb -size 224961 diff --git a/public/models/talkie-LOD/talkie_Base_color.png b/public/models/talkie-LOD/talkie_Base_color.png deleted file mode 100644 index 295b322..0000000 --- a/public/models/talkie-LOD/talkie_Base_color.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:aead25dde6c940f353fa4a53f43e37dde80cd924ccced3c4f88a45dcc5fb4751 -size 610827 diff --git a/public/models/talkie-LOD/talkie_Height.png b/public/models/talkie-LOD/talkie_Height.png deleted file mode 100644 index 713980d..0000000 --- a/public/models/talkie-LOD/talkie_Height.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:208daeea7306a6a576fbe1098c66d59571dd984635d7fb6c017fd767cde531ed -size 3178 diff --git a/public/models/talkie-LOD/talkie_Metallic.png b/public/models/talkie-LOD/talkie_Metallic.png deleted file mode 100644 index b46e54a..0000000 --- a/public/models/talkie-LOD/talkie_Metallic.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:60041773ef2d493f3547aa1b0fbdf5b1bb548a3da39164384293ef5292b2c5b3 -size 1118 diff --git a/public/models/talkie-LOD/talkie_Mixed_AO.png b/public/models/talkie-LOD/talkie_Mixed_AO.png deleted file mode 100644 index a015f96..0000000 --- a/public/models/talkie-LOD/talkie_Mixed_AO.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:78a4e5bc8affb8c7f529712ddcc4958982729d4bbc64163d93b4e3df8192f3e9 -size 229809 diff --git a/public/models/talkie-LOD/talkie_Roughness.png b/public/models/talkie-LOD/talkie_Roughness.png deleted file mode 100644 index 091f911..0000000 --- a/public/models/talkie-LOD/talkie_Roughness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:638da789f9d21dfa546cf053c5f0c4e47fc18eef3d7ac412d39bdbdf3b3974b1 -size 134252 diff --git a/public/models/talkie-LOD/talkie_normal.png b/public/models/talkie-LOD/talkie_normal.png deleted file mode 100644 index d3e9649..0000000 --- a/public/models/talkie-LOD/talkie_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3fba8c5bce232fd16f3d3da18228438443bfcfab6f1673884e2c6439a799a342 -size 285066 diff --git a/public/models/talkie-LOD/talkie_normal_opengl.png b/public/models/talkie-LOD/talkie_normal_opengl.png deleted file mode 100644 index e58b36f..0000000 --- a/public/models/talkie-LOD/talkie_normal_opengl.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:708382f0b0340e845f0cd4127b84ec5f837f5ca3a51f0c4064ba790374643c21 -size 287356 diff --git a/public/models/talkie-LOD/touches_Base_color.png b/public/models/talkie-LOD/touches_Base_color.png deleted file mode 100644 index eb7631c..0000000 --- a/public/models/talkie-LOD/touches_Base_color.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:47ef413967a461f9768b74d15a2ab1c8e3e3fe6fc9be027d8cf1e7268bb8a888 -size 126096 diff --git a/public/models/talkie-LOD/touches_Height.png b/public/models/talkie-LOD/touches_Height.png deleted file mode 100644 index 713980d..0000000 --- a/public/models/talkie-LOD/touches_Height.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:208daeea7306a6a576fbe1098c66d59571dd984635d7fb6c017fd767cde531ed -size 3178 diff --git a/public/models/talkie-LOD/touches_Metallic.png b/public/models/talkie-LOD/touches_Metallic.png deleted file mode 100644 index b46e54a..0000000 --- a/public/models/talkie-LOD/touches_Metallic.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:60041773ef2d493f3547aa1b0fbdf5b1bb548a3da39164384293ef5292b2c5b3 -size 1118 diff --git a/public/models/talkie-LOD/touches_Mixed_AO.png b/public/models/talkie-LOD/touches_Mixed_AO.png deleted file mode 100644 index 5673800..0000000 --- a/public/models/talkie-LOD/touches_Mixed_AO.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6884417f47afb4330b00f9f42fa1faf7b8bbd06d2ae9595cffe409a4d38cd461 -size 246760 diff --git a/public/models/talkie-LOD/touches_Roughness.png b/public/models/talkie-LOD/touches_Roughness.png deleted file mode 100644 index bd73a19..0000000 --- a/public/models/talkie-LOD/touches_Roughness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5804a17a4fd8691a606cbb3e671234f2c876dfc0e88e16d2f781bd35785167cb -size 56002 diff --git a/public/models/talkie-LOD/touches_normal.png b/public/models/talkie-LOD/touches_normal.png deleted file mode 100644 index 07f83c4..0000000 --- a/public/models/talkie-LOD/touches_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:09d922e17cd400c32ef51462723e9c5ee9dfbe4c668e88e6057f9e7d60c8830e -size 59216 diff --git a/public/models/talkie-LOD/touches_normal_opengl.png b/public/models/talkie-LOD/touches_normal_opengl.png deleted file mode 100644 index ec98ce7..0000000 --- a/public/models/talkie-LOD/touches_normal_opengl.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8cdadc48d7d365fa0f8e4f3b64a61a6fa95cf9bcafaf50dc83ea7cf90173f68b -size 59178 diff --git a/public/models/talkie-LOD/écran_Base_color.png b/public/models/talkie-LOD/écran_Base_color.png deleted file mode 100644 index b28a367..0000000 --- a/public/models/talkie-LOD/écran_Base_color.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bfbf65890f6d5019bf113246dcecb83c97e31d6e10b0429d5e89df9df67a58bd -size 6498 diff --git a/public/models/talkie-LOD/écran_Height.png b/public/models/talkie-LOD/écran_Height.png deleted file mode 100644 index 713980d..0000000 --- a/public/models/talkie-LOD/écran_Height.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:208daeea7306a6a576fbe1098c66d59571dd984635d7fb6c017fd767cde531ed -size 3178 diff --git a/public/models/talkie-LOD/écran_Metallic.png b/public/models/talkie-LOD/écran_Metallic.png deleted file mode 100644 index b46e54a..0000000 --- a/public/models/talkie-LOD/écran_Metallic.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:60041773ef2d493f3547aa1b0fbdf5b1bb548a3da39164384293ef5292b2c5b3 -size 1118 diff --git a/public/models/talkie-LOD/écran_Mixed_AO.png b/public/models/talkie-LOD/écran_Mixed_AO.png deleted file mode 100644 index e91eb6e..0000000 --- a/public/models/talkie-LOD/écran_Mixed_AO.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d4f3fd92f328f0733f9cb9865209466c251f4edf4750654eb0385b519300cf34 -size 329712 diff --git a/public/models/talkie-LOD/écran_Normal.png b/public/models/talkie-LOD/écran_Normal.png deleted file mode 100644 index 175152b..0000000 --- a/public/models/talkie-LOD/écran_Normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a07dd2bf8fe1d37b9a74d2ca09b8a77d8a97029d41a8483e34ba30bd8e9efc04 -size 74315 diff --git a/public/models/talkie-LOD/écran_Normal_OpenGL.png b/public/models/talkie-LOD/écran_Normal_OpenGL.png deleted file mode 100644 index e17d9b3..0000000 --- a/public/models/talkie-LOD/écran_Normal_OpenGL.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ca90a32ea8b1dadb11a5cf2e41d4d096920fd7a2ab493dec96682a479d4e7a8c -size 74316 diff --git a/public/models/talkie-LOD/écran_Roughness.png b/public/models/talkie-LOD/écran_Roughness.png deleted file mode 100644 index d89bffa..0000000 --- a/public/models/talkie-LOD/écran_Roughness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d560c80d755fdfff917c63d96d664cc4c9be963cc38ac63533418f7df1b0642c -size 72772 diff --git a/public/models/talkie/antenne_Base_color.png b/public/models/talkie/antenne_Base_color.png deleted file mode 100644 index db60934..0000000 --- a/public/models/talkie/antenne_Base_color.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fc5ba4130daed3b1edae078cc73ad5a4d9955c8c464abcbc6af2a80077842f7a -size 312866 diff --git a/public/models/talkie/antenne_Height.png b/public/models/talkie/antenne_Height.png deleted file mode 100644 index 713980d..0000000 --- a/public/models/talkie/antenne_Height.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:208daeea7306a6a576fbe1098c66d59571dd984635d7fb6c017fd767cde531ed -size 3178 diff --git a/public/models/talkie/antenne_Metallic.png b/public/models/talkie/antenne_Metallic.png deleted file mode 100644 index b46e54a..0000000 --- a/public/models/talkie/antenne_Metallic.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:60041773ef2d493f3547aa1b0fbdf5b1bb548a3da39164384293ef5292b2c5b3 -size 1118 diff --git a/public/models/talkie/antenne_Mixed_AO.png b/public/models/talkie/antenne_Mixed_AO.png deleted file mode 100644 index 3ba6e13..0000000 --- a/public/models/talkie/antenne_Mixed_AO.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f3ec5ee97080be475cf3f3da71ca440dac8ccbe104510f519d1b4ee928d5b2b9 -size 187817 diff --git a/public/models/talkie/antenne_Normal.png b/public/models/talkie/antenne_Normal.png deleted file mode 100644 index bf16203..0000000 --- a/public/models/talkie/antenne_Normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:da8e995d1260a97d5f1c099aa51ccf35123316264751c940bb5e71e3d115c133 -size 205065 diff --git a/public/models/talkie/antenne_Normal_OpenGL.png b/public/models/talkie/antenne_Normal_OpenGL.png deleted file mode 100644 index 7c1dc2b..0000000 --- a/public/models/talkie/antenne_Normal_OpenGL.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c1ec8c53b5e60fb3f13da3db4b787a6dd667f51c05eb92e925902b33c5fb68f5 -size 204007 diff --git a/public/models/talkie/antenne_Roughness.png b/public/models/talkie/antenne_Roughness.png deleted file mode 100644 index e6233e4..0000000 --- a/public/models/talkie/antenne_Roughness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:91c3fb77f1204027e6d0d46e59dc6b68cd13fc68099b20612b75749460a3c8b8 -size 69233 diff --git a/public/models/talkie/boutona_Base_color.png b/public/models/talkie/boutona_Base_color.png deleted file mode 100644 index f493f55..0000000 --- a/public/models/talkie/boutona_Base_color.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ef47a91bfd020de0983e75bc8bc03277b651c894da0f006dc49d5bfb91e86623 -size 473199 diff --git a/public/models/talkie/boutona_Height.png b/public/models/talkie/boutona_Height.png deleted file mode 100644 index 713980d..0000000 --- a/public/models/talkie/boutona_Height.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:208daeea7306a6a576fbe1098c66d59571dd984635d7fb6c017fd767cde531ed -size 3178 diff --git a/public/models/talkie/boutona_Metallic.png b/public/models/talkie/boutona_Metallic.png deleted file mode 100644 index b46e54a..0000000 --- a/public/models/talkie/boutona_Metallic.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:60041773ef2d493f3547aa1b0fbdf5b1bb548a3da39164384293ef5292b2c5b3 -size 1118 diff --git a/public/models/talkie/boutona_Mixed_AO.png b/public/models/talkie/boutona_Mixed_AO.png deleted file mode 100644 index d28322d..0000000 --- a/public/models/talkie/boutona_Mixed_AO.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f45671cafcc91e40f67120f22f7b58c75a9bf5289f8dd67019d7c836253e8942 -size 244343 diff --git a/public/models/talkie/boutona_Normal.png b/public/models/talkie/boutona_Normal.png deleted file mode 100644 index 4cf6138..0000000 --- a/public/models/talkie/boutona_Normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9c0e761804d0546dc6cd9d929fdecab8f6852866a6f2025c03c76c34b2040ee0 -size 175939 diff --git a/public/models/talkie/boutona_Normal_OpenGL.png b/public/models/talkie/boutona_Normal_OpenGL.png deleted file mode 100644 index 80416e2..0000000 --- a/public/models/talkie/boutona_Normal_OpenGL.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:86c390222c74160382b92a5736664c37e3861937db2e2d58699643516fc52995 -size 176366 diff --git a/public/models/talkie/boutona_Roughness.png b/public/models/talkie/boutona_Roughness.png deleted file mode 100644 index daa6677..0000000 --- a/public/models/talkie/boutona_Roughness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:adaedf0e287c99669b47a0e3e3b99ed2c6f1f5a761e69168418e56610d7d8f9a -size 54561 diff --git a/public/models/talkie/boutonb_Base_color.png b/public/models/talkie/boutonb_Base_color.png deleted file mode 100644 index ed59d49..0000000 --- a/public/models/talkie/boutonb_Base_color.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:84973c1c06bf83beacd0987c5d252560ec92e09701b3ac6b73289f39392c21da -size 496575 diff --git a/public/models/talkie/boutonb_Height.png b/public/models/talkie/boutonb_Height.png deleted file mode 100644 index 713980d..0000000 --- a/public/models/talkie/boutonb_Height.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:208daeea7306a6a576fbe1098c66d59571dd984635d7fb6c017fd767cde531ed -size 3178 diff --git a/public/models/talkie/boutonb_Metallic.png b/public/models/talkie/boutonb_Metallic.png deleted file mode 100644 index b46e54a..0000000 --- a/public/models/talkie/boutonb_Metallic.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:60041773ef2d493f3547aa1b0fbdf5b1bb548a3da39164384293ef5292b2c5b3 -size 1118 diff --git a/public/models/talkie/boutonb_Mixed_AO.png b/public/models/talkie/boutonb_Mixed_AO.png deleted file mode 100644 index 8292910..0000000 --- a/public/models/talkie/boutonb_Mixed_AO.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d58e8ec5e90125edd38f279ee1b9fee863b75d8396fef6a0c22a9af6a9c0a341 -size 239658 diff --git a/public/models/talkie/boutonb_Normal.png b/public/models/talkie/boutonb_Normal.png deleted file mode 100644 index 943917e..0000000 --- a/public/models/talkie/boutonb_Normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:53e5d76fcd40986674d93f289cea51c6b839d720787d98ed4112164e20558bd2 -size 176052 diff --git a/public/models/talkie/boutonb_Normal_OpenGL.png b/public/models/talkie/boutonb_Normal_OpenGL.png deleted file mode 100644 index 47539e6..0000000 --- a/public/models/talkie/boutonb_Normal_OpenGL.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4a1ea79411217de422f6f7fd160c673e01a2a09ebce1d95a6b5e63c8c1e5de18 -size 176723 diff --git a/public/models/talkie/boutonb_Roughness.png b/public/models/talkie/boutonb_Roughness.png deleted file mode 100644 index acba391..0000000 --- a/public/models/talkie/boutonb_Roughness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ad833228a99505d0fea7495970bfbf47d3942a86d457aca379b99d8224d8633f -size 54522 diff --git a/public/models/talkie/cable1_Base_color.png b/public/models/talkie/cable1_Base_color.png deleted file mode 100644 index 0aa378c..0000000 --- a/public/models/talkie/cable1_Base_color.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:967d8771fbcd5427bf0005b147ecae38ab53271c4a99980f34db1102d0cb35f0 -size 178767 diff --git a/public/models/talkie/cable1_Height.png b/public/models/talkie/cable1_Height.png deleted file mode 100644 index 713980d..0000000 --- a/public/models/talkie/cable1_Height.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:208daeea7306a6a576fbe1098c66d59571dd984635d7fb6c017fd767cde531ed -size 3178 diff --git a/public/models/talkie/cable1_Metallic.png b/public/models/talkie/cable1_Metallic.png deleted file mode 100644 index b46e54a..0000000 --- a/public/models/talkie/cable1_Metallic.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:60041773ef2d493f3547aa1b0fbdf5b1bb548a3da39164384293ef5292b2c5b3 -size 1118 diff --git a/public/models/talkie/cable1_Mixed_AO.png b/public/models/talkie/cable1_Mixed_AO.png deleted file mode 100644 index 2003ade..0000000 --- a/public/models/talkie/cable1_Mixed_AO.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:73378e05b925c39d37e3cfdb1048d891b6216927fbd9eab111a61051d9c5fadd -size 142820 diff --git a/public/models/talkie/cable1_Normal.png b/public/models/talkie/cable1_Normal.png deleted file mode 100644 index 8f1338d..0000000 --- a/public/models/talkie/cable1_Normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cb4d0e26c8d16fcb471e2812585fb27ddfbce4500c526fce512d61f7611c5b99 -size 186292 diff --git a/public/models/talkie/cable1_Normal_OpenGL.png b/public/models/talkie/cable1_Normal_OpenGL.png deleted file mode 100644 index 456bcdb..0000000 --- a/public/models/talkie/cable1_Normal_OpenGL.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8854c9b53ac97ce6113d351aa528d9a6664e90947678aee05731695e034d1c79 -size 187073 diff --git a/public/models/talkie/cable1_Roughness.png b/public/models/talkie/cable1_Roughness.png deleted file mode 100644 index c1c9096..0000000 --- a/public/models/talkie/cable1_Roughness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6a2a10008bf8a90ca1e7ef831944d8e6b2c41d5aa9b5a1f20f49d7dcc942b9f2 -size 56819 diff --git a/public/models/talkie/cable2_Base_color.png b/public/models/talkie/cable2_Base_color.png deleted file mode 100644 index ba3be72..0000000 --- a/public/models/talkie/cable2_Base_color.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4b1bdd610bf135a20471bc2b65e53f2a2333ab6e845380f55fed93d45dce1897 -size 210840 diff --git a/public/models/talkie/cable2_Height.png b/public/models/talkie/cable2_Height.png deleted file mode 100644 index 713980d..0000000 --- a/public/models/talkie/cable2_Height.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:208daeea7306a6a576fbe1098c66d59571dd984635d7fb6c017fd767cde531ed -size 3178 diff --git a/public/models/talkie/cable2_Metallic.png b/public/models/talkie/cable2_Metallic.png deleted file mode 100644 index b46e54a..0000000 --- a/public/models/talkie/cable2_Metallic.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:60041773ef2d493f3547aa1b0fbdf5b1bb548a3da39164384293ef5292b2c5b3 -size 1118 diff --git a/public/models/talkie/cable2_Mixed_AO.png b/public/models/talkie/cable2_Mixed_AO.png deleted file mode 100644 index e3a64cc..0000000 --- a/public/models/talkie/cable2_Mixed_AO.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:30e8e315f7950a91135bba6ac43d04563b1e501e83cfb4b57048320768602bc5 -size 167450 diff --git a/public/models/talkie/cable2_Normal.png b/public/models/talkie/cable2_Normal.png deleted file mode 100644 index acc99fd..0000000 --- a/public/models/talkie/cable2_Normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b09eae40cd4d52c348933f49347691f08dc6f25d929ddadbeddd2157444c706f -size 195384 diff --git a/public/models/talkie/cable2_Normal_OpenGL.png b/public/models/talkie/cable2_Normal_OpenGL.png deleted file mode 100644 index d184f94..0000000 --- a/public/models/talkie/cable2_Normal_OpenGL.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ff1ae64895328cae7bf8816a43eb38ca4db82b7979d02db927bc307fa7ec66c6 -size 196010 diff --git a/public/models/talkie/cable2_Roughness.png b/public/models/talkie/cable2_Roughness.png deleted file mode 100644 index a9440d4..0000000 --- a/public/models/talkie/cable2_Roughness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0d9e3cc7a29c90c1712196c05915bea480124dddc0db47db9415f738f895660c -size 60898 diff --git a/public/models/talkie/cadre_Base_color.png b/public/models/talkie/cadre_Base_color.png deleted file mode 100644 index afbe925..0000000 --- a/public/models/talkie/cadre_Base_color.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:637e73b56419d8390e8aeb27433fdee21264c9d5b28e1caaf7e1357f6c191fd3 -size 280049 diff --git a/public/models/talkie/cadre_Height.png b/public/models/talkie/cadre_Height.png deleted file mode 100644 index 713980d..0000000 --- a/public/models/talkie/cadre_Height.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:208daeea7306a6a576fbe1098c66d59571dd984635d7fb6c017fd767cde531ed -size 3178 diff --git a/public/models/talkie/cadre_Metallic.png b/public/models/talkie/cadre_Metallic.png deleted file mode 100644 index b46e54a..0000000 --- a/public/models/talkie/cadre_Metallic.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:60041773ef2d493f3547aa1b0fbdf5b1bb548a3da39164384293ef5292b2c5b3 -size 1118 diff --git a/public/models/talkie/cadre_Mixed_AO.png b/public/models/talkie/cadre_Mixed_AO.png deleted file mode 100644 index 0151384..0000000 --- a/public/models/talkie/cadre_Mixed_AO.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e1f9912860e5f508e0e29ef1e03943101cdb287a1c34bd0278ac237824255da5 -size 157683 diff --git a/public/models/talkie/cadre_Normal.png b/public/models/talkie/cadre_Normal.png deleted file mode 100644 index 8d2a5a3..0000000 --- a/public/models/talkie/cadre_Normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:982a042d28061ce926c80293129985733aba79bc7115e0f5b55e4f4186808f5a -size 52817 diff --git a/public/models/talkie/cadre_Normal_OpenGL.png b/public/models/talkie/cadre_Normal_OpenGL.png deleted file mode 100644 index 46032a3..0000000 --- a/public/models/talkie/cadre_Normal_OpenGL.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:58d63de38e7fefca7ec94b4057b37256c477dbd2749f950f0bd373932b52cbf9 -size 52737 diff --git a/public/models/talkie/cadre_Roughness.png b/public/models/talkie/cadre_Roughness.png deleted file mode 100644 index 264a6e4..0000000 --- a/public/models/talkie/cadre_Roughness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:afb28f17a6f419356f49088c8c5b8d12b6aaf2471ee7e35ef42e0fda3a5365f2 -size 53784 diff --git a/public/models/talkie/e_cran_base_color.png b/public/models/talkie/e_cran_base_color.png deleted file mode 100644 index a8c2149..0000000 --- a/public/models/talkie/e_cran_base_color.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f75363e70ffed07a182a3e61d7c301cb8fd053ac8ec784d56e9450335167dce8 -size 6502 diff --git a/public/models/talkie/e_cran_height.png b/public/models/talkie/e_cran_height.png deleted file mode 100644 index 713980d..0000000 --- a/public/models/talkie/e_cran_height.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:208daeea7306a6a576fbe1098c66d59571dd984635d7fb6c017fd767cde531ed -size 3178 diff --git a/public/models/talkie/e_cran_metallic.png b/public/models/talkie/e_cran_metallic.png deleted file mode 100644 index b46e54a..0000000 --- a/public/models/talkie/e_cran_metallic.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:60041773ef2d493f3547aa1b0fbdf5b1bb548a3da39164384293ef5292b2c5b3 -size 1118 diff --git a/public/models/talkie/e_cran_mixed_ao.png b/public/models/talkie/e_cran_mixed_ao.png deleted file mode 100644 index e91eb6e..0000000 --- a/public/models/talkie/e_cran_mixed_ao.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d4f3fd92f328f0733f9cb9865209466c251f4edf4750654eb0385b519300cf34 -size 329712 diff --git a/public/models/talkie/e_cran_normal.png b/public/models/talkie/e_cran_normal.png deleted file mode 100644 index 175152b..0000000 --- a/public/models/talkie/e_cran_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a07dd2bf8fe1d37b9a74d2ca09b8a77d8a97029d41a8483e34ba30bd8e9efc04 -size 74315 diff --git a/public/models/talkie/e_cran_normal_opengl.png b/public/models/talkie/e_cran_normal_opengl.png deleted file mode 100644 index e17d9b3..0000000 --- a/public/models/talkie/e_cran_normal_opengl.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ca90a32ea8b1dadb11a5cf2e41d4d096920fd7a2ab493dec96682a479d4e7a8c -size 74316 diff --git a/public/models/talkie/e_cran_roughness.png b/public/models/talkie/e_cran_roughness.png deleted file mode 100644 index ad642fa..0000000 --- a/public/models/talkie/e_cran_roughness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:700f97e34547f14a62a45858218e56eb3715a278380c2f1f14be9ca6feaae959 -size 72768 diff --git a/public/models/talkie/hautparleur_Base_color.png b/public/models/talkie/hautparleur_Base_color.png deleted file mode 100644 index 9e43314..0000000 --- a/public/models/talkie/hautparleur_Base_color.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:36168017b9c2d6961f869f461812a53ed4bdb49f24f350452f4604009acb6fe8 -size 658014 diff --git a/public/models/talkie/hautparleur_Height.png b/public/models/talkie/hautparleur_Height.png deleted file mode 100644 index 713980d..0000000 --- a/public/models/talkie/hautparleur_Height.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:208daeea7306a6a576fbe1098c66d59571dd984635d7fb6c017fd767cde531ed -size 3178 diff --git a/public/models/talkie/hautparleur_Metallic.png b/public/models/talkie/hautparleur_Metallic.png deleted file mode 100644 index b46e54a..0000000 --- a/public/models/talkie/hautparleur_Metallic.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:60041773ef2d493f3547aa1b0fbdf5b1bb548a3da39164384293ef5292b2c5b3 -size 1118 diff --git a/public/models/talkie/hautparleur_Mixed_AO.png b/public/models/talkie/hautparleur_Mixed_AO.png deleted file mode 100644 index f2bfd28..0000000 --- a/public/models/talkie/hautparleur_Mixed_AO.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:29ac8737a9eccff201ad351b4b403e93ed65c7a082052c1070455bc7c795bcbb -size 201135 diff --git a/public/models/talkie/hautparleur_Normal.png b/public/models/talkie/hautparleur_Normal.png deleted file mode 100644 index 5d89a1c..0000000 --- a/public/models/talkie/hautparleur_Normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:65edaf688e31787da8deb864079aed068cc71775dbbde4c350481896c2d8a204 -size 98635 diff --git a/public/models/talkie/hautparleur_Normal_OpenGL.png b/public/models/talkie/hautparleur_Normal_OpenGL.png deleted file mode 100644 index 814a2b3..0000000 --- a/public/models/talkie/hautparleur_Normal_OpenGL.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c689c9d28d984f54e5647de38423f34da442b8e8cac076052bfa5df07457fb1c -size 98768 diff --git a/public/models/talkie/hautparleur_Roughness.png b/public/models/talkie/hautparleur_Roughness.png deleted file mode 100644 index 17ac038..0000000 --- a/public/models/talkie/hautparleur_Roughness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9f7c1e238150662981d8a4d003045021ee0cca21af14dc79a9180671c6a82621 -size 74349 diff --git a/public/models/talkie/model.bin b/public/models/talkie/model.bin deleted file mode 100644 index 7e13375..0000000 --- a/public/models/talkie/model.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:970717ff52a7275d1e6090a8699021ae57b74127b05c016eafb6dca45158420f -size 198456 diff --git a/public/models/talkie/model.glb b/public/models/talkie/model.glb new file mode 100644 index 0000000..8fafee9 --- /dev/null +++ b/public/models/talkie/model.glb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d9e8136c7645a868ad874ee98afd508ff41d6be3f1b7220a889bb161be41af4 +size 6954256 diff --git a/public/models/talkie/model.gltf b/public/models/talkie/model.gltf deleted file mode 100644 index 5caa83b..0000000 --- a/public/models/talkie/model.gltf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:694acec3219e3cb0dbce0e9739bc3c6655dbf5360f104d50a52618e06d90c946 -size 63007 diff --git a/public/models/talkie/prise_Base_color.png b/public/models/talkie/prise_Base_color.png deleted file mode 100644 index 30d846f..0000000 --- a/public/models/talkie/prise_Base_color.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7e012c8775c6eb274a80856394fac6673f7beb754c2f78e1c51c842ac017fdd5 -size 472487 diff --git a/public/models/talkie/prise_Height.png b/public/models/talkie/prise_Height.png deleted file mode 100644 index 713980d..0000000 --- a/public/models/talkie/prise_Height.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:208daeea7306a6a576fbe1098c66d59571dd984635d7fb6c017fd767cde531ed -size 3178 diff --git a/public/models/talkie/prise_Metallic.png b/public/models/talkie/prise_Metallic.png deleted file mode 100644 index b46e54a..0000000 --- a/public/models/talkie/prise_Metallic.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:60041773ef2d493f3547aa1b0fbdf5b1bb548a3da39164384293ef5292b2c5b3 -size 1118 diff --git a/public/models/talkie/prise_Mixed_AO.png b/public/models/talkie/prise_Mixed_AO.png deleted file mode 100644 index 1ed1f71..0000000 --- a/public/models/talkie/prise_Mixed_AO.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9a7ae156409544d00bf3332fb542aaec0711d4ce4c9d39d4bd573fb4f0212051 -size 230780 diff --git a/public/models/talkie/prise_Normal.png b/public/models/talkie/prise_Normal.png deleted file mode 100644 index 5bcffa1..0000000 --- a/public/models/talkie/prise_Normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3c00bec06b1bbd954eb91872fa8cd817f247b275c16e6c372db52189ba6f3778 -size 212856 diff --git a/public/models/talkie/prise_Normal_OpenGL.png b/public/models/talkie/prise_Normal_OpenGL.png deleted file mode 100644 index 6bc3741..0000000 --- a/public/models/talkie/prise_Normal_OpenGL.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:aa8e8d378a595f8aafc4cd34ecac65426a03847a402f955b7b0280f0383d40eb -size 224961 diff --git a/public/models/talkie/prise_Roughness.png b/public/models/talkie/prise_Roughness.png deleted file mode 100644 index c827dba..0000000 --- a/public/models/talkie/prise_Roughness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:161c97c6ad56619ad702cc955a26ea92203575f31bb35ebc8ca398b48aae9889 -size 100073 diff --git a/public/models/talkie/talkie_Base_color.png b/public/models/talkie/talkie_Base_color.png deleted file mode 100644 index 295b322..0000000 --- a/public/models/talkie/talkie_Base_color.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:aead25dde6c940f353fa4a53f43e37dde80cd924ccced3c4f88a45dcc5fb4751 -size 610827 diff --git a/public/models/talkie/talkie_Height.png b/public/models/talkie/talkie_Height.png deleted file mode 100644 index 713980d..0000000 --- a/public/models/talkie/talkie_Height.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:208daeea7306a6a576fbe1098c66d59571dd984635d7fb6c017fd767cde531ed -size 3178 diff --git a/public/models/talkie/talkie_Metallic.png b/public/models/talkie/talkie_Metallic.png deleted file mode 100644 index b46e54a..0000000 --- a/public/models/talkie/talkie_Metallic.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:60041773ef2d493f3547aa1b0fbdf5b1bb548a3da39164384293ef5292b2c5b3 -size 1118 diff --git a/public/models/talkie/talkie_Mixed_AO.png b/public/models/talkie/talkie_Mixed_AO.png deleted file mode 100644 index a015f96..0000000 --- a/public/models/talkie/talkie_Mixed_AO.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:78a4e5bc8affb8c7f529712ddcc4958982729d4bbc64163d93b4e3df8192f3e9 -size 229809 diff --git a/public/models/talkie/talkie_Normal.png b/public/models/talkie/talkie_Normal.png deleted file mode 100644 index d3e9649..0000000 --- a/public/models/talkie/talkie_Normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3fba8c5bce232fd16f3d3da18228438443bfcfab6f1673884e2c6439a799a342 -size 285066 diff --git a/public/models/talkie/talkie_Normal_OpenGL.png b/public/models/talkie/talkie_Normal_OpenGL.png deleted file mode 100644 index e58b36f..0000000 --- a/public/models/talkie/talkie_Normal_OpenGL.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:708382f0b0340e845f0cd4127b84ec5f837f5ca3a51f0c4064ba790374643c21 -size 287356 diff --git a/public/models/talkie/talkie_Roughness.png b/public/models/talkie/talkie_Roughness.png deleted file mode 100644 index 091f911..0000000 --- a/public/models/talkie/talkie_Roughness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:638da789f9d21dfa546cf053c5f0c4e47fc18eef3d7ac412d39bdbdf3b3974b1 -size 134252 diff --git a/public/models/talkie/touches_Base_color.png b/public/models/talkie/touches_Base_color.png deleted file mode 100644 index eb7631c..0000000 --- a/public/models/talkie/touches_Base_color.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:47ef413967a461f9768b74d15a2ab1c8e3e3fe6fc9be027d8cf1e7268bb8a888 -size 126096 diff --git a/public/models/talkie/touches_Height.png b/public/models/talkie/touches_Height.png deleted file mode 100644 index 713980d..0000000 --- a/public/models/talkie/touches_Height.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:208daeea7306a6a576fbe1098c66d59571dd984635d7fb6c017fd767cde531ed -size 3178 diff --git a/public/models/talkie/touches_Metallic.png b/public/models/talkie/touches_Metallic.png deleted file mode 100644 index b46e54a..0000000 --- a/public/models/talkie/touches_Metallic.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:60041773ef2d493f3547aa1b0fbdf5b1bb548a3da39164384293ef5292b2c5b3 -size 1118 diff --git a/public/models/talkie/touches_Mixed_AO.png b/public/models/talkie/touches_Mixed_AO.png deleted file mode 100644 index 5673800..0000000 --- a/public/models/talkie/touches_Mixed_AO.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6884417f47afb4330b00f9f42fa1faf7b8bbd06d2ae9595cffe409a4d38cd461 -size 246760 diff --git a/public/models/talkie/touches_Normal.png b/public/models/talkie/touches_Normal.png deleted file mode 100644 index 07f83c4..0000000 --- a/public/models/talkie/touches_Normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:09d922e17cd400c32ef51462723e9c5ee9dfbe4c668e88e6057f9e7d60c8830e -size 59216 diff --git a/public/models/talkie/touches_Normal_OpenGL.png b/public/models/talkie/touches_Normal_OpenGL.png deleted file mode 100644 index ec98ce7..0000000 --- a/public/models/talkie/touches_Normal_OpenGL.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8cdadc48d7d365fa0f8e4f3b64a61a6fa95cf9bcafaf50dc83ea7cf90173f68b -size 59178 diff --git a/public/models/talkie/touches_Roughness.png b/public/models/talkie/touches_Roughness.png deleted file mode 100644 index bd73a19..0000000 --- a/public/models/talkie/touches_Roughness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5804a17a4fd8691a606cbb3e671234f2c876dfc0e88e16d2f781bd35785167cb -size 56002 diff --git a/public/models/talkie/écran_Base_color.png b/public/models/talkie/écran_Base_color.png deleted file mode 100644 index b28a367..0000000 --- a/public/models/talkie/écran_Base_color.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bfbf65890f6d5019bf113246dcecb83c97e31d6e10b0429d5e89df9df67a58bd -size 6498 diff --git a/public/models/talkie/écran_Height.png b/public/models/talkie/écran_Height.png deleted file mode 100644 index 713980d..0000000 --- a/public/models/talkie/écran_Height.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:208daeea7306a6a576fbe1098c66d59571dd984635d7fb6c017fd767cde531ed -size 3178 diff --git a/public/models/talkie/écran_Metallic.png b/public/models/talkie/écran_Metallic.png deleted file mode 100644 index b46e54a..0000000 --- a/public/models/talkie/écran_Metallic.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:60041773ef2d493f3547aa1b0fbdf5b1bb548a3da39164384293ef5292b2c5b3 -size 1118 diff --git a/public/models/talkie/écran_Mixed_AO.png b/public/models/talkie/écran_Mixed_AO.png deleted file mode 100644 index e91eb6e..0000000 --- a/public/models/talkie/écran_Mixed_AO.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d4f3fd92f328f0733f9cb9865209466c251f4edf4750654eb0385b519300cf34 -size 329712 diff --git a/public/models/talkie/écran_Normal.png b/public/models/talkie/écran_Normal.png deleted file mode 100644 index 175152b..0000000 --- a/public/models/talkie/écran_Normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a07dd2bf8fe1d37b9a74d2ca09b8a77d8a97029d41a8483e34ba30bd8e9efc04 -size 74315 diff --git a/public/models/talkie/écran_Normal_OpenGL.png b/public/models/talkie/écran_Normal_OpenGL.png deleted file mode 100644 index e17d9b3..0000000 --- a/public/models/talkie/écran_Normal_OpenGL.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ca90a32ea8b1dadb11a5cf2e41d4d096920fd7a2ab493dec96682a479d4e7a8c -size 74316 diff --git a/public/models/talkie/écran_Roughness.png b/public/models/talkie/écran_Roughness.png deleted file mode 100644 index d89bffa..0000000 --- a/public/models/talkie/écran_Roughness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d560c80d755fdfff917c63d96d664cc4c9be963cc38ac63533418f7df1b0642c -size 72772 diff --git a/src/components/three/handTracking/HandTrackingGlove.tsx b/src/components/three/handTracking/HandTrackingGlove.tsx index 37e4518..d5c8904 100644 --- a/src/components/three/handTracking/HandTrackingGlove.tsx +++ b/src/components/three/handTracking/HandTrackingGlove.tsx @@ -1,7 +1,6 @@ import type { ReactNode } from "react"; import { Component, useEffect, useMemo, useRef } from "react"; import { useFrame, useThree } from "@react-three/fiber"; -import { useGLTF } from "@react-three/drei"; import * as THREE from "three"; import { SkeletonUtils } from "three-stdlib"; import { useHandTrackingSnapshot } from "@/hooks/handTracking/useHandTrackingSnapshot"; @@ -362,6 +361,3 @@ export function HandTrackingGlove({ ); } - -useGLTF.preload(GLOVE_CONFIGS.left.modelPath); -useGLTF.preload(GLOVE_CONFIGS.right.modelPath); diff --git a/src/components/ui/GameSettingsMenu.tsx b/src/components/ui/GameSettingsMenu.tsx index abd52ce..f30c6f0 100644 --- a/src/components/ui/GameSettingsMenu.tsx +++ b/src/components/ui/GameSettingsMenu.tsx @@ -105,6 +105,9 @@ function GraphicsPresetButton({ const lodLabel = config.forceLodModels ? "LOD forcé" : `HD ${config.lodHighDetailDistance}m`; + const chunkLabel = config.chunkStreamingEnabled + ? formatChunkDistance(config.chunkLoadRadius) + : "All"; return ( ); diff --git a/src/components/ui/talkie/TalkieModel.tsx b/src/components/ui/talkie/TalkieModel.tsx index 050833b..c0ec8ba 100644 --- a/src/components/ui/talkie/TalkieModel.tsx +++ b/src/components/ui/talkie/TalkieModel.tsx @@ -5,7 +5,7 @@ import * as THREE from "three"; import gsap from "gsap"; import type { Vector3Tuple } from "@/types/three/three"; -const TALKIE_MODEL_PATH = "/models/talkie/model.gltf"; +const TALKIE_MODEL_PATH = "/models/talkie/model.glb"; const TALKIE_REST_Y = -1.55; const TALKIE_ACTIVE_Y = -0.38; const TALKIE_BASE_ROTATION: Vector3Tuple = [0.08, -0.52, -0.04]; diff --git a/src/data/debug/testSceneConfig.ts b/src/data/debug/testSceneConfig.ts index 2d7f49b..617fb3c 100644 --- a/src/data/debug/testSceneConfig.ts +++ b/src/data/debug/testSceneConfig.ts @@ -1,13 +1,15 @@ import type { Vector3Tuple } from "@/types/three/three"; import type { RepairMissionId } from "@/types/gameplay/repairMission"; +const DEG_TO_RAD = Math.PI / 180; + export const TEST_SCENE_FLOOR_POSITION: Vector3Tuple = [0, -0.5, 0]; export const TEST_SCENE_FLOOR_SIZE: Vector3Tuple = [200, 1, 200]; export const TEST_SCENE_FLOOR_COLLIDER_HALF_EXTENTS: Vector3Tuple = [ 100, 0.5, 100, ]; -export const TEST_SCENE_GRABBABLE_POSITION: Vector3Tuple = [0, 1, -3]; +export const TEST_SCENE_GRABBABLE_POSITION: Vector3Tuple = [0, 0.25, -3]; export const TEST_SCENE_GRABBABLE_BOX_SIZE: Vector3Tuple = [0.5, 0.5, 0.5]; export const TEST_SCENE_GRABBABLE_COLOR = "#e07b39"; export const TEST_SCENE_GRABBABLE_ROUGHNESS = 0.6; @@ -23,6 +25,12 @@ export const TEST_SCENE_TRIGGER_METALNESS = 0.5; export const TEST_SCENE_REPAIR_ZONE_MARKER_RADIUS = 1.65; export const TEST_SCENE_REPAIR_ZONE_MARKER_TUBE_RADIUS = 0.045; +export const TEST_SCENE_GPS_PREVIEW_POSITION: Vector3Tuple = [0, 5, -4.8]; +export const TEST_SCENE_GPS_PREVIEW_ROTATION: Vector3Tuple = [ + -33 * DEG_TO_RAD, + 0, + 0, +]; export const GAME_REPAIR_ZONES = [ { diff --git a/src/data/galleryModels.ts b/src/data/galleryModels.ts index 8ac0c36..3b38774 100644 --- a/src/data/galleryModels.ts +++ b/src/data/galleryModels.ts @@ -143,7 +143,7 @@ export const galleryModels: GalleryModel[] = [ }, { id: "sapin", name: "Sapin", path: "/models/sapin/model.gltf" }, { id: "skybox", name: "Skybox", path: "/models/skybox/skybox.gltf" }, - { id: "talkie", name: "Talkie", path: "/models/talkie/model.gltf" }, + { id: "talkie", name: "Talkie", path: "/models/talkie/model.glb" }, { id: "terrain", name: "Terrain", path: "/models/terrain/model.gltf" }, { id: "tuyauxlac", diff --git a/src/data/gameplay/repairMissions.ts b/src/data/gameplay/repairMissions.ts index 7f5f8ea..fb676db 100644 --- a/src/data/gameplay/repairMissions.ts +++ b/src/data/gameplay/repairMissions.ts @@ -41,11 +41,6 @@ export const REPAIR_MISSIONS: Record = { label: "Replacement cooling core", modelPath: "/models/refroidisseur/model.gltf", }, - { - id: "ebike-radio-distractor", - label: "Radio module", - modelPath: "/models/talkie/model.gltf", - }, { id: "ebike-glove-distractor", label: "Insulation glove", @@ -134,11 +129,6 @@ export const REPAIR_MISSIONS: Record = { label: "Tree sensor", modelPath: "/models/sapin/model.gltf", }, - { - id: "farm-radio-distractor", - label: "Radio module", - modelPath: "/models/talkie/model.gltf", - }, ], }, }; diff --git a/src/data/handTrackingConfig.ts b/src/data/handTrackingConfig.ts index 0b8c773..2b28dda 100644 --- a/src/data/handTrackingConfig.ts +++ b/src/data/handTrackingConfig.ts @@ -8,3 +8,9 @@ export const HAND_TRACKING_BROWSER_WASM_URL = "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.35/wasm"; export const HAND_TRACKING_BROWSER_MODEL_URL = "https://storage.googleapis.com/mediapipe-models/hand_landmarker/hand_landmarker/float16/1/hand_landmarker.task"; +export const HAND_TRACKING_BROWSER_DELEGATE: "CPU" | "GPU" = "CPU"; + +// Delay before the runtime actually starts after `enabled` flips to true. +// Absorbs React StrictMode's mount/unmount/mount cycle in dev and rapid +// `nearby` toggles at trigger borders. Invisible to the user (~5 frames). +export const HAND_TRACKING_RUNTIME_START_DELAY_MS = 80; diff --git a/src/data/player/playerConfig.ts b/src/data/player/playerConfig.ts index 700d6d5..f2c556d 100644 --- a/src/data/player/playerConfig.ts +++ b/src/data/player/playerConfig.ts @@ -20,4 +20,8 @@ export const PLAYER_SPAWN_POSITION_GAME: Vector3Tuple = [ LA_FABRIK_PLAYER_SPAWN[1], LA_FABRIK_PLAYER_SPAWN[2] - 1, ]; -export const PLAYER_SPAWN_POSITION_PHYSICS: Vector3Tuple = [0, 3, 0]; +export const PLAYER_SPAWN_POSITION_PHYSICS: Vector3Tuple = [ + 0, + PLAYER_EYE_HEIGHT, + 0, +]; diff --git a/src/data/world/graphicsConfig.ts b/src/data/world/graphicsConfig.ts index be5b1e9..43dbd19 100644 --- a/src/data/world/graphicsConfig.ts +++ b/src/data/world/graphicsConfig.ts @@ -1,9 +1,16 @@ -export const GRAPHICS_PRESET_KEYS = ["low", "medium", "high", "ultra"] as const; +export const GRAPHICS_PRESET_KEYS = [ + "low", + "medium", + "high", + "ultra", + "max", +] as const; export type GraphicsPreset = (typeof GRAPHICS_PRESET_KEYS)[number]; export interface GraphicsPresetConfig { chunkLoadRadius: number; + chunkStreamingEnabled: boolean; chunkUnloadRadius: number; fogEnabled: boolean; forceLodModels: boolean; @@ -16,6 +23,7 @@ export const GRAPHICS_PRESETS = { label: "Basse", chunkLoadRadius: 10, chunkUnloadRadius: 18, + chunkStreamingEnabled: true, fogEnabled: true, forceLodModels: true, lodHighDetailDistance: 0, @@ -24,25 +32,37 @@ export const GRAPHICS_PRESETS = { label: "Moyenne", chunkLoadRadius: 20, chunkUnloadRadius: 30, + chunkStreamingEnabled: true, fogEnabled: true, forceLodModels: true, lodHighDetailDistance: 0, }, high: { label: "High", - chunkLoadRadius: 35, - chunkUnloadRadius: 45, + chunkLoadRadius: 30, + chunkUnloadRadius: 40, + chunkStreamingEnabled: true, fogEnabled: false, forceLodModels: false, - lodHighDetailDistance: 10, + lodHighDetailDistance: 20, }, ultra: { label: "Ultra", chunkLoadRadius: 50, chunkUnloadRadius: 65, + chunkStreamingEnabled: true, fogEnabled: false, forceLodModels: false, - lodHighDetailDistance: 20, + lodHighDetailDistance: 30, + }, + max: { + label: "Max", + chunkLoadRadius: 50, + chunkUnloadRadius: 65, + chunkStreamingEnabled: false, + fogEnabled: false, + forceLodModels: false, + lodHighDetailDistance: 50, }, } as const satisfies Record; diff --git a/src/data/world/lightingConfig.ts b/src/data/world/lightingConfig.ts index bf91955..58a3d00 100644 --- a/src/data/world/lightingConfig.ts +++ b/src/data/world/lightingConfig.ts @@ -3,9 +3,9 @@ const SUN_LIGHT_COLOR = "#ffe2bf"; export const LIGHTING_DEFAULTS = { ambientColor: AMBIENT_LIGHT_COLOR, - ambientIntensity: 0.9, + ambientIntensity: 0.7, sunColor: SUN_LIGHT_COLOR, - sunIntensity: 2.2, + sunIntensity: 1.9, sunX: 70, sunY: 45, sunZ: 35, diff --git a/src/data/world/mapLodConfig.ts b/src/data/world/mapLodConfig.ts index 2bea581..91ff213 100644 --- a/src/data/world/mapLodConfig.ts +++ b/src/data/world/mapLodConfig.ts @@ -13,7 +13,9 @@ export const MAP_LOD_MODEL_PATHS = { lafabrik: "/models/lafabrik-LOD/model.gltf", maison1: "/models/maison1-LOD/model.gltf", panneauaffichage: "/models/panneauaffichage-LOD/model.gltf", - talkie: "/models/talkie-LOD/model.gltf", + arbre: "/models/arbre-LOD/model.glb", + buisson: "/models/buisson-LOD/model.glb", + sapin: "/models/sapin-LOD/model.glb", } as const satisfies Record; export function getMapLodModelPath(modelName: string): string | null { @@ -22,6 +24,19 @@ export function getMapLodModelPath(modelName: string): string | null { ); } +export const MAP_LOD_SCALE_MULTIPLIERS = { + sapin: 0.35, + buisson: 0.7, +} as const satisfies Partial>; + +export function getMapLodScaleMultiplier(modelName: string): number { + return ( + MAP_LOD_SCALE_MULTIPLIERS[ + modelName as keyof typeof MAP_LOD_SCALE_MULTIPLIERS + ] ?? 1 + ); +} + export function selectMapModelPathByDistance({ distance, modelName, diff --git a/src/hooks/handTracking/useBrowserHandTracking.ts b/src/hooks/handTracking/useBrowserHandTracking.ts index 73064fa..285fa2f 100644 --- a/src/hooks/handTracking/useBrowserHandTracking.ts +++ b/src/hooks/handTracking/useBrowserHandTracking.ts @@ -2,17 +2,20 @@ import { useEffect, useRef, useState } from "react"; import { HAND_TRACKING_FRAME_HEIGHT, HAND_TRACKING_FRAME_WIDTH, + HAND_TRACKING_RUNTIME_START_DELAY_MS, HAND_TRACKING_TARGET_FPS, } from "@/data/handTrackingConfig"; import { convertBrowserHandResult, getBrowserHandLandmarker, + releaseBrowserHandLandmarker, } from "@/lib/handTracking/browserHandTracking"; import { INITIAL_HAND_TRACKING_SNAPSHOT, getCameraStreamWithTimeout, } from "@/lib/handTracking/handTrackingSession"; import type { HandTrackingSnapshot } from "@/types/handTracking/handTracking"; +import { logger } from "@/utils/core/Logger"; interface UseBrowserHandTrackingOptions { enabled: boolean; @@ -34,8 +37,12 @@ export function useBrowserHandTracking({ } let cancelled = false; + let cleanedUp = false; const cleanup = (): void => { + if (cleanedUp) return; + cleanedUp = true; + if (intervalRef.current !== null) { window.clearInterval(intervalRef.current); intervalRef.current = null; @@ -44,6 +51,7 @@ export function useBrowserHandTracking({ streamRef.current?.getTracks().forEach((track) => track.stop()); streamRef.current = null; videoRef.current = null; + releaseBrowserHandLandmarker(); }; const start = async (): Promise => { @@ -111,24 +119,44 @@ export function useBrowserHandTracking({ intervalRef.current = window.setInterval(() => { if (video.readyState < HTMLMediaElement.HAVE_CURRENT_DATA) return; - const result = handLandmarker.detectForVideo( - video, - performance.now(), - ); - const hands = convertBrowserHandResult(result); + try { + const result = handLandmarker.detectForVideo( + video, + performance.now(), + ); + const hands = convertBrowserHandResult(result); - setSnapshot((current) => ({ - ...current, - hands, - usageStatus: hands.some((hand) => hand.isFist) - ? "active" - : "available", - error: null, - })); + setSnapshot((current) => ({ + ...current, + hands, + usageStatus: hands.some((hand) => hand.isFist) + ? "active" + : "available", + error: null, + })); + } catch (error) { + logger.error("HandTracking", "Browser JS runtime error", { + error: error instanceof Error ? error.message : String(error), + }); + cleanup(); + setSnapshot({ + hands: [], + status: "error", + usageStatus: "inactive", + serverStatus: "Browser JS", + error: + error instanceof Error + ? error.message + : "Browser hand tracking failed", + }); + } }, 1_000 / HAND_TRACKING_TARGET_FPS); } catch (error) { if (cancelled) return; + logger.error("HandTracking", "Browser JS runtime failed", { + error: error instanceof Error ? error.message : String(error), + }); setSnapshot({ hands: [], status: "error", @@ -142,10 +170,17 @@ export function useBrowserHandTracking({ } }; - void start(); + // Delay the actual start so that a StrictMode mount/unmount/mount + // cycle, or a rapid `enabled` toggle at a trigger border, does not + // spin up the camera + MediaPipe twice in a few milliseconds. + const startTimer = window.setTimeout(() => { + if (cancelled) return; + void start(); + }, HAND_TRACKING_RUNTIME_START_DELAY_MS); return () => { cancelled = true; + window.clearTimeout(startTimer); cleanup(); }; }, [enabled]); diff --git a/src/hooks/handTracking/useRemoteHandTracking.ts b/src/hooks/handTracking/useRemoteHandTracking.ts index f53236d..fafa568 100644 --- a/src/hooks/handTracking/useRemoteHandTracking.ts +++ b/src/hooks/handTracking/useRemoteHandTracking.ts @@ -4,6 +4,7 @@ import { HAND_TRACKING_FRAME_WIDTH, HAND_TRACKING_JPEG_QUALITY, HAND_TRACKING_RESPONSE_TIMEOUT_MS, + HAND_TRACKING_RUNTIME_START_DELAY_MS, HAND_TRACKING_TARGET_FPS, } from "@/data/handTrackingConfig"; import { getHandTrackingWsUrl } from "@/utils/handTracking/handTrackingEndpoint"; @@ -17,6 +18,7 @@ import type { HandTrackingServerMessage, HandTrackingSnapshot, } from "@/types/handTracking/handTracking"; +import { logger } from "@/utils/core/Logger"; interface UseRemoteHandTrackingOptions { enabled: boolean; @@ -100,6 +102,7 @@ export function useRemoteHandTracking({ } let cancelled = false; + let cleanedUp = false; const clearResponseTimeout = (): void => { if (responseTimeoutRef.current === null) return; @@ -108,6 +111,9 @@ export function useRemoteHandTracking({ }; const cleanup = (): void => { + if (cleanedUp) return; + cleanedUp = true; + if (sendIntervalRef.current !== null) { window.clearInterval(sendIntervalRef.current); sendIntervalRef.current = null; @@ -283,6 +289,9 @@ export function useRemoteHandTracking({ }; ws.onerror = () => { markResponseReceived(); + logger.error("HandTracking", "Backend WebSocket error", { + websocketUrl, + }); setSnapshot((current) => ({ ...current, status: "error", @@ -307,6 +316,10 @@ export function useRemoteHandTracking({ ); } catch (error) { if (cancelled) return; + logger.error("HandTracking", "Backend runtime failed", { + error: error instanceof Error ? error.message : String(error), + websocketUrl, + }); setSnapshot({ hands: [], status: "error", @@ -318,10 +331,17 @@ export function useRemoteHandTracking({ } }; - void start(); + // Delay the actual start so that a StrictMode mount/unmount/mount + // cycle, or a rapid `enabled` toggle at a trigger border, does not + // open the camera + WebSocket twice in a few milliseconds. + const startTimer = window.setTimeout(() => { + if (cancelled) return; + void start(); + }, HAND_TRACKING_RUNTIME_START_DELAY_MS); return () => { cancelled = true; + window.clearTimeout(startTimer); cleanup(); }; }, [enabled, websocketUrl]); diff --git a/src/index.css b/src/index.css index 0eb57e5..5a47469 100644 --- a/src/index.css +++ b/src/index.css @@ -1544,7 +1544,7 @@ canvas { } .game-settings-menu__choice-group--presets { - grid-template-columns: repeat(4, minmax(0, 1fr)); + grid-template-columns: repeat(5, minmax(0, 1fr)); } .game-settings-menu__choice-group button, diff --git a/src/lib/handTracking/browserHandTracking.ts b/src/lib/handTracking/browserHandTracking.ts index 06b80b4..5daf76e 100644 --- a/src/lib/handTracking/browserHandTracking.ts +++ b/src/lib/handTracking/browserHandTracking.ts @@ -1,4 +1,5 @@ import { + HAND_TRACKING_BROWSER_DELEGATE, HAND_TRACKING_BROWSER_MODEL_URL, HAND_TRACKING_BROWSER_WASM_URL, } from "@/data/handTrackingConfig"; @@ -6,6 +7,7 @@ import type { HandTrackingHand, HandTrackingLandmark, } from "@/types/handTracking/handTracking"; +import { logger } from "@/utils/core/Logger"; type HandLandmarkerModule = typeof import("@mediapipe/tasks-vision"); type HandLandmarker = Awaited< @@ -14,6 +16,7 @@ type HandLandmarker = Awaited< type HandLandmarkerResult = ReturnType; let handLandmarkerPromise: Promise | null = null; +let handLandmarkerInstance: HandLandmarker | null = null; function averageLandmarks( landmarks: HandTrackingLandmark[], @@ -78,20 +81,46 @@ export async function getBrowserHandLandmarker(): Promise { HAND_TRACKING_BROWSER_WASM_URL, ); - return HandLandmarker.createFromOptions(vision, { + const handLandmarker = await HandLandmarker.createFromOptions(vision, { baseOptions: { modelAssetPath: HAND_TRACKING_BROWSER_MODEL_URL, - delegate: "GPU", + delegate: HAND_TRACKING_BROWSER_DELEGATE, }, numHands: 2, runningMode: "VIDEO", }); + + handLandmarkerInstance = handLandmarker; + return handLandmarker; }, ); return handLandmarkerPromise; } +export function releaseBrowserHandLandmarker(): void { + const activeLandmarker = handLandmarkerInstance; + const pendingLandmarker = handLandmarkerPromise; + + handLandmarkerInstance = null; + handLandmarkerPromise = null; + + if (activeLandmarker) { + activeLandmarker.close(); + return; + } + + void pendingLandmarker + ?.then((landmarker) => { + landmarker.close(); + }) + .catch((error: unknown) => { + logger.warn("HandTracking", "Browser JS landmarker release failed", { + error: error instanceof Error ? error.message : String(error), + }); + }); +} + export function convertBrowserHandResult( result: HandLandmarkerResult, ): HandTrackingHand[] { diff --git a/src/pages/page.tsx b/src/pages/page.tsx index 996a285..d6b42a5 100644 --- a/src/pages/page.tsx +++ b/src/pages/page.tsx @@ -15,7 +15,9 @@ import { } from "@/components/ui/intro"; import { SceneLoadingOverlay } from "@/components/ui/SceneLoadingOverlay"; import { INITIAL_SCENE_LOADING_STATE } from "@/data/world/sceneLoadingConfig"; +import { useDebugStore } from "@/hooks/debug/useDebugStore"; import { useTransientLoadingIndicator } from "@/hooks/ui/useTransientLoadingIndicator"; +import { releaseBrowserHandLandmarker } from "@/lib/handTracking/browserHandTracking"; import { AudioManager } from "@/managers/AudioManager"; import { useGameStore } from "@/managers/stores/useGameStore"; import { useWorldSettingsStore } from "@/managers/stores/useWorldSettingsStore"; @@ -26,6 +28,9 @@ import { logger } from "@/utils/core/Logger"; import { World } from "@/world/World"; const LOADING_TO_VIDEO_FADE_MS = 500; +const WEBGL_CONTEXT_RESTORE_DELAY_MS = 500; +const CANVAS_DPR: [number, number] = [1, 1]; +const registeredWebglContextCanvases = new WeakSet(); export function HomePage(): React.JSX.Element | null { const navigate = useNavigate(); @@ -38,6 +43,11 @@ export function HomePage(): React.JSX.Element | null { const graphicsPreset = useWorldSettingsStore( (state) => state.graphics.preset, ); + const cameraMode = useDebugStore((debug) => debug.getCameraMode()); + const handTrackingSource = useDebugStore((debug) => + debug.getHandTrackingSource(), + ); + const sceneMode = useDebugStore((debug) => debug.getSceneMode()); const dialogMessage = useGameStore( (state) => state.missionFlow.dialogMessage, ); @@ -48,9 +58,18 @@ export function HomePage(): React.JSX.Element | null { INITIAL_SCENE_LOADING_STATE, ); const sceneReadyRef = useRef(false); + const cameraModeRef = useRef(cameraMode); + const handTrackingSourceRef = useRef(handTrackingSource); + const sceneModeRef = useRef(sceneMode); const runtimeLoadingSignal = `${graphicsPreset}:${mainState}:${ebikeStep}:${pylonStep}:${farmStep}`; const previousRuntimeLoadingSignalRef = useRef(runtimeLoadingSignal); + useEffect(() => { + cameraModeRef.current = cameraMode; + handTrackingSourceRef.current = handTrackingSource; + sceneModeRef.current = sceneMode; + }, [cameraMode, handTrackingSource, sceneMode]); + useEffect(() => { sceneReadyRef.current = sceneLoadingState.status === "ready"; }, [sceneLoadingState.status]); @@ -138,11 +157,25 @@ export function HomePage(): React.JSX.Element | null { // page stays frozen on a black canvas until the user reloads. const loseContextExt = gl.getContext().getExtension("WEBGL_lose_context"); + if (registeredWebglContextCanvases.has(canvas)) return; + registeredWebglContextCanvases.add(canvas); + const handleContextLost = (event: Event) => { event.preventDefault(); - logger.error("WebGL", "Context lost - attempting auto-restore"); + releaseBrowserHandLandmarker(); + + logger.error("WebGL", "Context lost - attempting auto-restore", { + cameraMode: cameraModeRef.current, + geometries: gl.info.memory.geometries, + handTrackingSource: handTrackingSourceRef.current, + sceneMode: sceneModeRef.current, + textures: gl.info.memory.textures, + }); // Give the GPU a moment to free resources before asking it back. - window.setTimeout(() => loseContextExt?.restoreContext(), 500); + window.setTimeout( + () => loseContextExt?.restoreContext(), + WEBGL_CONTEXT_RESTORE_DELAY_MS, + ); }; const handleContextRestored = () => { @@ -150,7 +183,11 @@ export function HomePage(): React.JSX.Element | null { gl.shadowMap.type = THREE.PCFShadowMap; gl.shadowMap.autoUpdate = true; gl.shadowMap.needsUpdate = true; - logger.info("WebGL", "Context restored"); + logger.info("WebGL", "Context restored", { + cameraMode: cameraModeRef.current, + handTrackingSource: handTrackingSourceRef.current, + sceneMode: sceneModeRef.current, + }); }; canvas.addEventListener("webglcontextlost", handleContextLost); @@ -191,10 +228,12 @@ export function HomePage(): React.JSX.Element | null { (); private readonly folders = new Map(); private readonly folderRefCounts = new Map(); + private handTrackingSourceController: Controller | null = null; private readonly controls: { cameraMode: CameraMode; fogEnabled: boolean; @@ -160,16 +163,22 @@ export class Debug { this.emit(); }); - handTrackingFolder - ?.add(this.controls, "handTrackingSource", { - "Browser JS": "browser", - Backend: "backend", - }) - .name("Source") - .onChange((value: HandTrackingSource) => { - this.controls.handTrackingSource = value; - this.saveAndEmit(); - }); + this.handTrackingSourceController = + handTrackingFolder + ?.add(this.controls, "handTrackingSource", { + "Browser JS": "browser", + Backend: "backend", + }) + .name("Source") + .onChange((value: HandTrackingSource) => { + const previousSource = this.controls.handTrackingSource; + this.controls.handTrackingSource = value; + logger.info("HandTracking", "Debug source changed", { + from: previousSource, + to: value, + }); + this.saveAndEmit(); + }) ?? null; } } @@ -254,7 +263,13 @@ export class Debug { } setHandTrackingSource(value: HandTrackingSource): void { + const previousSource = this.controls.handTrackingSource; this.controls.handTrackingSource = value; + this.handTrackingSourceController?.updateDisplay(); + logger.info("HandTracking", "Settings source changed", { + from: previousSource, + to: value, + }); this.saveAndEmit(); } diff --git a/src/utils/three/optimizeGLTFScene.ts b/src/utils/three/optimizeGLTFScene.ts index 710ebbb..eec91eb 100644 --- a/src/utils/three/optimizeGLTFScene.ts +++ b/src/utils/three/optimizeGLTFScene.ts @@ -19,20 +19,21 @@ type TexturedMaterial = THREE.Material & Partial>; const optimizedTextures = new WeakSet(); +const MAX_GLTF_TEXTURE_ANISOTROPY = 2; function optimizeTexture(texture: THREE.Texture, maxAnisotropy: number): void { if (optimizedTextures.has(texture)) return; optimizedTextures.add(texture); - texture.anisotropy = Math.min(4, Math.max(1, maxAnisotropy)); + const nextAnisotropy = Math.min( + MAX_GLTF_TEXTURE_ANISOTROPY, + Math.max(1, maxAnisotropy), + ); - if (!(texture instanceof THREE.CompressedTexture)) { - texture.generateMipmaps = true; - texture.minFilter = THREE.LinearMipmapLinearFilter; - texture.magFilter = THREE.LinearFilter; + if (texture.anisotropy > nextAnisotropy) { + texture.anisotropy = nextAnisotropy; + texture.needsUpdate = true; } - - texture.needsUpdate = true; } function optimizeMaterialTextures( diff --git a/src/world/World.tsx b/src/world/World.tsx index 0b45210..1c14e31 100644 --- a/src/world/World.tsx +++ b/src/world/World.tsx @@ -31,11 +31,20 @@ import { CharacterSystem } from "@/world/characters/CharacterSystem"; import { Player } from "@/world/player/Player"; import { TestMap } from "@/world/debug/TestMap"; import type { SceneLoadingChangeHandler } from "@/types/world/sceneLoading"; +import type { HandTrackingGloveHandedness } from "@/hooks/handTracking/useHandTrackingGloveStatus"; +import type { HandTrackingHand } from "@/types/handTracking/handTracking"; interface WorldProps { onLoadingStateChange?: SceneLoadingChangeHandler | undefined; } +function hasTrackedHand( + hands: HandTrackingHand[], + handedness: HandTrackingGloveHandedness, +): boolean { + return hands.some((hand) => hand.handedness.toLowerCase() === handedness); +} + export function World({ onLoadingStateChange }: WorldProps): React.JSX.Element { useEnvironmentDebug(); useMapPerformanceDebug(); @@ -49,7 +58,7 @@ export function World({ onLoadingStateChange }: WorldProps): React.JSX.Element { (state) => state.showPlayerModel, ); const showDebugOctree = useDebugVisualsStore((state) => state.showOctree); - const { status, usageStatus } = useHandTrackingSnapshot(); + const { hands, status, usageStatus } = useHandTrackingSnapshot(); const { octree, gameplayReady, @@ -63,8 +72,11 @@ export function World({ onLoadingStateChange }: WorldProps): React.JSX.Element { ? PLAYER_SPAWN_POSITION_GAME : PLAYER_SPAWN_POSITION_PHYSICS; const showHandTrackingGloves = - sceneMode === "physics" || - (status !== "idle" && usageStatus !== "inactive"); + status === "connected" && usageStatus !== "inactive" && hands.length > 0; + const showLeftHandTrackingGlove = + showHandTrackingGloves && hasTrackedHand(hands, "left"); + const showRightHandTrackingGlove = + showHandTrackingGloves && hasTrackedHand(hands, "right"); const spawnPlayer = cameraMode !== "debug" && (sceneMode === "game" ? gameplayReady : octree !== null); @@ -82,8 +94,12 @@ export function World({ onLoadingStateChange }: WorldProps): React.JSX.Element { ) : null} {showHandTrackingGloves ? ( - - + {showLeftHandTrackingGlove ? ( + + ) : null} + {showRightHandTrackingGlove ? ( + + ) : null} ) : null} {cameraMode === "debug" ? : null} diff --git a/src/world/debug/TestMap.tsx b/src/world/debug/TestMap.tsx index 0056b21..e1d74b9 100644 --- a/src/world/debug/TestMap.tsx +++ b/src/world/debug/TestMap.tsx @@ -17,6 +17,8 @@ import { TEST_SCENE_GRABBABLE_METALNESS, TEST_SCENE_GRABBABLE_POSITION, TEST_SCENE_GRABBABLE_ROUGHNESS, + TEST_SCENE_GPS_PREVIEW_POSITION, + TEST_SCENE_GPS_PREVIEW_ROTATION, GAME_REPAIR_ZONES, TEST_SCENE_REPAIR_ZONE_MARKER_RADIUS, TEST_SCENE_REPAIR_ZONE_MARKER_TUBE_RADIUS, @@ -110,24 +112,17 @@ export function TestMap({ onOctreeReady }: TestMapProps): React.JSX.Element { try { const parsed = JSON.parse(saved); if (Array.isArray(parsed) && parsed.length > 0) { - console.log( - `[TestMap] ${parsed.length} waypoints chargés depuis localStorage.`, - ); // Schedule state update to avoid synchronous setState in effect queueMicrotask(() => { if (!cancelled) setWaypoints(parsed); }); return; } - } catch (e) { - console.error("Failed to parse local storage waypoints", e); + } catch { + // Ignore parse errors — fall through to fetch fallback } } - // 2. Try public/roadNetwork.json - console.log( - "[TestMap] Tentative de chargement depuis /roadNetwork.json...", - ); fetch("/roadNetwork.json") .then((res) => { if (res.ok) return res.json(); @@ -136,14 +131,11 @@ export function TestMap({ onOctreeReady }: TestMapProps): React.JSX.Element { .then((data) => { if (cancelled) return; if (Array.isArray(data)) { - console.log( - `[TestMap] ${data.length} waypoints chargés depuis /roadNetwork.json.`, - ); setWaypoints(data); } }) - .catch((err) => { - console.log("[TestMap] Aucun point d'A* trouvé par défaut.", err); + .catch(() => { + // No A* waypoints available — silent fallback }); return () => { @@ -253,7 +245,10 @@ export function TestMap({ onOctreeReady }: TestMapProps): React.JSX.Element { {/* Dynamic Futuristic 3D GPS Dashboard Preview */} - + {/* Futuristic glowing screen frame (commented out to show true 3D transparency!) */} {/* diff --git a/src/world/map-instancing/MapInstancingSystem.tsx b/src/world/map-instancing/MapInstancingSystem.tsx index c5be5e9..1cb4c10 100644 --- a/src/world/map-instancing/MapInstancingSystem.tsx +++ b/src/world/map-instancing/MapInstancingSystem.tsx @@ -149,6 +149,7 @@ export function MapInstancingSystem({ const streamingEnabled = streaming && CHUNK_CONFIG.enabled && + graphicsPresetConfig.chunkStreamingEnabled && sceneMode === "game" && cameraMode === "player"; diff --git a/src/world/player/PlayerCamera.tsx b/src/world/player/PlayerCamera.tsx index 3a120a2..ca60af0 100644 --- a/src/world/player/PlayerCamera.tsx +++ b/src/world/player/PlayerCamera.tsx @@ -1,18 +1,29 @@ import { useEffect } from "react"; import { useThree } from "@react-three/fiber"; import { PointerLockControls } from "@react-three/drei"; +import { useSettingsStore } from "@/managers/stores/useSettingsStore"; import { setGlobalCamera } from "@/world/GameCinematics"; export function PlayerCamera(): React.JSX.Element { const camera = useThree((state) => state.camera); + const isSettingsMenuOpen = useSettingsStore( + (state) => state.isSettingsMenuOpen, + ); useEffect(() => { setGlobalCamera(camera); return () => { setGlobalCamera(null); - document.exitPointerLock(); + if (document.pointerLockElement) { + document.exitPointerLock(); + } }; }, [camera]); - return ; + return ( + + ); } diff --git a/src/world/player/PlayerController.tsx b/src/world/player/PlayerController.tsx index a42c7f5..cfe3dd9 100644 --- a/src/world/player/PlayerController.tsx +++ b/src/world/player/PlayerController.tsx @@ -34,6 +34,7 @@ import { EBIKE_CAMERA_TRANSFORM, EBIKE_DECELERATION_DURATION_MS, } from "@/data/ebike/ebikeConfig"; +import { useSceneMode } from "@/hooks/debug/useSceneMode"; /** Global window properties used for ebike communication */ interface EbikeGlobalState { @@ -152,6 +153,7 @@ export function PlayerController({ spawnPosition, }: PlayerControllerProps): null { const camera = useThree((state) => state.camera); + const sceneMode = useSceneMode(); const movementLocked = useRepairMovementLocked(); const terrainHeight = useTerrainHeightSampler(); const movementLockedRef = useRef(movementLocked); @@ -483,19 +485,21 @@ export function PlayerController({ } } - const groundHeight = terrainHeight.getHeight( - capsule.current.end.x, - capsule.current.end.z, - ); - if (groundHeight !== null && velocity.current.y <= 0) { - const groundOffset = getCapsuleFootY(capsule.current) - groundHeight; + if (sceneMode === "game") { + const groundHeight = terrainHeight.getHeight( + capsule.current.end.x, + capsule.current.end.z, + ); + if (groundHeight !== null && velocity.current.y <= 0) { + const groundOffset = getCapsuleFootY(capsule.current) - groundHeight; - if (groundOffset <= PLAYER_GROUND_SNAP_DISTANCE) { - capsule.current.translate( - _collisionCorrection.set(0, -groundOffset, 0), - ); - velocity.current.y = 0; - onFloor.current = true; + if (groundOffset <= PLAYER_GROUND_SNAP_DISTANCE) { + capsule.current.translate( + _collisionCorrection.set(0, -groundOffset, 0), + ); + velocity.current.y = 0; + onFloor.current = true; + } } } diff --git a/src/world/vegetation/VegetationSystem.tsx b/src/world/vegetation/VegetationSystem.tsx index ef07b55..a9f6431 100644 --- a/src/world/vegetation/VegetationSystem.tsx +++ b/src/world/vegetation/VegetationSystem.tsx @@ -1,8 +1,24 @@ -import { Suspense, useMemo } from "react"; +import { + Suspense, + useCallback, + useEffect, + useMemo, + useRef, + useState, +} from "react"; +import { useFrame, useThree } from "@react-three/fiber"; import { CHUNK_CONFIG } from "@/data/world/chunkStreamingConfig"; +import { + getMapLodModelPath, + getMapLodScaleMultiplier, + selectMapModelPathByDistance, +} from "@/data/world/mapLodConfig"; import { useCameraMode } from "@/hooks/debug/useCameraMode"; import { useSceneMode } from "@/hooks/debug/useSceneMode"; -import { useGraphicsPresetConfig } from "@/hooks/world/useGraphicsSettings"; +import { + useGraphicsPreset, + useGraphicsPresetConfig, +} from "@/hooks/world/useGraphicsSettings"; import { useVisibleWorldChunks } from "@/hooks/world/useVisibleWorldChunks"; import { isMapModelVisible, @@ -18,6 +34,7 @@ import { } from "@/data/world/vegetationConfig"; import { isInsideLaFabrikFootprint } from "@/data/world/laFabrikConfig"; import { createWorldInstanceChunks } from "@/utils/world/chunkInstances"; +import type { GraphicsPreset } from "@/data/world/graphicsConfig"; interface VegetationSystemProps { onlyMapName?: string | null; @@ -70,12 +87,78 @@ function removeLaFabrikVegetation( }); } +function areChunkModelPathsEqual( + a: ReadonlyMap, + b: ReadonlyMap, +): boolean { + return ( + a.size === b.size && [...a].every(([key, value]) => b.get(key) === value) + ); +} + +function useVegetationChunkModelPaths( + chunks: readonly VegetationChunk[], + preset: GraphicsPreset, +): ReadonlyMap { + const camera = useThree((state) => state.camera); + const lastUpdateRef = useRef(-CHUNK_CONFIG.updateInterval); + const modelPathsRef = useRef>(new Map()); + const [modelPaths, setModelPaths] = useState>( + () => new Map(), + ); + + const updateModelPaths = useCallback(() => { + const cameraX = camera.position.x; + const cameraZ = camera.position.z; + const next = new Map(); + + for (const chunk of chunks) { + let nearestDistance = Number.POSITIVE_INFINITY; + for (const instance of chunk.instances) { + const distance = Math.hypot( + instance.position[0] - cameraX, + instance.position[2] - cameraZ, + ); + if (distance < nearestDistance) nearestDistance = distance; + } + + const modelPath = selectMapModelPathByDistance({ + distance: nearestDistance, + modelName: VEGETATION_TYPES[chunk.type].mapName, + modelPath: chunk.modelPath, + preset, + }); + next.set(chunk.key, modelPath); + } + + if (areChunkModelPathsEqual(next, modelPathsRef.current)) return; + + modelPathsRef.current = next; + setModelPaths(next); + }, [camera, chunks, preset]); + + useEffect(() => { + updateModelPaths(); + }, [updateModelPaths]); + + useFrame(({ clock }) => { + const now = clock.elapsedTime * 1000; + if (now - lastUpdateRef.current < CHUNK_CONFIG.updateInterval) return; + lastUpdateRef.current = now; + + updateModelPaths(); + }); + + return modelPaths; +} + export function VegetationSystem({ onlyMapName = null, streaming = true, }: VegetationSystemProps): React.JSX.Element | null { const cameraMode = useCameraMode(); const sceneMode = useSceneMode(); + const graphicsPresetKey = useGraphicsPreset(); const graphicsPreset = useGraphicsPresetConfig(); const groups = useMapPerformanceStore((state) => state.groups); const models = useMapPerformanceStore((state) => state.models); @@ -83,6 +166,7 @@ export function VegetationSystem({ const streamingEnabled = streaming && CHUNK_CONFIG.enabled && + graphicsPreset.chunkStreamingEnabled && sceneMode === "game" && cameraMode === "player"; @@ -112,25 +196,38 @@ export function VegetationSystem({ unloadRadius: graphicsPreset.chunkUnloadRadius, }); + const chunkModelPaths = useVegetationChunkModelPaths( + visibleChunks, + graphicsPresetKey, + ); + if (isLoading || !data) { return null; } return ( - {visibleChunks.map((chunk) => ( - - - - ))} + {visibleChunks.map((chunk) => { + const modelPath = chunkModelPaths.get(chunk.key) ?? chunk.modelPath; + const mapName = VEGETATION_TYPES[chunk.type].mapName; + const isLod = modelPath === getMapLodModelPath(mapName); + const scaleMultiplier = + chunk.scaleMultiplier * + (isLod ? getMapLodScaleMultiplier(mapName) : 1); + return ( + + + + ); + })} ); }