From 626dc47bbe922d60b163494b9aaa3d9610a2b1fa Mon Sep 17 00:00:00 2001 From: Tom Boullay Date: Mon, 25 May 2026 16:23:36 +0200 Subject: [PATCH 01/10] feat: add model gallery viewer --- src/data/galleryModels.ts | 209 +++++++++++++++++++++++++++++++++++++ src/index.css | 174 ++++++++++++++++++++++++++++++ src/pages/galerie/page.tsx | 203 +++++++++++++++++++++++++++++++++++ src/router.tsx | 8 ++ 4 files changed, 594 insertions(+) create mode 100644 src/data/galleryModels.ts create mode 100644 src/pages/galerie/page.tsx diff --git a/src/data/galleryModels.ts b/src/data/galleryModels.ts new file mode 100644 index 0000000..6a913a6 --- /dev/null +++ b/src/data/galleryModels.ts @@ -0,0 +1,209 @@ +export interface GalleryModel { + id: string; + name: string; + path: string; +} + +export const galleryModels: GalleryModel[] = [ + { id: "arbre", name: "Arbre", path: "/models/arbre/model.gltf" }, + { + id: "arbre-animated", + name: "Arbre animé", + path: "/models/arbre-animated/model.gltf", + }, + { id: "blocking", name: "Blocking", path: "/models/blocking/model.gltf" }, + { + id: "boiteauxlettres", + name: "Boîte aux lettres", + path: "/models/boiteauxlettres/model.gltf", + }, + { + id: "boiteimmeuble", + name: "Boîte immeuble", + path: "/models/boiteimmeuble/model.gltf", + }, + { id: "buisson", name: "Buisson", path: "/models/buisson/model.gltf" }, + { + id: "buisson-animated", + name: "Buisson animé", + path: "/models/buisson-animated/model.gltf", + }, + { id: "cable1", name: "Câble 1", path: "/models/cable1/model.gltf" }, + { id: "cable2", name: "Câble 2", path: "/models/cable2/model.gltf" }, + { + id: "champdeble", + name: "Champ de blé", + path: "/models/champdeble/model.gltf", + }, + { + id: "champdeble-animated", + name: "Champ de blé animé", + path: "/models/champdeble-animated/model.gltf", + }, + { + id: "champdesoja", + name: "Champ de soja", + path: "/models/champdesoja/model.gltf", + }, + { + id: "champdesoja-animated", + name: "Champ de soja animé", + path: "/models/champdesoja-animated/model.gltf", + }, + { + id: "champsdetournesol", + name: "Champ de tournesol", + path: "/models/champsdetournesol/model.gltf", + }, + { + id: "champsdetournesol-animated", + name: "Champ de tournesol animé", + path: "/models/champsdetournesol-animated/model.gltf", + }, + { id: "chemins", name: "Chemins", path: "/models/chemins/model.gltf" }, + { id: "cloud", name: "Nuage", path: "/models/cloud/model.glb" }, + { + id: "createurdepluie", + name: "Créateur de pluie", + path: "/models/createurdepluie/model.gltf", + }, + { id: "ebike", name: "E-bike", path: "/models/ebike/model.gltf" }, + { id: "ecole", name: "École", path: "/models/ecole/model.gltf" }, + { id: "elec", name: "Électricité", path: "/models/elec/model.gltf" }, + { + id: "electricienne", + name: "Électricienne", + path: "/models/electricienne/model.gltf", + }, + { + id: "entreetuyaux", + name: "Entrée tuyaux", + path: "/models/entreetuyaux/model.gltf", + }, + { id: "eolienne", name: "Éolienne", path: "/models/eolienne/model.gltf" }, + { + id: "fermeverticale", + name: "Ferme verticale", + path: "/models/fermeverticale/model.gltf", + }, + { id: "fermier", name: "Fermier", path: "/models/fermier/model.gltf" }, + { + id: "fermier-animated", + name: "Fermier animé", + path: "/models/fermier-animated/model.gltf", + }, + { id: "galet", name: "Galet", path: "/models/galet/model.gltf" }, + { id: "gant_l", name: "Gant gauche", path: "/models/gant_l/model.gltf" }, + { + id: "gant_l_pad", + name: "Pad gant gauche", + path: "/models/gant_l_pad/model.gltf", + }, + { id: "gant_r", name: "Gant droit", path: "/models/gant_r/model.gltf" }, + { + id: "gant_r_pad", + name: "Pad gant droit", + path: "/models/gant_r_pad/model.gltf", + }, + { + id: "generateur", + name: "Générateur", + path: "/models/generateur/model.gltf", + }, + { id: "gerant", name: "Gérant", path: "/models/gerant/model.gltf" }, + { + id: "gerant-animated", + name: "Gérant animé", + path: "/models/gerant-animated/model.gltf", + }, + { + id: "habitant1", + name: "Habitant 1", + path: "/models/habitant1/model.gltf", + }, + { + id: "habitant1-animated", + name: "Habitant 1 animé", + path: "/models/habitant1-animated/model.gltf", + }, + { + id: "habitant2", + name: "Habitant 2", + path: "/models/habitant2/model.gltf", + }, + { + id: "habitant2-animated", + name: "Habitant 2 animé", + path: "/models/habitant2-animated/model.gltf", + }, + { id: "immeuble1", name: "Immeuble", path: "/models/immeuble1/model.gltf" }, + { id: "lafabrik", name: "La Fabrik", path: "/models/lafabrik/model.gltf" }, + { id: "maison1", name: "Maison", path: "/models/maison1/model.gltf" }, + { + id: "packderelance", + name: "Pack de relance", + path: "/models/packderelance/model.gltf", + }, + { + id: "panneauaffichage", + name: "Panneau d'affichage", + path: "/models/panneauaffichage/model.gltf", + }, + { + id: "panneauclassique", + name: "Panneau classique", + path: "/models/panneauclassique/model.gltf", + }, + { + id: "panneaufleche", + name: "Panneau flèche", + path: "/models/panneaufleche/model.gltf", + }, + { + id: "panneausolaire", + name: "Panneau solaire", + path: "/models/panneausolaire/model.gltf", + }, + { + id: "parcebike", + name: "Parc e-bike", + path: "/models/parcebike/model.gltf", + }, + { + id: "persoprincipal", + name: "Personnage principal", + path: "/models/persoprincipal/model.gltf", + }, + { + id: "persoprincipal-animated", + name: "Personnage principal animé", + path: "/models/persoprincipal-animated/model.gltf", + }, + { id: "potager", name: "Potager", path: "/models/potager/potager.gltf" }, + { id: "puce", name: "Puce", path: "/models/puce/model.gltf" }, + { id: "pylone", name: "Pylône", path: "/models/pylone/model.gltf" }, + { + id: "refroidisseur", + name: "Refroidisseur", + path: "/models/refroidisseur/model.gltf", + }, + { id: "sapin", name: "Sapin", path: "/models/sapin/model.gltf" }, + { + id: "sapin-animated", + name: "Sapin animé", + path: "/models/sapin-animated/model.gltf", + }, + { id: "talkie", name: "Talkie", path: "/models/talkie/model.gltf" }, + { id: "terrain", name: "Terrain", path: "/models/terrain/model.gltf" }, + { + id: "tuyauxlac", + name: "Tuyaux lac", + path: "/models/tuyauxlac/model.gltf", + }, + { + id: "tuyauxpuzzle", + name: "Tuyaux puzzle", + path: "/models/tuyauxpuzzle/model.gltf", + }, + { id: "vase", name: "Vase", path: "/models/vase/model.gltf" }, +]; diff --git a/src/index.css b/src/index.css index d52eddb..7ba0e98 100644 --- a/src/index.css +++ b/src/index.css @@ -30,6 +30,180 @@ canvas { display: block; } +/* Model gallery */ +.gallery-page { + display: grid; + grid-template-columns: minmax(280px, 0.78fr) minmax(0, 1.22fr); + gap: clamp(18px, 4vw, 54px); + width: 100vw; + height: 100vh; + padding: clamp(18px, 4vw, 56px); + box-sizing: border-box; + overflow: auto; + background: + radial-gradient( + circle at 22% 18%, + rgba(96, 165, 250, 0.2), + transparent 32% + ), + radial-gradient( + circle at 86% 8%, + rgba(52, 211, 153, 0.16), + transparent 28% + ), + #05070c; + color: #f8fafc; +} + +.gallery-hero { + align-self: center; + max-width: 580px; +} + +.gallery-eyebrow, +.gallery-model-count { + margin: 0 0 12px; + color: #7dd3fc; + font-size: 12px; + font-weight: 800; + letter-spacing: 0.16em; + text-transform: uppercase; +} + +.gallery-hero h1 { + margin: 0; + font-size: clamp(44px, 8vw, 92px); + line-height: 0.94; + letter-spacing: -0.075em; +} + +.gallery-hero p:last-child { + max-width: 44rem; + margin: 24px 0 0; + color: #cbd5e1; + font-family: Inter, "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: clamp(16px, 2vw, 20px); + line-height: 1.65; +} + +.gallery-viewer-panel { + display: grid; + grid-template-rows: auto minmax(360px, 1fr) auto; + min-height: min(760px, calc(100vh - 112px)); + overflow: hidden; + border: 1px solid rgba(226, 232, 240, 0.18); + border-radius: 28px; + background: rgba(8, 13, 24, 0.74); + box-shadow: 0 24px 90px rgba(0, 0, 0, 0.42); + backdrop-filter: blur(18px); +} + +.gallery-viewer-header { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 18px; + padding: 22px; + border-bottom: 1px solid rgba(226, 232, 240, 0.14); +} + +.gallery-viewer-header h2 { + margin: 0 0 8px; + font-size: clamp(26px, 3vw, 42px); + line-height: 1; + letter-spacing: -0.055em; +} + +.gallery-viewer-header code { + color: #94a3b8; + font-family: Inter, "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 12px; + word-break: break-word; +} + +.gallery-controls { + display: flex; + gap: 10px; +} + +.gallery-controls button { + display: grid; + place-items: center; + width: 48px; + height: 48px; + border: 1px solid rgba(248, 250, 252, 0.24); + border-radius: 999px; + background: rgba(248, 250, 252, 0.08); + color: #f8fafc; + cursor: pointer; + font-size: 24px; + transition: + background 160ms ease, + transform 160ms ease; +} + +.gallery-controls button:hover, +.gallery-controls button:focus-visible { + background: rgba(125, 211, 252, 0.24); + outline: none; + transform: translateY(-1px); +} + +.gallery-canvas-frame { + position: relative; + min-height: 360px; +} + +.gallery-viewer-error { + display: grid; + place-items: center; + height: 100%; + min-height: 360px; + padding: 24px; + color: #fecaca; + text-align: center; +} + +.gallery-help-text { + margin: 0; + padding: 16px 22px 20px; + border-top: 1px solid rgba(226, 232, 240, 0.14); + color: #cbd5e1; + font-family: Inter, "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.5; +} + +@media (max-width: 900px) { + .gallery-page { + grid-template-columns: 1fr; + min-height: 100vh; + height: auto; + } + + .gallery-hero { + align-self: start; + } + + .gallery-viewer-panel { + min-height: 620px; + } +} + +@media (max-width: 560px) { + .gallery-viewer-header { + flex-direction: column; + } + + .gallery-controls { + width: 100%; + } + + .gallery-controls button { + flex: 1; + } +} + /* Docs layout */ .docs-page { display: grid; diff --git a/src/pages/galerie/page.tsx b/src/pages/galerie/page.tsx new file mode 100644 index 0000000..997ef1a --- /dev/null +++ b/src/pages/galerie/page.tsx @@ -0,0 +1,203 @@ +import { + Bounds, + Center, + OrbitControls, + useAnimations, + useGLTF, +} from "@react-three/drei"; +import { Canvas } from "@react-three/fiber"; +import { + Component, + Suspense, + useEffect, + useMemo, + useRef, + useState, + type ReactNode, +} from "react"; +import * as THREE from "three"; +import { SkyModel } from "@/components/three/world/SkyModel"; +import { + GAME_SCENE_FALLBACK_SKY_MODEL_PATH, + GAME_SCENE_FALLBACK_SKY_MODEL_SCALE, + GAME_SCENE_SKY_MODEL_PATH, + GAME_SCENE_SKY_MODEL_SCALE, +} from "@/data/world/environmentConfig"; +import { galleryModels, type GalleryModel } from "@/data/galleryModels"; + +interface GalleryModelProps { + model: GalleryModel; +} + +interface GalleryViewerErrorBoundaryProps { + children: ReactNode; + resetKey: string; +} + +interface GalleryViewerErrorBoundaryState { + hasError: boolean; +} + +class GalleryViewerErrorBoundary extends Component< + GalleryViewerErrorBoundaryProps, + GalleryViewerErrorBoundaryState +> { + constructor(props: GalleryViewerErrorBoundaryProps) { + super(props); + this.state = { hasError: false }; + } + + static getDerivedStateFromError(): GalleryViewerErrorBoundaryState { + return { hasError: true }; + } + + componentDidUpdate(previousProps: GalleryViewerErrorBoundaryProps): void { + if (previousProps.resetKey !== this.props.resetKey && this.state.hasError) { + this.setState({ hasError: false }); + } + } + + render(): ReactNode { + if (this.state.hasError) { + return ( +
+ Ce modèle ne peut pas être affiché pour le moment. +
+ ); + } + + return this.props.children; + } +} + +function GalleryModelPreview({ model }: GalleryModelProps): React.JSX.Element { + const groupRef = useRef(null); + const { animations, scene } = useGLTF(model.path); + const modelScene = useMemo(() => scene.clone(true), [scene]); + const { actions } = useAnimations(animations, groupRef); + + useEffect(() => { + const animationActions = Object.values(actions).filter( + (action): action is THREE.AnimationAction => Boolean(action), + ); + + for (const action of animationActions) { + action.reset().play(); + } + + return () => { + for (const action of animationActions) { + action.stop(); + } + }; + }, [actions]); + + return ( + + + + ); +} + +function GalleryScene({ model }: GalleryModelProps): React.JSX.Element { + return ( + <> + + + + +
+ +
+
+ + + ); +} + +export function GalleryPage(): React.JSX.Element { + const [activeModelIndex, setActiveModelIndex] = useState(0); + const activeModel = galleryModels[activeModelIndex] ?? galleryModels[0]!; + const modelCount = galleryModels.length; + + const goToPreviousModel = (): void => { + setActiveModelIndex((currentIndex) => + currentIndex === 0 ? modelCount - 1 : currentIndex - 1, + ); + }; + + const goToNextModel = (): void => { + setActiveModelIndex((currentIndex) => + currentIndex === modelCount - 1 ? 0 : currentIndex + 1, + ); + }; + + return ( +
+
+

Galerie des modèles

+

Merci aux designers de La Fabrik

+

+ Une vitrine simple pour parcourir les modèles 3D du projet dans leur + propre canvas, avec la même skybox que l'expérience principale. +

+
+ +
+
+
+

+ {activeModelIndex + 1} / {modelCount} +

+

{activeModel.name}

+ {activeModel.path} +
+
+ + +
+
+ +
+ + + + + + + +
+ +

+ Utilise les flèches pour changer de modèle. Tu peux tourner autour du + modèle avec la souris ou le doigt. +

+
+
+ ); +} diff --git a/src/router.tsx b/src/router.tsx index 97fb9da..4065a5e 100644 --- a/src/router.tsx +++ b/src/router.tsx @@ -6,6 +6,7 @@ import { } from "@tanstack/react-router"; import { HomePage } from "@/pages/page"; import { EditorPage } from "@/pages/editor/page"; +import { GalleryPage } from "@/pages/galerie/page"; import { DocsAnimationRoute, DocsAudioRoute, @@ -43,6 +44,12 @@ const editorRoute = createRoute({ component: EditorPage, }); +const galleryRoute = createRoute({ + getParentRoute: () => rootRoute, + path: "/galerie", + component: GalleryPage, +}); + const docsRoute = createRoute({ getParentRoute: () => rootRoute, path: "/docs", @@ -78,6 +85,7 @@ const docsChildRoutes = [ const routeTree = rootRoute.addChildren([ indexRoute, editorRoute, + galleryRoute, docsRoute.addChildren(docsChildRoutes), ]); From 36180279b2a7edd4654b604a8470744c7c0b904e Mon Sep 17 00:00:00 2001 From: Tom Boullay Date: Mon, 25 May 2026 16:24:12 +0200 Subject: [PATCH 02/10] docs: document model gallery --- README.md | 15 +++++++----- docs/user/gallery.md | 41 +++++++++++++++++++++++++++++++++ src/data/docs/docsSections.ts | 8 ++++++- src/pages/docs/gallery/page.tsx | 13 +++++++++++ src/router.tsx | 2 ++ src/routes/DocsRoute.tsx | 5 ++++ 6 files changed, 77 insertions(+), 7 deletions(-) create mode 100644 docs/user/gallery.md create mode 100644 src/pages/docs/gallery/page.tsx diff --git a/README.md b/README.md index b2dcd37..f92fa29 100644 --- a/README.md +++ b/README.md @@ -25,12 +25,13 @@ The current prototype puts the player in a repair-oriented world where they prog ## Routes -| Route | Purpose | -| --------- | --------------------------------------------------- | -| `/` | Playable 3D experience | -| `/?debug` | Playable scene with debug GUI and overlays | -| `/editor` | Local map, dialogue, subtitle, and cinematic editor | -| `/docs` | In-app documentation index | +| Route | Purpose | +| ---------- | --------------------------------------------------- | +| `/` | Playable 3D experience | +| `/?debug` | Playable scene with debug GUI and overlays | +| `/editor` | Local map, dialogue, subtitle, and cinematic editor | +| `/galerie` | 3D model gallery for browsing project assets | +| `/docs` | In-app documentation index | ## Tech Stack @@ -98,6 +99,7 @@ Useful local URLs: ```txt http://localhost:5173/?debug http://localhost:5173/editor +http://localhost:5173/galerie http://localhost:5173/docs ``` @@ -148,6 +150,7 @@ WS ws://localhost:8000/ws | `docs/user/features.md` | Implemented feature inventory | | `docs/user/main-feature.md` | User-facing repair-game walkthrough | | `docs/user/editor.md` | Editor user guide | +| `docs/user/gallery.md` | Model gallery user guide | | `docs/code-review-preparation.md` | French code-review preparation support | ## Current Caveats diff --git a/docs/user/gallery.md b/docs/user/gallery.md new file mode 100644 index 0000000..86fea7d --- /dev/null +++ b/docs/user/gallery.md @@ -0,0 +1,41 @@ +# Galerie des modèles + +La galerie est disponible sur `/galerie`. Elle permet de parcourir les modèles 3D présents dans `public/models/` sans lancer la boucle de gameplay principale. + +## Objectif + +Cette page sert à remercier et valoriser le travail des designers du projet La Fabrik. Chaque modèle est affiché dans un canvas dédié, avec la même skybox que l'expérience principale pour garder une ambiance visuelle cohérente. + +## Utilisation + +1. Ouvrir `/galerie`. +2. Utiliser les flèches pour passer au modèle précédent ou suivant. +3. Tourner autour du modèle avec la souris ou le doigt. +4. Lire le chemin affiché pour retrouver le fichier source dans `public/models/`. + +## Fonctionnement + +- La liste des modèles est déclarée dans `src/data/galleryModels.ts`. +- Le viewer utilise `@react-three/fiber` et `@react-three/drei`. +- `OrbitControls` permet de manipuler la caméra autour du modèle. +- `Bounds` et `Center` recadrent automatiquement le modèle actif. +- `SkyModel` réutilise la skybox du jeu. +- Les animations GLTF présentes dans un modèle sont lancées automatiquement. + +## Ajouter un modèle + +1. Ajouter le dossier du modèle dans `public/models/{nom}`. +2. Vérifier que le modèle possède un fichier chargeable, par exemple `model.gltf`, `model.glb` ou un nom explicite comme `potager.gltf`. +3. Ajouter une entrée dans `src/data/galleryModels.ts` avec un `id`, un `name` et un `path`. + +Exemple : + +```ts +{ id: "nouveau-modele", name: "Nouveau modèle", path: "/models/nouveau-modele/model.gltf" } +``` + +## Limites connues + +- Le navigateur ne liste pas automatiquement les dossiers de `public/models/`, donc la liste reste déclarative. +- Les modèles très lourds peuvent prendre du temps à charger. +- La galerie est un viewer simple : elle ne remplace pas les outils d'inspection avancée comme Blender ou le viewer d'upload. diff --git a/src/data/docs/docsSections.ts b/src/data/docs/docsSections.ts index 0070a5a..4389b45 100644 --- a/src/data/docs/docsSections.ts +++ b/src/data/docs/docsSections.ts @@ -109,6 +109,12 @@ export const docGroups: DocGroup[] = [ subtitle: "Components and usage", meta: "15", }, + { + path: "/docs/gallery", + title: "Model Gallery", + subtitle: "Browsing 3D assets", + meta: "16", + }, ], }, { @@ -118,7 +124,7 @@ export const docGroups: DocGroup[] = [ path: "/docs/code-review", title: "Code Review Prep", subtitle: "Presentation support", - meta: "16", + meta: "17", }, ], }, diff --git a/src/pages/docs/gallery/page.tsx b/src/pages/docs/gallery/page.tsx new file mode 100644 index 0000000..8b1edaa --- /dev/null +++ b/src/pages/docs/gallery/page.tsx @@ -0,0 +1,13 @@ +import gallery from "../../../../docs/user/gallery.md?raw"; +import { DocsDocument } from "@/components/docs/DocsDocument"; + +export function DocsGalleryPage(): React.JSX.Element { + return ( + + ); +} diff --git a/src/router.tsx b/src/router.tsx index 4065a5e..d1a009c 100644 --- a/src/router.tsx +++ b/src/router.tsx @@ -14,6 +14,7 @@ import { DocsCodeReviewRoute, DocsEditorRoute, DocsFeaturesRoute, + DocsGalleryRoute, DocsHandTrackingRoute, DocsInteractionRoute, DocsLayoutRoute, @@ -73,6 +74,7 @@ const docsChildRoutes = [ { path: "main-feature", component: DocsMainFeatureRoute }, { path: "editor", component: DocsEditorRoute }, { path: "animation", component: DocsAnimationRoute }, + { path: "gallery", component: DocsGalleryRoute }, { path: "code-review", component: DocsCodeReviewRoute }, ].map(({ path, component }) => createRoute({ diff --git a/src/routes/DocsRoute.tsx b/src/routes/DocsRoute.tsx index 86f775a..18eebd2 100644 --- a/src/routes/DocsRoute.tsx +++ b/src/routes/DocsRoute.tsx @@ -87,6 +87,10 @@ const LazyDocsAnimationPage = lazyNamed( () => import("@/pages/docs/animation/page"), "DocsAnimationPage", ); +const LazyDocsGalleryPage = lazyNamed( + () => import("@/pages/docs/gallery/page"), + "DocsGalleryPage", +); const LazyDocsCodeReviewPage = lazyNamed( () => import("@/pages/docs/code-review/page"), "DocsCodeReviewPage", @@ -119,6 +123,7 @@ export const DocsFeaturesRoute = createDocsRoute(LazyDocsFeaturesPage); export const DocsMainFeatureRoute = createDocsRoute(LazyDocsMainFeaturePage); export const DocsEditorRoute = createDocsRoute(LazyDocsEditorPage); export const DocsAnimationRoute = createDocsRoute(LazyDocsAnimationPage); +export const DocsGalleryRoute = createDocsRoute(LazyDocsGalleryPage); export const DocsCodeReviewRoute = createDocsRoute(LazyDocsCodeReviewPage); export const DocsMissionFlowRoute = createDocsRoute(LazyDocsMissionFlowPage); export const DocsThreeDebuggingRoute = createDocsRoute( From e9fb36f9dce1b802bae382312316a6e0607b8b71 Mon Sep 17 00:00:00 2001 From: Tom Boullay Date: Mon, 25 May 2026 17:13:21 +0200 Subject: [PATCH 03/10] style: simplify gallery UI and rename route --- README.md | 4 +- docs/user/gallery.md | 9 +- src/index.css | 270 ++++++++++++++++---------------- src/pages/galerie/page.tsx | 203 ------------------------ src/pages/gallery/page.tsx | 312 +++++++++++++++++++++++++++++++++++++ src/router.tsx | 4 +- 6 files changed, 453 insertions(+), 349 deletions(-) delete mode 100644 src/pages/galerie/page.tsx create mode 100644 src/pages/gallery/page.tsx diff --git a/README.md b/README.md index f92fa29..9c56a97 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ The current prototype puts the player in a repair-oriented world where they prog | `/` | Playable 3D experience | | `/?debug` | Playable scene with debug GUI and overlays | | `/editor` | Local map, dialogue, subtitle, and cinematic editor | -| `/galerie` | 3D model gallery for browsing project assets | +| `/gallery` | 3D model gallery for browsing project assets | | `/docs` | In-app documentation index | ## Tech Stack @@ -99,7 +99,7 @@ Useful local URLs: ```txt http://localhost:5173/?debug http://localhost:5173/editor -http://localhost:5173/galerie +http://localhost:5173/gallery http://localhost:5173/docs ``` diff --git a/docs/user/gallery.md b/docs/user/gallery.md index 86fea7d..1d94b5f 100644 --- a/docs/user/gallery.md +++ b/docs/user/gallery.md @@ -1,6 +1,6 @@ # Galerie des modèles -La galerie est disponible sur `/galerie`. Elle permet de parcourir les modèles 3D présents dans `public/models/` sans lancer la boucle de gameplay principale. +La galerie est disponible sur `/gallery`. Elle permet de parcourir les modèles 3D présents dans `public/models/` sans lancer la boucle de gameplay principale. ## Objectif @@ -8,10 +8,10 @@ Cette page sert à remercier et valoriser le travail des designers du projet La ## Utilisation -1. Ouvrir `/galerie`. -2. Utiliser les flèches pour passer au modèle précédent ou suivant. +1. Ouvrir `/gallery`. +2. Utiliser les flèches en bas de l'écran pour passer au modèle précédent ou suivant. 3. Tourner autour du modèle avec la souris ou le doigt. -4. Lire le chemin affiché pour retrouver le fichier source dans `public/models/`. +4. Lire le diagnostic texture discret pour savoir si le modèle chargé semble correct côté textures. ## Fonctionnement @@ -21,6 +21,7 @@ Cette page sert à remercier et valoriser le travail des designers du projet La - `Bounds` et `Center` recadrent automatiquement le modèle actif. - `SkyModel` réutilise la skybox du jeu. - Les animations GLTF présentes dans un modèle sont lancées automatiquement. +- Un diagnostic simple inspecte les matériaux chargés pour signaler les textures absentes ou non exploitables. ## Ajouter un modèle diff --git a/src/index.css b/src/index.css index 7ba0e98..cc7bc18 100644 --- a/src/index.css +++ b/src/index.css @@ -32,126 +32,31 @@ canvas { /* Model gallery */ .gallery-page { - display: grid; - grid-template-columns: minmax(280px, 0.78fr) minmax(0, 1.22fr); - gap: clamp(18px, 4vw, 54px); + position: relative; width: 100vw; height: 100vh; - padding: clamp(18px, 4vw, 56px); - box-sizing: border-box; - overflow: auto; - background: - radial-gradient( - circle at 22% 18%, - rgba(96, 165, 250, 0.2), - transparent 32% - ), - radial-gradient( - circle at 86% 8%, - rgba(52, 211, 153, 0.16), - transparent 28% - ), - #05070c; - color: #f8fafc; -} - -.gallery-hero { - align-self: center; - max-width: 580px; -} - -.gallery-eyebrow, -.gallery-model-count { - margin: 0 0 12px; - color: #7dd3fc; - font-size: 12px; - font-weight: 800; - letter-spacing: 0.16em; - text-transform: uppercase; -} - -.gallery-hero h1 { - margin: 0; - font-size: clamp(44px, 8vw, 92px); - line-height: 0.94; - letter-spacing: -0.075em; -} - -.gallery-hero p:last-child { - max-width: 44rem; - margin: 24px 0 0; - color: #cbd5e1; - font-family: Inter, "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: clamp(16px, 2vw, 20px); - line-height: 1.65; -} - -.gallery-viewer-panel { - display: grid; - grid-template-rows: auto minmax(360px, 1fr) auto; - min-height: min(760px, calc(100vh - 112px)); overflow: hidden; - border: 1px solid rgba(226, 232, 240, 0.18); - border-radius: 28px; - background: rgba(8, 13, 24, 0.74); - box-shadow: 0 24px 90px rgba(0, 0, 0, 0.42); - backdrop-filter: blur(18px); -} - -.gallery-viewer-header { - display: flex; - align-items: flex-start; - justify-content: space-between; - gap: 18px; - padding: 22px; - border-bottom: 1px solid rgba(226, 232, 240, 0.14); -} - -.gallery-viewer-header h2 { - margin: 0 0 8px; - font-size: clamp(26px, 3vw, 42px); - line-height: 1; - letter-spacing: -0.055em; -} - -.gallery-viewer-header code { - color: #94a3b8; - font-family: Inter, "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 12px; - word-break: break-word; -} - -.gallery-controls { - display: flex; - gap: 10px; -} - -.gallery-controls button { - display: grid; - place-items: center; - width: 48px; - height: 48px; - border: 1px solid rgba(248, 250, 252, 0.24); - border-radius: 999px; - background: rgba(248, 250, 252, 0.08); + background: #05070c; color: #f8fafc; - cursor: pointer; - font-size: 24px; - transition: - background 160ms ease, - transform 160ms ease; } -.gallery-controls button:hover, -.gallery-controls button:focus-visible { - background: rgba(125, 211, 252, 0.24); - outline: none; - transform: translateY(-1px); +.gallery-title { + position: absolute; + top: clamp(18px, 3vw, 34px); + right: clamp(18px, 3vw, 38px); + z-index: 2; + margin: 0; + color: rgba(248, 250, 252, 0.92); + font-size: clamp(18px, 2vw, 26px); + font-weight: 700; + letter-spacing: 0.32em; + line-height: 1; } .gallery-canvas-frame { position: relative; - min-height: 360px; + width: 100%; + height: 100%; } .gallery-viewer-error { @@ -164,43 +69,132 @@ canvas { text-align: center; } -.gallery-help-text { - margin: 0; - padding: 16px 22px 20px; - border-top: 1px solid rgba(226, 232, 240, 0.14); - color: #cbd5e1; +.gallery-bottom-bar { + position: absolute; + right: 50%; + bottom: clamp(18px, 4vw, 44px); + z-index: 2; + display: grid; + grid-template-columns: 54px minmax(190px, 340px) 54px; + align-items: center; + overflow: hidden; + border: 1px solid rgba(248, 250, 252, 0.18); + border-radius: 999px; + background: rgba(3, 7, 18, 0.72); + box-shadow: 0 18px 52px rgba(0, 0, 0, 0.32); + transform: translateX(50%); + backdrop-filter: blur(18px); +} + +.gallery-bottom-bar button { + display: grid; + place-items: center; + width: 54px; + height: 54px; + border: 0; + background: transparent; + color: rgba(248, 250, 252, 0.82); + cursor: pointer; + transition: + background 160ms ease, + color 160ms ease; +} + +.gallery-bottom-bar button:hover, +.gallery-bottom-bar button:focus-visible { + background: rgba(248, 250, 252, 0.1); + color: #f8fafc; + outline: none; +} + +.gallery-model-info { + display: grid; + place-items: center; + min-height: 54px; + padding: 0 20px; + border-right: 1px solid rgba(248, 250, 252, 0.14); + border-left: 1px solid rgba(248, 250, 252, 0.14); + text-align: center; +} + +.gallery-model-info span { + max-width: 100%; + overflow: hidden; + color: #f8fafc; + font-size: 15px; + font-weight: 700; + letter-spacing: 0.03em; + text-overflow: ellipsis; + text-transform: uppercase; + white-space: nowrap; +} + +.gallery-model-info small { + margin-top: 2px; + color: rgba(203, 213, 225, 0.62); font-family: Inter, "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 1.5; + font-size: 11px; + font-weight: 600; } -@media (max-width: 900px) { - .gallery-page { - grid-template-columns: 1fr; - min-height: 100vh; - height: auto; - } - - .gallery-hero { - align-self: start; - } - - .gallery-viewer-panel { - min-height: 620px; - } +.gallery-texture-status { + position: absolute; + left: clamp(18px, 3vw, 38px); + bottom: clamp(22px, 4vw, 50px); + z-index: 2; + display: inline-flex; + align-items: center; + gap: 8px; + max-width: min(320px, calc(100vw - 36px)); + padding: 10px 13px; + border: 1px solid rgba(248, 250, 252, 0.14); + border-radius: 999px; + background: rgba(3, 7, 18, 0.58); + color: rgba(226, 232, 240, 0.86); + font-family: Inter, "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 12px; + font-weight: 700; + backdrop-filter: blur(16px); } -@media (max-width: 560px) { - .gallery-viewer-header { - flex-direction: column; +.gallery-texture-status--ok { + color: #bbf7d0; +} + +.gallery-texture-status--warning { + color: #fde68a; +} + +.gallery-texture-status--loading { + color: rgba(226, 232, 240, 0.72); +} + +@media (max-width: 720px) { + .gallery-title { + right: 50%; + transform: translateX(50%); } - .gallery-controls { - width: 100%; + .gallery-bottom-bar { + grid-template-columns: 48px minmax(150px, 1fr) 48px; + width: calc(100vw - 36px); } - .gallery-controls button { - flex: 1; + .gallery-bottom-bar button, + .gallery-model-info { + min-height: 50px; + } + + .gallery-bottom-bar button { + width: 48px; + height: 50px; + } + + .gallery-texture-status { + right: 50%; + bottom: calc(clamp(18px, 4vw, 44px) + 66px); + left: auto; + transform: translateX(50%); } } diff --git a/src/pages/galerie/page.tsx b/src/pages/galerie/page.tsx deleted file mode 100644 index 997ef1a..0000000 --- a/src/pages/galerie/page.tsx +++ /dev/null @@ -1,203 +0,0 @@ -import { - Bounds, - Center, - OrbitControls, - useAnimations, - useGLTF, -} from "@react-three/drei"; -import { Canvas } from "@react-three/fiber"; -import { - Component, - Suspense, - useEffect, - useMemo, - useRef, - useState, - type ReactNode, -} from "react"; -import * as THREE from "three"; -import { SkyModel } from "@/components/three/world/SkyModel"; -import { - GAME_SCENE_FALLBACK_SKY_MODEL_PATH, - GAME_SCENE_FALLBACK_SKY_MODEL_SCALE, - GAME_SCENE_SKY_MODEL_PATH, - GAME_SCENE_SKY_MODEL_SCALE, -} from "@/data/world/environmentConfig"; -import { galleryModels, type GalleryModel } from "@/data/galleryModels"; - -interface GalleryModelProps { - model: GalleryModel; -} - -interface GalleryViewerErrorBoundaryProps { - children: ReactNode; - resetKey: string; -} - -interface GalleryViewerErrorBoundaryState { - hasError: boolean; -} - -class GalleryViewerErrorBoundary extends Component< - GalleryViewerErrorBoundaryProps, - GalleryViewerErrorBoundaryState -> { - constructor(props: GalleryViewerErrorBoundaryProps) { - super(props); - this.state = { hasError: false }; - } - - static getDerivedStateFromError(): GalleryViewerErrorBoundaryState { - return { hasError: true }; - } - - componentDidUpdate(previousProps: GalleryViewerErrorBoundaryProps): void { - if (previousProps.resetKey !== this.props.resetKey && this.state.hasError) { - this.setState({ hasError: false }); - } - } - - render(): ReactNode { - if (this.state.hasError) { - return ( -
- Ce modèle ne peut pas être affiché pour le moment. -
- ); - } - - return this.props.children; - } -} - -function GalleryModelPreview({ model }: GalleryModelProps): React.JSX.Element { - const groupRef = useRef(null); - const { animations, scene } = useGLTF(model.path); - const modelScene = useMemo(() => scene.clone(true), [scene]); - const { actions } = useAnimations(animations, groupRef); - - useEffect(() => { - const animationActions = Object.values(actions).filter( - (action): action is THREE.AnimationAction => Boolean(action), - ); - - for (const action of animationActions) { - action.reset().play(); - } - - return () => { - for (const action of animationActions) { - action.stop(); - } - }; - }, [actions]); - - return ( - - - - ); -} - -function GalleryScene({ model }: GalleryModelProps): React.JSX.Element { - return ( - <> - - - - -
- -
-
- - - ); -} - -export function GalleryPage(): React.JSX.Element { - const [activeModelIndex, setActiveModelIndex] = useState(0); - const activeModel = galleryModels[activeModelIndex] ?? galleryModels[0]!; - const modelCount = galleryModels.length; - - const goToPreviousModel = (): void => { - setActiveModelIndex((currentIndex) => - currentIndex === 0 ? modelCount - 1 : currentIndex - 1, - ); - }; - - const goToNextModel = (): void => { - setActiveModelIndex((currentIndex) => - currentIndex === modelCount - 1 ? 0 : currentIndex + 1, - ); - }; - - return ( -
-
-

Galerie des modèles

-

Merci aux designers de La Fabrik

-

- Une vitrine simple pour parcourir les modèles 3D du projet dans leur - propre canvas, avec la même skybox que l'expérience principale. -

-
- -
-
-
-

- {activeModelIndex + 1} / {modelCount} -

-

{activeModel.name}

- {activeModel.path} -
-
- - -
-
- -
- - - - - - - -
- -

- Utilise les flèches pour changer de modèle. Tu peux tourner autour du - modèle avec la souris ou le doigt. -

-
-
- ); -} diff --git a/src/pages/gallery/page.tsx b/src/pages/gallery/page.tsx new file mode 100644 index 0000000..3614351 --- /dev/null +++ b/src/pages/gallery/page.tsx @@ -0,0 +1,312 @@ +import { + Bounds, + Center, + OrbitControls, + useAnimations, + useGLTF, +} from "@react-three/drei"; +import { Canvas } from "@react-three/fiber"; +import { + Component, + Suspense, + useEffect, + useMemo, + useRef, + useState, + type ReactNode, +} from "react"; +import { + ArrowLeft, + ArrowRight, + CheckCircle2, + TriangleAlert, +} from "lucide-react"; +import * as THREE from "three"; +import { SkyModel } from "@/components/three/world/SkyModel"; +import { + GAME_SCENE_FALLBACK_SKY_MODEL_PATH, + GAME_SCENE_FALLBACK_SKY_MODEL_SCALE, + GAME_SCENE_SKY_MODEL_PATH, + GAME_SCENE_SKY_MODEL_SCALE, +} from "@/data/world/environmentConfig"; +import { galleryModels, type GalleryModel } from "@/data/galleryModels"; + +interface GalleryModelProps { + model: GalleryModel; +} + +interface GallerySceneProps extends GalleryModelProps { + onTextureDiagnosticReady: (diagnostic: TextureDiagnostic) => void; +} + +interface TextureDiagnostic { + modelId: string | null; + status: "loading" | "ok" | "warning"; + summary: string; +} + +interface GalleryViewerErrorBoundaryProps { + children: ReactNode; + resetKey: string; +} + +interface GalleryViewerErrorBoundaryState { + hasError: boolean; +} + +const TEXTURE_SLOTS = [ + "map", + "normalMap", + "roughnessMap", + "metalnessMap", + "aoMap", + "emissiveMap", + "alphaMap", +] as const; + +const LOADING_TEXTURE_DIAGNOSTIC: TextureDiagnostic = { + modelId: null, + status: "loading", + summary: "Analyse des textures...", +}; + +class GalleryViewerErrorBoundary extends Component< + GalleryViewerErrorBoundaryProps, + GalleryViewerErrorBoundaryState +> { + constructor(props: GalleryViewerErrorBoundaryProps) { + super(props); + this.state = { hasError: false }; + } + + static getDerivedStateFromError(): GalleryViewerErrorBoundaryState { + return { hasError: true }; + } + + componentDidUpdate(previousProps: GalleryViewerErrorBoundaryProps): void { + if (previousProps.resetKey !== this.props.resetKey && this.state.hasError) { + this.setState({ hasError: false }); + } + } + + render(): ReactNode { + if (this.state.hasError) { + return ( +
+ Ce modèle ne peut pas être affiché pour le moment. +
+ ); + } + + return this.props.children; + } +} + +function GalleryModelPreview({ + model, + onTextureDiagnosticReady, +}: GallerySceneProps): React.JSX.Element { + const groupRef = useRef(null); + const { animations, scene } = useGLTF(model.path); + const modelScene = useMemo(() => scene.clone(true), [scene]); + const { actions } = useAnimations(animations, groupRef); + + useEffect(() => { + onTextureDiagnosticReady(getTextureDiagnostic(model.id, modelScene)); + }, [model.id, modelScene, onTextureDiagnosticReady]); + + useEffect(() => { + const animationActions = Object.values(actions).filter( + (action): action is THREE.AnimationAction => Boolean(action), + ); + + for (const action of animationActions) { + action.reset().play(); + } + + return () => { + for (const action of animationActions) { + action.stop(); + } + }; + }, [actions]); + + return ( + + + + ); +} + +function GalleryScene({ + model, + onTextureDiagnosticReady, +}: GallerySceneProps): React.JSX.Element { + return ( + <> + + + + +
+ +
+
+ + + ); +} + +function TextureStatusBadge({ + diagnostic, +}: { + diagnostic: TextureDiagnostic; +}): React.JSX.Element { + const hasWarning = diagnostic.status === "warning"; + const Icon = hasWarning ? TriangleAlert : CheckCircle2; + + return ( +
+
+ ); +} + +function getTextureDiagnostic( + modelId: string, + modelScene: THREE.Object3D, +): TextureDiagnostic { + let textureCount = 0; + let missingTextureImageCount = 0; + + modelScene.traverse((object) => { + if (!(object instanceof THREE.Mesh)) return; + + const materials = Array.isArray(object.material) + ? object.material + : [object.material]; + + for (const material of materials) { + const materialRecord = material as unknown as Record; + + for (const textureSlot of TEXTURE_SLOTS) { + const texture = materialRecord[textureSlot]; + if (!(texture instanceof THREE.Texture)) continue; + + textureCount += 1; + + if (!texture.image) { + missingTextureImageCount += 1; + } + } + } + }); + + if (missingTextureImageCount > 0) { + return { + modelId, + status: "warning", + summary: `${missingTextureImageCount} texture(s) à vérifier`, + }; + } + + if (textureCount === 0) { + return { + modelId, + status: "warning", + summary: "Aucune texture détectée", + }; + } + + return { + modelId, + status: "ok", + summary: `${textureCount} texture(s) OK`, + }; +} + +export function GalleryPage(): React.JSX.Element { + const [activeModelIndex, setActiveModelIndex] = useState(0); + const [textureDiagnostic, setTextureDiagnostic] = useState( + LOADING_TEXTURE_DIAGNOSTIC, + ); + const activeModel = galleryModels[activeModelIndex] ?? galleryModels[0]!; + const modelCount = galleryModels.length; + const activeTextureDiagnostic = + textureDiagnostic.modelId === activeModel.id + ? textureDiagnostic + : LOADING_TEXTURE_DIAGNOSTIC; + + const goToPreviousModel = (): void => { + setActiveModelIndex((currentIndex) => + currentIndex === 0 ? modelCount - 1 : currentIndex - 1, + ); + }; + + const goToNextModel = (): void => { + setActiveModelIndex((currentIndex) => + currentIndex === modelCount - 1 ? 0 : currentIndex + 1, + ); + }; + + return ( +
+

GALERIE

+ +
+ + + + + + + +
+ + + + +
+ ); +} diff --git a/src/router.tsx b/src/router.tsx index d1a009c..5a06cbf 100644 --- a/src/router.tsx +++ b/src/router.tsx @@ -6,7 +6,7 @@ import { } from "@tanstack/react-router"; import { HomePage } from "@/pages/page"; import { EditorPage } from "@/pages/editor/page"; -import { GalleryPage } from "@/pages/galerie/page"; +import { GalleryPage } from "@/pages/gallery/page"; import { DocsAnimationRoute, DocsAudioRoute, @@ -47,7 +47,7 @@ const editorRoute = createRoute({ const galleryRoute = createRoute({ getParentRoute: () => rootRoute, - path: "/galerie", + path: "/gallery", component: GalleryPage, }); From 6a412c7b00ea1bb2106b711aeb93f21fd7de711c Mon Sep 17 00:00:00 2001 From: Tom Boullay Date: Mon, 25 May 2026 17:31:27 +0200 Subject: [PATCH 04/10] fix: stabilize gallery skybox rendering --- src/components/three/world/SkyModel.tsx | 23 ++++++++++++++++++++++- src/pages/gallery/page.tsx | 3 ++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/components/three/world/SkyModel.tsx b/src/components/three/world/SkyModel.tsx index a3e89cd..70fea1d 100644 --- a/src/components/three/world/SkyModel.tsx +++ b/src/components/three/world/SkyModel.tsx @@ -1,6 +1,6 @@ import { useFrame, useThree } from "@react-three/fiber"; import { useGLTF } from "@react-three/drei"; -import { Component, useMemo, useRef, type ReactNode } from "react"; +import { Component, useEffect, useMemo, useRef, type ReactNode } from "react"; import * as THREE from "three"; import { useLoggedGLTF } from "@/hooks/three/useLoggedGLTF"; @@ -80,6 +80,12 @@ function SkyModelContent({ }); const model = useMemo(() => createSkyModel(scene), [scene]); + useEffect(() => { + return () => { + disposeSkyModelMaterials(model); + }; + }, [model]); + useFrame(() => { groupRef.current?.position.copy(camera.position); }); @@ -122,5 +128,20 @@ function createSkyMaterial(material: T): T { return skyMaterial as T; } +function disposeSkyModelMaterials(model: THREE.Object3D): void { + model.traverse((object) => { + if (!(object instanceof THREE.Mesh)) return; + + if (Array.isArray(object.material)) { + for (const material of object.material) { + material.dispose(); + } + return; + } + + object.material.dispose(); + }); +} + useGLTF.preload("/models/skybox/skybox.gltf"); useGLTF.preload(LEGACY_SKY_MODEL_PATH); diff --git a/src/pages/gallery/page.tsx b/src/pages/gallery/page.tsx index 3614351..b3ea455 100644 --- a/src/pages/gallery/page.tsx +++ b/src/pages/gallery/page.tsx @@ -165,6 +165,8 @@ function GalleryScene({ enableDamping autoRotate autoRotateSpeed={0.5} + minPolarAngle={Math.PI * 0.18} + maxPolarAngle={Math.PI * 0.48} /> ); @@ -274,7 +276,6 @@ export function GalleryPage(): React.JSX.Element { From d7351e5f37de31544237f3237c5f179bc058f541 Mon Sep 17 00:00:00 2001 From: Tom Boullay Date: Mon, 25 May 2026 17:53:46 +0200 Subject: [PATCH 05/10] fix: render gallery skybox unlit double-sided --- docs/user/gallery.md | 4 +- src/components/three/world/SkyModel.tsx | 67 +++++++++++++++++++++---- src/pages/gallery/page.tsx | 8 +-- 3 files changed, 64 insertions(+), 15 deletions(-) diff --git a/docs/user/gallery.md b/docs/user/gallery.md index 1d94b5f..d14e59d 100644 --- a/docs/user/gallery.md +++ b/docs/user/gallery.md @@ -4,7 +4,7 @@ La galerie est disponible sur `/gallery`. Elle permet de parcourir les modèles ## Objectif -Cette page sert à remercier et valoriser le travail des designers du projet La Fabrik. Chaque modèle est affiché dans un canvas dédié, avec la même skybox que l'expérience principale pour garder une ambiance visuelle cohérente. +Cette page sert à remercier et valoriser le travail des designers du projet La Fabrik. Chaque modèle est affiché dans un canvas dédié, avec la même skybox et le même lighting que l'expérience principale. ## Utilisation @@ -19,7 +19,7 @@ Cette page sert à remercier et valoriser le travail des designers du projet La - Le viewer utilise `@react-three/fiber` et `@react-three/drei`. - `OrbitControls` permet de manipuler la caméra autour du modèle. - `Bounds` et `Center` recadrent automatiquement le modèle actif. -- `SkyModel` réutilise la skybox du jeu. +- `SkyModel` réutilise la skybox du jeu, avec un matériau non éclairé uniquement dans la galerie pour éviter que certaines faces deviennent noires avec une caméra orbitale libre. - Les animations GLTF présentes dans un modèle sont lancées automatiquement. - Un diagnostic simple inspecte les matériaux chargés pour signaler les textures absentes ou non exploitables. diff --git a/src/components/three/world/SkyModel.tsx b/src/components/three/world/SkyModel.tsx index 70fea1d..b976a1e 100644 --- a/src/components/three/world/SkyModel.tsx +++ b/src/components/three/world/SkyModel.tsx @@ -8,12 +8,16 @@ interface SkyModelProps { modelPath: string; fallbackModelPath?: string | undefined; fallbackScale?: number | undefined; + materialSide?: THREE.Side | undefined; scale?: number | undefined; + unlit?: boolean | undefined; } interface SkyModelContentProps { + materialSide: THREE.Side; modelPath: string; scale: number; + unlit: boolean; } interface SkyModelErrorBoundaryProps { @@ -54,23 +58,37 @@ class SkyModelErrorBoundary extends Component< export function SkyModel({ fallbackModelPath, fallbackScale = SKY_MODEL_SCALE, + materialSide = THREE.BackSide, modelPath, scale = SKY_MODEL_SCALE, + unlit = false, }: SkyModelProps): React.JSX.Element { const fallback = fallbackModelPath ? ( - + ) : null; return ( - + ); } function SkyModelContent({ + materialSide, modelPath, scale, + unlit, }: SkyModelContentProps): React.JSX.Element { const camera = useThree((state) => state.camera); const groupRef = useRef(null); @@ -78,7 +96,10 @@ function SkyModelContent({ scope: "SkyModel", scale, }); - const model = useMemo(() => createSkyModel(scene), [scene]); + const model = useMemo( + () => createSkyModel(scene, materialSide, unlit), + [materialSide, scene, unlit], + ); useEffect(() => { return () => { @@ -102,7 +123,11 @@ function SkyModelContent({ ); } -function createSkyModel(scene: THREE.Object3D): THREE.Object3D { +function createSkyModel( + scene: THREE.Object3D, + materialSide: THREE.Side, + unlit: boolean, +): THREE.Object3D { const model = scene.clone(true); model.traverse((object) => { @@ -112,20 +137,42 @@ function createSkyModel(scene: THREE.Object3D): THREE.Object3D { if (!(object instanceof THREE.Mesh)) return; object.material = Array.isArray(object.material) - ? object.material.map(createSkyMaterial) - : createSkyMaterial(object.material); + ? object.material.map((material) => + createSkyMaterial(material, materialSide, unlit), + ) + : createSkyMaterial(object.material, materialSide, unlit); }); return model; } -function createSkyMaterial(material: T): T { - const skyMaterial = material.clone(); - skyMaterial.side = THREE.BackSide; +function createSkyMaterial( + material: T, + materialSide: THREE.Side, + unlit: boolean, +): THREE.Material { + const skyMaterial = unlit + ? createUnlitSkyMaterial(material) + : material.clone(); + skyMaterial.side = materialSide; skyMaterial.depthTest = false; skyMaterial.depthWrite = false; - return skyMaterial as T; + return skyMaterial; +} + +function createUnlitSkyMaterial( + material: THREE.Material, +): THREE.MeshBasicMaterial { + const sourceMaterial = material as THREE.MeshStandardMaterial; + + return new THREE.MeshBasicMaterial({ + color: sourceMaterial.color?.clone() ?? new THREE.Color("#ffffff"), + map: sourceMaterial.map ?? null, + opacity: sourceMaterial.opacity, + toneMapped: false, + transparent: sourceMaterial.transparent, + }); } function disposeSkyModelMaterials(model: THREE.Object3D): void { diff --git a/src/pages/gallery/page.tsx b/src/pages/gallery/page.tsx index b3ea455..b32c670 100644 --- a/src/pages/gallery/page.tsx +++ b/src/pages/gallery/page.tsx @@ -23,13 +23,14 @@ import { } from "lucide-react"; import * as THREE from "three"; import { SkyModel } from "@/components/three/world/SkyModel"; +import { galleryModels, type GalleryModel } from "@/data/galleryModels"; import { GAME_SCENE_FALLBACK_SKY_MODEL_PATH, GAME_SCENE_FALLBACK_SKY_MODEL_SCALE, GAME_SCENE_SKY_MODEL_PATH, GAME_SCENE_SKY_MODEL_SCALE, } from "@/data/world/environmentConfig"; -import { galleryModels, type GalleryModel } from "@/data/galleryModels"; +import { Lighting } from "@/world/Lighting"; interface GalleryModelProps { model: GalleryModel; @@ -147,11 +148,12 @@ function GalleryScene({ - - +
Date: Mon, 25 May 2026 17:57:51 +0200 Subject: [PATCH 06/10] feat: add gallery lighting controls --- docs/user/gallery.md | 5 +- src/index.css | 105 ++++++++++++++++++++++++++ src/pages/gallery/page.tsx | 147 +++++++++++++++++++++++++++++++++++-- 3 files changed, 251 insertions(+), 6 deletions(-) diff --git a/docs/user/gallery.md b/docs/user/gallery.md index d14e59d..d3e958a 100644 --- a/docs/user/gallery.md +++ b/docs/user/gallery.md @@ -11,7 +11,8 @@ Cette page sert à remercier et valoriser le travail des designers du projet La 1. Ouvrir `/gallery`. 2. Utiliser les flèches en bas de l'écran pour passer au modèle précédent ou suivant. 3. Tourner autour du modèle avec la souris ou le doigt. -4. Lire le diagnostic texture discret pour savoir si le modèle chargé semble correct côté textures. +4. Utiliser le bouton de réglages à droite pour ouvrir ou fermer le panneau lumière. +5. Lire le diagnostic texture discret pour savoir si le modèle chargé semble correct côté textures. ## Fonctionnement @@ -20,6 +21,8 @@ Cette page sert à remercier et valoriser le travail des designers du projet La - `OrbitControls` permet de manipuler la caméra autour du modèle. - `Bounds` et `Center` recadrent automatiquement le modèle actif. - `SkyModel` réutilise la skybox du jeu, avec un matériau non éclairé uniquement dans la galerie pour éviter que certaines faces deviennent noires avec une caméra orbitale libre. +- Les lumières reprennent les valeurs par défaut du jeu, puis peuvent être ajustées dans le panneau latéral. +- `OrbitControls` autorise une orbite verticale complète pour inspecter le dessous des modèles. - Les animations GLTF présentes dans un modèle sont lancées automatiquement. - Un diagnostic simple inspecte les matériaux chargés pour signaler les textures absentes ou non exploitables. diff --git a/src/index.css b/src/index.css index cc7bc18..475103a 100644 --- a/src/index.css +++ b/src/index.css @@ -169,6 +169,107 @@ canvas { color: rgba(226, 232, 240, 0.72); } +.gallery-light-panel { + position: absolute; + top: 108px; + right: 0; + z-index: 3; + display: flex; + align-items: flex-start; + transform: translateX(260px); + transition: transform 180ms ease; +} + +.gallery-light-panel.is-open { + transform: translateX(0); +} + +.gallery-light-panel-toggle { + display: grid; + place-items: center; + width: 42px; + height: 42px; + border: 1px solid rgba(248, 250, 252, 0.14); + border-right: 0; + border-radius: 999px 0 0 999px; + background: rgba(3, 7, 18, 0.68); + color: rgba(248, 250, 252, 0.84); + cursor: pointer; + backdrop-filter: blur(14px); +} + +.gallery-light-panel-toggle:hover, +.gallery-light-panel-toggle:focus-visible { + color: #f8fafc; + outline: none; +} + +.gallery-light-panel-content { + width: 236px; + padding: 16px; + border: 1px solid rgba(248, 250, 252, 0.14); + border-right: 0; + border-radius: 18px 0 0 18px; + background: rgba(3, 7, 18, 0.72); + box-shadow: 0 18px 52px rgba(0, 0, 0, 0.28); + backdrop-filter: blur(18px); +} + +.gallery-light-panel-content header { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 16px; +} + +.gallery-light-panel-content header span { + color: rgba(248, 250, 252, 0.86); + font-size: 12px; + font-weight: 800; + letter-spacing: 0.18em; +} + +.gallery-light-panel-content header button { + border: 0; + background: transparent; + color: rgba(203, 213, 225, 0.72); + cursor: pointer; + font-size: 12px; + font-weight: 700; +} + +.gallery-light-panel-content header button:hover, +.gallery-light-panel-content header button:focus-visible { + color: #f8fafc; + outline: none; +} + +.gallery-light-control { + display: grid; + gap: 8px; + margin-top: 12px; +} + +.gallery-light-control span { + display: flex; + align-items: center; + justify-content: space-between; + color: rgba(226, 232, 240, 0.78); + font-family: Inter, "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 12px; + font-weight: 700; +} + +.gallery-light-control strong { + color: rgba(248, 250, 252, 0.88); + font-variant-numeric: tabular-nums; +} + +.gallery-light-control input { + width: 100%; + accent-color: #dbeafe; +} + @media (max-width: 720px) { .gallery-title { right: 50%; @@ -196,6 +297,10 @@ canvas { left: auto; transform: translateX(50%); } + + .gallery-light-panel { + top: 78px; + } } /* Docs layout */ diff --git a/src/pages/gallery/page.tsx b/src/pages/gallery/page.tsx index b32c670..92f0378 100644 --- a/src/pages/gallery/page.tsx +++ b/src/pages/gallery/page.tsx @@ -19,27 +19,53 @@ import { ArrowLeft, ArrowRight, CheckCircle2, + SlidersHorizontal, TriangleAlert, } from "lucide-react"; import * as THREE from "three"; import { SkyModel } from "@/components/three/world/SkyModel"; import { galleryModels, type GalleryModel } from "@/data/galleryModels"; +import { + AMBIENT_LIGHT_COLOR, + LIGHTING_DEFAULTS, + SUN_LIGHT_COLOR, +} from "@/data/world/lightingConfig"; import { GAME_SCENE_FALLBACK_SKY_MODEL_PATH, GAME_SCENE_FALLBACK_SKY_MODEL_SCALE, GAME_SCENE_SKY_MODEL_PATH, GAME_SCENE_SKY_MODEL_SCALE, } from "@/data/world/environmentConfig"; -import { Lighting } from "@/world/Lighting"; interface GalleryModelProps { model: GalleryModel; } interface GallerySceneProps extends GalleryModelProps { + lighting: GalleryLightingConfig; onTextureDiagnosticReady: (diagnostic: TextureDiagnostic) => void; } +interface GalleryModelPreviewProps extends GalleryModelProps { + onTextureDiagnosticReady: (diagnostic: TextureDiagnostic) => void; +} + +interface GalleryLightingConfig { + ambientIntensity: number; + sunIntensity: number; + sunX: number; + sunY: number; + sunZ: number; +} + +interface GalleryLightControl { + key: keyof GalleryLightingConfig; + label: string; + min: number; + max: number; + step: number; +} + interface TextureDiagnostic { modelId: string | null; status: "loading" | "ok" | "warning"; @@ -71,6 +97,14 @@ const LOADING_TEXTURE_DIAGNOSTIC: TextureDiagnostic = { summary: "Analyse des textures...", }; +const GALLERY_LIGHT_CONTROLS: GalleryLightControl[] = [ + { key: "ambientIntensity", label: "Ambiance", min: 0, max: 5, step: 0.1 }, + { key: "sunIntensity", label: "Soleil", min: 0, max: 8, step: 0.1 }, + { key: "sunX", label: "Soleil X", min: -100, max: 100, step: 1 }, + { key: "sunY", label: "Soleil Y", min: -100, max: 150, step: 1 }, + { key: "sunZ", label: "Soleil Z", min: -100, max: 100, step: 1 }, +]; + class GalleryViewerErrorBoundary extends Component< GalleryViewerErrorBoundaryProps, GalleryViewerErrorBoundaryState @@ -106,7 +140,7 @@ class GalleryViewerErrorBoundary extends Component< function GalleryModelPreview({ model, onTextureDiagnosticReady, -}: GallerySceneProps): React.JSX.Element { +}: GalleryModelPreviewProps): React.JSX.Element { const groupRef = useRef(null); const { animations, scene } = useGLTF(model.path); const modelScene = useMemo(() => scene.clone(true), [scene]); @@ -140,6 +174,7 @@ function GalleryModelPreview({ } function GalleryScene({ + lighting, model, onTextureDiagnosticReady, }: GallerySceneProps): React.JSX.Element { @@ -153,7 +188,7 @@ function GalleryScene({ scale={GAME_SCENE_SKY_MODEL_SCALE} unlit /> - +
+ + ); +} + +function GalleryLighting({ + lighting, +}: { + lighting: GalleryLightingConfig; +}): React.JSX.Element { + return ( + <> + + ); @@ -192,6 +247,62 @@ function TextureStatusBadge({ ); } +function GalleryLightingPanel({ + lighting, + onChange, + onReset, + onToggle, + open, +}: { + lighting: GalleryLightingConfig; + onChange: (key: keyof GalleryLightingConfig, value: number) => void; + onReset: () => void; + onToggle: () => void; + open: boolean; +}): React.JSX.Element { + return ( + + ); +} + function getTextureDiagnostic( modelId: string, modelScene: THREE.Object3D, @@ -247,6 +358,10 @@ function getTextureDiagnostic( export function GalleryPage(): React.JSX.Element { const [activeModelIndex, setActiveModelIndex] = useState(0); + const [lightPanelOpen, setLightPanelOpen] = useState(false); + const [lighting, setLighting] = useState({ + ...LIGHTING_DEFAULTS, + }); const [textureDiagnostic, setTextureDiagnostic] = useState( LOADING_TEXTURE_DIAGNOSTIC, ); @@ -269,6 +384,20 @@ export function GalleryPage(): React.JSX.Element { ); }; + const handleLightChange = ( + key: keyof GalleryLightingConfig, + value: number, + ): void => { + setLighting((currentLighting) => ({ + ...currentLighting, + [key]: value, + })); + }; + + const resetLighting = (): void => { + setLighting({ ...LIGHTING_DEFAULTS }); + }; + return (

GALERIE

@@ -278,6 +407,7 @@ export function GalleryPage(): React.JSX.Element { @@ -310,6 +440,13 @@ export function GalleryPage(): React.JSX.Element { + setLightPanelOpen((open) => !open)} + open={lightPanelOpen} + />
); } From cf711489351410439ba78bdc38d92dc6748e6d79 Mon Sep 17 00:00:00 2001 From: Tom Boullay Date: Mon, 25 May 2026 18:02:36 +0200 Subject: [PATCH 07/10] fix: smooth gallery preview seams --- docs/user/gallery.md | 1 + src/index.css | 78 +++++++++++++++++++------------------- src/pages/gallery/page.tsx | 53 +++++++++++++++++++++++++- 3 files changed, 91 insertions(+), 41 deletions(-) diff --git a/docs/user/gallery.md b/docs/user/gallery.md index d3e958a..294972e 100644 --- a/docs/user/gallery.md +++ b/docs/user/gallery.md @@ -23,6 +23,7 @@ Cette page sert à remercier et valoriser le travail des designers du projet La - `SkyModel` réutilise la skybox du jeu, avec un matériau non éclairé uniquement dans la galerie pour éviter que certaines faces deviennent noires avec une caméra orbitale libre. - Les lumières reprennent les valeurs par défaut du jeu, puis peuvent être ajustées dans le panneau latéral. - `OrbitControls` autorise une orbite verticale complète pour inspecter le dessous des modèles. +- Le viewer désactive les normal maps dans la preview pour limiter les coutures visibles sur certains exports découpés en plusieurs meshes. - Les animations GLTF présentes dans un modèle sont lancées automatiquement. - Un diagnostic simple inspecte les matériaux chargés pour signaler les textures absentes ou non exploitables. diff --git a/src/index.css b/src/index.css index 475103a..1cfdbaf 100644 --- a/src/index.css +++ b/src/index.css @@ -36,8 +36,9 @@ canvas { width: 100vw; height: 100vh; overflow: hidden; - background: #05070c; - color: #f8fafc; + background: #050505; + color: #f4efe7; + font-family: "Helvetica Neue", Helvetica, Inter, Arial, sans-serif; } .gallery-title { @@ -46,7 +47,7 @@ canvas { right: clamp(18px, 3vw, 38px); z-index: 2; margin: 0; - color: rgba(248, 250, 252, 0.92); + color: #f4efe7; font-size: clamp(18px, 2vw, 26px); font-weight: 700; letter-spacing: 0.32em; @@ -78,12 +79,11 @@ canvas { grid-template-columns: 54px minmax(190px, 340px) 54px; align-items: center; overflow: hidden; - border: 1px solid rgba(248, 250, 252, 0.18); - border-radius: 999px; - background: rgba(3, 7, 18, 0.72); - box-shadow: 0 18px 52px rgba(0, 0, 0, 0.32); + border: 2px solid #d8d0c4; + border-radius: 0; + background: #050505; + box-shadow: none; transform: translateX(50%); - backdrop-filter: blur(18px); } .gallery-bottom-bar button { @@ -93,7 +93,7 @@ canvas { height: 54px; border: 0; background: transparent; - color: rgba(248, 250, 252, 0.82); + color: #f4efe7; cursor: pointer; transition: background 160ms ease, @@ -102,8 +102,8 @@ canvas { .gallery-bottom-bar button:hover, .gallery-bottom-bar button:focus-visible { - background: rgba(248, 250, 252, 0.1); - color: #f8fafc; + background: #f4efe7; + color: #050505; outline: none; } @@ -112,15 +112,15 @@ canvas { place-items: center; min-height: 54px; padding: 0 20px; - border-right: 1px solid rgba(248, 250, 252, 0.14); - border-left: 1px solid rgba(248, 250, 252, 0.14); + border-right: 2px solid #d8d0c4; + border-left: 2px solid #d8d0c4; text-align: center; } .gallery-model-info span { max-width: 100%; overflow: hidden; - color: #f8fafc; + color: #f4efe7; font-size: 15px; font-weight: 700; letter-spacing: 0.03em; @@ -131,7 +131,7 @@ canvas { .gallery-model-info small { margin-top: 2px; - color: rgba(203, 213, 225, 0.62); + color: #a9a196; font-family: Inter, "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 11px; font-weight: 600; @@ -147,26 +147,25 @@ canvas { gap: 8px; max-width: min(320px, calc(100vw - 36px)); padding: 10px 13px; - border: 1px solid rgba(248, 250, 252, 0.14); - border-radius: 999px; - background: rgba(3, 7, 18, 0.58); - color: rgba(226, 232, 240, 0.86); + border: 2px solid #d8d0c4; + border-radius: 0; + background: #050505; + color: #d8d0c4; font-family: Inter, "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 12px; font-weight: 700; - backdrop-filter: blur(16px); } .gallery-texture-status--ok { - color: #bbf7d0; + color: #d8d0c4; } .gallery-texture-status--warning { - color: #fde68a; + color: #f4efe7; } .gallery-texture-status--loading { - color: rgba(226, 232, 240, 0.72); + color: #a9a196; } .gallery-light-panel { @@ -189,30 +188,29 @@ canvas { place-items: center; width: 42px; height: 42px; - border: 1px solid rgba(248, 250, 252, 0.14); + border: 2px solid #d8d0c4; border-right: 0; - border-radius: 999px 0 0 999px; - background: rgba(3, 7, 18, 0.68); - color: rgba(248, 250, 252, 0.84); + border-radius: 0; + background: #050505; + color: #f4efe7; cursor: pointer; - backdrop-filter: blur(14px); } .gallery-light-panel-toggle:hover, .gallery-light-panel-toggle:focus-visible { - color: #f8fafc; + background: #f4efe7; + color: #050505; outline: none; } .gallery-light-panel-content { width: 236px; padding: 16px; - border: 1px solid rgba(248, 250, 252, 0.14); + border: 2px solid #d8d0c4; border-right: 0; - border-radius: 18px 0 0 18px; - background: rgba(3, 7, 18, 0.72); - box-shadow: 0 18px 52px rgba(0, 0, 0, 0.28); - backdrop-filter: blur(18px); + border-radius: 0; + background: #050505; + box-shadow: none; } .gallery-light-panel-content header { @@ -223,7 +221,7 @@ canvas { } .gallery-light-panel-content header span { - color: rgba(248, 250, 252, 0.86); + color: #f4efe7; font-size: 12px; font-weight: 800; letter-spacing: 0.18em; @@ -232,7 +230,7 @@ canvas { .gallery-light-panel-content header button { border: 0; background: transparent; - color: rgba(203, 213, 225, 0.72); + color: #a9a196; cursor: pointer; font-size: 12px; font-weight: 700; @@ -240,7 +238,7 @@ canvas { .gallery-light-panel-content header button:hover, .gallery-light-panel-content header button:focus-visible { - color: #f8fafc; + color: #f4efe7; outline: none; } @@ -254,20 +252,20 @@ canvas { display: flex; align-items: center; justify-content: space-between; - color: rgba(226, 232, 240, 0.78); + color: #d8d0c4; font-family: Inter, "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 12px; font-weight: 700; } .gallery-light-control strong { - color: rgba(248, 250, 252, 0.88); + color: #f4efe7; font-variant-numeric: tabular-nums; } .gallery-light-control input { width: 100%; - accent-color: #dbeafe; + accent-color: #f4efe7; } @media (max-width: 720px) { diff --git a/src/pages/gallery/page.tsx b/src/pages/gallery/page.tsx index 92f0378..a925d2d 100644 --- a/src/pages/gallery/page.tsx +++ b/src/pages/gallery/page.tsx @@ -143,9 +143,15 @@ function GalleryModelPreview({ }: GalleryModelPreviewProps): React.JSX.Element { const groupRef = useRef(null); const { animations, scene } = useGLTF(model.path); - const modelScene = useMemo(() => scene.clone(true), [scene]); + const modelScene = useMemo(() => createGalleryModelScene(scene), [scene]); const { actions } = useAnimations(animations, groupRef); + useEffect(() => { + return () => { + disposeGalleryModelMaterials(modelScene); + }; + }, [modelScene]); + useEffect(() => { onTextureDiagnosticReady(getTextureDiagnostic(model.id, modelScene)); }, [model.id, modelScene, onTextureDiagnosticReady]); @@ -173,6 +179,51 @@ function GalleryModelPreview({ ); } +function createGalleryModelScene(scene: THREE.Object3D): THREE.Object3D { + const modelScene = scene.clone(true); + + modelScene.traverse((object) => { + if (!(object instanceof THREE.Mesh)) return; + + object.material = Array.isArray(object.material) + ? object.material.map(createGalleryMaterial) + : createGalleryMaterial(object.material); + }); + + return modelScene; +} + +function createGalleryMaterial(material: THREE.Material): THREE.Material { + const galleryMaterial = material.clone(); + const materialWithNormalMap = galleryMaterial as THREE.Material & { + normalMap?: THREE.Texture | null; + }; + + galleryMaterial.side = THREE.DoubleSide; + + if (materialWithNormalMap.normalMap) { + materialWithNormalMap.normalMap = null; + galleryMaterial.needsUpdate = true; + } + + return galleryMaterial; +} + +function disposeGalleryModelMaterials(modelScene: THREE.Object3D): void { + modelScene.traverse((object) => { + if (!(object instanceof THREE.Mesh)) return; + + if (Array.isArray(object.material)) { + for (const material of object.material) { + material.dispose(); + } + return; + } + + object.material.dispose(); + }); +} + function GalleryScene({ lighting, model, From 054cb975da44fe5b760f8b3a0ce9fbc63ac1e9e1 Mon Sep 17 00:00:00 2001 From: Tom Boullay Date: Mon, 25 May 2026 19:13:02 +0200 Subject: [PATCH 08/10] fix: hide gallery export planes --- src/pages/gallery/page.tsx | 48 +++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/src/pages/gallery/page.tsx b/src/pages/gallery/page.tsx index a925d2d..dd17a57 100644 --- a/src/pages/gallery/page.tsx +++ b/src/pages/gallery/page.tsx @@ -72,6 +72,12 @@ interface TextureDiagnostic { summary: string; } +interface GalleryModelScene extends THREE.Object3D { + userData: THREE.Object3D["userData"] & { + hiddenExportPlaneCount?: number; + }; +} + interface GalleryViewerErrorBoundaryProps { children: ReactNode; resetKey: string; @@ -180,19 +186,49 @@ function GalleryModelPreview({ } function createGalleryModelScene(scene: THREE.Object3D): THREE.Object3D { - const modelScene = scene.clone(true); + const modelScene = scene.clone(true) as GalleryModelScene; + const exportPlaneMeshes: THREE.Mesh[] = []; modelScene.traverse((object) => { if (!(object instanceof THREE.Mesh)) return; + if (isExportPlaneMesh(object)) { + exportPlaneMeshes.push(object); + return; + } + object.material = Array.isArray(object.material) ? object.material.map(createGalleryMaterial) : createGalleryMaterial(object.material); }); + for (const mesh of exportPlaneMeshes) { + mesh.parent?.remove(mesh); + } + + modelScene.userData.hiddenExportPlaneCount = exportPlaneMeshes.length; + return modelScene; } +function isExportPlaneMesh(mesh: THREE.Mesh): boolean { + const name = mesh.name.toLowerCase(); + if (name !== "plan" && name !== "plane") return false; + + mesh.geometry.computeBoundingBox(); + const boundingBox = mesh.geometry.boundingBox; + if (!boundingBox) return false; + + const size = new THREE.Vector3(); + boundingBox.getSize(size); + + const dimensions = [size.x, size.y, size.z]; + const flatDimensions = dimensions.filter((dimension) => dimension <= 0.001); + const largestDimension = Math.max(...dimensions); + + return flatDimensions.length > 0 && largestDimension > 1; +} + function createGalleryMaterial(material: THREE.Material): THREE.Material { const galleryMaterial = material.clone(); const materialWithNormalMap = galleryMaterial as THREE.Material & { @@ -360,6 +396,8 @@ function getTextureDiagnostic( ): TextureDiagnostic { let textureCount = 0; let missingTextureImageCount = 0; + const hiddenExportPlaneCount = + (modelScene as GalleryModelScene).userData.hiddenExportPlaneCount ?? 0; modelScene.traverse((object) => { if (!(object instanceof THREE.Mesh)) return; @@ -392,6 +430,14 @@ function getTextureDiagnostic( }; } + if (hiddenExportPlaneCount > 0) { + return { + modelId, + status: "warning", + summary: `${hiddenExportPlaneCount} plan(s) d'export masqué(s)`, + }; + } + if (textureCount === 0) { return { modelId, From 47e50d931899bfa95ab89adea4f956d2a774d2ee Mon Sep 17 00:00:00 2001 From: Tom Boullay Date: Fri, 29 May 2026 02:18:17 +0200 Subject: [PATCH 09/10] fix: issue in galley mode --- public/{models => old-models}/arbre/arbre.bin | 0 public/{models => old-models}/arbre/arbre.glb | 0 public/{models => old-models}/arbre/arbre.spp | Bin .../arbre/feuilles_baseColor.png | 0 .../arbre/feuilles_normal.png | 0 .../feuilles_occlusionRoughnessMetallic.png | 0 .../{models => old-models}/arbre/model.gltf | 0 .../arbre/tronc_baseColor.png | 0 .../arbre/tronc_normal.png | 0 .../tronc_occlusionRoughnessMetallic.png | 0 .../blocking/DefaultMaterial_baseColor.png | 0 .../blocking/DefaultMaterial_normal.png | 0 ...ultMaterial_occlusionRoughnessMetallic.png | 0 .../blocking/blocking.bin | 0 .../blocking/model.gltf | 0 .../blocking/terrain.gltf | 0 .../blocking/terrain_baseColor.png | 0 .../blocking/terrain_normal.png | 0 .../terrain_occlusionRoughnessMetallic.png | 0 .../boiteimmeuble/boite_Base_color.png | 0 .../boiteimmeuble/boite_Height.png | 0 .../boiteimmeuble/boite_Metallic.png | 0 .../boiteimmeuble/boite_Mixed_AO.png | 0 .../boiteimmeuble/boite_Normal.png | 0 .../boiteimmeuble/boite_Normal_OpenGL.png | 0 .../boiteimmeuble/boite_Roughness.png | 0 .../boiteimmeuble/model.gltf | 0 .../boiteimmeuble/pied_Base_color.png | 0 .../boiteimmeuble/pied_Height.png | 0 .../boiteimmeuble/pied_Metallic.png | 0 .../boiteimmeuble/pied_Mixed_AO.png | 0 .../boiteimmeuble/pied_Normal.png | 0 .../boiteimmeuble/pied_Normal_OpenGL.png | 0 .../boiteimmeuble/pied_Roughness.png | 0 .../boitesimple/boite_Base_color.png | 0 .../boitesimple/boite_Height.png | 0 .../boitesimple/boite_Metallic.png | 0 .../boitesimple/boite_Mixed_AO.png | 0 .../boitesimple/boite_Normal.png | 0 .../boitesimple/boite_Normal_OpenGL.png | 0 .../boitesimple/boite_Roughness.png | 0 .../boitesimple/model.gltf | 0 .../boitesimple/notif_Base_color.png | 0 .../boitesimple/notif_Height.png | 0 .../boitesimple/notif_Metallic.png | 0 .../boitesimple/notif_Mixed_AO.png | 0 .../boitesimple/notif_Normal.png | 0 .../boitesimple/notif_Normal_OpenGL.png | 0 .../boitesimple/notif_Roughness.png | 0 .../boitesimple/pied_Base_color.png | 0 .../boitesimple/pied_Height.png | 0 .../boitesimple/pied_Metallic.png | 0 .../boitesimple/pied_Mixed_AO.png | 0 .../boitesimple/pied_Normal.png | 0 .../boitesimple/pied_Normal_OpenGL.png | 0 .../boitesimple/pied_Roughness.png | 0 .../buisson-animated/buisson.bin | 0 .../buisson-animated/buisson.glb | 0 .../buisson-animated/buisson.spp | Bin .../buisson-animated/feuilles_baseColor.png | 0 .../buisson-animated/feuilles_normal.png | 0 .../feuilles_occlusionRoughnessMetallic.png | 0 .../buisson-animated/model.gltf | 0 .../buisson/buisson.bin | 0 .../buisson/feuilles_baseColor.png | 0 .../buisson/feuilles_normal.png | 0 .../feuilles_occlusionRoughnessMetallic.png | 0 .../{models => old-models}/buisson/model.gltf | 0 .../cable1/cabledroit_Base_color.png | 0 .../cable1/cabledroit_Height.png | 0 .../cable1/cabledroit_Metallic.png | 0 .../cable1/cabledroit_Mixed_AO.png | 0 .../cable1/cabledroit_Normal.png | 0 .../cable1/cabledroit_Normal_OpenGL.png | 0 .../cable1/cabledroit_Roughness.png | 0 .../{models => old-models}/cable1/model.gltf | 0 .../cable2/cablegauche_Base_color.png | 0 .../cable2/cablegauche_Height.png | 0 .../cable2/cablegauche_Metallic.png | 0 .../cable2/cablegauche_Mixed_AO.png | 0 .../cable2/cablegauche_Normal.png | 0 .../cable2/cablegauche_Normal_OpenGL.png | 0 .../cable2/cablegauche_Roughness.png | 0 .../{models => old-models}/cable2/model.gltf | 0 .../chemins/chemin_baseColor.png | 0 .../chemins/chemin_normal.png | 0 .../chemin_occlusionRoughnessMetallic.png | 0 .../chemins/chemins.bin | 0 .../chemins/chemins.glb | 0 .../{models => old-models}/chemins/model.gltf | 0 .../createurdepluie/bac_eau_basecolor.png | 0 .../createurdepluie/bac_eau_normal.png | 0 .../bac_eau_occlusionroughnessmetallic.png | 0 .../createurdepluie/cable_1_basecolor.png | 0 .../createurdepluie/cable_1_normal.png | 0 .../cable_1_occlusionroughnessmetallic.png | 0 .../createurdepluie/cable_2_basecolor.png | 0 .../createurdepluie/cable_2_normal.png | 0 .../cable_2_occlusionroughnessmetallic.png | 0 .../createurdepluie/createurdepluie2.bin | 0 .../createurdepluie/model.gltf | 0 .../refroidisseur_basecolor.png | 0 .../createurdepluie/refroidisseur_normal.png | 0 ...froidisseur_occlusionroughnessmetallic.png | 0 .../createurdepluie/resistance_basecolor.png | 0 .../createurdepluie/resistance_normal.png | 0 .../resistance_occlusionroughnessmetallic.png | 0 .../createurdepluie/shell_basecolor.png | 0 .../createurdepluie/shell_normal.png | 0 .../shell_occlusionroughnessmetallic.png | 0 .../createurdepluie/tuyau_basecolor.png | 0 .../createurdepluie/tuyau_normal.png | 0 .../tuyau_occlusionroughnessmetallic.png | 0 .../ebike/Cable 1_baseColor.png | 0 .../ebike/Cable 1_normal.png | 0 .../Cable 1_occlusionRoughnessMetallic.png | 0 .../ebike/Cable2_baseColor.png | 0 .../ebike/Cable2_normal.png | 0 .../Cable2_occlusionRoughnessMetallic.png | 0 .../ebike/Carroserie_baseColor.png | 0 .../ebike/Carroserie_normal.png | 0 .../Carroserie_occlusionRoughnessMetallic.png | 0 .../ebike/Ferail_baseColor.png | 0 .../ebike/Ferail_normal.png | 0 .../Ferail_occlusionRoughnessMetallic.png | 0 .../ebike/Reservoir_baseColor.png | 0 .../ebike/Reservoir_normal.png | 0 .../Reservoir_occlusionRoughnessMetallic.png | 0 .../ebike/Sac_baseColor.png | 0 .../ebike/Sac_normal.png | 0 .../ebike/Sac_occlusionRoughnessMetallic.png | 0 .../ebike/Siege_baseColor.png | 0 .../ebike/Siege_normal.png | 0 .../Siege_occlusionRoughnessMetallic.png | 0 public/{models => old-models}/ebike/ebike.bin | 0 .../{models => old-models}/ebike/model.gltf | 0 .../ebike/phare_baseColor.png | 0 .../ebike/phare_normal.png | 0 .../phare_occlusionRoughnessMetallic.png | 0 .../ebike/pneu_baseColor.png | 0 .../ebike/pneu_normal.png | 0 .../ebike/pneu_occlusionRoughnessMetallic.png | 0 .../ebike/refroidisseur_baseColor.png | 0 .../ebike/refroidisseur_normal.png | 0 ...froidisseur_occlusionRoughnessMetallic.png | 0 .../ebike/resort_baseColor.png | 0 .../ebike/resort_normal.png | 0 .../resort_occlusionRoughnessMetallic.png | 0 .../ecole/Panneau_baseColor.png | 0 .../ecole/Panneau_normal.png | 0 .../Panneau_occlusionRoughnessMetallic.png | 0 .../{models => old-models}/ecole/ecole2.bin | 0 .../ecole/fenetre_baseColor.png | 0 .../ecole/fenetre_normal.png | 0 .../fenetre_occlusionRoughnessMetallic.png | 0 .../ecole/maison_baseColor.png | 0 .../ecole/maison_normal.png | 0 .../maison_occlusionRoughnessMetallic.png | 0 .../{models => old-models}/ecole/model.gltf | 0 .../ecole/porte_baseColor.png | 0 .../ecole/porte_normal.png | 0 .../porte_occlusionRoughnessMetallic.png | 0 .../ecole/tiges_baseColor.png | 0 .../ecole/tiges_normal.png | 0 .../tiges_occlusionRoughnessMetallic.png | 0 .../elec/Mat_baseColor.png | 0 .../elec/Mat_normal.png | 0 .../elec/Mat_occlusionRoughnessMetallic.png | 0 public/{models => old-models}/elec/model.bin | 0 public/{models => old-models}/elec/model.gltf | 0 .../electricienne/Mat_baseColor.png | 0 .../electricienne/Mat_normal.png | 0 .../Mat_occlusionRoughnessMetallic.png | 0 .../electricienne/electricienne.bin | 0 .../electricienne/model.gltf | 0 .../entreetuyaux/model.gltf | 0 .../entreetuyaux/tuyaux_Base_color.png | 0 .../entreetuyaux/tuyaux_Height.png | 0 .../entreetuyaux/tuyaux_Metallic.png | 0 .../entreetuyaux/tuyaux_Mixed_AO.png | 0 .../entreetuyaux/tuyaux_Normal.png | 0 .../entreetuyaux/tuyaux_Normal_OpenGL.png | 0 .../entreetuyaux/tuyaux_Opacity.png | 0 .../entreetuyaux/tuyaux_Roughness.png | 0 .../eolienne/cul_base_color.png | 0 .../eolienne/cul_height.png | 0 .../eolienne/cul_metallic.png | 0 .../eolienne/cul_mixed_ao.png | 0 .../eolienne/cul_normal.png | 0 .../eolienne/cul_normal_opengl.png | 0 .../eolienne/cul_roughness.png | 0 .../eolienne/feuilles1st_base_color.png | 0 .../eolienne/feuilles1st_height.png | 0 .../eolienne/feuilles1st_metallic.png | 0 .../eolienne/feuilles1st_mixed_ao.png | 0 .../eolienne/feuilles1st_normal.png | 0 .../eolienne/feuilles1st_normal_opengl.png | 0 .../eolienne/feuilles1st_roughness.png | 0 .../eolienne/feuilles2nd_base_color.png | 0 .../eolienne/feuilles2nd_height.png | 0 .../eolienne/feuilles2nd_metallic.png | 0 .../eolienne/feuilles2nd_mixed_ao.png | 0 .../eolienne/feuilles2nd_normal.png | 0 .../eolienne/feuilles2nd_normal_opengl.png | 0 .../eolienne/feuilles2nd_roughness.png | 0 .../eolienne/he_lisse_base_color.png | 0 .../eolienne/he_lisse_height.png | 0 .../eolienne/he_lisse_metallic.png | 0 .../eolienne/he_lisse_mixed_ao.png | 0 .../eolienne/he_lisse_normal.png | 0 .../eolienne/he_lisse_normal_opengl.png | 0 .../eolienne/he_lisse_opacity.png | 0 .../eolienne/he_lisse_roughness.png | 0 .../eolienne/model.gltf | 0 .../eolienne/moteur_base_color.png | 0 .../eolienne/moteur_height.png | 0 .../eolienne/moteur_metallic.png | 0 .../eolienne/moteur_mixed_ao.png | 0 .../eolienne/moteur_normal.png | 0 .../eolienne/moteur_normal_opengl.png | 0 .../eolienne/moteur_roughness.png | 0 .../eolienne/pied_base_color.png | 0 .../eolienne/pied_height.png | 0 .../eolienne/pied_metallic.png | 0 .../eolienne/pied_mixed_ao.png | 0 .../eolienne/pied_normal.png | 0 .../eolienne/pied_normal_opengl.png | 0 .../eolienne/pied_roughness.png | 0 .../eolienne/tiges1st_base_color.png | 0 .../eolienne/tiges1st_height.png | 0 .../eolienne/tiges1st_metallic.png | 0 .../eolienne/tiges1st_mixed_ao.png | 0 .../eolienne/tiges1st_normal.png | 0 .../eolienne/tiges1st_normal_opengl.png | 0 .../eolienne/tiges1st_roughness.png | 0 .../eolienne/tiges2nd_base_color.png | 0 .../eolienne/tiges2nd_height.png | 0 .../eolienne/tiges2nd_metallic.png | 0 .../eolienne/tiges2nd_mixed_ao.png | 0 .../eolienne/tiges2nd_normal.png | 0 .../eolienne/tiges2nd_normal_opengl.png | 0 .../eolienne/tiges2nd_roughness.png | 0 .../fermeverticale/ferme verticale.bin | 0 .../fermeverticale_baseColor.png | 0 .../fermeverticale/fermeverticale_normal.png | 0 ...meverticale_occlusionRoughnessMetallic.png | 0 .../fermeverticale/model.gltf | 0 .../DefaultMaterial_diffuse.png | 0 .../DefaultMaterial_normal.png | 0 .../fermier-animated/model.bin | 0 .../fermier-animated/model.gltf | 0 .../fermier/defaultmaterial_basecolor.png | 0 .../fermier/defaultmaterial_normal.png | 0 ...ultmaterial_occlusionroughnessmetallic.png | 0 .../fermier/fermier.bin | 0 .../{models => old-models}/fermier/model.gltf | 0 public/{models => old-models}/galet/galet.bin | 0 .../galet/galet_basecolor.png | 0 .../galet/galet_normal.png | 0 .../galet_occlusionroughnessmetallic.png | 0 .../{models => old-models}/galet/model.gltf | 0 .../gant_l/gant_basecolor.png | 0 .../gant_l/gant_normal.png | 0 .../gant_occlusionroughnessmetallic.png | 0 .../{models => old-models}/gant_l/hanf_l.bin | 0 .../{models => old-models}/gant_l/model.gltf | 0 .../gant_l_pad/galet_basecolor.png | 0 .../gant_l_pad/galet_normal.png | 0 .../galet_occlusionroughnessmetallic.png | 0 .../gant_l_pad/gant_basecolor.png | 0 .../gant_l_pad/gant_normal.png | 0 .../gant_occlusionroughnessmetallic.png | 0 .../gant_l_pad/gants.bin | 0 .../gant_l_pad/model.gltf | 0 .../gant_r/galet_baseColor.png | 0 .../gant_r/galet_normal.png | 0 .../galet_occlusionRoughnessMetallic.png | 0 .../gant_r/gant_baseColor.png} | 0 .../gant_r/gant_normal.png | 0 .../gant_occlusionRoughnessMetallic.png} | 0 .../{models => old-models}/gant_r/gant_r.bin | 0 .../{models => old-models}/gant_r/model.bin | 0 .../{models => old-models}/gant_r/model.glb | 0 .../{models => old-models}/gant_r/model.gltf | 0 .../gant_r_pad/galet_basecolor.png | 0 .../gant_r_pad/galet_normal.png | 0 .../galet_occlusionroughnessmetallic.png | 0 .../gant_r_pad/gant_basecolor.png | 0 .../gant_r_pad/gant_normal.png | 0 .../gant_occlusionroughnessmetallic.png | 0 .../gant_r_pad/gant_r_pad.bin | 0 .../gant_r_pad/model.gltf | 0 .../gerant/defaultmaterial_base_color.png | 0 .../gerant/defaultmaterial_basecolor.png | 0 .../gerant/defaultmaterial_height.png | 0 .../gerant/defaultmaterial_metallic.png | 0 .../gerant/defaultmaterial_normal.png | 0 .../gerant/defaultmaterial_normal_opengl.png | 0 ...ultmaterial_occlusionroughnessmetallic.png | 0 .../gerant/defaultmaterial_roughness.png | 0 .../{models => old-models}/gerant/gerant.bin | 0 .../{models => old-models}/gerant/model.gltf | 0 .../gerant_anim/DefaultMaterial_Normal.png | 0 .../gerant_anim/DefaultMaterial_diffuse.png | 0 .../gerant_anim/model.bin | 0 .../gerant_anim/model.gltf | 0 .../habitant1-animated/model.bin | 0 .../habitant1-animated/model.gltf | 0 .../habitant1-animated/pnj1_diffuse.png | 0 .../habitant1-animated/pnj1_normal.png | 0 .../habitant1/model.gltf | 0 .../{models => old-models}/habitant1/pnj1.bin | 0 .../habitant1/pnj1_baseColor.png | 0 .../habitant1/pnj1_normal.png | 0 .../pnj1_occlusionRoughnessMetallic.png | 0 .../habitant2-animated/habitant2_diffuse.png | 0 .../habitant2-animated/habitant2_normal.png | 0 .../habitant2-animated/model.bin | 0 .../habitant2-animated/model.gltf | 0 .../habitant2/habitant2_baseColor.png | 0 .../habitant2/habitant2_normal.png | 0 .../habitant2_occlusionRoughnessMetallic.png | 0 .../habitant2/model.gltf | 0 .../{models => old-models}/habitant2/pnj2.bin | 0 .../immeuble1/fenetre_baseColor.png | 0 .../immeuble1/fenetre_normal.png | 0 .../fenetre_occlusionRoughnessMetallic.png | 0 .../immeuble1/immeuble1.bin | 0 .../immeuble1/maison_baseColor.png | 0 .../immeuble1/maison_normal.png | 0 .../maison_occlusionRoughnessMetallic.png | 0 .../immeuble1/model.gltf | 0 .../immeuble1/panneau_baseColor.png | 0 .../immeuble1/panneau_normal.png | 0 .../panneau_occlusionRoughnessMetallic.png | 0 .../immeuble1/porte_baseColor.png | 0 .../immeuble1/porte_normal.png | 0 .../porte_occlusionRoughnessMetallic.png | 0 .../lafabrik/anneaux_base_color.png | 0 .../lafabrik/anneaux_basecolor.png | 0 .../lafabrik/anneaux_height.png | 0 .../lafabrik/anneaux_metallic.png | 0 .../lafabrik/anneaux_mixed_ao.png | 0 .../lafabrik/anneaux_normal.png | 0 .../lafabrik/anneaux_normal_opengl.png | 0 .../anneaux_occlusionroughnessmetallic.png | 0 .../lafabrik/anneaux_roughness.png | 0 .../lafabrik/bat_base_color.png | 0 .../lafabrik/bat_basecolor.png | 0 .../lafabrik/bat_height.png | 0 .../lafabrik/bat_metallic.png | 0 .../lafabrik/bat_mixed_ao.png | 0 .../lafabrik/bat_normal.png | 0 .../lafabrik/bat_normal_opengl.png | 0 .../bat_occlusionroughnessmetallic.png | 0 .../lafabrik/bat_roughness.png | 0 .../lafabrik/comptoir_base_color.png | 0 .../lafabrik/comptoir_basecolor.png | 0 .../lafabrik/comptoir_height.png | 0 .../lafabrik/comptoir_metallic.png | 0 .../lafabrik/comptoir_mixed_ao.png | 0 .../lafabrik/comptoir_normal.png | 0 .../lafabrik/comptoir_normal_opengl.png | 0 .../comptoir_occlusionroughnessmetallic.png | 0 .../lafabrik/comptoir_roughness.png | 0 .../lafabrik/dashboard_base_color.png | 0 .../lafabrik/dashboard_basecolor.png | 0 .../lafabrik/dashboard_height.png | 0 .../lafabrik/dashboard_metallic.png | 0 .../lafabrik/dashboard_mixed_ao.png | 0 .../lafabrik/dashboard_normal.png | 0 .../lafabrik/dashboard_normal_opengl.png | 0 .../dashboard_occlusionroughnessmetallic.png | 0 .../lafabrik/dashboard_roughness.png | 0 .../lafabrik/fenetre_0_base_color.png | 0 .../lafabrik/fenetre_0_basecolor.png | 0 .../lafabrik/fenetre_0_height.png | 0 .../lafabrik/fenetre_0_metallic.png | 0 .../lafabrik/fenetre_0_mixed_ao.png | 0 .../lafabrik/fenetre_0_normal.png | 0 .../lafabrik/fenetre_0_normal_opengl.png | 0 .../fenetre_0_occlusionroughnessmetallic.png | 0 .../lafabrik/fenetre_0_roughness.png | 0 .../{models => old-models}/lafabrik/model.bin | 0 .../lafabrik/model.gltf | 0 .../lafabrik/panneau_base_color.png | 0 .../lafabrik/panneau_basecolor.png | 0 .../lafabrik/panneau_height.png | 0 .../lafabrik/panneau_metallic.png | 0 .../lafabrik/panneau_mixed_ao.png | 0 .../lafabrik/panneau_normal.png | 0 .../lafabrik/panneau_normal_opengl.png | 0 .../panneau_occlusionroughnessmetallic.png | 0 .../lafabrik/panneau_roughness.png | 0 .../lafabrik/plan_de_travail_base_color.png | 0 .../lafabrik/plan_de_travail_basecolor.png | 0 .../lafabrik/plan_de_travail_height.png | 0 .../lafabrik/plan_de_travail_metallic.png | 0 .../lafabrik/plan_de_travail_mixed_ao.png | 0 .../lafabrik/plan_de_travail_normal.png | 0 .../plan_de_travail_normal_opengl.png | 0 ..._de_travail_occlusionroughnessmetallic.png | 0 .../lafabrik/plan_de_travail_roughness.png | 0 .../lafabrik/porte_base_color.png | 0 .../lafabrik/porte_basecolor.png | 0 .../lafabrik/porte_height.png | 0 .../lafabrik/porte_metallic.png | 0 .../lafabrik/porte_mixed_ao.png | 0 .../lafabrik/porte_normal.png | 0 .../lafabrik/porte_normal_opengl.png | 0 .../porte_occlusionroughnessmetallic.png | 0 .../lafabrik/porte_roughness.png | 0 .../lafabrik/porte_stock_base_color.png | 0 .../lafabrik/porte_stock_basecolor.png | 0 .../lafabrik/porte_stock_height.png | 0 .../lafabrik/porte_stock_metallic.png | 0 .../lafabrik/porte_stock_mixed_ao.png | 0 .../lafabrik/porte_stock_normal.png | 0 .../lafabrik/porte_stock_normal_opengl.png | 0 ...porte_stock_occlusionroughnessmetallic.png | 0 .../lafabrik/porte_stock_roughness.png | 0 .../lafabrik/stock_0_base_color.png | 0 .../lafabrik/stock_0_basecolor.png | 0 .../lafabrik/stock_0_height.png | 0 .../lafabrik/stock_0_metallic.png | 0 .../lafabrik/stock_0_mixed_ao.png | 0 .../lafabrik/stock_0_normal.png | 0 .../lafabrik/stock_0_normal_opengl.png | 0 .../stock_0_occlusionroughnessmetallic.png | 0 .../lafabrik/stock_0_roughness.png | 0 .../lafabrik/tiges_base_color.png | 0 .../lafabrik/tiges_basecolor.png | 0 .../lafabrik/tiges_height.png | 0 .../lafabrik/tiges_metallic.png | 0 .../lafabrik/tiges_mixed_ao.png | 0 .../lafabrik/tiges_normal.png | 0 .../lafabrik/tiges_normal_opengl.png | 0 .../tiges_occlusionroughnessmetallic.png | 0 .../lafabrik/tiges_roughness.png | 0 .../lafabrik/toit_base_color.png | 0 .../lafabrik/toit_basecolor.png | 0 .../lafabrik/toit_height.png | 0 .../lafabrik/toit_metallic.png | 0 .../lafabrik/toit_mixed_ao.png | 0 .../lafabrik/toit_normal.png | 0 .../lafabrik/toit_normal_opengl.png | 0 .../toit_occlusionroughnessmetallic.png | 0 .../lafabrik/toit_roughness.png | 0 .../lafabrik/tuyaux_base_color.png | 0 .../lafabrik/tuyaux_basecolor.png | 0 .../lafabrik/tuyaux_height.png | 0 .../lafabrik/tuyaux_metallic.png | 0 .../lafabrik/tuyaux_mixed_ao.png | 0 .../lafabrik/tuyaux_normal.png | 0 .../lafabrik/tuyaux_normal_opengl.png | 0 .../tuyaux_occlusionroughnessmetallic.png | 0 .../lafabrik/tuyaux_roughness.png | 0 .../lafabrik/verre_fenetre_base_color.png | 0 .../lafabrik/verre_fenetre_basecolor.png | 0 .../lafabrik/verre_fenetre_height.png | 0 .../lafabrik/verre_fenetre_metallic.png | 0 .../lafabrik/verre_fenetre_mixed_ao.png | 0 .../lafabrik/verre_fenetre_normal.png | 0 .../lafabrik/verre_fenetre_normal_opengl.png | 0 ...rre_fenetre_occlusionroughnessmetallic.png | 0 .../lafabrik/verre_fenetre_roughness.png | 0 .../maison1/contours_baseColor.png | 0 .../maison1/contours_normal.png | 0 .../contours_occlusionRoughnessMetallic.png | 0 .../maison1/fenetre_baseColor.png | 0 .../maison1/fenetre_normal.png | 0 .../fenetre_occlusionRoughnessMetallic.png | 0 .../{models => old-models}/maison1/maison.bin | 0 .../maison1/maison_baseColor.png | 0 .../maison1/maison_normal.png | 0 .../maison_occlusionRoughnessMetallic.png | 0 .../{models => old-models}/maison1/model.gltf | 0 .../maison1/panneau_baseColor.png | 0 .../maison1/panneau_normal.png | 0 .../panneau_occlusionRoughnessMetallic.png | 0 .../maison1/porte_baseColor.png | 0 .../maison1/porte_normal.png | 0 .../porte_occlusionRoughnessMetallic.png | 0 .../maison1/toit_baseColor.png | 0 .../maison1/toit_normal.png | 0 .../toit_occlusionRoughnessMetallic.png | 0 .../packderelance/cabledroit_Base_color.png} | 0 .../packderelance/cabledroit_Normal.png} | 0 .../packderelance/cabledroit_height.png | 0 .../packderelance/cabledroit_metallic.png | 0 .../packderelance/cabledroit_mixed_ao.png | 0 .../cabledroit_normal_opengl.png | 0 .../packderelance/cabledroit_roughness.png | 0 .../packderelance/cablegauche_Base_color.png} | 0 .../packderelance/cablegauche_Normal.png} | 0 .../packderelance/cablegauche_height.png | 0 .../packderelance/cablegauche_metallic.png | 0 .../packderelance/cablegauche_mixed_ao.png | 0 .../cablegauche_normal_opengl.png | 0 .../packderelance/cablegauche_roughness.png | 0 .../packderelance/charnie_res_base_color.png | 0 .../packderelance/charnie_res_height.png | 0 .../packderelance/charnie_res_metallic.png | 0 .../packderelance/charnie_res_mixed_ao.png | 0 .../packderelance/charnie_res_normal.png | 0 .../charnie_res_normal_opengl.png | 0 .../packderelance/charnie_res_roughness.png | 0 .../packderelance/lock_base_color.png | 0 .../packderelance/lock_height.png | 0 .../packderelance/lock_metallic.png | 0 .../packderelance/lock_mixed_ao.png | 0 .../packderelance/lock_normal.png | 0 .../packderelance/lock_normal_opengl.png | 0 .../packderelance/lock_roughness.png | 0 .../packderelance/manchemart_base_color.png | 0 .../packderelance/manchemart_height.png | 0 .../packderelance/manchemart_metallic.png | 0 .../packderelance/manchemart_mixed_ao.png | 0 .../packderelance/manchemart_normal.png | 0 .../manchemart_normal_opengl.png | 0 .../packderelance/manchemart_roughness.png | 0 .../packderelance/model.gltf | 0 .../packderelance/mousse_bas_base_color.png | 0 .../packderelance/mousse_bas_height.png | 0 .../packderelance/mousse_bas_metallic.png | 0 .../packderelance/mousse_bas_mixed_ao.png | 0 .../packderelance/mousse_bas_normal.png | 0 .../mousse_bas_normal_opengl.png | 0 .../packderelance/mousse_bas_roughness.png | 0 .../packderelance/mousse_base_color.png | 0 .../packderelance/mousse_height.png | 0 .../packderelance/mousse_metallic.png | 0 .../packderelance/mousse_mixed_ao.png | 0 .../packderelance/mousse_normal.png | 0 .../packderelance/mousse_normal_opengl.png | 0 .../packderelance/mousse_roughness.png | 0 .../packderelance/patinf_base_color.png | 0 .../packderelance/patinf_height.png | 0 .../packderelance/patinf_metallic.png | 0 .../packderelance/patinf_mixed_ao.png | 0 .../packderelance/patinf_normal.png | 0 .../packderelance/patinf_normal_opengl.png | 0 .../packderelance/patinf_roughness.png | 0 .../packderelance/patsup_base_color.png | 0 .../packderelance/patsup_height.png | 0 .../packderelance/patsup_metallic.png | 0 .../packderelance/patsup_mixed_ao.png | 0 .../packderelance/patsup_normal.png | 0 .../packderelance/patsup_normal_opengl.png | 0 .../packderelance/patsup_roughness.png | 0 .../packderelance/puces_base_color.png | 0 .../packderelance/puces_height.png | 0 .../packderelance/puces_metallic.png | 0 .../packderelance/puces_mixed_ao.png | 0 .../packderelance/puces_normal.png | 0 .../packderelance/puces_normal_opengl.png | 0 .../packderelance/puces_roughness.png | 0 .../packderelance/tetemart_base_color.png | 0 .../packderelance/tetemart_height.png | 0 .../packderelance/tetemart_metallic.png | 0 .../packderelance/tetemart_mixed_ao.png | 0 .../packderelance/tetemart_normal.png | 0 .../packderelance/tetemart_normal_opengl.png | 0 .../packderelance/tetemart_roughness.png | 0 .../panneauaffichage/affichage_Base_color.png | 0 .../panneauaffichage/affichage_Height.png | 0 .../panneauaffichage/affichage_Metallic.png | 0 .../panneauaffichage/affichage_Mixed_AO.png | 0 .../panneauaffichage/affichage_Normal.png | 0 .../affichage_Normal_OpenGL.png | 0 .../panneauaffichage/affichage_Roughness.png | 0 .../panneauaffichage/affiche1_Base_color.png | 0 .../panneauaffichage/affiche1_Height.png | 0 .../panneauaffichage/affiche1_Metallic.png | 0 .../panneauaffichage/affiche1_Mixed_AO.png | 0 .../panneauaffichage/affiche1_Normal.png | 0 .../affiche1_Normal_OpenGL.png | 0 .../panneauaffichage/affiche1_Roughness.png | 0 .../panneauaffichage/affiche2_Base_color.png | 0 .../panneauaffichage/affiche2_Height.png | 0 .../panneauaffichage/affiche2_Metallic.png | 0 .../panneauaffichage/affiche2_Mixed_AO.png | 0 .../panneauaffichage/affiche2_Normal.png | 0 .../affiche2_Normal_OpenGL.png | 0 .../panneauaffichage/affiche2_Roughness.png | 0 .../panneauaffichage/affiche3_Base_color.png | 0 .../panneauaffichage/affiche3_Height.png | 0 .../panneauaffichage/affiche3_Metallic.png | 0 .../panneauaffichage/affiche3_Mixed_AO.png | 0 .../panneauaffichage/affiche3_Normal.png | 0 .../affiche3_Normal_OpenGL.png | 0 .../panneauaffichage/affiche3_Roughness.png | 0 .../panneauaffichage/affiche4_Base_color.png | 0 .../panneauaffichage/affiche4_Height.png | 0 .../panneauaffichage/affiche4_Metallic.png | 0 .../panneauaffichage/affiche4_Mixed_AO.png | 0 .../panneauaffichage/affiche4_Normal.png | 0 .../affiche4_Normal_OpenGL.png | 0 .../panneauaffichage/affiche4_Roughness.png | 0 .../afficheprincipal_Base_color.png | 0 .../afficheprincipal_Height.png | 0 .../afficheprincipal_Metallic.png | 0 .../afficheprincipal_Mixed_AO.png | 0 .../afficheprincipal_Normal.png | 0 .../afficheprincipal_Normal_OpenGL.png | 0 .../afficheprincipal_Roughness.png | 0 .../cadranhoribas_Base_color.png | 0 .../panneauaffichage/cadranhoribas_Height.png | 0 .../cadranhoribas_Metallic.png | 0 .../cadranhoribas_Mixed_AO.png | 0 .../panneauaffichage/cadranhoribas_Normal.png | 0 .../cadranhoribas_Normal_OpenGL.png | 0 .../cadranhoribas_Roughness.png | 0 .../cadranhorihaut_Base_color.png | 0 .../cadranhorihaut_Height.png | 0 .../cadranhorihaut_Metallic.png | 0 .../cadranhorihaut_Mixed_AO.png | 0 .../cadranhorihaut_Normal.png | 0 .../cadranhorihaut_Normal_OpenGL.png | 0 .../cadranhorihaut_Roughness.png | 0 .../cadranvertidroite_Base_color.png | 0 .../cadranvertidroite_Height.png | 0 .../cadranvertidroite_Metallic.png | 0 .../cadranvertidroite_Mixed_AO.png | 0 .../cadranvertidroite_Normal.png | 0 .../cadranvertidroite_Normal_OpenGL.png | 0 .../cadranvertidroite_Roughness.png | 0 .../cadranvertigauche_Base_color.png | 0 .../cadranvertigauche_Height.png | 0 .../cadranvertigauche_Metallic.png | 0 .../cadranvertigauche_Mixed_AO.png | 0 .../cadranvertigauche_Normal.png | 0 .../cadranvertigauche_Normal_OpenGL.png | 0 .../cadranvertigauche_Roughness.png | 0 .../panneauaffichage/model.gltf | 0 .../panneauaffichage/pin_Base_color.png | 0 .../panneauaffichage/pin_Height.png | 0 .../panneauaffichage/pin_Metallic.png | 0 .../panneauaffichage/pin_Mixed_AO.png | 0 .../panneauaffichage/pin_Normal.png | 0 .../panneauaffichage/pin_Normal_OpenGL.png | 0 .../panneauaffichage/pin_Roughness.png | 0 .../panneauclassique/model.gltf | 0 .../panneaufleche/model.gltf | 0 ...al_diffuse-DefaultMaterial_diffuse.png.png | 0 .../DefaultMaterial_normal.png | 0 .../persoprincipal-animated/model.bin | 0 .../persoprincipal-animated/model.gltf | 0 .../defaultmaterial_basecolor.png | 0 .../persoprincipal/defaultmaterial_normal.png | 0 ...ultmaterial_occlusionroughnessmetallic.png | 0 .../persoprincipal/mc.bin | 0 .../persoprincipal/model.gltf | 0 .../potager/potager.bin | 0 .../potager/potager.gltf | 0 .../potager/potager_baseColor.png | 0 .../potager/potager_normal.png | 0 .../potager_occlusionRoughnessMetallic.png | 0 public/{models => old-models}/puce/model.gltf | 0 .../puce/puces_Base_color.png | 0 .../puce/puces_Height.png | 0 .../puce/puces_Metallic.png | 0 .../puce/puces_Mixed_AO.png | 0 .../puce/puces_Normal.png | 0 .../puce/puces_Normal_OpenGL.png | 0 .../puce/puces_Roughness.png | 0 .../pylone/cable1_base_color.png | 0 .../pylone/cable1_height.png | 0 .../pylone/cable1_metallic.png | 0 .../pylone/cable1_mixed_ao.png | 0 .../pylone/cable1_normal.png | 0 .../pylone/cable1_normal_opengl.png | 0 .../pylone/cable1_roughness.png | 0 .../pylone/cable2_base_color.png | 0 .../pylone/cable2_height.png | 0 .../pylone/cable2_metallic.png | 0 .../pylone/cable2_mixed_ao.png | 0 .../pylone/cable2_normal.png | 0 .../pylone/cable2_normal_opengl.png | 0 .../pylone/cable2_roughness.png | 0 .../pylone/chap_base_color.png | 0 .../pylone/chap_height.png | 0 .../pylone/chap_metallic.png | 0 .../pylone/chap_mixed_ao.png | 0 .../pylone/chap_normal.png | 0 .../pylone/chap_normal_opengl.png | 0 .../pylone/chap_roughness.png | 0 .../pylone/lampe_base_color.png | 0 .../pylone/lampe_height.png | 0 .../pylone/lampe_metallic.png | 0 .../pylone/lampe_mixed_ao.png | 0 .../pylone/lampe_normal.png | 0 .../pylone/lampe_normal_opengl.png | 0 .../pylone/lampe_opacity.png | 0 .../pylone/lampe_roughness.png | 0 .../{models => old-models}/pylone/model.gltf | 0 .../pylone/panneaux_base_color.png | 0 .../pylone/panneaux_height.png | 0 .../pylone/panneaux_metallic.png | 0 .../pylone/panneaux_mixed_ao.png | 0 .../pylone/panneaux_normal.png | 0 .../pylone/panneaux_normal_opengl.png | 0 .../pylone/panneaux_roughness.png | 0 .../pylone/pied_base_color.png | 0 .../pylone/pied_height.png | 0 .../pylone/pied_metallic.png | 0 .../pylone/pied_mixed_ao.png | 0 .../pylone/pied_normal.png | 0 .../pylone/pied_normal_opengl.png | 0 .../pylone/pied_roughness.png | 0 .../pylone/puces_base_color.png | 0 .../pylone/puces_height.png | 0 .../pylone/puces_metallic.png | 0 .../pylone/puces_mixed_ao.png | 0 .../pylone/puces_normal.png | 0 .../pylone/puces_normal_opengl.png | 0 .../pylone/puces_roughness.png | 0 .../refroidisseur/model.bin | 0 .../refroidisseur/model.gltf | 0 .../refroidisseur_base_color.png | 0 .../refroidisseur/refroidisseur_height.png | 0 .../refroidisseur/refroidisseur_metallic.png | 0 .../refroidisseur/refroidisseur_mixed_ao.png | 0 .../refroidisseur/refroidisseur_normal.png | 0 .../refroidisseur_normal_opengl.png | 0 .../refroidisseur/refroidisseur_roughness.png | 0 .../sapin/mat.1_basecolor.png | 0 .../sapin/mat.1_normal.png | 0 .../mat.1_occlusionroughnessmetallic.png | 0 .../sapin/mat_basecolor.png | 0 .../sapin/mat_normal.png | 0 .../sapin/mat_occlusionroughnessmetallic.png | 0 .../{models => old-models}/sapin/model.gltf | 0 public/{models => old-models}/sapin/sapin.bin | 0 public/{models => old-models}/sky/model.glb | 0 .../{models => old-models}/skybox/skybox.bin | 0 .../{models => old-models}/skybox/skybox.glb | 0 .../{models => old-models}/skybox/skybox.gltf | 0 .../skybox/skybox_baseColor.png | 0 .../skybox/skybox_normal.png | 0 .../skybox_occlusionRoughnessMetallic.png | 0 .../talkie/antenne_Base_color.png | 0 .../talkie/antenne_Height.png | 0 .../talkie/antenne_Metallic.png | 0 .../talkie/antenne_Mixed_AO.png | 0 .../talkie/antenne_Normal.png} | 0 .../talkie/antenne_Normal_OpenGL.png} | 0 .../talkie/antenne_Roughness.png | 0 .../talkie/boutona_Base_color.png | 0 .../talkie/boutona_Height.png | 0 .../talkie/boutona_Metallic.png | 0 .../talkie/boutona_Mixed_AO.png | 0 .../talkie/boutona_Normal.png} | 0 .../talkie/boutona_Normal_OpenGL.png} | 0 .../talkie/boutona_Roughness.png | 0 .../talkie/boutonb_Base_color.png | 0 .../talkie/boutonb_Height.png | 0 .../talkie/boutonb_Metallic.png | 0 .../talkie/boutonb_Mixed_AO.png | 0 .../talkie/boutonb_Normal.png} | 0 .../talkie/boutonb_Normal_OpenGL.png} | 0 .../talkie/boutonb_Roughness.png | 0 .../talkie/cable1_Base_color.png | 0 .../talkie/cable1_Height.png | 0 .../talkie/cable1_Metallic.png | 0 .../talkie/cable1_Mixed_AO.png | 0 .../talkie/cable1_Normal.png} | 0 .../talkie/cable1_Normal_OpenGL.png} | 0 .../talkie/cable1_Roughness.png | 0 .../talkie/cable2_Base_color.png | 0 .../talkie/cable2_Height.png | 0 .../talkie/cable2_Metallic.png | 0 .../talkie/cable2_Mixed_AO.png | 0 .../talkie/cable2_Normal.png} | 0 .../talkie/cable2_Normal_OpenGL.png} | 0 .../talkie/cable2_Roughness.png | 0 .../talkie/cadre_Base_color.png | 0 .../talkie/cadre_Height.png | 0 .../talkie/cadre_Metallic.png | 0 .../talkie/cadre_Mixed_AO.png | 0 .../talkie/cadre_Normal.png} | 0 .../talkie/cadre_Normal_OpenGL.png} | 0 .../talkie/cadre_Roughness.png | 0 .../talkie/e_cran_base_color.png | 0 .../talkie/e_cran_height.png | 0 .../talkie/e_cran_metallic.png | 0 .../talkie/e_cran_mixed_ao.png | 0 .../talkie/e_cran_normal.png | 0 .../talkie/e_cran_normal_opengl.png | 0 .../talkie/e_cran_roughness.png | 0 .../talkie/hautparleur_Base_color.png | 0 .../talkie/hautparleur_Height.png | 0 .../talkie/hautparleur_Metallic.png | 0 .../talkie/hautparleur_Mixed_AO.png | 0 .../talkie/hautparleur_Normal.png} | 0 .../talkie/hautparleur_Normal_OpenGL.png} | 0 .../talkie/hautparleur_Roughness.png | 0 .../{models => old-models}/talkie/model.bin | 0 .../{models => old-models}/talkie/model.gltf | 0 .../talkie/prise_Base_color.png | 0 .../talkie/prise_Height.png | 0 .../talkie/prise_Metallic.png | 0 .../talkie/prise_Mixed_AO.png | 0 .../talkie/prise_Normal.png} | 0 .../talkie/prise_Normal_OpenGL.png} | 0 .../talkie/prise_Roughness.png | 0 .../talkie/talkie_Base_color.png | 0 .../talkie/talkie_Height.png | 0 .../talkie/talkie_Metallic.png | 0 .../talkie/talkie_Mixed_AO.png | 0 .../talkie/talkie_Normal.png} | 0 .../talkie/talkie_Normal_OpenGL.png} | 0 .../talkie/talkie_Roughness.png | 0 .../talkie/touches_Base_color.png | 0 .../talkie/touches_Height.png | 0 .../talkie/touches_Metallic.png | 0 .../talkie/touches_Mixed_AO.png | 0 .../talkie/touches_Normal.png} | 0 .../talkie/touches_Normal_OpenGL.png} | 0 .../talkie/touches_Roughness.png | 0 .../talkie/écran_Base_color.png | 0 .../talkie/écran_Height.png | 0 .../talkie/écran_Metallic.png | 0 .../talkie/écran_Mixed_AO.png | 0 .../talkie/écran_Normal.png | 0 .../talkie/écran_Normal_OpenGL.png | 0 .../talkie/écran_Roughness.png | 0 .../{models => old-models}/terrain/model.gltf | 0 .../terrain/terrain.bin | 0 .../terrain/terrain.glb | 0 .../terrain/terrain_baseColor.png | 0 .../terrain/terrain_normal.png | 0 .../terrain_occlusionRoughnessMetallic.png | 0 .../tuyauxlac/model.gltf | 0 .../tuyauxlac/tuyaux_Base_color.png | 0 .../tuyauxlac/tuyaux_Height.png | 0 .../tuyauxlac/tuyaux_Metallic.png | 0 .../tuyauxlac/tuyaux_Mixed_AO.png | 0 .../tuyauxlac/tuyaux_Normal.png | 0 .../tuyauxlac/tuyaux_Normal_OpenGL.png | 0 .../tuyauxlac/tuyaux_Opacity.png | 0 .../tuyauxlac/tuyaux_Roughness.png | 0 .../tuyauxpuzzle/model.gltf | 0 .../tuyauxpuzzle/tuyaux_Base_color.png | 0 .../tuyauxpuzzle/tuyaux_Height.png | 0 .../tuyauxpuzzle/tuyaux_Metallic.png | 0 .../tuyauxpuzzle/tuyaux_Mixed_AO.png | 0 .../tuyauxpuzzle/tuyaux_Normal.png | 0 .../tuyauxpuzzle/tuyaux_Normal_OpenGL.png | 0 .../tuyauxpuzzle/tuyaux_Opacity.png | 0 .../tuyauxpuzzle/tuyaux_Roughness.png | 0 public/{models => old-models}/vase/color.jpg | 0 .../{models => old-models}/vase/displace.jpg | 0 .../{models => old-models}/vase/metalness.jpg | 0 public/{models => old-models}/vase/model.gltf | 0 public/{models => old-models}/vase/normal.jpg | 0 .../{models => old-models}/vase/roughness.jpg | 0 src/data/galleryModels.ts | 72 +----- src/index.css | 211 ++++++++++++++++ src/pages/gallery/page.tsx | 233 +++++++++++++++--- 860 files changed, 428 insertions(+), 88 deletions(-) rename public/{models => old-models}/arbre/arbre.bin (100%) rename public/{models => old-models}/arbre/arbre.glb (100%) rename public/{models => old-models}/arbre/arbre.spp (100%) rename public/{models => old-models}/arbre/feuilles_baseColor.png (100%) rename public/{models => old-models}/arbre/feuilles_normal.png (100%) rename public/{models => old-models}/arbre/feuilles_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/arbre/model.gltf (100%) rename public/{models => old-models}/arbre/tronc_baseColor.png (100%) rename public/{models => old-models}/arbre/tronc_normal.png (100%) rename public/{models => old-models}/arbre/tronc_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/blocking/DefaultMaterial_baseColor.png (100%) rename public/{models => old-models}/blocking/DefaultMaterial_normal.png (100%) rename public/{models => old-models}/blocking/DefaultMaterial_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/blocking/blocking.bin (100%) rename public/{models => old-models}/blocking/model.gltf (100%) rename public/{models => old-models}/blocking/terrain.gltf (100%) rename public/{models => old-models}/blocking/terrain_baseColor.png (100%) rename public/{models => old-models}/blocking/terrain_normal.png (100%) rename public/{models => old-models}/blocking/terrain_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/boiteimmeuble/boite_Base_color.png (100%) rename public/{models => old-models}/boiteimmeuble/boite_Height.png (100%) rename public/{models => old-models}/boiteimmeuble/boite_Metallic.png (100%) rename public/{models => old-models}/boiteimmeuble/boite_Mixed_AO.png (100%) rename public/{models => old-models}/boiteimmeuble/boite_Normal.png (100%) rename public/{models => old-models}/boiteimmeuble/boite_Normal_OpenGL.png (100%) rename public/{models => old-models}/boiteimmeuble/boite_Roughness.png (100%) rename public/{models => old-models}/boiteimmeuble/model.gltf (100%) rename public/{models => old-models}/boiteimmeuble/pied_Base_color.png (100%) rename public/{models => old-models}/boiteimmeuble/pied_Height.png (100%) rename public/{models => old-models}/boiteimmeuble/pied_Metallic.png (100%) rename public/{models => old-models}/boiteimmeuble/pied_Mixed_AO.png (100%) rename public/{models => old-models}/boiteimmeuble/pied_Normal.png (100%) rename public/{models => old-models}/boiteimmeuble/pied_Normal_OpenGL.png (100%) rename public/{models => old-models}/boiteimmeuble/pied_Roughness.png (100%) rename public/{models => old-models}/boitesimple/boite_Base_color.png (100%) rename public/{models => old-models}/boitesimple/boite_Height.png (100%) rename public/{models => old-models}/boitesimple/boite_Metallic.png (100%) rename public/{models => old-models}/boitesimple/boite_Mixed_AO.png (100%) rename public/{models => old-models}/boitesimple/boite_Normal.png (100%) rename public/{models => old-models}/boitesimple/boite_Normal_OpenGL.png (100%) rename public/{models => old-models}/boitesimple/boite_Roughness.png (100%) rename public/{models => old-models}/boitesimple/model.gltf (100%) rename public/{models => old-models}/boitesimple/notif_Base_color.png (100%) rename public/{models => old-models}/boitesimple/notif_Height.png (100%) rename public/{models => old-models}/boitesimple/notif_Metallic.png (100%) rename public/{models => old-models}/boitesimple/notif_Mixed_AO.png (100%) rename public/{models => old-models}/boitesimple/notif_Normal.png (100%) rename public/{models => old-models}/boitesimple/notif_Normal_OpenGL.png (100%) rename public/{models => old-models}/boitesimple/notif_Roughness.png (100%) rename public/{models => old-models}/boitesimple/pied_Base_color.png (100%) rename public/{models => old-models}/boitesimple/pied_Height.png (100%) rename public/{models => old-models}/boitesimple/pied_Metallic.png (100%) rename public/{models => old-models}/boitesimple/pied_Mixed_AO.png (100%) rename public/{models => old-models}/boitesimple/pied_Normal.png (100%) rename public/{models => old-models}/boitesimple/pied_Normal_OpenGL.png (100%) rename public/{models => old-models}/boitesimple/pied_Roughness.png (100%) rename public/{models => old-models}/buisson-animated/buisson.bin (100%) rename public/{models => old-models}/buisson-animated/buisson.glb (100%) rename public/{models => old-models}/buisson-animated/buisson.spp (100%) rename public/{models => old-models}/buisson-animated/feuilles_baseColor.png (100%) rename public/{models => old-models}/buisson-animated/feuilles_normal.png (100%) rename public/{models => old-models}/buisson-animated/feuilles_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/buisson-animated/model.gltf (100%) rename public/{models => old-models}/buisson/buisson.bin (100%) rename public/{models => old-models}/buisson/feuilles_baseColor.png (100%) rename public/{models => old-models}/buisson/feuilles_normal.png (100%) rename public/{models => old-models}/buisson/feuilles_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/buisson/model.gltf (100%) rename public/{models => old-models}/cable1/cabledroit_Base_color.png (100%) rename public/{models => old-models}/cable1/cabledroit_Height.png (100%) rename public/{models => old-models}/cable1/cabledroit_Metallic.png (100%) rename public/{models => old-models}/cable1/cabledroit_Mixed_AO.png (100%) rename public/{models => old-models}/cable1/cabledroit_Normal.png (100%) rename public/{models => old-models}/cable1/cabledroit_Normal_OpenGL.png (100%) rename public/{models => old-models}/cable1/cabledroit_Roughness.png (100%) rename public/{models => old-models}/cable1/model.gltf (100%) rename public/{models => old-models}/cable2/cablegauche_Base_color.png (100%) rename public/{models => old-models}/cable2/cablegauche_Height.png (100%) rename public/{models => old-models}/cable2/cablegauche_Metallic.png (100%) rename public/{models => old-models}/cable2/cablegauche_Mixed_AO.png (100%) rename public/{models => old-models}/cable2/cablegauche_Normal.png (100%) rename public/{models => old-models}/cable2/cablegauche_Normal_OpenGL.png (100%) rename public/{models => old-models}/cable2/cablegauche_Roughness.png (100%) rename public/{models => old-models}/cable2/model.gltf (100%) rename public/{models => old-models}/chemins/chemin_baseColor.png (100%) rename public/{models => old-models}/chemins/chemin_normal.png (100%) rename public/{models => old-models}/chemins/chemin_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/chemins/chemins.bin (100%) rename public/{models => old-models}/chemins/chemins.glb (100%) rename public/{models => old-models}/chemins/model.gltf (100%) rename public/{models => old-models}/createurdepluie/bac_eau_basecolor.png (100%) rename public/{models => old-models}/createurdepluie/bac_eau_normal.png (100%) rename public/{models => old-models}/createurdepluie/bac_eau_occlusionroughnessmetallic.png (100%) rename public/{models => old-models}/createurdepluie/cable_1_basecolor.png (100%) rename public/{models => old-models}/createurdepluie/cable_1_normal.png (100%) rename public/{models => old-models}/createurdepluie/cable_1_occlusionroughnessmetallic.png (100%) rename public/{models => old-models}/createurdepluie/cable_2_basecolor.png (100%) rename public/{models => old-models}/createurdepluie/cable_2_normal.png (100%) rename public/{models => old-models}/createurdepluie/cable_2_occlusionroughnessmetallic.png (100%) rename public/{models => old-models}/createurdepluie/createurdepluie2.bin (100%) rename public/{models => old-models}/createurdepluie/model.gltf (100%) rename public/{models => old-models}/createurdepluie/refroidisseur_basecolor.png (100%) rename public/{models => old-models}/createurdepluie/refroidisseur_normal.png (100%) rename public/{models => old-models}/createurdepluie/refroidisseur_occlusionroughnessmetallic.png (100%) rename public/{models => old-models}/createurdepluie/resistance_basecolor.png (100%) rename public/{models => old-models}/createurdepluie/resistance_normal.png (100%) rename public/{models => old-models}/createurdepluie/resistance_occlusionroughnessmetallic.png (100%) rename public/{models => old-models}/createurdepluie/shell_basecolor.png (100%) rename public/{models => old-models}/createurdepluie/shell_normal.png (100%) rename public/{models => old-models}/createurdepluie/shell_occlusionroughnessmetallic.png (100%) rename public/{models => old-models}/createurdepluie/tuyau_basecolor.png (100%) rename public/{models => old-models}/createurdepluie/tuyau_normal.png (100%) rename public/{models => old-models}/createurdepluie/tuyau_occlusionroughnessmetallic.png (100%) rename public/{models => old-models}/ebike/Cable 1_baseColor.png (100%) rename public/{models => old-models}/ebike/Cable 1_normal.png (100%) rename public/{models => old-models}/ebike/Cable 1_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/ebike/Cable2_baseColor.png (100%) rename public/{models => old-models}/ebike/Cable2_normal.png (100%) rename public/{models => old-models}/ebike/Cable2_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/ebike/Carroserie_baseColor.png (100%) rename public/{models => old-models}/ebike/Carroserie_normal.png (100%) rename public/{models => old-models}/ebike/Carroserie_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/ebike/Ferail_baseColor.png (100%) rename public/{models => old-models}/ebike/Ferail_normal.png (100%) rename public/{models => old-models}/ebike/Ferail_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/ebike/Reservoir_baseColor.png (100%) rename public/{models => old-models}/ebike/Reservoir_normal.png (100%) rename public/{models => old-models}/ebike/Reservoir_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/ebike/Sac_baseColor.png (100%) rename public/{models => old-models}/ebike/Sac_normal.png (100%) rename public/{models => old-models}/ebike/Sac_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/ebike/Siege_baseColor.png (100%) rename public/{models => old-models}/ebike/Siege_normal.png (100%) rename public/{models => old-models}/ebike/Siege_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/ebike/ebike.bin (100%) rename public/{models => old-models}/ebike/model.gltf (100%) rename public/{models => old-models}/ebike/phare_baseColor.png (100%) rename public/{models => old-models}/ebike/phare_normal.png (100%) rename public/{models => old-models}/ebike/phare_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/ebike/pneu_baseColor.png (100%) rename public/{models => old-models}/ebike/pneu_normal.png (100%) rename public/{models => old-models}/ebike/pneu_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/ebike/refroidisseur_baseColor.png (100%) rename public/{models => old-models}/ebike/refroidisseur_normal.png (100%) rename public/{models => old-models}/ebike/refroidisseur_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/ebike/resort_baseColor.png (100%) rename public/{models => old-models}/ebike/resort_normal.png (100%) rename public/{models => old-models}/ebike/resort_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/ecole/Panneau_baseColor.png (100%) rename public/{models => old-models}/ecole/Panneau_normal.png (100%) rename public/{models => old-models}/ecole/Panneau_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/ecole/ecole2.bin (100%) rename public/{models => old-models}/ecole/fenetre_baseColor.png (100%) rename public/{models => old-models}/ecole/fenetre_normal.png (100%) rename public/{models => old-models}/ecole/fenetre_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/ecole/maison_baseColor.png (100%) rename public/{models => old-models}/ecole/maison_normal.png (100%) rename public/{models => old-models}/ecole/maison_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/ecole/model.gltf (100%) rename public/{models => old-models}/ecole/porte_baseColor.png (100%) rename public/{models => old-models}/ecole/porte_normal.png (100%) rename public/{models => old-models}/ecole/porte_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/ecole/tiges_baseColor.png (100%) rename public/{models => old-models}/ecole/tiges_normal.png (100%) rename public/{models => old-models}/ecole/tiges_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/elec/Mat_baseColor.png (100%) rename public/{models => old-models}/elec/Mat_normal.png (100%) rename public/{models => old-models}/elec/Mat_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/elec/model.bin (100%) rename public/{models => old-models}/elec/model.gltf (100%) rename public/{models => old-models}/electricienne/Mat_baseColor.png (100%) rename public/{models => old-models}/electricienne/Mat_normal.png (100%) rename public/{models => old-models}/electricienne/Mat_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/electricienne/electricienne.bin (100%) rename public/{models => old-models}/electricienne/model.gltf (100%) rename public/{models => old-models}/entreetuyaux/model.gltf (100%) rename public/{models => old-models}/entreetuyaux/tuyaux_Base_color.png (100%) rename public/{models => old-models}/entreetuyaux/tuyaux_Height.png (100%) rename public/{models => old-models}/entreetuyaux/tuyaux_Metallic.png (100%) rename public/{models => old-models}/entreetuyaux/tuyaux_Mixed_AO.png (100%) rename public/{models => old-models}/entreetuyaux/tuyaux_Normal.png (100%) rename public/{models => old-models}/entreetuyaux/tuyaux_Normal_OpenGL.png (100%) rename public/{models => old-models}/entreetuyaux/tuyaux_Opacity.png (100%) rename public/{models => old-models}/entreetuyaux/tuyaux_Roughness.png (100%) rename public/{models => old-models}/eolienne/cul_base_color.png (100%) rename public/{models => old-models}/eolienne/cul_height.png (100%) rename public/{models => old-models}/eolienne/cul_metallic.png (100%) rename public/{models => old-models}/eolienne/cul_mixed_ao.png (100%) rename public/{models => old-models}/eolienne/cul_normal.png (100%) rename public/{models => old-models}/eolienne/cul_normal_opengl.png (100%) rename public/{models => old-models}/eolienne/cul_roughness.png (100%) rename public/{models => old-models}/eolienne/feuilles1st_base_color.png (100%) rename public/{models => old-models}/eolienne/feuilles1st_height.png (100%) rename public/{models => old-models}/eolienne/feuilles1st_metallic.png (100%) rename public/{models => old-models}/eolienne/feuilles1st_mixed_ao.png (100%) rename public/{models => old-models}/eolienne/feuilles1st_normal.png (100%) rename public/{models => old-models}/eolienne/feuilles1st_normal_opengl.png (100%) rename public/{models => old-models}/eolienne/feuilles1st_roughness.png (100%) rename public/{models => old-models}/eolienne/feuilles2nd_base_color.png (100%) rename public/{models => old-models}/eolienne/feuilles2nd_height.png (100%) rename public/{models => old-models}/eolienne/feuilles2nd_metallic.png (100%) rename public/{models => old-models}/eolienne/feuilles2nd_mixed_ao.png (100%) rename public/{models => old-models}/eolienne/feuilles2nd_normal.png (100%) rename public/{models => old-models}/eolienne/feuilles2nd_normal_opengl.png (100%) rename public/{models => old-models}/eolienne/feuilles2nd_roughness.png (100%) rename public/{models => old-models}/eolienne/he_lisse_base_color.png (100%) rename public/{models => old-models}/eolienne/he_lisse_height.png (100%) rename public/{models => old-models}/eolienne/he_lisse_metallic.png (100%) rename public/{models => old-models}/eolienne/he_lisse_mixed_ao.png (100%) rename public/{models => old-models}/eolienne/he_lisse_normal.png (100%) rename public/{models => old-models}/eolienne/he_lisse_normal_opengl.png (100%) rename public/{models => old-models}/eolienne/he_lisse_opacity.png (100%) rename public/{models => old-models}/eolienne/he_lisse_roughness.png (100%) rename public/{models => old-models}/eolienne/model.gltf (100%) rename public/{models => old-models}/eolienne/moteur_base_color.png (100%) rename public/{models => old-models}/eolienne/moteur_height.png (100%) rename public/{models => old-models}/eolienne/moteur_metallic.png (100%) rename public/{models => old-models}/eolienne/moteur_mixed_ao.png (100%) rename public/{models => old-models}/eolienne/moteur_normal.png (100%) rename public/{models => old-models}/eolienne/moteur_normal_opengl.png (100%) rename public/{models => old-models}/eolienne/moteur_roughness.png (100%) rename public/{models => old-models}/eolienne/pied_base_color.png (100%) rename public/{models => old-models}/eolienne/pied_height.png (100%) rename public/{models => old-models}/eolienne/pied_metallic.png (100%) rename public/{models => old-models}/eolienne/pied_mixed_ao.png (100%) rename public/{models => old-models}/eolienne/pied_normal.png (100%) rename public/{models => old-models}/eolienne/pied_normal_opengl.png (100%) rename public/{models => old-models}/eolienne/pied_roughness.png (100%) rename public/{models => old-models}/eolienne/tiges1st_base_color.png (100%) rename public/{models => old-models}/eolienne/tiges1st_height.png (100%) rename public/{models => old-models}/eolienne/tiges1st_metallic.png (100%) rename public/{models => old-models}/eolienne/tiges1st_mixed_ao.png (100%) rename public/{models => old-models}/eolienne/tiges1st_normal.png (100%) rename public/{models => old-models}/eolienne/tiges1st_normal_opengl.png (100%) rename public/{models => old-models}/eolienne/tiges1st_roughness.png (100%) rename public/{models => old-models}/eolienne/tiges2nd_base_color.png (100%) rename public/{models => old-models}/eolienne/tiges2nd_height.png (100%) rename public/{models => old-models}/eolienne/tiges2nd_metallic.png (100%) rename public/{models => old-models}/eolienne/tiges2nd_mixed_ao.png (100%) rename public/{models => old-models}/eolienne/tiges2nd_normal.png (100%) rename public/{models => old-models}/eolienne/tiges2nd_normal_opengl.png (100%) rename public/{models => old-models}/eolienne/tiges2nd_roughness.png (100%) rename public/{models => old-models}/fermeverticale/ferme verticale.bin (100%) rename public/{models => old-models}/fermeverticale/fermeverticale_baseColor.png (100%) rename public/{models => old-models}/fermeverticale/fermeverticale_normal.png (100%) rename public/{models => old-models}/fermeverticale/fermeverticale_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/fermeverticale/model.gltf (100%) rename public/{models => old-models}/fermier-animated/DefaultMaterial_diffuse.png (100%) rename public/{models => old-models}/fermier-animated/DefaultMaterial_normal.png (100%) rename public/{models => old-models}/fermier-animated/model.bin (100%) rename public/{models => old-models}/fermier-animated/model.gltf (100%) rename public/{models => old-models}/fermier/defaultmaterial_basecolor.png (100%) rename public/{models => old-models}/fermier/defaultmaterial_normal.png (100%) rename public/{models => old-models}/fermier/defaultmaterial_occlusionroughnessmetallic.png (100%) rename public/{models => old-models}/fermier/fermier.bin (100%) rename public/{models => old-models}/fermier/model.gltf (100%) rename public/{models => old-models}/galet/galet.bin (100%) rename public/{models => old-models}/galet/galet_basecolor.png (100%) rename public/{models => old-models}/galet/galet_normal.png (100%) rename public/{models => old-models}/galet/galet_occlusionroughnessmetallic.png (100%) rename public/{models => old-models}/galet/model.gltf (100%) rename public/{models => old-models}/gant_l/gant_basecolor.png (100%) rename public/{models => old-models}/gant_l/gant_normal.png (100%) rename public/{models => old-models}/gant_l/gant_occlusionroughnessmetallic.png (100%) rename public/{models => old-models}/gant_l/hanf_l.bin (100%) rename public/{models => old-models}/gant_l/model.gltf (100%) rename public/{models => old-models}/gant_l_pad/galet_basecolor.png (100%) rename public/{models => old-models}/gant_l_pad/galet_normal.png (100%) rename public/{models => old-models}/gant_l_pad/galet_occlusionroughnessmetallic.png (100%) rename public/{models => old-models}/gant_l_pad/gant_basecolor.png (100%) rename public/{models => old-models}/gant_l_pad/gant_normal.png (100%) rename public/{models => old-models}/gant_l_pad/gant_occlusionroughnessmetallic.png (100%) rename public/{models => old-models}/gant_l_pad/gants.bin (100%) rename public/{models => old-models}/gant_l_pad/model.gltf (100%) rename public/{models => old-models}/gant_r/galet_baseColor.png (100%) rename public/{models => old-models}/gant_r/galet_normal.png (100%) rename public/{models => old-models}/gant_r/galet_occlusionRoughnessMetallic.png (100%) rename public/{models/gant_r/gant_basecolor.png => old-models/gant_r/gant_baseColor.png} (100%) rename public/{models => old-models}/gant_r/gant_normal.png (100%) rename public/{models/gant_r/gant_occlusionroughnessmetallic.png => old-models/gant_r/gant_occlusionRoughnessMetallic.png} (100%) rename public/{models => old-models}/gant_r/gant_r.bin (100%) rename public/{models => old-models}/gant_r/model.bin (100%) rename public/{models => old-models}/gant_r/model.glb (100%) rename public/{models => old-models}/gant_r/model.gltf (100%) rename public/{models => old-models}/gant_r_pad/galet_basecolor.png (100%) rename public/{models => old-models}/gant_r_pad/galet_normal.png (100%) rename public/{models => old-models}/gant_r_pad/galet_occlusionroughnessmetallic.png (100%) rename public/{models => old-models}/gant_r_pad/gant_basecolor.png (100%) rename public/{models => old-models}/gant_r_pad/gant_normal.png (100%) rename public/{models => old-models}/gant_r_pad/gant_occlusionroughnessmetallic.png (100%) rename public/{models => old-models}/gant_r_pad/gant_r_pad.bin (100%) rename public/{models => old-models}/gant_r_pad/model.gltf (100%) rename public/{models => old-models}/gerant/defaultmaterial_base_color.png (100%) rename public/{models => old-models}/gerant/defaultmaterial_basecolor.png (100%) rename public/{models => old-models}/gerant/defaultmaterial_height.png (100%) rename public/{models => old-models}/gerant/defaultmaterial_metallic.png (100%) rename public/{models => old-models}/gerant/defaultmaterial_normal.png (100%) rename public/{models => old-models}/gerant/defaultmaterial_normal_opengl.png (100%) rename public/{models => old-models}/gerant/defaultmaterial_occlusionroughnessmetallic.png (100%) rename public/{models => old-models}/gerant/defaultmaterial_roughness.png (100%) rename public/{models => old-models}/gerant/gerant.bin (100%) rename public/{models => old-models}/gerant/model.gltf (100%) rename public/{models => old-models}/gerant_anim/DefaultMaterial_Normal.png (100%) rename public/{models => old-models}/gerant_anim/DefaultMaterial_diffuse.png (100%) rename public/{models => old-models}/gerant_anim/model.bin (100%) rename public/{models => old-models}/gerant_anim/model.gltf (100%) rename public/{models => old-models}/habitant1-animated/model.bin (100%) rename public/{models => old-models}/habitant1-animated/model.gltf (100%) rename public/{models => old-models}/habitant1-animated/pnj1_diffuse.png (100%) rename public/{models => old-models}/habitant1-animated/pnj1_normal.png (100%) rename public/{models => old-models}/habitant1/model.gltf (100%) rename public/{models => old-models}/habitant1/pnj1.bin (100%) rename public/{models => old-models}/habitant1/pnj1_baseColor.png (100%) rename public/{models => old-models}/habitant1/pnj1_normal.png (100%) rename public/{models => old-models}/habitant1/pnj1_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/habitant2-animated/habitant2_diffuse.png (100%) rename public/{models => old-models}/habitant2-animated/habitant2_normal.png (100%) rename public/{models => old-models}/habitant2-animated/model.bin (100%) rename public/{models => old-models}/habitant2-animated/model.gltf (100%) rename public/{models => old-models}/habitant2/habitant2_baseColor.png (100%) rename public/{models => old-models}/habitant2/habitant2_normal.png (100%) rename public/{models => old-models}/habitant2/habitant2_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/habitant2/model.gltf (100%) rename public/{models => old-models}/habitant2/pnj2.bin (100%) rename public/{models => old-models}/immeuble1/fenetre_baseColor.png (100%) rename public/{models => old-models}/immeuble1/fenetre_normal.png (100%) rename public/{models => old-models}/immeuble1/fenetre_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/immeuble1/immeuble1.bin (100%) rename public/{models => old-models}/immeuble1/maison_baseColor.png (100%) rename public/{models => old-models}/immeuble1/maison_normal.png (100%) rename public/{models => old-models}/immeuble1/maison_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/immeuble1/model.gltf (100%) rename public/{models => old-models}/immeuble1/panneau_baseColor.png (100%) rename public/{models => old-models}/immeuble1/panneau_normal.png (100%) rename public/{models => old-models}/immeuble1/panneau_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/immeuble1/porte_baseColor.png (100%) rename public/{models => old-models}/immeuble1/porte_normal.png (100%) rename public/{models => old-models}/immeuble1/porte_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/lafabrik/anneaux_base_color.png (100%) rename public/{models => old-models}/lafabrik/anneaux_basecolor.png (100%) rename public/{models => old-models}/lafabrik/anneaux_height.png (100%) rename public/{models => old-models}/lafabrik/anneaux_metallic.png (100%) rename public/{models => old-models}/lafabrik/anneaux_mixed_ao.png (100%) rename public/{models => old-models}/lafabrik/anneaux_normal.png (100%) rename public/{models => old-models}/lafabrik/anneaux_normal_opengl.png (100%) rename public/{models => old-models}/lafabrik/anneaux_occlusionroughnessmetallic.png (100%) rename public/{models => old-models}/lafabrik/anneaux_roughness.png (100%) rename public/{models => old-models}/lafabrik/bat_base_color.png (100%) rename public/{models => old-models}/lafabrik/bat_basecolor.png (100%) rename public/{models => old-models}/lafabrik/bat_height.png (100%) rename public/{models => old-models}/lafabrik/bat_metallic.png (100%) rename public/{models => old-models}/lafabrik/bat_mixed_ao.png (100%) rename public/{models => old-models}/lafabrik/bat_normal.png (100%) rename public/{models => old-models}/lafabrik/bat_normal_opengl.png (100%) rename public/{models => old-models}/lafabrik/bat_occlusionroughnessmetallic.png (100%) rename public/{models => old-models}/lafabrik/bat_roughness.png (100%) rename public/{models => old-models}/lafabrik/comptoir_base_color.png (100%) rename public/{models => old-models}/lafabrik/comptoir_basecolor.png (100%) rename public/{models => old-models}/lafabrik/comptoir_height.png (100%) rename public/{models => old-models}/lafabrik/comptoir_metallic.png (100%) rename public/{models => old-models}/lafabrik/comptoir_mixed_ao.png (100%) rename public/{models => old-models}/lafabrik/comptoir_normal.png (100%) rename public/{models => old-models}/lafabrik/comptoir_normal_opengl.png (100%) rename public/{models => old-models}/lafabrik/comptoir_occlusionroughnessmetallic.png (100%) rename public/{models => old-models}/lafabrik/comptoir_roughness.png (100%) rename public/{models => old-models}/lafabrik/dashboard_base_color.png (100%) rename public/{models => old-models}/lafabrik/dashboard_basecolor.png (100%) rename public/{models => old-models}/lafabrik/dashboard_height.png (100%) rename public/{models => old-models}/lafabrik/dashboard_metallic.png (100%) rename public/{models => old-models}/lafabrik/dashboard_mixed_ao.png (100%) rename public/{models => old-models}/lafabrik/dashboard_normal.png (100%) rename public/{models => old-models}/lafabrik/dashboard_normal_opengl.png (100%) rename public/{models => old-models}/lafabrik/dashboard_occlusionroughnessmetallic.png (100%) rename public/{models => old-models}/lafabrik/dashboard_roughness.png (100%) rename public/{models => old-models}/lafabrik/fenetre_0_base_color.png (100%) rename public/{models => old-models}/lafabrik/fenetre_0_basecolor.png (100%) rename public/{models => old-models}/lafabrik/fenetre_0_height.png (100%) rename public/{models => old-models}/lafabrik/fenetre_0_metallic.png (100%) rename public/{models => old-models}/lafabrik/fenetre_0_mixed_ao.png (100%) rename public/{models => old-models}/lafabrik/fenetre_0_normal.png (100%) rename public/{models => old-models}/lafabrik/fenetre_0_normal_opengl.png (100%) rename public/{models => old-models}/lafabrik/fenetre_0_occlusionroughnessmetallic.png (100%) rename public/{models => old-models}/lafabrik/fenetre_0_roughness.png (100%) rename public/{models => old-models}/lafabrik/model.bin (100%) rename public/{models => old-models}/lafabrik/model.gltf (100%) rename public/{models => old-models}/lafabrik/panneau_base_color.png (100%) rename public/{models => old-models}/lafabrik/panneau_basecolor.png (100%) rename public/{models => old-models}/lafabrik/panneau_height.png (100%) rename public/{models => old-models}/lafabrik/panneau_metallic.png (100%) rename public/{models => old-models}/lafabrik/panneau_mixed_ao.png (100%) rename public/{models => old-models}/lafabrik/panneau_normal.png (100%) rename public/{models => old-models}/lafabrik/panneau_normal_opengl.png (100%) rename public/{models => old-models}/lafabrik/panneau_occlusionroughnessmetallic.png (100%) rename public/{models => old-models}/lafabrik/panneau_roughness.png (100%) rename public/{models => old-models}/lafabrik/plan_de_travail_base_color.png (100%) rename public/{models => old-models}/lafabrik/plan_de_travail_basecolor.png (100%) rename public/{models => old-models}/lafabrik/plan_de_travail_height.png (100%) rename public/{models => old-models}/lafabrik/plan_de_travail_metallic.png (100%) rename public/{models => old-models}/lafabrik/plan_de_travail_mixed_ao.png (100%) rename public/{models => old-models}/lafabrik/plan_de_travail_normal.png (100%) rename public/{models => old-models}/lafabrik/plan_de_travail_normal_opengl.png (100%) rename public/{models => old-models}/lafabrik/plan_de_travail_occlusionroughnessmetallic.png (100%) rename public/{models => old-models}/lafabrik/plan_de_travail_roughness.png (100%) rename public/{models => old-models}/lafabrik/porte_base_color.png (100%) rename public/{models => old-models}/lafabrik/porte_basecolor.png (100%) rename public/{models => old-models}/lafabrik/porte_height.png (100%) rename public/{models => old-models}/lafabrik/porte_metallic.png (100%) rename public/{models => old-models}/lafabrik/porte_mixed_ao.png (100%) rename public/{models => old-models}/lafabrik/porte_normal.png (100%) rename public/{models => old-models}/lafabrik/porte_normal_opengl.png (100%) rename public/{models => old-models}/lafabrik/porte_occlusionroughnessmetallic.png (100%) rename public/{models => old-models}/lafabrik/porte_roughness.png (100%) rename public/{models => old-models}/lafabrik/porte_stock_base_color.png (100%) rename public/{models => old-models}/lafabrik/porte_stock_basecolor.png (100%) rename public/{models => old-models}/lafabrik/porte_stock_height.png (100%) rename public/{models => old-models}/lafabrik/porte_stock_metallic.png (100%) rename public/{models => old-models}/lafabrik/porte_stock_mixed_ao.png (100%) rename public/{models => old-models}/lafabrik/porte_stock_normal.png (100%) rename public/{models => old-models}/lafabrik/porte_stock_normal_opengl.png (100%) rename public/{models => old-models}/lafabrik/porte_stock_occlusionroughnessmetallic.png (100%) rename public/{models => old-models}/lafabrik/porte_stock_roughness.png (100%) rename public/{models => old-models}/lafabrik/stock_0_base_color.png (100%) rename public/{models => old-models}/lafabrik/stock_0_basecolor.png (100%) rename public/{models => old-models}/lafabrik/stock_0_height.png (100%) rename public/{models => old-models}/lafabrik/stock_0_metallic.png (100%) rename public/{models => old-models}/lafabrik/stock_0_mixed_ao.png (100%) rename public/{models => old-models}/lafabrik/stock_0_normal.png (100%) rename public/{models => old-models}/lafabrik/stock_0_normal_opengl.png (100%) rename public/{models => old-models}/lafabrik/stock_0_occlusionroughnessmetallic.png (100%) rename public/{models => old-models}/lafabrik/stock_0_roughness.png (100%) rename public/{models => old-models}/lafabrik/tiges_base_color.png (100%) rename public/{models => old-models}/lafabrik/tiges_basecolor.png (100%) rename public/{models => old-models}/lafabrik/tiges_height.png (100%) rename public/{models => old-models}/lafabrik/tiges_metallic.png (100%) rename public/{models => old-models}/lafabrik/tiges_mixed_ao.png (100%) rename public/{models => old-models}/lafabrik/tiges_normal.png (100%) rename public/{models => old-models}/lafabrik/tiges_normal_opengl.png (100%) rename public/{models => old-models}/lafabrik/tiges_occlusionroughnessmetallic.png (100%) rename public/{models => old-models}/lafabrik/tiges_roughness.png (100%) rename public/{models => old-models}/lafabrik/toit_base_color.png (100%) rename public/{models => old-models}/lafabrik/toit_basecolor.png (100%) rename public/{models => old-models}/lafabrik/toit_height.png (100%) rename public/{models => old-models}/lafabrik/toit_metallic.png (100%) rename public/{models => old-models}/lafabrik/toit_mixed_ao.png (100%) rename public/{models => old-models}/lafabrik/toit_normal.png (100%) rename public/{models => old-models}/lafabrik/toit_normal_opengl.png (100%) rename public/{models => old-models}/lafabrik/toit_occlusionroughnessmetallic.png (100%) rename public/{models => old-models}/lafabrik/toit_roughness.png (100%) rename public/{models => old-models}/lafabrik/tuyaux_base_color.png (100%) rename public/{models => old-models}/lafabrik/tuyaux_basecolor.png (100%) rename public/{models => old-models}/lafabrik/tuyaux_height.png (100%) rename public/{models => old-models}/lafabrik/tuyaux_metallic.png (100%) rename public/{models => old-models}/lafabrik/tuyaux_mixed_ao.png (100%) rename public/{models => old-models}/lafabrik/tuyaux_normal.png (100%) rename public/{models => old-models}/lafabrik/tuyaux_normal_opengl.png (100%) rename public/{models => old-models}/lafabrik/tuyaux_occlusionroughnessmetallic.png (100%) rename public/{models => old-models}/lafabrik/tuyaux_roughness.png (100%) rename public/{models => old-models}/lafabrik/verre_fenetre_base_color.png (100%) rename public/{models => old-models}/lafabrik/verre_fenetre_basecolor.png (100%) rename public/{models => old-models}/lafabrik/verre_fenetre_height.png (100%) rename public/{models => old-models}/lafabrik/verre_fenetre_metallic.png (100%) rename public/{models => old-models}/lafabrik/verre_fenetre_mixed_ao.png (100%) rename public/{models => old-models}/lafabrik/verre_fenetre_normal.png (100%) rename public/{models => old-models}/lafabrik/verre_fenetre_normal_opengl.png (100%) rename public/{models => old-models}/lafabrik/verre_fenetre_occlusionroughnessmetallic.png (100%) rename public/{models => old-models}/lafabrik/verre_fenetre_roughness.png (100%) rename public/{models => old-models}/maison1/contours_baseColor.png (100%) rename public/{models => old-models}/maison1/contours_normal.png (100%) rename public/{models => old-models}/maison1/contours_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/maison1/fenetre_baseColor.png (100%) rename public/{models => old-models}/maison1/fenetre_normal.png (100%) rename public/{models => old-models}/maison1/fenetre_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/maison1/maison.bin (100%) rename public/{models => old-models}/maison1/maison_baseColor.png (100%) rename public/{models => old-models}/maison1/maison_normal.png (100%) rename public/{models => old-models}/maison1/maison_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/maison1/model.gltf (100%) rename public/{models => old-models}/maison1/panneau_baseColor.png (100%) rename public/{models => old-models}/maison1/panneau_normal.png (100%) rename public/{models => old-models}/maison1/panneau_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/maison1/porte_baseColor.png (100%) rename public/{models => old-models}/maison1/porte_normal.png (100%) rename public/{models => old-models}/maison1/porte_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/maison1/toit_baseColor.png (100%) rename public/{models => old-models}/maison1/toit_normal.png (100%) rename public/{models => old-models}/maison1/toit_occlusionRoughnessMetallic.png (100%) rename public/{models/packderelance/cabledroit_base_color.png => old-models/packderelance/cabledroit_Base_color.png} (100%) rename public/{models/packderelance/cabledroit_normal.png => old-models/packderelance/cabledroit_Normal.png} (100%) rename public/{models => old-models}/packderelance/cabledroit_height.png (100%) rename public/{models => old-models}/packderelance/cabledroit_metallic.png (100%) rename public/{models => old-models}/packderelance/cabledroit_mixed_ao.png (100%) rename public/{models => old-models}/packderelance/cabledroit_normal_opengl.png (100%) rename public/{models => old-models}/packderelance/cabledroit_roughness.png (100%) rename public/{models/packderelance/cablegauche_base_color.png => old-models/packderelance/cablegauche_Base_color.png} (100%) rename public/{models/packderelance/cablegauche_normal.png => old-models/packderelance/cablegauche_Normal.png} (100%) rename public/{models => old-models}/packderelance/cablegauche_height.png (100%) rename public/{models => old-models}/packderelance/cablegauche_metallic.png (100%) rename public/{models => old-models}/packderelance/cablegauche_mixed_ao.png (100%) rename public/{models => old-models}/packderelance/cablegauche_normal_opengl.png (100%) rename public/{models => old-models}/packderelance/cablegauche_roughness.png (100%) rename public/{models => old-models}/packderelance/charnie_res_base_color.png (100%) rename public/{models => old-models}/packderelance/charnie_res_height.png (100%) rename public/{models => old-models}/packderelance/charnie_res_metallic.png (100%) rename public/{models => old-models}/packderelance/charnie_res_mixed_ao.png (100%) rename public/{models => old-models}/packderelance/charnie_res_normal.png (100%) rename public/{models => old-models}/packderelance/charnie_res_normal_opengl.png (100%) rename public/{models => old-models}/packderelance/charnie_res_roughness.png (100%) rename public/{models => old-models}/packderelance/lock_base_color.png (100%) rename public/{models => old-models}/packderelance/lock_height.png (100%) rename public/{models => old-models}/packderelance/lock_metallic.png (100%) rename public/{models => old-models}/packderelance/lock_mixed_ao.png (100%) rename public/{models => old-models}/packderelance/lock_normal.png (100%) rename public/{models => old-models}/packderelance/lock_normal_opengl.png (100%) rename public/{models => old-models}/packderelance/lock_roughness.png (100%) rename public/{models => old-models}/packderelance/manchemart_base_color.png (100%) rename public/{models => old-models}/packderelance/manchemart_height.png (100%) rename public/{models => old-models}/packderelance/manchemart_metallic.png (100%) rename public/{models => old-models}/packderelance/manchemart_mixed_ao.png (100%) rename public/{models => old-models}/packderelance/manchemart_normal.png (100%) rename public/{models => old-models}/packderelance/manchemart_normal_opengl.png (100%) rename public/{models => old-models}/packderelance/manchemart_roughness.png (100%) rename public/{models => old-models}/packderelance/model.gltf (100%) rename public/{models => old-models}/packderelance/mousse_bas_base_color.png (100%) rename public/{models => old-models}/packderelance/mousse_bas_height.png (100%) rename public/{models => old-models}/packderelance/mousse_bas_metallic.png (100%) rename public/{models => old-models}/packderelance/mousse_bas_mixed_ao.png (100%) rename public/{models => old-models}/packderelance/mousse_bas_normal.png (100%) rename public/{models => old-models}/packderelance/mousse_bas_normal_opengl.png (100%) rename public/{models => old-models}/packderelance/mousse_bas_roughness.png (100%) rename public/{models => old-models}/packderelance/mousse_base_color.png (100%) rename public/{models => old-models}/packderelance/mousse_height.png (100%) rename public/{models => old-models}/packderelance/mousse_metallic.png (100%) rename public/{models => old-models}/packderelance/mousse_mixed_ao.png (100%) rename public/{models => old-models}/packderelance/mousse_normal.png (100%) rename public/{models => old-models}/packderelance/mousse_normal_opengl.png (100%) rename public/{models => old-models}/packderelance/mousse_roughness.png (100%) rename public/{models => old-models}/packderelance/patinf_base_color.png (100%) rename public/{models => old-models}/packderelance/patinf_height.png (100%) rename public/{models => old-models}/packderelance/patinf_metallic.png (100%) rename public/{models => old-models}/packderelance/patinf_mixed_ao.png (100%) rename public/{models => old-models}/packderelance/patinf_normal.png (100%) rename public/{models => old-models}/packderelance/patinf_normal_opengl.png (100%) rename public/{models => old-models}/packderelance/patinf_roughness.png (100%) rename public/{models => old-models}/packderelance/patsup_base_color.png (100%) rename public/{models => old-models}/packderelance/patsup_height.png (100%) rename public/{models => old-models}/packderelance/patsup_metallic.png (100%) rename public/{models => old-models}/packderelance/patsup_mixed_ao.png (100%) rename public/{models => old-models}/packderelance/patsup_normal.png (100%) rename public/{models => old-models}/packderelance/patsup_normal_opengl.png (100%) rename public/{models => old-models}/packderelance/patsup_roughness.png (100%) rename public/{models => old-models}/packderelance/puces_base_color.png (100%) rename public/{models => old-models}/packderelance/puces_height.png (100%) rename public/{models => old-models}/packderelance/puces_metallic.png (100%) rename public/{models => old-models}/packderelance/puces_mixed_ao.png (100%) rename public/{models => old-models}/packderelance/puces_normal.png (100%) rename public/{models => old-models}/packderelance/puces_normal_opengl.png (100%) rename public/{models => old-models}/packderelance/puces_roughness.png (100%) rename public/{models => old-models}/packderelance/tetemart_base_color.png (100%) rename public/{models => old-models}/packderelance/tetemart_height.png (100%) rename public/{models => old-models}/packderelance/tetemart_metallic.png (100%) rename public/{models => old-models}/packderelance/tetemart_mixed_ao.png (100%) rename public/{models => old-models}/packderelance/tetemart_normal.png (100%) rename public/{models => old-models}/packderelance/tetemart_normal_opengl.png (100%) rename public/{models => old-models}/packderelance/tetemart_roughness.png (100%) rename public/{models => old-models}/panneauaffichage/affichage_Base_color.png (100%) rename public/{models => old-models}/panneauaffichage/affichage_Height.png (100%) rename public/{models => old-models}/panneauaffichage/affichage_Metallic.png (100%) rename public/{models => old-models}/panneauaffichage/affichage_Mixed_AO.png (100%) rename public/{models => old-models}/panneauaffichage/affichage_Normal.png (100%) rename public/{models => old-models}/panneauaffichage/affichage_Normal_OpenGL.png (100%) rename public/{models => old-models}/panneauaffichage/affichage_Roughness.png (100%) rename public/{models => old-models}/panneauaffichage/affiche1_Base_color.png (100%) rename public/{models => old-models}/panneauaffichage/affiche1_Height.png (100%) rename public/{models => old-models}/panneauaffichage/affiche1_Metallic.png (100%) rename public/{models => old-models}/panneauaffichage/affiche1_Mixed_AO.png (100%) rename public/{models => old-models}/panneauaffichage/affiche1_Normal.png (100%) rename public/{models => old-models}/panneauaffichage/affiche1_Normal_OpenGL.png (100%) rename public/{models => old-models}/panneauaffichage/affiche1_Roughness.png (100%) rename public/{models => old-models}/panneauaffichage/affiche2_Base_color.png (100%) rename public/{models => old-models}/panneauaffichage/affiche2_Height.png (100%) rename public/{models => old-models}/panneauaffichage/affiche2_Metallic.png (100%) rename public/{models => old-models}/panneauaffichage/affiche2_Mixed_AO.png (100%) rename public/{models => old-models}/panneauaffichage/affiche2_Normal.png (100%) rename public/{models => old-models}/panneauaffichage/affiche2_Normal_OpenGL.png (100%) rename public/{models => old-models}/panneauaffichage/affiche2_Roughness.png (100%) rename public/{models => old-models}/panneauaffichage/affiche3_Base_color.png (100%) rename public/{models => old-models}/panneauaffichage/affiche3_Height.png (100%) rename public/{models => old-models}/panneauaffichage/affiche3_Metallic.png (100%) rename public/{models => old-models}/panneauaffichage/affiche3_Mixed_AO.png (100%) rename public/{models => old-models}/panneauaffichage/affiche3_Normal.png (100%) rename public/{models => old-models}/panneauaffichage/affiche3_Normal_OpenGL.png (100%) rename public/{models => old-models}/panneauaffichage/affiche3_Roughness.png (100%) rename public/{models => old-models}/panneauaffichage/affiche4_Base_color.png (100%) rename public/{models => old-models}/panneauaffichage/affiche4_Height.png (100%) rename public/{models => old-models}/panneauaffichage/affiche4_Metallic.png (100%) rename public/{models => old-models}/panneauaffichage/affiche4_Mixed_AO.png (100%) rename public/{models => old-models}/panneauaffichage/affiche4_Normal.png (100%) rename public/{models => old-models}/panneauaffichage/affiche4_Normal_OpenGL.png (100%) rename public/{models => old-models}/panneauaffichage/affiche4_Roughness.png (100%) rename public/{models => old-models}/panneauaffichage/afficheprincipal_Base_color.png (100%) rename public/{models => old-models}/panneauaffichage/afficheprincipal_Height.png (100%) rename public/{models => old-models}/panneauaffichage/afficheprincipal_Metallic.png (100%) rename public/{models => old-models}/panneauaffichage/afficheprincipal_Mixed_AO.png (100%) rename public/{models => old-models}/panneauaffichage/afficheprincipal_Normal.png (100%) rename public/{models => old-models}/panneauaffichage/afficheprincipal_Normal_OpenGL.png (100%) rename public/{models => old-models}/panneauaffichage/afficheprincipal_Roughness.png (100%) rename public/{models => old-models}/panneauaffichage/cadranhoribas_Base_color.png (100%) rename public/{models => old-models}/panneauaffichage/cadranhoribas_Height.png (100%) rename public/{models => old-models}/panneauaffichage/cadranhoribas_Metallic.png (100%) rename public/{models => old-models}/panneauaffichage/cadranhoribas_Mixed_AO.png (100%) rename public/{models => old-models}/panneauaffichage/cadranhoribas_Normal.png (100%) rename public/{models => old-models}/panneauaffichage/cadranhoribas_Normal_OpenGL.png (100%) rename public/{models => old-models}/panneauaffichage/cadranhoribas_Roughness.png (100%) rename public/{models => old-models}/panneauaffichage/cadranhorihaut_Base_color.png (100%) rename public/{models => old-models}/panneauaffichage/cadranhorihaut_Height.png (100%) rename public/{models => old-models}/panneauaffichage/cadranhorihaut_Metallic.png (100%) rename public/{models => old-models}/panneauaffichage/cadranhorihaut_Mixed_AO.png (100%) rename public/{models => old-models}/panneauaffichage/cadranhorihaut_Normal.png (100%) rename public/{models => old-models}/panneauaffichage/cadranhorihaut_Normal_OpenGL.png (100%) rename public/{models => old-models}/panneauaffichage/cadranhorihaut_Roughness.png (100%) rename public/{models => old-models}/panneauaffichage/cadranvertidroite_Base_color.png (100%) rename public/{models => old-models}/panneauaffichage/cadranvertidroite_Height.png (100%) rename public/{models => old-models}/panneauaffichage/cadranvertidroite_Metallic.png (100%) rename public/{models => old-models}/panneauaffichage/cadranvertidroite_Mixed_AO.png (100%) rename public/{models => old-models}/panneauaffichage/cadranvertidroite_Normal.png (100%) rename public/{models => old-models}/panneauaffichage/cadranvertidroite_Normal_OpenGL.png (100%) rename public/{models => old-models}/panneauaffichage/cadranvertidroite_Roughness.png (100%) rename public/{models => old-models}/panneauaffichage/cadranvertigauche_Base_color.png (100%) rename public/{models => old-models}/panneauaffichage/cadranvertigauche_Height.png (100%) rename public/{models => old-models}/panneauaffichage/cadranvertigauche_Metallic.png (100%) rename public/{models => old-models}/panneauaffichage/cadranvertigauche_Mixed_AO.png (100%) rename public/{models => old-models}/panneauaffichage/cadranvertigauche_Normal.png (100%) rename public/{models => old-models}/panneauaffichage/cadranvertigauche_Normal_OpenGL.png (100%) rename public/{models => old-models}/panneauaffichage/cadranvertigauche_Roughness.png (100%) rename public/{models => old-models}/panneauaffichage/model.gltf (100%) rename public/{models => old-models}/panneauaffichage/pin_Base_color.png (100%) rename public/{models => old-models}/panneauaffichage/pin_Height.png (100%) rename public/{models => old-models}/panneauaffichage/pin_Metallic.png (100%) rename public/{models => old-models}/panneauaffichage/pin_Mixed_AO.png (100%) rename public/{models => old-models}/panneauaffichage/pin_Normal.png (100%) rename public/{models => old-models}/panneauaffichage/pin_Normal_OpenGL.png (100%) rename public/{models => old-models}/panneauaffichage/pin_Roughness.png (100%) rename public/{models => old-models}/panneauclassique/model.gltf (100%) rename public/{models => old-models}/panneaufleche/model.gltf (100%) rename public/{models => old-models}/persoprincipal-animated/DefaultMaterial_diffuse-DefaultMaterial_diffuse.png.png (100%) rename public/{models => old-models}/persoprincipal-animated/DefaultMaterial_normal.png (100%) rename public/{models => old-models}/persoprincipal-animated/model.bin (100%) rename public/{models => old-models}/persoprincipal-animated/model.gltf (100%) rename public/{models => old-models}/persoprincipal/defaultmaterial_basecolor.png (100%) rename public/{models => old-models}/persoprincipal/defaultmaterial_normal.png (100%) rename public/{models => old-models}/persoprincipal/defaultmaterial_occlusionroughnessmetallic.png (100%) rename public/{models => old-models}/persoprincipal/mc.bin (100%) rename public/{models => old-models}/persoprincipal/model.gltf (100%) rename public/{models => old-models}/potager/potager.bin (100%) rename public/{models => old-models}/potager/potager.gltf (100%) rename public/{models => old-models}/potager/potager_baseColor.png (100%) rename public/{models => old-models}/potager/potager_normal.png (100%) rename public/{models => old-models}/potager/potager_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/puce/model.gltf (100%) rename public/{models => old-models}/puce/puces_Base_color.png (100%) rename public/{models => old-models}/puce/puces_Height.png (100%) rename public/{models => old-models}/puce/puces_Metallic.png (100%) rename public/{models => old-models}/puce/puces_Mixed_AO.png (100%) rename public/{models => old-models}/puce/puces_Normal.png (100%) rename public/{models => old-models}/puce/puces_Normal_OpenGL.png (100%) rename public/{models => old-models}/puce/puces_Roughness.png (100%) rename public/{models => old-models}/pylone/cable1_base_color.png (100%) rename public/{models => old-models}/pylone/cable1_height.png (100%) rename public/{models => old-models}/pylone/cable1_metallic.png (100%) rename public/{models => old-models}/pylone/cable1_mixed_ao.png (100%) rename public/{models => old-models}/pylone/cable1_normal.png (100%) rename public/{models => old-models}/pylone/cable1_normal_opengl.png (100%) rename public/{models => old-models}/pylone/cable1_roughness.png (100%) rename public/{models => old-models}/pylone/cable2_base_color.png (100%) rename public/{models => old-models}/pylone/cable2_height.png (100%) rename public/{models => old-models}/pylone/cable2_metallic.png (100%) rename public/{models => old-models}/pylone/cable2_mixed_ao.png (100%) rename public/{models => old-models}/pylone/cable2_normal.png (100%) rename public/{models => old-models}/pylone/cable2_normal_opengl.png (100%) rename public/{models => old-models}/pylone/cable2_roughness.png (100%) rename public/{models => old-models}/pylone/chap_base_color.png (100%) rename public/{models => old-models}/pylone/chap_height.png (100%) rename public/{models => old-models}/pylone/chap_metallic.png (100%) rename public/{models => old-models}/pylone/chap_mixed_ao.png (100%) rename public/{models => old-models}/pylone/chap_normal.png (100%) rename public/{models => old-models}/pylone/chap_normal_opengl.png (100%) rename public/{models => old-models}/pylone/chap_roughness.png (100%) rename public/{models => old-models}/pylone/lampe_base_color.png (100%) rename public/{models => old-models}/pylone/lampe_height.png (100%) rename public/{models => old-models}/pylone/lampe_metallic.png (100%) rename public/{models => old-models}/pylone/lampe_mixed_ao.png (100%) rename public/{models => old-models}/pylone/lampe_normal.png (100%) rename public/{models => old-models}/pylone/lampe_normal_opengl.png (100%) rename public/{models => old-models}/pylone/lampe_opacity.png (100%) rename public/{models => old-models}/pylone/lampe_roughness.png (100%) rename public/{models => old-models}/pylone/model.gltf (100%) rename public/{models => old-models}/pylone/panneaux_base_color.png (100%) rename public/{models => old-models}/pylone/panneaux_height.png (100%) rename public/{models => old-models}/pylone/panneaux_metallic.png (100%) rename public/{models => old-models}/pylone/panneaux_mixed_ao.png (100%) rename public/{models => old-models}/pylone/panneaux_normal.png (100%) rename public/{models => old-models}/pylone/panneaux_normal_opengl.png (100%) rename public/{models => old-models}/pylone/panneaux_roughness.png (100%) rename public/{models => old-models}/pylone/pied_base_color.png (100%) rename public/{models => old-models}/pylone/pied_height.png (100%) rename public/{models => old-models}/pylone/pied_metallic.png (100%) rename public/{models => old-models}/pylone/pied_mixed_ao.png (100%) rename public/{models => old-models}/pylone/pied_normal.png (100%) rename public/{models => old-models}/pylone/pied_normal_opengl.png (100%) rename public/{models => old-models}/pylone/pied_roughness.png (100%) rename public/{models => old-models}/pylone/puces_base_color.png (100%) rename public/{models => old-models}/pylone/puces_height.png (100%) rename public/{models => old-models}/pylone/puces_metallic.png (100%) rename public/{models => old-models}/pylone/puces_mixed_ao.png (100%) rename public/{models => old-models}/pylone/puces_normal.png (100%) rename public/{models => old-models}/pylone/puces_normal_opengl.png (100%) rename public/{models => old-models}/pylone/puces_roughness.png (100%) rename public/{models => old-models}/refroidisseur/model.bin (100%) rename public/{models => old-models}/refroidisseur/model.gltf (100%) rename public/{models => old-models}/refroidisseur/refroidisseur_base_color.png (100%) rename public/{models => old-models}/refroidisseur/refroidisseur_height.png (100%) rename public/{models => old-models}/refroidisseur/refroidisseur_metallic.png (100%) rename public/{models => old-models}/refroidisseur/refroidisseur_mixed_ao.png (100%) rename public/{models => old-models}/refroidisseur/refroidisseur_normal.png (100%) rename public/{models => old-models}/refroidisseur/refroidisseur_normal_opengl.png (100%) rename public/{models => old-models}/refroidisseur/refroidisseur_roughness.png (100%) rename public/{models => old-models}/sapin/mat.1_basecolor.png (100%) rename public/{models => old-models}/sapin/mat.1_normal.png (100%) rename public/{models => old-models}/sapin/mat.1_occlusionroughnessmetallic.png (100%) rename public/{models => old-models}/sapin/mat_basecolor.png (100%) rename public/{models => old-models}/sapin/mat_normal.png (100%) rename public/{models => old-models}/sapin/mat_occlusionroughnessmetallic.png (100%) rename public/{models => old-models}/sapin/model.gltf (100%) rename public/{models => old-models}/sapin/sapin.bin (100%) rename public/{models => old-models}/sky/model.glb (100%) rename public/{models => old-models}/skybox/skybox.bin (100%) rename public/{models => old-models}/skybox/skybox.glb (100%) rename public/{models => old-models}/skybox/skybox.gltf (100%) rename public/{models => old-models}/skybox/skybox_baseColor.png (100%) rename public/{models => old-models}/skybox/skybox_normal.png (100%) rename public/{models => old-models}/skybox/skybox_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/talkie/antenne_Base_color.png (100%) rename public/{models => old-models}/talkie/antenne_Height.png (100%) rename public/{models => old-models}/talkie/antenne_Metallic.png (100%) rename public/{models => old-models}/talkie/antenne_Mixed_AO.png (100%) rename public/{models/talkie/antenne_normal.png => old-models/talkie/antenne_Normal.png} (100%) rename public/{models/talkie/antenne_normal_opengl.png => old-models/talkie/antenne_Normal_OpenGL.png} (100%) rename public/{models => old-models}/talkie/antenne_Roughness.png (100%) rename public/{models => old-models}/talkie/boutona_Base_color.png (100%) rename public/{models => old-models}/talkie/boutona_Height.png (100%) rename public/{models => old-models}/talkie/boutona_Metallic.png (100%) rename public/{models => old-models}/talkie/boutona_Mixed_AO.png (100%) rename public/{models/talkie/boutona_normal.png => old-models/talkie/boutona_Normal.png} (100%) rename public/{models/talkie/boutona_normal_opengl.png => old-models/talkie/boutona_Normal_OpenGL.png} (100%) rename public/{models => old-models}/talkie/boutona_Roughness.png (100%) rename public/{models => old-models}/talkie/boutonb_Base_color.png (100%) rename public/{models => old-models}/talkie/boutonb_Height.png (100%) rename public/{models => old-models}/talkie/boutonb_Metallic.png (100%) rename public/{models => old-models}/talkie/boutonb_Mixed_AO.png (100%) rename public/{models/talkie/boutonb_normal.png => old-models/talkie/boutonb_Normal.png} (100%) rename public/{models/talkie/boutonb_normal_opengl.png => old-models/talkie/boutonb_Normal_OpenGL.png} (100%) rename public/{models => old-models}/talkie/boutonb_Roughness.png (100%) rename public/{models => old-models}/talkie/cable1_Base_color.png (100%) rename public/{models => old-models}/talkie/cable1_Height.png (100%) rename public/{models => old-models}/talkie/cable1_Metallic.png (100%) rename public/{models => old-models}/talkie/cable1_Mixed_AO.png (100%) rename public/{models/talkie/cable1_normal.png => old-models/talkie/cable1_Normal.png} (100%) rename public/{models/talkie/cable1_normal_opengl.png => old-models/talkie/cable1_Normal_OpenGL.png} (100%) rename public/{models => old-models}/talkie/cable1_Roughness.png (100%) rename public/{models => old-models}/talkie/cable2_Base_color.png (100%) rename public/{models => old-models}/talkie/cable2_Height.png (100%) rename public/{models => old-models}/talkie/cable2_Metallic.png (100%) rename public/{models => old-models}/talkie/cable2_Mixed_AO.png (100%) rename public/{models/talkie/cable2_normal.png => old-models/talkie/cable2_Normal.png} (100%) rename public/{models/talkie/cable2_normal_opengl.png => old-models/talkie/cable2_Normal_OpenGL.png} (100%) rename public/{models => old-models}/talkie/cable2_Roughness.png (100%) rename public/{models => old-models}/talkie/cadre_Base_color.png (100%) rename public/{models => old-models}/talkie/cadre_Height.png (100%) rename public/{models => old-models}/talkie/cadre_Metallic.png (100%) rename public/{models => old-models}/talkie/cadre_Mixed_AO.png (100%) rename public/{models/talkie/cadre_normal.png => old-models/talkie/cadre_Normal.png} (100%) rename public/{models/talkie/cadre_normal_opengl.png => old-models/talkie/cadre_Normal_OpenGL.png} (100%) rename public/{models => old-models}/talkie/cadre_Roughness.png (100%) rename public/{models => old-models}/talkie/e_cran_base_color.png (100%) rename public/{models => old-models}/talkie/e_cran_height.png (100%) rename public/{models => old-models}/talkie/e_cran_metallic.png (100%) rename public/{models => old-models}/talkie/e_cran_mixed_ao.png (100%) rename public/{models => old-models}/talkie/e_cran_normal.png (100%) rename public/{models => old-models}/talkie/e_cran_normal_opengl.png (100%) rename public/{models => old-models}/talkie/e_cran_roughness.png (100%) rename public/{models => old-models}/talkie/hautparleur_Base_color.png (100%) rename public/{models => old-models}/talkie/hautparleur_Height.png (100%) rename public/{models => old-models}/talkie/hautparleur_Metallic.png (100%) rename public/{models => old-models}/talkie/hautparleur_Mixed_AO.png (100%) rename public/{models/talkie/hautparleur_normal.png => old-models/talkie/hautparleur_Normal.png} (100%) rename public/{models/talkie/hautparleur_normal_opengl.png => old-models/talkie/hautparleur_Normal_OpenGL.png} (100%) rename public/{models => old-models}/talkie/hautparleur_Roughness.png (100%) rename public/{models => old-models}/talkie/model.bin (100%) rename public/{models => old-models}/talkie/model.gltf (100%) rename public/{models => old-models}/talkie/prise_Base_color.png (100%) rename public/{models => old-models}/talkie/prise_Height.png (100%) rename public/{models => old-models}/talkie/prise_Metallic.png (100%) rename public/{models => old-models}/talkie/prise_Mixed_AO.png (100%) rename public/{models/talkie/prise_normal.png => old-models/talkie/prise_Normal.png} (100%) rename public/{models/talkie/prise_normal_opengl.png => old-models/talkie/prise_Normal_OpenGL.png} (100%) rename public/{models => old-models}/talkie/prise_Roughness.png (100%) rename public/{models => old-models}/talkie/talkie_Base_color.png (100%) rename public/{models => old-models}/talkie/talkie_Height.png (100%) rename public/{models => old-models}/talkie/talkie_Metallic.png (100%) rename public/{models => old-models}/talkie/talkie_Mixed_AO.png (100%) rename public/{models/talkie/talkie_normal.png => old-models/talkie/talkie_Normal.png} (100%) rename public/{models/talkie/talkie_normal_opengl.png => old-models/talkie/talkie_Normal_OpenGL.png} (100%) rename public/{models => old-models}/talkie/talkie_Roughness.png (100%) rename public/{models => old-models}/talkie/touches_Base_color.png (100%) rename public/{models => old-models}/talkie/touches_Height.png (100%) rename public/{models => old-models}/talkie/touches_Metallic.png (100%) rename public/{models => old-models}/talkie/touches_Mixed_AO.png (100%) rename public/{models/talkie/touches_normal.png => old-models/talkie/touches_Normal.png} (100%) rename public/{models/talkie/touches_normal_opengl.png => old-models/talkie/touches_Normal_OpenGL.png} (100%) rename public/{models => old-models}/talkie/touches_Roughness.png (100%) rename public/{models => old-models}/talkie/écran_Base_color.png (100%) rename public/{models => old-models}/talkie/écran_Height.png (100%) rename public/{models => old-models}/talkie/écran_Metallic.png (100%) rename public/{models => old-models}/talkie/écran_Mixed_AO.png (100%) rename public/{models => old-models}/talkie/écran_Normal.png (100%) rename public/{models => old-models}/talkie/écran_Normal_OpenGL.png (100%) rename public/{models => old-models}/talkie/écran_Roughness.png (100%) rename public/{models => old-models}/terrain/model.gltf (100%) rename public/{models => old-models}/terrain/terrain.bin (100%) rename public/{models => old-models}/terrain/terrain.glb (100%) rename public/{models => old-models}/terrain/terrain_baseColor.png (100%) rename public/{models => old-models}/terrain/terrain_normal.png (100%) rename public/{models => old-models}/terrain/terrain_occlusionRoughnessMetallic.png (100%) rename public/{models => old-models}/tuyauxlac/model.gltf (100%) rename public/{models => old-models}/tuyauxlac/tuyaux_Base_color.png (100%) rename public/{models => old-models}/tuyauxlac/tuyaux_Height.png (100%) rename public/{models => old-models}/tuyauxlac/tuyaux_Metallic.png (100%) rename public/{models => old-models}/tuyauxlac/tuyaux_Mixed_AO.png (100%) rename public/{models => old-models}/tuyauxlac/tuyaux_Normal.png (100%) rename public/{models => old-models}/tuyauxlac/tuyaux_Normal_OpenGL.png (100%) rename public/{models => old-models}/tuyauxlac/tuyaux_Opacity.png (100%) rename public/{models => old-models}/tuyauxlac/tuyaux_Roughness.png (100%) rename public/{models => old-models}/tuyauxpuzzle/model.gltf (100%) rename public/{models => old-models}/tuyauxpuzzle/tuyaux_Base_color.png (100%) rename public/{models => old-models}/tuyauxpuzzle/tuyaux_Height.png (100%) rename public/{models => old-models}/tuyauxpuzzle/tuyaux_Metallic.png (100%) rename public/{models => old-models}/tuyauxpuzzle/tuyaux_Mixed_AO.png (100%) rename public/{models => old-models}/tuyauxpuzzle/tuyaux_Normal.png (100%) rename public/{models => old-models}/tuyauxpuzzle/tuyaux_Normal_OpenGL.png (100%) rename public/{models => old-models}/tuyauxpuzzle/tuyaux_Opacity.png (100%) rename public/{models => old-models}/tuyauxpuzzle/tuyaux_Roughness.png (100%) rename public/{models => old-models}/vase/color.jpg (100%) rename public/{models => old-models}/vase/displace.jpg (100%) rename public/{models => old-models}/vase/metalness.jpg (100%) rename public/{models => old-models}/vase/model.gltf (100%) rename public/{models => old-models}/vase/normal.jpg (100%) rename public/{models => old-models}/vase/roughness.jpg (100%) diff --git a/public/models/arbre/arbre.bin b/public/old-models/arbre/arbre.bin similarity index 100% rename from public/models/arbre/arbre.bin rename to public/old-models/arbre/arbre.bin diff --git a/public/models/arbre/arbre.glb b/public/old-models/arbre/arbre.glb similarity index 100% rename from public/models/arbre/arbre.glb rename to public/old-models/arbre/arbre.glb diff --git a/public/models/arbre/arbre.spp b/public/old-models/arbre/arbre.spp similarity index 100% rename from public/models/arbre/arbre.spp rename to public/old-models/arbre/arbre.spp diff --git a/public/models/arbre/feuilles_baseColor.png b/public/old-models/arbre/feuilles_baseColor.png similarity index 100% rename from public/models/arbre/feuilles_baseColor.png rename to public/old-models/arbre/feuilles_baseColor.png diff --git a/public/models/arbre/feuilles_normal.png b/public/old-models/arbre/feuilles_normal.png similarity index 100% rename from public/models/arbre/feuilles_normal.png rename to public/old-models/arbre/feuilles_normal.png diff --git a/public/models/arbre/feuilles_occlusionRoughnessMetallic.png b/public/old-models/arbre/feuilles_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/arbre/feuilles_occlusionRoughnessMetallic.png rename to public/old-models/arbre/feuilles_occlusionRoughnessMetallic.png diff --git a/public/models/arbre/model.gltf b/public/old-models/arbre/model.gltf similarity index 100% rename from public/models/arbre/model.gltf rename to public/old-models/arbre/model.gltf diff --git a/public/models/arbre/tronc_baseColor.png b/public/old-models/arbre/tronc_baseColor.png similarity index 100% rename from public/models/arbre/tronc_baseColor.png rename to public/old-models/arbre/tronc_baseColor.png diff --git a/public/models/arbre/tronc_normal.png b/public/old-models/arbre/tronc_normal.png similarity index 100% rename from public/models/arbre/tronc_normal.png rename to public/old-models/arbre/tronc_normal.png diff --git a/public/models/arbre/tronc_occlusionRoughnessMetallic.png b/public/old-models/arbre/tronc_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/arbre/tronc_occlusionRoughnessMetallic.png rename to public/old-models/arbre/tronc_occlusionRoughnessMetallic.png diff --git a/public/models/blocking/DefaultMaterial_baseColor.png b/public/old-models/blocking/DefaultMaterial_baseColor.png similarity index 100% rename from public/models/blocking/DefaultMaterial_baseColor.png rename to public/old-models/blocking/DefaultMaterial_baseColor.png diff --git a/public/models/blocking/DefaultMaterial_normal.png b/public/old-models/blocking/DefaultMaterial_normal.png similarity index 100% rename from public/models/blocking/DefaultMaterial_normal.png rename to public/old-models/blocking/DefaultMaterial_normal.png diff --git a/public/models/blocking/DefaultMaterial_occlusionRoughnessMetallic.png b/public/old-models/blocking/DefaultMaterial_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/blocking/DefaultMaterial_occlusionRoughnessMetallic.png rename to public/old-models/blocking/DefaultMaterial_occlusionRoughnessMetallic.png diff --git a/public/models/blocking/blocking.bin b/public/old-models/blocking/blocking.bin similarity index 100% rename from public/models/blocking/blocking.bin rename to public/old-models/blocking/blocking.bin diff --git a/public/models/blocking/model.gltf b/public/old-models/blocking/model.gltf similarity index 100% rename from public/models/blocking/model.gltf rename to public/old-models/blocking/model.gltf diff --git a/public/models/blocking/terrain.gltf b/public/old-models/blocking/terrain.gltf similarity index 100% rename from public/models/blocking/terrain.gltf rename to public/old-models/blocking/terrain.gltf diff --git a/public/models/blocking/terrain_baseColor.png b/public/old-models/blocking/terrain_baseColor.png similarity index 100% rename from public/models/blocking/terrain_baseColor.png rename to public/old-models/blocking/terrain_baseColor.png diff --git a/public/models/blocking/terrain_normal.png b/public/old-models/blocking/terrain_normal.png similarity index 100% rename from public/models/blocking/terrain_normal.png rename to public/old-models/blocking/terrain_normal.png diff --git a/public/models/blocking/terrain_occlusionRoughnessMetallic.png b/public/old-models/blocking/terrain_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/blocking/terrain_occlusionRoughnessMetallic.png rename to public/old-models/blocking/terrain_occlusionRoughnessMetallic.png diff --git a/public/models/boiteimmeuble/boite_Base_color.png b/public/old-models/boiteimmeuble/boite_Base_color.png similarity index 100% rename from public/models/boiteimmeuble/boite_Base_color.png rename to public/old-models/boiteimmeuble/boite_Base_color.png diff --git a/public/models/boiteimmeuble/boite_Height.png b/public/old-models/boiteimmeuble/boite_Height.png similarity index 100% rename from public/models/boiteimmeuble/boite_Height.png rename to public/old-models/boiteimmeuble/boite_Height.png diff --git a/public/models/boiteimmeuble/boite_Metallic.png b/public/old-models/boiteimmeuble/boite_Metallic.png similarity index 100% rename from public/models/boiteimmeuble/boite_Metallic.png rename to public/old-models/boiteimmeuble/boite_Metallic.png diff --git a/public/models/boiteimmeuble/boite_Mixed_AO.png b/public/old-models/boiteimmeuble/boite_Mixed_AO.png similarity index 100% rename from public/models/boiteimmeuble/boite_Mixed_AO.png rename to public/old-models/boiteimmeuble/boite_Mixed_AO.png diff --git a/public/models/boiteimmeuble/boite_Normal.png b/public/old-models/boiteimmeuble/boite_Normal.png similarity index 100% rename from public/models/boiteimmeuble/boite_Normal.png rename to public/old-models/boiteimmeuble/boite_Normal.png diff --git a/public/models/boiteimmeuble/boite_Normal_OpenGL.png b/public/old-models/boiteimmeuble/boite_Normal_OpenGL.png similarity index 100% rename from public/models/boiteimmeuble/boite_Normal_OpenGL.png rename to public/old-models/boiteimmeuble/boite_Normal_OpenGL.png diff --git a/public/models/boiteimmeuble/boite_Roughness.png b/public/old-models/boiteimmeuble/boite_Roughness.png similarity index 100% rename from public/models/boiteimmeuble/boite_Roughness.png rename to public/old-models/boiteimmeuble/boite_Roughness.png diff --git a/public/models/boiteimmeuble/model.gltf b/public/old-models/boiteimmeuble/model.gltf similarity index 100% rename from public/models/boiteimmeuble/model.gltf rename to public/old-models/boiteimmeuble/model.gltf diff --git a/public/models/boiteimmeuble/pied_Base_color.png b/public/old-models/boiteimmeuble/pied_Base_color.png similarity index 100% rename from public/models/boiteimmeuble/pied_Base_color.png rename to public/old-models/boiteimmeuble/pied_Base_color.png diff --git a/public/models/boiteimmeuble/pied_Height.png b/public/old-models/boiteimmeuble/pied_Height.png similarity index 100% rename from public/models/boiteimmeuble/pied_Height.png rename to public/old-models/boiteimmeuble/pied_Height.png diff --git a/public/models/boiteimmeuble/pied_Metallic.png b/public/old-models/boiteimmeuble/pied_Metallic.png similarity index 100% rename from public/models/boiteimmeuble/pied_Metallic.png rename to public/old-models/boiteimmeuble/pied_Metallic.png diff --git a/public/models/boiteimmeuble/pied_Mixed_AO.png b/public/old-models/boiteimmeuble/pied_Mixed_AO.png similarity index 100% rename from public/models/boiteimmeuble/pied_Mixed_AO.png rename to public/old-models/boiteimmeuble/pied_Mixed_AO.png diff --git a/public/models/boiteimmeuble/pied_Normal.png b/public/old-models/boiteimmeuble/pied_Normal.png similarity index 100% rename from public/models/boiteimmeuble/pied_Normal.png rename to public/old-models/boiteimmeuble/pied_Normal.png diff --git a/public/models/boiteimmeuble/pied_Normal_OpenGL.png b/public/old-models/boiteimmeuble/pied_Normal_OpenGL.png similarity index 100% rename from public/models/boiteimmeuble/pied_Normal_OpenGL.png rename to public/old-models/boiteimmeuble/pied_Normal_OpenGL.png diff --git a/public/models/boiteimmeuble/pied_Roughness.png b/public/old-models/boiteimmeuble/pied_Roughness.png similarity index 100% rename from public/models/boiteimmeuble/pied_Roughness.png rename to public/old-models/boiteimmeuble/pied_Roughness.png diff --git a/public/models/boitesimple/boite_Base_color.png b/public/old-models/boitesimple/boite_Base_color.png similarity index 100% rename from public/models/boitesimple/boite_Base_color.png rename to public/old-models/boitesimple/boite_Base_color.png diff --git a/public/models/boitesimple/boite_Height.png b/public/old-models/boitesimple/boite_Height.png similarity index 100% rename from public/models/boitesimple/boite_Height.png rename to public/old-models/boitesimple/boite_Height.png diff --git a/public/models/boitesimple/boite_Metallic.png b/public/old-models/boitesimple/boite_Metallic.png similarity index 100% rename from public/models/boitesimple/boite_Metallic.png rename to public/old-models/boitesimple/boite_Metallic.png diff --git a/public/models/boitesimple/boite_Mixed_AO.png b/public/old-models/boitesimple/boite_Mixed_AO.png similarity index 100% rename from public/models/boitesimple/boite_Mixed_AO.png rename to public/old-models/boitesimple/boite_Mixed_AO.png diff --git a/public/models/boitesimple/boite_Normal.png b/public/old-models/boitesimple/boite_Normal.png similarity index 100% rename from public/models/boitesimple/boite_Normal.png rename to public/old-models/boitesimple/boite_Normal.png diff --git a/public/models/boitesimple/boite_Normal_OpenGL.png b/public/old-models/boitesimple/boite_Normal_OpenGL.png similarity index 100% rename from public/models/boitesimple/boite_Normal_OpenGL.png rename to public/old-models/boitesimple/boite_Normal_OpenGL.png diff --git a/public/models/boitesimple/boite_Roughness.png b/public/old-models/boitesimple/boite_Roughness.png similarity index 100% rename from public/models/boitesimple/boite_Roughness.png rename to public/old-models/boitesimple/boite_Roughness.png diff --git a/public/models/boitesimple/model.gltf b/public/old-models/boitesimple/model.gltf similarity index 100% rename from public/models/boitesimple/model.gltf rename to public/old-models/boitesimple/model.gltf diff --git a/public/models/boitesimple/notif_Base_color.png b/public/old-models/boitesimple/notif_Base_color.png similarity index 100% rename from public/models/boitesimple/notif_Base_color.png rename to public/old-models/boitesimple/notif_Base_color.png diff --git a/public/models/boitesimple/notif_Height.png b/public/old-models/boitesimple/notif_Height.png similarity index 100% rename from public/models/boitesimple/notif_Height.png rename to public/old-models/boitesimple/notif_Height.png diff --git a/public/models/boitesimple/notif_Metallic.png b/public/old-models/boitesimple/notif_Metallic.png similarity index 100% rename from public/models/boitesimple/notif_Metallic.png rename to public/old-models/boitesimple/notif_Metallic.png diff --git a/public/models/boitesimple/notif_Mixed_AO.png b/public/old-models/boitesimple/notif_Mixed_AO.png similarity index 100% rename from public/models/boitesimple/notif_Mixed_AO.png rename to public/old-models/boitesimple/notif_Mixed_AO.png diff --git a/public/models/boitesimple/notif_Normal.png b/public/old-models/boitesimple/notif_Normal.png similarity index 100% rename from public/models/boitesimple/notif_Normal.png rename to public/old-models/boitesimple/notif_Normal.png diff --git a/public/models/boitesimple/notif_Normal_OpenGL.png b/public/old-models/boitesimple/notif_Normal_OpenGL.png similarity index 100% rename from public/models/boitesimple/notif_Normal_OpenGL.png rename to public/old-models/boitesimple/notif_Normal_OpenGL.png diff --git a/public/models/boitesimple/notif_Roughness.png b/public/old-models/boitesimple/notif_Roughness.png similarity index 100% rename from public/models/boitesimple/notif_Roughness.png rename to public/old-models/boitesimple/notif_Roughness.png diff --git a/public/models/boitesimple/pied_Base_color.png b/public/old-models/boitesimple/pied_Base_color.png similarity index 100% rename from public/models/boitesimple/pied_Base_color.png rename to public/old-models/boitesimple/pied_Base_color.png diff --git a/public/models/boitesimple/pied_Height.png b/public/old-models/boitesimple/pied_Height.png similarity index 100% rename from public/models/boitesimple/pied_Height.png rename to public/old-models/boitesimple/pied_Height.png diff --git a/public/models/boitesimple/pied_Metallic.png b/public/old-models/boitesimple/pied_Metallic.png similarity index 100% rename from public/models/boitesimple/pied_Metallic.png rename to public/old-models/boitesimple/pied_Metallic.png diff --git a/public/models/boitesimple/pied_Mixed_AO.png b/public/old-models/boitesimple/pied_Mixed_AO.png similarity index 100% rename from public/models/boitesimple/pied_Mixed_AO.png rename to public/old-models/boitesimple/pied_Mixed_AO.png diff --git a/public/models/boitesimple/pied_Normal.png b/public/old-models/boitesimple/pied_Normal.png similarity index 100% rename from public/models/boitesimple/pied_Normal.png rename to public/old-models/boitesimple/pied_Normal.png diff --git a/public/models/boitesimple/pied_Normal_OpenGL.png b/public/old-models/boitesimple/pied_Normal_OpenGL.png similarity index 100% rename from public/models/boitesimple/pied_Normal_OpenGL.png rename to public/old-models/boitesimple/pied_Normal_OpenGL.png diff --git a/public/models/boitesimple/pied_Roughness.png b/public/old-models/boitesimple/pied_Roughness.png similarity index 100% rename from public/models/boitesimple/pied_Roughness.png rename to public/old-models/boitesimple/pied_Roughness.png diff --git a/public/models/buisson-animated/buisson.bin b/public/old-models/buisson-animated/buisson.bin similarity index 100% rename from public/models/buisson-animated/buisson.bin rename to public/old-models/buisson-animated/buisson.bin diff --git a/public/models/buisson-animated/buisson.glb b/public/old-models/buisson-animated/buisson.glb similarity index 100% rename from public/models/buisson-animated/buisson.glb rename to public/old-models/buisson-animated/buisson.glb diff --git a/public/models/buisson-animated/buisson.spp b/public/old-models/buisson-animated/buisson.spp similarity index 100% rename from public/models/buisson-animated/buisson.spp rename to public/old-models/buisson-animated/buisson.spp diff --git a/public/models/buisson-animated/feuilles_baseColor.png b/public/old-models/buisson-animated/feuilles_baseColor.png similarity index 100% rename from public/models/buisson-animated/feuilles_baseColor.png rename to public/old-models/buisson-animated/feuilles_baseColor.png diff --git a/public/models/buisson-animated/feuilles_normal.png b/public/old-models/buisson-animated/feuilles_normal.png similarity index 100% rename from public/models/buisson-animated/feuilles_normal.png rename to public/old-models/buisson-animated/feuilles_normal.png diff --git a/public/models/buisson-animated/feuilles_occlusionRoughnessMetallic.png b/public/old-models/buisson-animated/feuilles_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/buisson-animated/feuilles_occlusionRoughnessMetallic.png rename to public/old-models/buisson-animated/feuilles_occlusionRoughnessMetallic.png diff --git a/public/models/buisson-animated/model.gltf b/public/old-models/buisson-animated/model.gltf similarity index 100% rename from public/models/buisson-animated/model.gltf rename to public/old-models/buisson-animated/model.gltf diff --git a/public/models/buisson/buisson.bin b/public/old-models/buisson/buisson.bin similarity index 100% rename from public/models/buisson/buisson.bin rename to public/old-models/buisson/buisson.bin diff --git a/public/models/buisson/feuilles_baseColor.png b/public/old-models/buisson/feuilles_baseColor.png similarity index 100% rename from public/models/buisson/feuilles_baseColor.png rename to public/old-models/buisson/feuilles_baseColor.png diff --git a/public/models/buisson/feuilles_normal.png b/public/old-models/buisson/feuilles_normal.png similarity index 100% rename from public/models/buisson/feuilles_normal.png rename to public/old-models/buisson/feuilles_normal.png diff --git a/public/models/buisson/feuilles_occlusionRoughnessMetallic.png b/public/old-models/buisson/feuilles_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/buisson/feuilles_occlusionRoughnessMetallic.png rename to public/old-models/buisson/feuilles_occlusionRoughnessMetallic.png diff --git a/public/models/buisson/model.gltf b/public/old-models/buisson/model.gltf similarity index 100% rename from public/models/buisson/model.gltf rename to public/old-models/buisson/model.gltf diff --git a/public/models/cable1/cabledroit_Base_color.png b/public/old-models/cable1/cabledroit_Base_color.png similarity index 100% rename from public/models/cable1/cabledroit_Base_color.png rename to public/old-models/cable1/cabledroit_Base_color.png diff --git a/public/models/cable1/cabledroit_Height.png b/public/old-models/cable1/cabledroit_Height.png similarity index 100% rename from public/models/cable1/cabledroit_Height.png rename to public/old-models/cable1/cabledroit_Height.png diff --git a/public/models/cable1/cabledroit_Metallic.png b/public/old-models/cable1/cabledroit_Metallic.png similarity index 100% rename from public/models/cable1/cabledroit_Metallic.png rename to public/old-models/cable1/cabledroit_Metallic.png diff --git a/public/models/cable1/cabledroit_Mixed_AO.png b/public/old-models/cable1/cabledroit_Mixed_AO.png similarity index 100% rename from public/models/cable1/cabledroit_Mixed_AO.png rename to public/old-models/cable1/cabledroit_Mixed_AO.png diff --git a/public/models/cable1/cabledroit_Normal.png b/public/old-models/cable1/cabledroit_Normal.png similarity index 100% rename from public/models/cable1/cabledroit_Normal.png rename to public/old-models/cable1/cabledroit_Normal.png diff --git a/public/models/cable1/cabledroit_Normal_OpenGL.png b/public/old-models/cable1/cabledroit_Normal_OpenGL.png similarity index 100% rename from public/models/cable1/cabledroit_Normal_OpenGL.png rename to public/old-models/cable1/cabledroit_Normal_OpenGL.png diff --git a/public/models/cable1/cabledroit_Roughness.png b/public/old-models/cable1/cabledroit_Roughness.png similarity index 100% rename from public/models/cable1/cabledroit_Roughness.png rename to public/old-models/cable1/cabledroit_Roughness.png diff --git a/public/models/cable1/model.gltf b/public/old-models/cable1/model.gltf similarity index 100% rename from public/models/cable1/model.gltf rename to public/old-models/cable1/model.gltf diff --git a/public/models/cable2/cablegauche_Base_color.png b/public/old-models/cable2/cablegauche_Base_color.png similarity index 100% rename from public/models/cable2/cablegauche_Base_color.png rename to public/old-models/cable2/cablegauche_Base_color.png diff --git a/public/models/cable2/cablegauche_Height.png b/public/old-models/cable2/cablegauche_Height.png similarity index 100% rename from public/models/cable2/cablegauche_Height.png rename to public/old-models/cable2/cablegauche_Height.png diff --git a/public/models/cable2/cablegauche_Metallic.png b/public/old-models/cable2/cablegauche_Metallic.png similarity index 100% rename from public/models/cable2/cablegauche_Metallic.png rename to public/old-models/cable2/cablegauche_Metallic.png diff --git a/public/models/cable2/cablegauche_Mixed_AO.png b/public/old-models/cable2/cablegauche_Mixed_AO.png similarity index 100% rename from public/models/cable2/cablegauche_Mixed_AO.png rename to public/old-models/cable2/cablegauche_Mixed_AO.png diff --git a/public/models/cable2/cablegauche_Normal.png b/public/old-models/cable2/cablegauche_Normal.png similarity index 100% rename from public/models/cable2/cablegauche_Normal.png rename to public/old-models/cable2/cablegauche_Normal.png diff --git a/public/models/cable2/cablegauche_Normal_OpenGL.png b/public/old-models/cable2/cablegauche_Normal_OpenGL.png similarity index 100% rename from public/models/cable2/cablegauche_Normal_OpenGL.png rename to public/old-models/cable2/cablegauche_Normal_OpenGL.png diff --git a/public/models/cable2/cablegauche_Roughness.png b/public/old-models/cable2/cablegauche_Roughness.png similarity index 100% rename from public/models/cable2/cablegauche_Roughness.png rename to public/old-models/cable2/cablegauche_Roughness.png diff --git a/public/models/cable2/model.gltf b/public/old-models/cable2/model.gltf similarity index 100% rename from public/models/cable2/model.gltf rename to public/old-models/cable2/model.gltf diff --git a/public/models/chemins/chemin_baseColor.png b/public/old-models/chemins/chemin_baseColor.png similarity index 100% rename from public/models/chemins/chemin_baseColor.png rename to public/old-models/chemins/chemin_baseColor.png diff --git a/public/models/chemins/chemin_normal.png b/public/old-models/chemins/chemin_normal.png similarity index 100% rename from public/models/chemins/chemin_normal.png rename to public/old-models/chemins/chemin_normal.png diff --git a/public/models/chemins/chemin_occlusionRoughnessMetallic.png b/public/old-models/chemins/chemin_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/chemins/chemin_occlusionRoughnessMetallic.png rename to public/old-models/chemins/chemin_occlusionRoughnessMetallic.png diff --git a/public/models/chemins/chemins.bin b/public/old-models/chemins/chemins.bin similarity index 100% rename from public/models/chemins/chemins.bin rename to public/old-models/chemins/chemins.bin diff --git a/public/models/chemins/chemins.glb b/public/old-models/chemins/chemins.glb similarity index 100% rename from public/models/chemins/chemins.glb rename to public/old-models/chemins/chemins.glb diff --git a/public/models/chemins/model.gltf b/public/old-models/chemins/model.gltf similarity index 100% rename from public/models/chemins/model.gltf rename to public/old-models/chemins/model.gltf diff --git a/public/models/createurdepluie/bac_eau_basecolor.png b/public/old-models/createurdepluie/bac_eau_basecolor.png similarity index 100% rename from public/models/createurdepluie/bac_eau_basecolor.png rename to public/old-models/createurdepluie/bac_eau_basecolor.png diff --git a/public/models/createurdepluie/bac_eau_normal.png b/public/old-models/createurdepluie/bac_eau_normal.png similarity index 100% rename from public/models/createurdepluie/bac_eau_normal.png rename to public/old-models/createurdepluie/bac_eau_normal.png diff --git a/public/models/createurdepluie/bac_eau_occlusionroughnessmetallic.png b/public/old-models/createurdepluie/bac_eau_occlusionroughnessmetallic.png similarity index 100% rename from public/models/createurdepluie/bac_eau_occlusionroughnessmetallic.png rename to public/old-models/createurdepluie/bac_eau_occlusionroughnessmetallic.png diff --git a/public/models/createurdepluie/cable_1_basecolor.png b/public/old-models/createurdepluie/cable_1_basecolor.png similarity index 100% rename from public/models/createurdepluie/cable_1_basecolor.png rename to public/old-models/createurdepluie/cable_1_basecolor.png diff --git a/public/models/createurdepluie/cable_1_normal.png b/public/old-models/createurdepluie/cable_1_normal.png similarity index 100% rename from public/models/createurdepluie/cable_1_normal.png rename to public/old-models/createurdepluie/cable_1_normal.png diff --git a/public/models/createurdepluie/cable_1_occlusionroughnessmetallic.png b/public/old-models/createurdepluie/cable_1_occlusionroughnessmetallic.png similarity index 100% rename from public/models/createurdepluie/cable_1_occlusionroughnessmetallic.png rename to public/old-models/createurdepluie/cable_1_occlusionroughnessmetallic.png diff --git a/public/models/createurdepluie/cable_2_basecolor.png b/public/old-models/createurdepluie/cable_2_basecolor.png similarity index 100% rename from public/models/createurdepluie/cable_2_basecolor.png rename to public/old-models/createurdepluie/cable_2_basecolor.png diff --git a/public/models/createurdepluie/cable_2_normal.png b/public/old-models/createurdepluie/cable_2_normal.png similarity index 100% rename from public/models/createurdepluie/cable_2_normal.png rename to public/old-models/createurdepluie/cable_2_normal.png diff --git a/public/models/createurdepluie/cable_2_occlusionroughnessmetallic.png b/public/old-models/createurdepluie/cable_2_occlusionroughnessmetallic.png similarity index 100% rename from public/models/createurdepluie/cable_2_occlusionroughnessmetallic.png rename to public/old-models/createurdepluie/cable_2_occlusionroughnessmetallic.png diff --git a/public/models/createurdepluie/createurdepluie2.bin b/public/old-models/createurdepluie/createurdepluie2.bin similarity index 100% rename from public/models/createurdepluie/createurdepluie2.bin rename to public/old-models/createurdepluie/createurdepluie2.bin diff --git a/public/models/createurdepluie/model.gltf b/public/old-models/createurdepluie/model.gltf similarity index 100% rename from public/models/createurdepluie/model.gltf rename to public/old-models/createurdepluie/model.gltf diff --git a/public/models/createurdepluie/refroidisseur_basecolor.png b/public/old-models/createurdepluie/refroidisseur_basecolor.png similarity index 100% rename from public/models/createurdepluie/refroidisseur_basecolor.png rename to public/old-models/createurdepluie/refroidisseur_basecolor.png diff --git a/public/models/createurdepluie/refroidisseur_normal.png b/public/old-models/createurdepluie/refroidisseur_normal.png similarity index 100% rename from public/models/createurdepluie/refroidisseur_normal.png rename to public/old-models/createurdepluie/refroidisseur_normal.png diff --git a/public/models/createurdepluie/refroidisseur_occlusionroughnessmetallic.png b/public/old-models/createurdepluie/refroidisseur_occlusionroughnessmetallic.png similarity index 100% rename from public/models/createurdepluie/refroidisseur_occlusionroughnessmetallic.png rename to public/old-models/createurdepluie/refroidisseur_occlusionroughnessmetallic.png diff --git a/public/models/createurdepluie/resistance_basecolor.png b/public/old-models/createurdepluie/resistance_basecolor.png similarity index 100% rename from public/models/createurdepluie/resistance_basecolor.png rename to public/old-models/createurdepluie/resistance_basecolor.png diff --git a/public/models/createurdepluie/resistance_normal.png b/public/old-models/createurdepluie/resistance_normal.png similarity index 100% rename from public/models/createurdepluie/resistance_normal.png rename to public/old-models/createurdepluie/resistance_normal.png diff --git a/public/models/createurdepluie/resistance_occlusionroughnessmetallic.png b/public/old-models/createurdepluie/resistance_occlusionroughnessmetallic.png similarity index 100% rename from public/models/createurdepluie/resistance_occlusionroughnessmetallic.png rename to public/old-models/createurdepluie/resistance_occlusionroughnessmetallic.png diff --git a/public/models/createurdepluie/shell_basecolor.png b/public/old-models/createurdepluie/shell_basecolor.png similarity index 100% rename from public/models/createurdepluie/shell_basecolor.png rename to public/old-models/createurdepluie/shell_basecolor.png diff --git a/public/models/createurdepluie/shell_normal.png b/public/old-models/createurdepluie/shell_normal.png similarity index 100% rename from public/models/createurdepluie/shell_normal.png rename to public/old-models/createurdepluie/shell_normal.png diff --git a/public/models/createurdepluie/shell_occlusionroughnessmetallic.png b/public/old-models/createurdepluie/shell_occlusionroughnessmetallic.png similarity index 100% rename from public/models/createurdepluie/shell_occlusionroughnessmetallic.png rename to public/old-models/createurdepluie/shell_occlusionroughnessmetallic.png diff --git a/public/models/createurdepluie/tuyau_basecolor.png b/public/old-models/createurdepluie/tuyau_basecolor.png similarity index 100% rename from public/models/createurdepluie/tuyau_basecolor.png rename to public/old-models/createurdepluie/tuyau_basecolor.png diff --git a/public/models/createurdepluie/tuyau_normal.png b/public/old-models/createurdepluie/tuyau_normal.png similarity index 100% rename from public/models/createurdepluie/tuyau_normal.png rename to public/old-models/createurdepluie/tuyau_normal.png diff --git a/public/models/createurdepluie/tuyau_occlusionroughnessmetallic.png b/public/old-models/createurdepluie/tuyau_occlusionroughnessmetallic.png similarity index 100% rename from public/models/createurdepluie/tuyau_occlusionroughnessmetallic.png rename to public/old-models/createurdepluie/tuyau_occlusionroughnessmetallic.png diff --git a/public/models/ebike/Cable 1_baseColor.png b/public/old-models/ebike/Cable 1_baseColor.png similarity index 100% rename from public/models/ebike/Cable 1_baseColor.png rename to public/old-models/ebike/Cable 1_baseColor.png diff --git a/public/models/ebike/Cable 1_normal.png b/public/old-models/ebike/Cable 1_normal.png similarity index 100% rename from public/models/ebike/Cable 1_normal.png rename to public/old-models/ebike/Cable 1_normal.png diff --git a/public/models/ebike/Cable 1_occlusionRoughnessMetallic.png b/public/old-models/ebike/Cable 1_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/ebike/Cable 1_occlusionRoughnessMetallic.png rename to public/old-models/ebike/Cable 1_occlusionRoughnessMetallic.png diff --git a/public/models/ebike/Cable2_baseColor.png b/public/old-models/ebike/Cable2_baseColor.png similarity index 100% rename from public/models/ebike/Cable2_baseColor.png rename to public/old-models/ebike/Cable2_baseColor.png diff --git a/public/models/ebike/Cable2_normal.png b/public/old-models/ebike/Cable2_normal.png similarity index 100% rename from public/models/ebike/Cable2_normal.png rename to public/old-models/ebike/Cable2_normal.png diff --git a/public/models/ebike/Cable2_occlusionRoughnessMetallic.png b/public/old-models/ebike/Cable2_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/ebike/Cable2_occlusionRoughnessMetallic.png rename to public/old-models/ebike/Cable2_occlusionRoughnessMetallic.png diff --git a/public/models/ebike/Carroserie_baseColor.png b/public/old-models/ebike/Carroserie_baseColor.png similarity index 100% rename from public/models/ebike/Carroserie_baseColor.png rename to public/old-models/ebike/Carroserie_baseColor.png diff --git a/public/models/ebike/Carroserie_normal.png b/public/old-models/ebike/Carroserie_normal.png similarity index 100% rename from public/models/ebike/Carroserie_normal.png rename to public/old-models/ebike/Carroserie_normal.png diff --git a/public/models/ebike/Carroserie_occlusionRoughnessMetallic.png b/public/old-models/ebike/Carroserie_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/ebike/Carroserie_occlusionRoughnessMetallic.png rename to public/old-models/ebike/Carroserie_occlusionRoughnessMetallic.png diff --git a/public/models/ebike/Ferail_baseColor.png b/public/old-models/ebike/Ferail_baseColor.png similarity index 100% rename from public/models/ebike/Ferail_baseColor.png rename to public/old-models/ebike/Ferail_baseColor.png diff --git a/public/models/ebike/Ferail_normal.png b/public/old-models/ebike/Ferail_normal.png similarity index 100% rename from public/models/ebike/Ferail_normal.png rename to public/old-models/ebike/Ferail_normal.png diff --git a/public/models/ebike/Ferail_occlusionRoughnessMetallic.png b/public/old-models/ebike/Ferail_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/ebike/Ferail_occlusionRoughnessMetallic.png rename to public/old-models/ebike/Ferail_occlusionRoughnessMetallic.png diff --git a/public/models/ebike/Reservoir_baseColor.png b/public/old-models/ebike/Reservoir_baseColor.png similarity index 100% rename from public/models/ebike/Reservoir_baseColor.png rename to public/old-models/ebike/Reservoir_baseColor.png diff --git a/public/models/ebike/Reservoir_normal.png b/public/old-models/ebike/Reservoir_normal.png similarity index 100% rename from public/models/ebike/Reservoir_normal.png rename to public/old-models/ebike/Reservoir_normal.png diff --git a/public/models/ebike/Reservoir_occlusionRoughnessMetallic.png b/public/old-models/ebike/Reservoir_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/ebike/Reservoir_occlusionRoughnessMetallic.png rename to public/old-models/ebike/Reservoir_occlusionRoughnessMetallic.png diff --git a/public/models/ebike/Sac_baseColor.png b/public/old-models/ebike/Sac_baseColor.png similarity index 100% rename from public/models/ebike/Sac_baseColor.png rename to public/old-models/ebike/Sac_baseColor.png diff --git a/public/models/ebike/Sac_normal.png b/public/old-models/ebike/Sac_normal.png similarity index 100% rename from public/models/ebike/Sac_normal.png rename to public/old-models/ebike/Sac_normal.png diff --git a/public/models/ebike/Sac_occlusionRoughnessMetallic.png b/public/old-models/ebike/Sac_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/ebike/Sac_occlusionRoughnessMetallic.png rename to public/old-models/ebike/Sac_occlusionRoughnessMetallic.png diff --git a/public/models/ebike/Siege_baseColor.png b/public/old-models/ebike/Siege_baseColor.png similarity index 100% rename from public/models/ebike/Siege_baseColor.png rename to public/old-models/ebike/Siege_baseColor.png diff --git a/public/models/ebike/Siege_normal.png b/public/old-models/ebike/Siege_normal.png similarity index 100% rename from public/models/ebike/Siege_normal.png rename to public/old-models/ebike/Siege_normal.png diff --git a/public/models/ebike/Siege_occlusionRoughnessMetallic.png b/public/old-models/ebike/Siege_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/ebike/Siege_occlusionRoughnessMetallic.png rename to public/old-models/ebike/Siege_occlusionRoughnessMetallic.png diff --git a/public/models/ebike/ebike.bin b/public/old-models/ebike/ebike.bin similarity index 100% rename from public/models/ebike/ebike.bin rename to public/old-models/ebike/ebike.bin diff --git a/public/models/ebike/model.gltf b/public/old-models/ebike/model.gltf similarity index 100% rename from public/models/ebike/model.gltf rename to public/old-models/ebike/model.gltf diff --git a/public/models/ebike/phare_baseColor.png b/public/old-models/ebike/phare_baseColor.png similarity index 100% rename from public/models/ebike/phare_baseColor.png rename to public/old-models/ebike/phare_baseColor.png diff --git a/public/models/ebike/phare_normal.png b/public/old-models/ebike/phare_normal.png similarity index 100% rename from public/models/ebike/phare_normal.png rename to public/old-models/ebike/phare_normal.png diff --git a/public/models/ebike/phare_occlusionRoughnessMetallic.png b/public/old-models/ebike/phare_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/ebike/phare_occlusionRoughnessMetallic.png rename to public/old-models/ebike/phare_occlusionRoughnessMetallic.png diff --git a/public/models/ebike/pneu_baseColor.png b/public/old-models/ebike/pneu_baseColor.png similarity index 100% rename from public/models/ebike/pneu_baseColor.png rename to public/old-models/ebike/pneu_baseColor.png diff --git a/public/models/ebike/pneu_normal.png b/public/old-models/ebike/pneu_normal.png similarity index 100% rename from public/models/ebike/pneu_normal.png rename to public/old-models/ebike/pneu_normal.png diff --git a/public/models/ebike/pneu_occlusionRoughnessMetallic.png b/public/old-models/ebike/pneu_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/ebike/pneu_occlusionRoughnessMetallic.png rename to public/old-models/ebike/pneu_occlusionRoughnessMetallic.png diff --git a/public/models/ebike/refroidisseur_baseColor.png b/public/old-models/ebike/refroidisseur_baseColor.png similarity index 100% rename from public/models/ebike/refroidisseur_baseColor.png rename to public/old-models/ebike/refroidisseur_baseColor.png diff --git a/public/models/ebike/refroidisseur_normal.png b/public/old-models/ebike/refroidisseur_normal.png similarity index 100% rename from public/models/ebike/refroidisseur_normal.png rename to public/old-models/ebike/refroidisseur_normal.png diff --git a/public/models/ebike/refroidisseur_occlusionRoughnessMetallic.png b/public/old-models/ebike/refroidisseur_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/ebike/refroidisseur_occlusionRoughnessMetallic.png rename to public/old-models/ebike/refroidisseur_occlusionRoughnessMetallic.png diff --git a/public/models/ebike/resort_baseColor.png b/public/old-models/ebike/resort_baseColor.png similarity index 100% rename from public/models/ebike/resort_baseColor.png rename to public/old-models/ebike/resort_baseColor.png diff --git a/public/models/ebike/resort_normal.png b/public/old-models/ebike/resort_normal.png similarity index 100% rename from public/models/ebike/resort_normal.png rename to public/old-models/ebike/resort_normal.png diff --git a/public/models/ebike/resort_occlusionRoughnessMetallic.png b/public/old-models/ebike/resort_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/ebike/resort_occlusionRoughnessMetallic.png rename to public/old-models/ebike/resort_occlusionRoughnessMetallic.png diff --git a/public/models/ecole/Panneau_baseColor.png b/public/old-models/ecole/Panneau_baseColor.png similarity index 100% rename from public/models/ecole/Panneau_baseColor.png rename to public/old-models/ecole/Panneau_baseColor.png diff --git a/public/models/ecole/Panneau_normal.png b/public/old-models/ecole/Panneau_normal.png similarity index 100% rename from public/models/ecole/Panneau_normal.png rename to public/old-models/ecole/Panneau_normal.png diff --git a/public/models/ecole/Panneau_occlusionRoughnessMetallic.png b/public/old-models/ecole/Panneau_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/ecole/Panneau_occlusionRoughnessMetallic.png rename to public/old-models/ecole/Panneau_occlusionRoughnessMetallic.png diff --git a/public/models/ecole/ecole2.bin b/public/old-models/ecole/ecole2.bin similarity index 100% rename from public/models/ecole/ecole2.bin rename to public/old-models/ecole/ecole2.bin diff --git a/public/models/ecole/fenetre_baseColor.png b/public/old-models/ecole/fenetre_baseColor.png similarity index 100% rename from public/models/ecole/fenetre_baseColor.png rename to public/old-models/ecole/fenetre_baseColor.png diff --git a/public/models/ecole/fenetre_normal.png b/public/old-models/ecole/fenetre_normal.png similarity index 100% rename from public/models/ecole/fenetre_normal.png rename to public/old-models/ecole/fenetre_normal.png diff --git a/public/models/ecole/fenetre_occlusionRoughnessMetallic.png b/public/old-models/ecole/fenetre_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/ecole/fenetre_occlusionRoughnessMetallic.png rename to public/old-models/ecole/fenetre_occlusionRoughnessMetallic.png diff --git a/public/models/ecole/maison_baseColor.png b/public/old-models/ecole/maison_baseColor.png similarity index 100% rename from public/models/ecole/maison_baseColor.png rename to public/old-models/ecole/maison_baseColor.png diff --git a/public/models/ecole/maison_normal.png b/public/old-models/ecole/maison_normal.png similarity index 100% rename from public/models/ecole/maison_normal.png rename to public/old-models/ecole/maison_normal.png diff --git a/public/models/ecole/maison_occlusionRoughnessMetallic.png b/public/old-models/ecole/maison_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/ecole/maison_occlusionRoughnessMetallic.png rename to public/old-models/ecole/maison_occlusionRoughnessMetallic.png diff --git a/public/models/ecole/model.gltf b/public/old-models/ecole/model.gltf similarity index 100% rename from public/models/ecole/model.gltf rename to public/old-models/ecole/model.gltf diff --git a/public/models/ecole/porte_baseColor.png b/public/old-models/ecole/porte_baseColor.png similarity index 100% rename from public/models/ecole/porte_baseColor.png rename to public/old-models/ecole/porte_baseColor.png diff --git a/public/models/ecole/porte_normal.png b/public/old-models/ecole/porte_normal.png similarity index 100% rename from public/models/ecole/porte_normal.png rename to public/old-models/ecole/porte_normal.png diff --git a/public/models/ecole/porte_occlusionRoughnessMetallic.png b/public/old-models/ecole/porte_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/ecole/porte_occlusionRoughnessMetallic.png rename to public/old-models/ecole/porte_occlusionRoughnessMetallic.png diff --git a/public/models/ecole/tiges_baseColor.png b/public/old-models/ecole/tiges_baseColor.png similarity index 100% rename from public/models/ecole/tiges_baseColor.png rename to public/old-models/ecole/tiges_baseColor.png diff --git a/public/models/ecole/tiges_normal.png b/public/old-models/ecole/tiges_normal.png similarity index 100% rename from public/models/ecole/tiges_normal.png rename to public/old-models/ecole/tiges_normal.png diff --git a/public/models/ecole/tiges_occlusionRoughnessMetallic.png b/public/old-models/ecole/tiges_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/ecole/tiges_occlusionRoughnessMetallic.png rename to public/old-models/ecole/tiges_occlusionRoughnessMetallic.png diff --git a/public/models/elec/Mat_baseColor.png b/public/old-models/elec/Mat_baseColor.png similarity index 100% rename from public/models/elec/Mat_baseColor.png rename to public/old-models/elec/Mat_baseColor.png diff --git a/public/models/elec/Mat_normal.png b/public/old-models/elec/Mat_normal.png similarity index 100% rename from public/models/elec/Mat_normal.png rename to public/old-models/elec/Mat_normal.png diff --git a/public/models/elec/Mat_occlusionRoughnessMetallic.png b/public/old-models/elec/Mat_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/elec/Mat_occlusionRoughnessMetallic.png rename to public/old-models/elec/Mat_occlusionRoughnessMetallic.png diff --git a/public/models/elec/model.bin b/public/old-models/elec/model.bin similarity index 100% rename from public/models/elec/model.bin rename to public/old-models/elec/model.bin diff --git a/public/models/elec/model.gltf b/public/old-models/elec/model.gltf similarity index 100% rename from public/models/elec/model.gltf rename to public/old-models/elec/model.gltf diff --git a/public/models/electricienne/Mat_baseColor.png b/public/old-models/electricienne/Mat_baseColor.png similarity index 100% rename from public/models/electricienne/Mat_baseColor.png rename to public/old-models/electricienne/Mat_baseColor.png diff --git a/public/models/electricienne/Mat_normal.png b/public/old-models/electricienne/Mat_normal.png similarity index 100% rename from public/models/electricienne/Mat_normal.png rename to public/old-models/electricienne/Mat_normal.png diff --git a/public/models/electricienne/Mat_occlusionRoughnessMetallic.png b/public/old-models/electricienne/Mat_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/electricienne/Mat_occlusionRoughnessMetallic.png rename to public/old-models/electricienne/Mat_occlusionRoughnessMetallic.png diff --git a/public/models/electricienne/electricienne.bin b/public/old-models/electricienne/electricienne.bin similarity index 100% rename from public/models/electricienne/electricienne.bin rename to public/old-models/electricienne/electricienne.bin diff --git a/public/models/electricienne/model.gltf b/public/old-models/electricienne/model.gltf similarity index 100% rename from public/models/electricienne/model.gltf rename to public/old-models/electricienne/model.gltf diff --git a/public/models/entreetuyaux/model.gltf b/public/old-models/entreetuyaux/model.gltf similarity index 100% rename from public/models/entreetuyaux/model.gltf rename to public/old-models/entreetuyaux/model.gltf diff --git a/public/models/entreetuyaux/tuyaux_Base_color.png b/public/old-models/entreetuyaux/tuyaux_Base_color.png similarity index 100% rename from public/models/entreetuyaux/tuyaux_Base_color.png rename to public/old-models/entreetuyaux/tuyaux_Base_color.png diff --git a/public/models/entreetuyaux/tuyaux_Height.png b/public/old-models/entreetuyaux/tuyaux_Height.png similarity index 100% rename from public/models/entreetuyaux/tuyaux_Height.png rename to public/old-models/entreetuyaux/tuyaux_Height.png diff --git a/public/models/entreetuyaux/tuyaux_Metallic.png b/public/old-models/entreetuyaux/tuyaux_Metallic.png similarity index 100% rename from public/models/entreetuyaux/tuyaux_Metallic.png rename to public/old-models/entreetuyaux/tuyaux_Metallic.png diff --git a/public/models/entreetuyaux/tuyaux_Mixed_AO.png b/public/old-models/entreetuyaux/tuyaux_Mixed_AO.png similarity index 100% rename from public/models/entreetuyaux/tuyaux_Mixed_AO.png rename to public/old-models/entreetuyaux/tuyaux_Mixed_AO.png diff --git a/public/models/entreetuyaux/tuyaux_Normal.png b/public/old-models/entreetuyaux/tuyaux_Normal.png similarity index 100% rename from public/models/entreetuyaux/tuyaux_Normal.png rename to public/old-models/entreetuyaux/tuyaux_Normal.png diff --git a/public/models/entreetuyaux/tuyaux_Normal_OpenGL.png b/public/old-models/entreetuyaux/tuyaux_Normal_OpenGL.png similarity index 100% rename from public/models/entreetuyaux/tuyaux_Normal_OpenGL.png rename to public/old-models/entreetuyaux/tuyaux_Normal_OpenGL.png diff --git a/public/models/entreetuyaux/tuyaux_Opacity.png b/public/old-models/entreetuyaux/tuyaux_Opacity.png similarity index 100% rename from public/models/entreetuyaux/tuyaux_Opacity.png rename to public/old-models/entreetuyaux/tuyaux_Opacity.png diff --git a/public/models/entreetuyaux/tuyaux_Roughness.png b/public/old-models/entreetuyaux/tuyaux_Roughness.png similarity index 100% rename from public/models/entreetuyaux/tuyaux_Roughness.png rename to public/old-models/entreetuyaux/tuyaux_Roughness.png diff --git a/public/models/eolienne/cul_base_color.png b/public/old-models/eolienne/cul_base_color.png similarity index 100% rename from public/models/eolienne/cul_base_color.png rename to public/old-models/eolienne/cul_base_color.png diff --git a/public/models/eolienne/cul_height.png b/public/old-models/eolienne/cul_height.png similarity index 100% rename from public/models/eolienne/cul_height.png rename to public/old-models/eolienne/cul_height.png diff --git a/public/models/eolienne/cul_metallic.png b/public/old-models/eolienne/cul_metallic.png similarity index 100% rename from public/models/eolienne/cul_metallic.png rename to public/old-models/eolienne/cul_metallic.png diff --git a/public/models/eolienne/cul_mixed_ao.png b/public/old-models/eolienne/cul_mixed_ao.png similarity index 100% rename from public/models/eolienne/cul_mixed_ao.png rename to public/old-models/eolienne/cul_mixed_ao.png diff --git a/public/models/eolienne/cul_normal.png b/public/old-models/eolienne/cul_normal.png similarity index 100% rename from public/models/eolienne/cul_normal.png rename to public/old-models/eolienne/cul_normal.png diff --git a/public/models/eolienne/cul_normal_opengl.png b/public/old-models/eolienne/cul_normal_opengl.png similarity index 100% rename from public/models/eolienne/cul_normal_opengl.png rename to public/old-models/eolienne/cul_normal_opengl.png diff --git a/public/models/eolienne/cul_roughness.png b/public/old-models/eolienne/cul_roughness.png similarity index 100% rename from public/models/eolienne/cul_roughness.png rename to public/old-models/eolienne/cul_roughness.png diff --git a/public/models/eolienne/feuilles1st_base_color.png b/public/old-models/eolienne/feuilles1st_base_color.png similarity index 100% rename from public/models/eolienne/feuilles1st_base_color.png rename to public/old-models/eolienne/feuilles1st_base_color.png diff --git a/public/models/eolienne/feuilles1st_height.png b/public/old-models/eolienne/feuilles1st_height.png similarity index 100% rename from public/models/eolienne/feuilles1st_height.png rename to public/old-models/eolienne/feuilles1st_height.png diff --git a/public/models/eolienne/feuilles1st_metallic.png b/public/old-models/eolienne/feuilles1st_metallic.png similarity index 100% rename from public/models/eolienne/feuilles1st_metallic.png rename to public/old-models/eolienne/feuilles1st_metallic.png diff --git a/public/models/eolienne/feuilles1st_mixed_ao.png b/public/old-models/eolienne/feuilles1st_mixed_ao.png similarity index 100% rename from public/models/eolienne/feuilles1st_mixed_ao.png rename to public/old-models/eolienne/feuilles1st_mixed_ao.png diff --git a/public/models/eolienne/feuilles1st_normal.png b/public/old-models/eolienne/feuilles1st_normal.png similarity index 100% rename from public/models/eolienne/feuilles1st_normal.png rename to public/old-models/eolienne/feuilles1st_normal.png diff --git a/public/models/eolienne/feuilles1st_normal_opengl.png b/public/old-models/eolienne/feuilles1st_normal_opengl.png similarity index 100% rename from public/models/eolienne/feuilles1st_normal_opengl.png rename to public/old-models/eolienne/feuilles1st_normal_opengl.png diff --git a/public/models/eolienne/feuilles1st_roughness.png b/public/old-models/eolienne/feuilles1st_roughness.png similarity index 100% rename from public/models/eolienne/feuilles1st_roughness.png rename to public/old-models/eolienne/feuilles1st_roughness.png diff --git a/public/models/eolienne/feuilles2nd_base_color.png b/public/old-models/eolienne/feuilles2nd_base_color.png similarity index 100% rename from public/models/eolienne/feuilles2nd_base_color.png rename to public/old-models/eolienne/feuilles2nd_base_color.png diff --git a/public/models/eolienne/feuilles2nd_height.png b/public/old-models/eolienne/feuilles2nd_height.png similarity index 100% rename from public/models/eolienne/feuilles2nd_height.png rename to public/old-models/eolienne/feuilles2nd_height.png diff --git a/public/models/eolienne/feuilles2nd_metallic.png b/public/old-models/eolienne/feuilles2nd_metallic.png similarity index 100% rename from public/models/eolienne/feuilles2nd_metallic.png rename to public/old-models/eolienne/feuilles2nd_metallic.png diff --git a/public/models/eolienne/feuilles2nd_mixed_ao.png b/public/old-models/eolienne/feuilles2nd_mixed_ao.png similarity index 100% rename from public/models/eolienne/feuilles2nd_mixed_ao.png rename to public/old-models/eolienne/feuilles2nd_mixed_ao.png diff --git a/public/models/eolienne/feuilles2nd_normal.png b/public/old-models/eolienne/feuilles2nd_normal.png similarity index 100% rename from public/models/eolienne/feuilles2nd_normal.png rename to public/old-models/eolienne/feuilles2nd_normal.png diff --git a/public/models/eolienne/feuilles2nd_normal_opengl.png b/public/old-models/eolienne/feuilles2nd_normal_opengl.png similarity index 100% rename from public/models/eolienne/feuilles2nd_normal_opengl.png rename to public/old-models/eolienne/feuilles2nd_normal_opengl.png diff --git a/public/models/eolienne/feuilles2nd_roughness.png b/public/old-models/eolienne/feuilles2nd_roughness.png similarity index 100% rename from public/models/eolienne/feuilles2nd_roughness.png rename to public/old-models/eolienne/feuilles2nd_roughness.png diff --git a/public/models/eolienne/he_lisse_base_color.png b/public/old-models/eolienne/he_lisse_base_color.png similarity index 100% rename from public/models/eolienne/he_lisse_base_color.png rename to public/old-models/eolienne/he_lisse_base_color.png diff --git a/public/models/eolienne/he_lisse_height.png b/public/old-models/eolienne/he_lisse_height.png similarity index 100% rename from public/models/eolienne/he_lisse_height.png rename to public/old-models/eolienne/he_lisse_height.png diff --git a/public/models/eolienne/he_lisse_metallic.png b/public/old-models/eolienne/he_lisse_metallic.png similarity index 100% rename from public/models/eolienne/he_lisse_metallic.png rename to public/old-models/eolienne/he_lisse_metallic.png diff --git a/public/models/eolienne/he_lisse_mixed_ao.png b/public/old-models/eolienne/he_lisse_mixed_ao.png similarity index 100% rename from public/models/eolienne/he_lisse_mixed_ao.png rename to public/old-models/eolienne/he_lisse_mixed_ao.png diff --git a/public/models/eolienne/he_lisse_normal.png b/public/old-models/eolienne/he_lisse_normal.png similarity index 100% rename from public/models/eolienne/he_lisse_normal.png rename to public/old-models/eolienne/he_lisse_normal.png diff --git a/public/models/eolienne/he_lisse_normal_opengl.png b/public/old-models/eolienne/he_lisse_normal_opengl.png similarity index 100% rename from public/models/eolienne/he_lisse_normal_opengl.png rename to public/old-models/eolienne/he_lisse_normal_opengl.png diff --git a/public/models/eolienne/he_lisse_opacity.png b/public/old-models/eolienne/he_lisse_opacity.png similarity index 100% rename from public/models/eolienne/he_lisse_opacity.png rename to public/old-models/eolienne/he_lisse_opacity.png diff --git a/public/models/eolienne/he_lisse_roughness.png b/public/old-models/eolienne/he_lisse_roughness.png similarity index 100% rename from public/models/eolienne/he_lisse_roughness.png rename to public/old-models/eolienne/he_lisse_roughness.png diff --git a/public/models/eolienne/model.gltf b/public/old-models/eolienne/model.gltf similarity index 100% rename from public/models/eolienne/model.gltf rename to public/old-models/eolienne/model.gltf diff --git a/public/models/eolienne/moteur_base_color.png b/public/old-models/eolienne/moteur_base_color.png similarity index 100% rename from public/models/eolienne/moteur_base_color.png rename to public/old-models/eolienne/moteur_base_color.png diff --git a/public/models/eolienne/moteur_height.png b/public/old-models/eolienne/moteur_height.png similarity index 100% rename from public/models/eolienne/moteur_height.png rename to public/old-models/eolienne/moteur_height.png diff --git a/public/models/eolienne/moteur_metallic.png b/public/old-models/eolienne/moteur_metallic.png similarity index 100% rename from public/models/eolienne/moteur_metallic.png rename to public/old-models/eolienne/moteur_metallic.png diff --git a/public/models/eolienne/moteur_mixed_ao.png b/public/old-models/eolienne/moteur_mixed_ao.png similarity index 100% rename from public/models/eolienne/moteur_mixed_ao.png rename to public/old-models/eolienne/moteur_mixed_ao.png diff --git a/public/models/eolienne/moteur_normal.png b/public/old-models/eolienne/moteur_normal.png similarity index 100% rename from public/models/eolienne/moteur_normal.png rename to public/old-models/eolienne/moteur_normal.png diff --git a/public/models/eolienne/moteur_normal_opengl.png b/public/old-models/eolienne/moteur_normal_opengl.png similarity index 100% rename from public/models/eolienne/moteur_normal_opengl.png rename to public/old-models/eolienne/moteur_normal_opengl.png diff --git a/public/models/eolienne/moteur_roughness.png b/public/old-models/eolienne/moteur_roughness.png similarity index 100% rename from public/models/eolienne/moteur_roughness.png rename to public/old-models/eolienne/moteur_roughness.png diff --git a/public/models/eolienne/pied_base_color.png b/public/old-models/eolienne/pied_base_color.png similarity index 100% rename from public/models/eolienne/pied_base_color.png rename to public/old-models/eolienne/pied_base_color.png diff --git a/public/models/eolienne/pied_height.png b/public/old-models/eolienne/pied_height.png similarity index 100% rename from public/models/eolienne/pied_height.png rename to public/old-models/eolienne/pied_height.png diff --git a/public/models/eolienne/pied_metallic.png b/public/old-models/eolienne/pied_metallic.png similarity index 100% rename from public/models/eolienne/pied_metallic.png rename to public/old-models/eolienne/pied_metallic.png diff --git a/public/models/eolienne/pied_mixed_ao.png b/public/old-models/eolienne/pied_mixed_ao.png similarity index 100% rename from public/models/eolienne/pied_mixed_ao.png rename to public/old-models/eolienne/pied_mixed_ao.png diff --git a/public/models/eolienne/pied_normal.png b/public/old-models/eolienne/pied_normal.png similarity index 100% rename from public/models/eolienne/pied_normal.png rename to public/old-models/eolienne/pied_normal.png diff --git a/public/models/eolienne/pied_normal_opengl.png b/public/old-models/eolienne/pied_normal_opengl.png similarity index 100% rename from public/models/eolienne/pied_normal_opengl.png rename to public/old-models/eolienne/pied_normal_opengl.png diff --git a/public/models/eolienne/pied_roughness.png b/public/old-models/eolienne/pied_roughness.png similarity index 100% rename from public/models/eolienne/pied_roughness.png rename to public/old-models/eolienne/pied_roughness.png diff --git a/public/models/eolienne/tiges1st_base_color.png b/public/old-models/eolienne/tiges1st_base_color.png similarity index 100% rename from public/models/eolienne/tiges1st_base_color.png rename to public/old-models/eolienne/tiges1st_base_color.png diff --git a/public/models/eolienne/tiges1st_height.png b/public/old-models/eolienne/tiges1st_height.png similarity index 100% rename from public/models/eolienne/tiges1st_height.png rename to public/old-models/eolienne/tiges1st_height.png diff --git a/public/models/eolienne/tiges1st_metallic.png b/public/old-models/eolienne/tiges1st_metallic.png similarity index 100% rename from public/models/eolienne/tiges1st_metallic.png rename to public/old-models/eolienne/tiges1st_metallic.png diff --git a/public/models/eolienne/tiges1st_mixed_ao.png b/public/old-models/eolienne/tiges1st_mixed_ao.png similarity index 100% rename from public/models/eolienne/tiges1st_mixed_ao.png rename to public/old-models/eolienne/tiges1st_mixed_ao.png diff --git a/public/models/eolienne/tiges1st_normal.png b/public/old-models/eolienne/tiges1st_normal.png similarity index 100% rename from public/models/eolienne/tiges1st_normal.png rename to public/old-models/eolienne/tiges1st_normal.png diff --git a/public/models/eolienne/tiges1st_normal_opengl.png b/public/old-models/eolienne/tiges1st_normal_opengl.png similarity index 100% rename from public/models/eolienne/tiges1st_normal_opengl.png rename to public/old-models/eolienne/tiges1st_normal_opengl.png diff --git a/public/models/eolienne/tiges1st_roughness.png b/public/old-models/eolienne/tiges1st_roughness.png similarity index 100% rename from public/models/eolienne/tiges1st_roughness.png rename to public/old-models/eolienne/tiges1st_roughness.png diff --git a/public/models/eolienne/tiges2nd_base_color.png b/public/old-models/eolienne/tiges2nd_base_color.png similarity index 100% rename from public/models/eolienne/tiges2nd_base_color.png rename to public/old-models/eolienne/tiges2nd_base_color.png diff --git a/public/models/eolienne/tiges2nd_height.png b/public/old-models/eolienne/tiges2nd_height.png similarity index 100% rename from public/models/eolienne/tiges2nd_height.png rename to public/old-models/eolienne/tiges2nd_height.png diff --git a/public/models/eolienne/tiges2nd_metallic.png b/public/old-models/eolienne/tiges2nd_metallic.png similarity index 100% rename from public/models/eolienne/tiges2nd_metallic.png rename to public/old-models/eolienne/tiges2nd_metallic.png diff --git a/public/models/eolienne/tiges2nd_mixed_ao.png b/public/old-models/eolienne/tiges2nd_mixed_ao.png similarity index 100% rename from public/models/eolienne/tiges2nd_mixed_ao.png rename to public/old-models/eolienne/tiges2nd_mixed_ao.png diff --git a/public/models/eolienne/tiges2nd_normal.png b/public/old-models/eolienne/tiges2nd_normal.png similarity index 100% rename from public/models/eolienne/tiges2nd_normal.png rename to public/old-models/eolienne/tiges2nd_normal.png diff --git a/public/models/eolienne/tiges2nd_normal_opengl.png b/public/old-models/eolienne/tiges2nd_normal_opengl.png similarity index 100% rename from public/models/eolienne/tiges2nd_normal_opengl.png rename to public/old-models/eolienne/tiges2nd_normal_opengl.png diff --git a/public/models/eolienne/tiges2nd_roughness.png b/public/old-models/eolienne/tiges2nd_roughness.png similarity index 100% rename from public/models/eolienne/tiges2nd_roughness.png rename to public/old-models/eolienne/tiges2nd_roughness.png diff --git a/public/models/fermeverticale/ferme verticale.bin b/public/old-models/fermeverticale/ferme verticale.bin similarity index 100% rename from public/models/fermeverticale/ferme verticale.bin rename to public/old-models/fermeverticale/ferme verticale.bin diff --git a/public/models/fermeverticale/fermeverticale_baseColor.png b/public/old-models/fermeverticale/fermeverticale_baseColor.png similarity index 100% rename from public/models/fermeverticale/fermeverticale_baseColor.png rename to public/old-models/fermeverticale/fermeverticale_baseColor.png diff --git a/public/models/fermeverticale/fermeverticale_normal.png b/public/old-models/fermeverticale/fermeverticale_normal.png similarity index 100% rename from public/models/fermeverticale/fermeverticale_normal.png rename to public/old-models/fermeverticale/fermeverticale_normal.png diff --git a/public/models/fermeverticale/fermeverticale_occlusionRoughnessMetallic.png b/public/old-models/fermeverticale/fermeverticale_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/fermeverticale/fermeverticale_occlusionRoughnessMetallic.png rename to public/old-models/fermeverticale/fermeverticale_occlusionRoughnessMetallic.png diff --git a/public/models/fermeverticale/model.gltf b/public/old-models/fermeverticale/model.gltf similarity index 100% rename from public/models/fermeverticale/model.gltf rename to public/old-models/fermeverticale/model.gltf diff --git a/public/models/fermier-animated/DefaultMaterial_diffuse.png b/public/old-models/fermier-animated/DefaultMaterial_diffuse.png similarity index 100% rename from public/models/fermier-animated/DefaultMaterial_diffuse.png rename to public/old-models/fermier-animated/DefaultMaterial_diffuse.png diff --git a/public/models/fermier-animated/DefaultMaterial_normal.png b/public/old-models/fermier-animated/DefaultMaterial_normal.png similarity index 100% rename from public/models/fermier-animated/DefaultMaterial_normal.png rename to public/old-models/fermier-animated/DefaultMaterial_normal.png diff --git a/public/models/fermier-animated/model.bin b/public/old-models/fermier-animated/model.bin similarity index 100% rename from public/models/fermier-animated/model.bin rename to public/old-models/fermier-animated/model.bin diff --git a/public/models/fermier-animated/model.gltf b/public/old-models/fermier-animated/model.gltf similarity index 100% rename from public/models/fermier-animated/model.gltf rename to public/old-models/fermier-animated/model.gltf diff --git a/public/models/fermier/defaultmaterial_basecolor.png b/public/old-models/fermier/defaultmaterial_basecolor.png similarity index 100% rename from public/models/fermier/defaultmaterial_basecolor.png rename to public/old-models/fermier/defaultmaterial_basecolor.png diff --git a/public/models/fermier/defaultmaterial_normal.png b/public/old-models/fermier/defaultmaterial_normal.png similarity index 100% rename from public/models/fermier/defaultmaterial_normal.png rename to public/old-models/fermier/defaultmaterial_normal.png diff --git a/public/models/fermier/defaultmaterial_occlusionroughnessmetallic.png b/public/old-models/fermier/defaultmaterial_occlusionroughnessmetallic.png similarity index 100% rename from public/models/fermier/defaultmaterial_occlusionroughnessmetallic.png rename to public/old-models/fermier/defaultmaterial_occlusionroughnessmetallic.png diff --git a/public/models/fermier/fermier.bin b/public/old-models/fermier/fermier.bin similarity index 100% rename from public/models/fermier/fermier.bin rename to public/old-models/fermier/fermier.bin diff --git a/public/models/fermier/model.gltf b/public/old-models/fermier/model.gltf similarity index 100% rename from public/models/fermier/model.gltf rename to public/old-models/fermier/model.gltf diff --git a/public/models/galet/galet.bin b/public/old-models/galet/galet.bin similarity index 100% rename from public/models/galet/galet.bin rename to public/old-models/galet/galet.bin diff --git a/public/models/galet/galet_basecolor.png b/public/old-models/galet/galet_basecolor.png similarity index 100% rename from public/models/galet/galet_basecolor.png rename to public/old-models/galet/galet_basecolor.png diff --git a/public/models/galet/galet_normal.png b/public/old-models/galet/galet_normal.png similarity index 100% rename from public/models/galet/galet_normal.png rename to public/old-models/galet/galet_normal.png diff --git a/public/models/galet/galet_occlusionroughnessmetallic.png b/public/old-models/galet/galet_occlusionroughnessmetallic.png similarity index 100% rename from public/models/galet/galet_occlusionroughnessmetallic.png rename to public/old-models/galet/galet_occlusionroughnessmetallic.png diff --git a/public/models/galet/model.gltf b/public/old-models/galet/model.gltf similarity index 100% rename from public/models/galet/model.gltf rename to public/old-models/galet/model.gltf diff --git a/public/models/gant_l/gant_basecolor.png b/public/old-models/gant_l/gant_basecolor.png similarity index 100% rename from public/models/gant_l/gant_basecolor.png rename to public/old-models/gant_l/gant_basecolor.png diff --git a/public/models/gant_l/gant_normal.png b/public/old-models/gant_l/gant_normal.png similarity index 100% rename from public/models/gant_l/gant_normal.png rename to public/old-models/gant_l/gant_normal.png diff --git a/public/models/gant_l/gant_occlusionroughnessmetallic.png b/public/old-models/gant_l/gant_occlusionroughnessmetallic.png similarity index 100% rename from public/models/gant_l/gant_occlusionroughnessmetallic.png rename to public/old-models/gant_l/gant_occlusionroughnessmetallic.png diff --git a/public/models/gant_l/hanf_l.bin b/public/old-models/gant_l/hanf_l.bin similarity index 100% rename from public/models/gant_l/hanf_l.bin rename to public/old-models/gant_l/hanf_l.bin diff --git a/public/models/gant_l/model.gltf b/public/old-models/gant_l/model.gltf similarity index 100% rename from public/models/gant_l/model.gltf rename to public/old-models/gant_l/model.gltf diff --git a/public/models/gant_l_pad/galet_basecolor.png b/public/old-models/gant_l_pad/galet_basecolor.png similarity index 100% rename from public/models/gant_l_pad/galet_basecolor.png rename to public/old-models/gant_l_pad/galet_basecolor.png diff --git a/public/models/gant_l_pad/galet_normal.png b/public/old-models/gant_l_pad/galet_normal.png similarity index 100% rename from public/models/gant_l_pad/galet_normal.png rename to public/old-models/gant_l_pad/galet_normal.png diff --git a/public/models/gant_l_pad/galet_occlusionroughnessmetallic.png b/public/old-models/gant_l_pad/galet_occlusionroughnessmetallic.png similarity index 100% rename from public/models/gant_l_pad/galet_occlusionroughnessmetallic.png rename to public/old-models/gant_l_pad/galet_occlusionroughnessmetallic.png diff --git a/public/models/gant_l_pad/gant_basecolor.png b/public/old-models/gant_l_pad/gant_basecolor.png similarity index 100% rename from public/models/gant_l_pad/gant_basecolor.png rename to public/old-models/gant_l_pad/gant_basecolor.png diff --git a/public/models/gant_l_pad/gant_normal.png b/public/old-models/gant_l_pad/gant_normal.png similarity index 100% rename from public/models/gant_l_pad/gant_normal.png rename to public/old-models/gant_l_pad/gant_normal.png diff --git a/public/models/gant_l_pad/gant_occlusionroughnessmetallic.png b/public/old-models/gant_l_pad/gant_occlusionroughnessmetallic.png similarity index 100% rename from public/models/gant_l_pad/gant_occlusionroughnessmetallic.png rename to public/old-models/gant_l_pad/gant_occlusionroughnessmetallic.png diff --git a/public/models/gant_l_pad/gants.bin b/public/old-models/gant_l_pad/gants.bin similarity index 100% rename from public/models/gant_l_pad/gants.bin rename to public/old-models/gant_l_pad/gants.bin diff --git a/public/models/gant_l_pad/model.gltf b/public/old-models/gant_l_pad/model.gltf similarity index 100% rename from public/models/gant_l_pad/model.gltf rename to public/old-models/gant_l_pad/model.gltf diff --git a/public/models/gant_r/galet_baseColor.png b/public/old-models/gant_r/galet_baseColor.png similarity index 100% rename from public/models/gant_r/galet_baseColor.png rename to public/old-models/gant_r/galet_baseColor.png diff --git a/public/models/gant_r/galet_normal.png b/public/old-models/gant_r/galet_normal.png similarity index 100% rename from public/models/gant_r/galet_normal.png rename to public/old-models/gant_r/galet_normal.png diff --git a/public/models/gant_r/galet_occlusionRoughnessMetallic.png b/public/old-models/gant_r/galet_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/gant_r/galet_occlusionRoughnessMetallic.png rename to public/old-models/gant_r/galet_occlusionRoughnessMetallic.png diff --git a/public/models/gant_r/gant_basecolor.png b/public/old-models/gant_r/gant_baseColor.png similarity index 100% rename from public/models/gant_r/gant_basecolor.png rename to public/old-models/gant_r/gant_baseColor.png diff --git a/public/models/gant_r/gant_normal.png b/public/old-models/gant_r/gant_normal.png similarity index 100% rename from public/models/gant_r/gant_normal.png rename to public/old-models/gant_r/gant_normal.png diff --git a/public/models/gant_r/gant_occlusionroughnessmetallic.png b/public/old-models/gant_r/gant_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/gant_r/gant_occlusionroughnessmetallic.png rename to public/old-models/gant_r/gant_occlusionRoughnessMetallic.png diff --git a/public/models/gant_r/gant_r.bin b/public/old-models/gant_r/gant_r.bin similarity index 100% rename from public/models/gant_r/gant_r.bin rename to public/old-models/gant_r/gant_r.bin diff --git a/public/models/gant_r/model.bin b/public/old-models/gant_r/model.bin similarity index 100% rename from public/models/gant_r/model.bin rename to public/old-models/gant_r/model.bin diff --git a/public/models/gant_r/model.glb b/public/old-models/gant_r/model.glb similarity index 100% rename from public/models/gant_r/model.glb rename to public/old-models/gant_r/model.glb diff --git a/public/models/gant_r/model.gltf b/public/old-models/gant_r/model.gltf similarity index 100% rename from public/models/gant_r/model.gltf rename to public/old-models/gant_r/model.gltf diff --git a/public/models/gant_r_pad/galet_basecolor.png b/public/old-models/gant_r_pad/galet_basecolor.png similarity index 100% rename from public/models/gant_r_pad/galet_basecolor.png rename to public/old-models/gant_r_pad/galet_basecolor.png diff --git a/public/models/gant_r_pad/galet_normal.png b/public/old-models/gant_r_pad/galet_normal.png similarity index 100% rename from public/models/gant_r_pad/galet_normal.png rename to public/old-models/gant_r_pad/galet_normal.png diff --git a/public/models/gant_r_pad/galet_occlusionroughnessmetallic.png b/public/old-models/gant_r_pad/galet_occlusionroughnessmetallic.png similarity index 100% rename from public/models/gant_r_pad/galet_occlusionroughnessmetallic.png rename to public/old-models/gant_r_pad/galet_occlusionroughnessmetallic.png diff --git a/public/models/gant_r_pad/gant_basecolor.png b/public/old-models/gant_r_pad/gant_basecolor.png similarity index 100% rename from public/models/gant_r_pad/gant_basecolor.png rename to public/old-models/gant_r_pad/gant_basecolor.png diff --git a/public/models/gant_r_pad/gant_normal.png b/public/old-models/gant_r_pad/gant_normal.png similarity index 100% rename from public/models/gant_r_pad/gant_normal.png rename to public/old-models/gant_r_pad/gant_normal.png diff --git a/public/models/gant_r_pad/gant_occlusionroughnessmetallic.png b/public/old-models/gant_r_pad/gant_occlusionroughnessmetallic.png similarity index 100% rename from public/models/gant_r_pad/gant_occlusionroughnessmetallic.png rename to public/old-models/gant_r_pad/gant_occlusionroughnessmetallic.png diff --git a/public/models/gant_r_pad/gant_r_pad.bin b/public/old-models/gant_r_pad/gant_r_pad.bin similarity index 100% rename from public/models/gant_r_pad/gant_r_pad.bin rename to public/old-models/gant_r_pad/gant_r_pad.bin diff --git a/public/models/gant_r_pad/model.gltf b/public/old-models/gant_r_pad/model.gltf similarity index 100% rename from public/models/gant_r_pad/model.gltf rename to public/old-models/gant_r_pad/model.gltf diff --git a/public/models/gerant/defaultmaterial_base_color.png b/public/old-models/gerant/defaultmaterial_base_color.png similarity index 100% rename from public/models/gerant/defaultmaterial_base_color.png rename to public/old-models/gerant/defaultmaterial_base_color.png diff --git a/public/models/gerant/defaultmaterial_basecolor.png b/public/old-models/gerant/defaultmaterial_basecolor.png similarity index 100% rename from public/models/gerant/defaultmaterial_basecolor.png rename to public/old-models/gerant/defaultmaterial_basecolor.png diff --git a/public/models/gerant/defaultmaterial_height.png b/public/old-models/gerant/defaultmaterial_height.png similarity index 100% rename from public/models/gerant/defaultmaterial_height.png rename to public/old-models/gerant/defaultmaterial_height.png diff --git a/public/models/gerant/defaultmaterial_metallic.png b/public/old-models/gerant/defaultmaterial_metallic.png similarity index 100% rename from public/models/gerant/defaultmaterial_metallic.png rename to public/old-models/gerant/defaultmaterial_metallic.png diff --git a/public/models/gerant/defaultmaterial_normal.png b/public/old-models/gerant/defaultmaterial_normal.png similarity index 100% rename from public/models/gerant/defaultmaterial_normal.png rename to public/old-models/gerant/defaultmaterial_normal.png diff --git a/public/models/gerant/defaultmaterial_normal_opengl.png b/public/old-models/gerant/defaultmaterial_normal_opengl.png similarity index 100% rename from public/models/gerant/defaultmaterial_normal_opengl.png rename to public/old-models/gerant/defaultmaterial_normal_opengl.png diff --git a/public/models/gerant/defaultmaterial_occlusionroughnessmetallic.png b/public/old-models/gerant/defaultmaterial_occlusionroughnessmetallic.png similarity index 100% rename from public/models/gerant/defaultmaterial_occlusionroughnessmetallic.png rename to public/old-models/gerant/defaultmaterial_occlusionroughnessmetallic.png diff --git a/public/models/gerant/defaultmaterial_roughness.png b/public/old-models/gerant/defaultmaterial_roughness.png similarity index 100% rename from public/models/gerant/defaultmaterial_roughness.png rename to public/old-models/gerant/defaultmaterial_roughness.png diff --git a/public/models/gerant/gerant.bin b/public/old-models/gerant/gerant.bin similarity index 100% rename from public/models/gerant/gerant.bin rename to public/old-models/gerant/gerant.bin diff --git a/public/models/gerant/model.gltf b/public/old-models/gerant/model.gltf similarity index 100% rename from public/models/gerant/model.gltf rename to public/old-models/gerant/model.gltf diff --git a/public/models/gerant_anim/DefaultMaterial_Normal.png b/public/old-models/gerant_anim/DefaultMaterial_Normal.png similarity index 100% rename from public/models/gerant_anim/DefaultMaterial_Normal.png rename to public/old-models/gerant_anim/DefaultMaterial_Normal.png diff --git a/public/models/gerant_anim/DefaultMaterial_diffuse.png b/public/old-models/gerant_anim/DefaultMaterial_diffuse.png similarity index 100% rename from public/models/gerant_anim/DefaultMaterial_diffuse.png rename to public/old-models/gerant_anim/DefaultMaterial_diffuse.png diff --git a/public/models/gerant_anim/model.bin b/public/old-models/gerant_anim/model.bin similarity index 100% rename from public/models/gerant_anim/model.bin rename to public/old-models/gerant_anim/model.bin diff --git a/public/models/gerant_anim/model.gltf b/public/old-models/gerant_anim/model.gltf similarity index 100% rename from public/models/gerant_anim/model.gltf rename to public/old-models/gerant_anim/model.gltf diff --git a/public/models/habitant1-animated/model.bin b/public/old-models/habitant1-animated/model.bin similarity index 100% rename from public/models/habitant1-animated/model.bin rename to public/old-models/habitant1-animated/model.bin diff --git a/public/models/habitant1-animated/model.gltf b/public/old-models/habitant1-animated/model.gltf similarity index 100% rename from public/models/habitant1-animated/model.gltf rename to public/old-models/habitant1-animated/model.gltf diff --git a/public/models/habitant1-animated/pnj1_diffuse.png b/public/old-models/habitant1-animated/pnj1_diffuse.png similarity index 100% rename from public/models/habitant1-animated/pnj1_diffuse.png rename to public/old-models/habitant1-animated/pnj1_diffuse.png diff --git a/public/models/habitant1-animated/pnj1_normal.png b/public/old-models/habitant1-animated/pnj1_normal.png similarity index 100% rename from public/models/habitant1-animated/pnj1_normal.png rename to public/old-models/habitant1-animated/pnj1_normal.png diff --git a/public/models/habitant1/model.gltf b/public/old-models/habitant1/model.gltf similarity index 100% rename from public/models/habitant1/model.gltf rename to public/old-models/habitant1/model.gltf diff --git a/public/models/habitant1/pnj1.bin b/public/old-models/habitant1/pnj1.bin similarity index 100% rename from public/models/habitant1/pnj1.bin rename to public/old-models/habitant1/pnj1.bin diff --git a/public/models/habitant1/pnj1_baseColor.png b/public/old-models/habitant1/pnj1_baseColor.png similarity index 100% rename from public/models/habitant1/pnj1_baseColor.png rename to public/old-models/habitant1/pnj1_baseColor.png diff --git a/public/models/habitant1/pnj1_normal.png b/public/old-models/habitant1/pnj1_normal.png similarity index 100% rename from public/models/habitant1/pnj1_normal.png rename to public/old-models/habitant1/pnj1_normal.png diff --git a/public/models/habitant1/pnj1_occlusionRoughnessMetallic.png b/public/old-models/habitant1/pnj1_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/habitant1/pnj1_occlusionRoughnessMetallic.png rename to public/old-models/habitant1/pnj1_occlusionRoughnessMetallic.png diff --git a/public/models/habitant2-animated/habitant2_diffuse.png b/public/old-models/habitant2-animated/habitant2_diffuse.png similarity index 100% rename from public/models/habitant2-animated/habitant2_diffuse.png rename to public/old-models/habitant2-animated/habitant2_diffuse.png diff --git a/public/models/habitant2-animated/habitant2_normal.png b/public/old-models/habitant2-animated/habitant2_normal.png similarity index 100% rename from public/models/habitant2-animated/habitant2_normal.png rename to public/old-models/habitant2-animated/habitant2_normal.png diff --git a/public/models/habitant2-animated/model.bin b/public/old-models/habitant2-animated/model.bin similarity index 100% rename from public/models/habitant2-animated/model.bin rename to public/old-models/habitant2-animated/model.bin diff --git a/public/models/habitant2-animated/model.gltf b/public/old-models/habitant2-animated/model.gltf similarity index 100% rename from public/models/habitant2-animated/model.gltf rename to public/old-models/habitant2-animated/model.gltf diff --git a/public/models/habitant2/habitant2_baseColor.png b/public/old-models/habitant2/habitant2_baseColor.png similarity index 100% rename from public/models/habitant2/habitant2_baseColor.png rename to public/old-models/habitant2/habitant2_baseColor.png diff --git a/public/models/habitant2/habitant2_normal.png b/public/old-models/habitant2/habitant2_normal.png similarity index 100% rename from public/models/habitant2/habitant2_normal.png rename to public/old-models/habitant2/habitant2_normal.png diff --git a/public/models/habitant2/habitant2_occlusionRoughnessMetallic.png b/public/old-models/habitant2/habitant2_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/habitant2/habitant2_occlusionRoughnessMetallic.png rename to public/old-models/habitant2/habitant2_occlusionRoughnessMetallic.png diff --git a/public/models/habitant2/model.gltf b/public/old-models/habitant2/model.gltf similarity index 100% rename from public/models/habitant2/model.gltf rename to public/old-models/habitant2/model.gltf diff --git a/public/models/habitant2/pnj2.bin b/public/old-models/habitant2/pnj2.bin similarity index 100% rename from public/models/habitant2/pnj2.bin rename to public/old-models/habitant2/pnj2.bin diff --git a/public/models/immeuble1/fenetre_baseColor.png b/public/old-models/immeuble1/fenetre_baseColor.png similarity index 100% rename from public/models/immeuble1/fenetre_baseColor.png rename to public/old-models/immeuble1/fenetre_baseColor.png diff --git a/public/models/immeuble1/fenetre_normal.png b/public/old-models/immeuble1/fenetre_normal.png similarity index 100% rename from public/models/immeuble1/fenetre_normal.png rename to public/old-models/immeuble1/fenetre_normal.png diff --git a/public/models/immeuble1/fenetre_occlusionRoughnessMetallic.png b/public/old-models/immeuble1/fenetre_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/immeuble1/fenetre_occlusionRoughnessMetallic.png rename to public/old-models/immeuble1/fenetre_occlusionRoughnessMetallic.png diff --git a/public/models/immeuble1/immeuble1.bin b/public/old-models/immeuble1/immeuble1.bin similarity index 100% rename from public/models/immeuble1/immeuble1.bin rename to public/old-models/immeuble1/immeuble1.bin diff --git a/public/models/immeuble1/maison_baseColor.png b/public/old-models/immeuble1/maison_baseColor.png similarity index 100% rename from public/models/immeuble1/maison_baseColor.png rename to public/old-models/immeuble1/maison_baseColor.png diff --git a/public/models/immeuble1/maison_normal.png b/public/old-models/immeuble1/maison_normal.png similarity index 100% rename from public/models/immeuble1/maison_normal.png rename to public/old-models/immeuble1/maison_normal.png diff --git a/public/models/immeuble1/maison_occlusionRoughnessMetallic.png b/public/old-models/immeuble1/maison_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/immeuble1/maison_occlusionRoughnessMetallic.png rename to public/old-models/immeuble1/maison_occlusionRoughnessMetallic.png diff --git a/public/models/immeuble1/model.gltf b/public/old-models/immeuble1/model.gltf similarity index 100% rename from public/models/immeuble1/model.gltf rename to public/old-models/immeuble1/model.gltf diff --git a/public/models/immeuble1/panneau_baseColor.png b/public/old-models/immeuble1/panneau_baseColor.png similarity index 100% rename from public/models/immeuble1/panneau_baseColor.png rename to public/old-models/immeuble1/panneau_baseColor.png diff --git a/public/models/immeuble1/panneau_normal.png b/public/old-models/immeuble1/panneau_normal.png similarity index 100% rename from public/models/immeuble1/panneau_normal.png rename to public/old-models/immeuble1/panneau_normal.png diff --git a/public/models/immeuble1/panneau_occlusionRoughnessMetallic.png b/public/old-models/immeuble1/panneau_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/immeuble1/panneau_occlusionRoughnessMetallic.png rename to public/old-models/immeuble1/panneau_occlusionRoughnessMetallic.png diff --git a/public/models/immeuble1/porte_baseColor.png b/public/old-models/immeuble1/porte_baseColor.png similarity index 100% rename from public/models/immeuble1/porte_baseColor.png rename to public/old-models/immeuble1/porte_baseColor.png diff --git a/public/models/immeuble1/porte_normal.png b/public/old-models/immeuble1/porte_normal.png similarity index 100% rename from public/models/immeuble1/porte_normal.png rename to public/old-models/immeuble1/porte_normal.png diff --git a/public/models/immeuble1/porte_occlusionRoughnessMetallic.png b/public/old-models/immeuble1/porte_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/immeuble1/porte_occlusionRoughnessMetallic.png rename to public/old-models/immeuble1/porte_occlusionRoughnessMetallic.png diff --git a/public/models/lafabrik/anneaux_base_color.png b/public/old-models/lafabrik/anneaux_base_color.png similarity index 100% rename from public/models/lafabrik/anneaux_base_color.png rename to public/old-models/lafabrik/anneaux_base_color.png diff --git a/public/models/lafabrik/anneaux_basecolor.png b/public/old-models/lafabrik/anneaux_basecolor.png similarity index 100% rename from public/models/lafabrik/anneaux_basecolor.png rename to public/old-models/lafabrik/anneaux_basecolor.png diff --git a/public/models/lafabrik/anneaux_height.png b/public/old-models/lafabrik/anneaux_height.png similarity index 100% rename from public/models/lafabrik/anneaux_height.png rename to public/old-models/lafabrik/anneaux_height.png diff --git a/public/models/lafabrik/anneaux_metallic.png b/public/old-models/lafabrik/anneaux_metallic.png similarity index 100% rename from public/models/lafabrik/anneaux_metallic.png rename to public/old-models/lafabrik/anneaux_metallic.png diff --git a/public/models/lafabrik/anneaux_mixed_ao.png b/public/old-models/lafabrik/anneaux_mixed_ao.png similarity index 100% rename from public/models/lafabrik/anneaux_mixed_ao.png rename to public/old-models/lafabrik/anneaux_mixed_ao.png diff --git a/public/models/lafabrik/anneaux_normal.png b/public/old-models/lafabrik/anneaux_normal.png similarity index 100% rename from public/models/lafabrik/anneaux_normal.png rename to public/old-models/lafabrik/anneaux_normal.png diff --git a/public/models/lafabrik/anneaux_normal_opengl.png b/public/old-models/lafabrik/anneaux_normal_opengl.png similarity index 100% rename from public/models/lafabrik/anneaux_normal_opengl.png rename to public/old-models/lafabrik/anneaux_normal_opengl.png diff --git a/public/models/lafabrik/anneaux_occlusionroughnessmetallic.png b/public/old-models/lafabrik/anneaux_occlusionroughnessmetallic.png similarity index 100% rename from public/models/lafabrik/anneaux_occlusionroughnessmetallic.png rename to public/old-models/lafabrik/anneaux_occlusionroughnessmetallic.png diff --git a/public/models/lafabrik/anneaux_roughness.png b/public/old-models/lafabrik/anneaux_roughness.png similarity index 100% rename from public/models/lafabrik/anneaux_roughness.png rename to public/old-models/lafabrik/anneaux_roughness.png diff --git a/public/models/lafabrik/bat_base_color.png b/public/old-models/lafabrik/bat_base_color.png similarity index 100% rename from public/models/lafabrik/bat_base_color.png rename to public/old-models/lafabrik/bat_base_color.png diff --git a/public/models/lafabrik/bat_basecolor.png b/public/old-models/lafabrik/bat_basecolor.png similarity index 100% rename from public/models/lafabrik/bat_basecolor.png rename to public/old-models/lafabrik/bat_basecolor.png diff --git a/public/models/lafabrik/bat_height.png b/public/old-models/lafabrik/bat_height.png similarity index 100% rename from public/models/lafabrik/bat_height.png rename to public/old-models/lafabrik/bat_height.png diff --git a/public/models/lafabrik/bat_metallic.png b/public/old-models/lafabrik/bat_metallic.png similarity index 100% rename from public/models/lafabrik/bat_metallic.png rename to public/old-models/lafabrik/bat_metallic.png diff --git a/public/models/lafabrik/bat_mixed_ao.png b/public/old-models/lafabrik/bat_mixed_ao.png similarity index 100% rename from public/models/lafabrik/bat_mixed_ao.png rename to public/old-models/lafabrik/bat_mixed_ao.png diff --git a/public/models/lafabrik/bat_normal.png b/public/old-models/lafabrik/bat_normal.png similarity index 100% rename from public/models/lafabrik/bat_normal.png rename to public/old-models/lafabrik/bat_normal.png diff --git a/public/models/lafabrik/bat_normal_opengl.png b/public/old-models/lafabrik/bat_normal_opengl.png similarity index 100% rename from public/models/lafabrik/bat_normal_opengl.png rename to public/old-models/lafabrik/bat_normal_opengl.png diff --git a/public/models/lafabrik/bat_occlusionroughnessmetallic.png b/public/old-models/lafabrik/bat_occlusionroughnessmetallic.png similarity index 100% rename from public/models/lafabrik/bat_occlusionroughnessmetallic.png rename to public/old-models/lafabrik/bat_occlusionroughnessmetallic.png diff --git a/public/models/lafabrik/bat_roughness.png b/public/old-models/lafabrik/bat_roughness.png similarity index 100% rename from public/models/lafabrik/bat_roughness.png rename to public/old-models/lafabrik/bat_roughness.png diff --git a/public/models/lafabrik/comptoir_base_color.png b/public/old-models/lafabrik/comptoir_base_color.png similarity index 100% rename from public/models/lafabrik/comptoir_base_color.png rename to public/old-models/lafabrik/comptoir_base_color.png diff --git a/public/models/lafabrik/comptoir_basecolor.png b/public/old-models/lafabrik/comptoir_basecolor.png similarity index 100% rename from public/models/lafabrik/comptoir_basecolor.png rename to public/old-models/lafabrik/comptoir_basecolor.png diff --git a/public/models/lafabrik/comptoir_height.png b/public/old-models/lafabrik/comptoir_height.png similarity index 100% rename from public/models/lafabrik/comptoir_height.png rename to public/old-models/lafabrik/comptoir_height.png diff --git a/public/models/lafabrik/comptoir_metallic.png b/public/old-models/lafabrik/comptoir_metallic.png similarity index 100% rename from public/models/lafabrik/comptoir_metallic.png rename to public/old-models/lafabrik/comptoir_metallic.png diff --git a/public/models/lafabrik/comptoir_mixed_ao.png b/public/old-models/lafabrik/comptoir_mixed_ao.png similarity index 100% rename from public/models/lafabrik/comptoir_mixed_ao.png rename to public/old-models/lafabrik/comptoir_mixed_ao.png diff --git a/public/models/lafabrik/comptoir_normal.png b/public/old-models/lafabrik/comptoir_normal.png similarity index 100% rename from public/models/lafabrik/comptoir_normal.png rename to public/old-models/lafabrik/comptoir_normal.png diff --git a/public/models/lafabrik/comptoir_normal_opengl.png b/public/old-models/lafabrik/comptoir_normal_opengl.png similarity index 100% rename from public/models/lafabrik/comptoir_normal_opengl.png rename to public/old-models/lafabrik/comptoir_normal_opengl.png diff --git a/public/models/lafabrik/comptoir_occlusionroughnessmetallic.png b/public/old-models/lafabrik/comptoir_occlusionroughnessmetallic.png similarity index 100% rename from public/models/lafabrik/comptoir_occlusionroughnessmetallic.png rename to public/old-models/lafabrik/comptoir_occlusionroughnessmetallic.png diff --git a/public/models/lafabrik/comptoir_roughness.png b/public/old-models/lafabrik/comptoir_roughness.png similarity index 100% rename from public/models/lafabrik/comptoir_roughness.png rename to public/old-models/lafabrik/comptoir_roughness.png diff --git a/public/models/lafabrik/dashboard_base_color.png b/public/old-models/lafabrik/dashboard_base_color.png similarity index 100% rename from public/models/lafabrik/dashboard_base_color.png rename to public/old-models/lafabrik/dashboard_base_color.png diff --git a/public/models/lafabrik/dashboard_basecolor.png b/public/old-models/lafabrik/dashboard_basecolor.png similarity index 100% rename from public/models/lafabrik/dashboard_basecolor.png rename to public/old-models/lafabrik/dashboard_basecolor.png diff --git a/public/models/lafabrik/dashboard_height.png b/public/old-models/lafabrik/dashboard_height.png similarity index 100% rename from public/models/lafabrik/dashboard_height.png rename to public/old-models/lafabrik/dashboard_height.png diff --git a/public/models/lafabrik/dashboard_metallic.png b/public/old-models/lafabrik/dashboard_metallic.png similarity index 100% rename from public/models/lafabrik/dashboard_metallic.png rename to public/old-models/lafabrik/dashboard_metallic.png diff --git a/public/models/lafabrik/dashboard_mixed_ao.png b/public/old-models/lafabrik/dashboard_mixed_ao.png similarity index 100% rename from public/models/lafabrik/dashboard_mixed_ao.png rename to public/old-models/lafabrik/dashboard_mixed_ao.png diff --git a/public/models/lafabrik/dashboard_normal.png b/public/old-models/lafabrik/dashboard_normal.png similarity index 100% rename from public/models/lafabrik/dashboard_normal.png rename to public/old-models/lafabrik/dashboard_normal.png diff --git a/public/models/lafabrik/dashboard_normal_opengl.png b/public/old-models/lafabrik/dashboard_normal_opengl.png similarity index 100% rename from public/models/lafabrik/dashboard_normal_opengl.png rename to public/old-models/lafabrik/dashboard_normal_opengl.png diff --git a/public/models/lafabrik/dashboard_occlusionroughnessmetallic.png b/public/old-models/lafabrik/dashboard_occlusionroughnessmetallic.png similarity index 100% rename from public/models/lafabrik/dashboard_occlusionroughnessmetallic.png rename to public/old-models/lafabrik/dashboard_occlusionroughnessmetallic.png diff --git a/public/models/lafabrik/dashboard_roughness.png b/public/old-models/lafabrik/dashboard_roughness.png similarity index 100% rename from public/models/lafabrik/dashboard_roughness.png rename to public/old-models/lafabrik/dashboard_roughness.png diff --git a/public/models/lafabrik/fenetre_0_base_color.png b/public/old-models/lafabrik/fenetre_0_base_color.png similarity index 100% rename from public/models/lafabrik/fenetre_0_base_color.png rename to public/old-models/lafabrik/fenetre_0_base_color.png diff --git a/public/models/lafabrik/fenetre_0_basecolor.png b/public/old-models/lafabrik/fenetre_0_basecolor.png similarity index 100% rename from public/models/lafabrik/fenetre_0_basecolor.png rename to public/old-models/lafabrik/fenetre_0_basecolor.png diff --git a/public/models/lafabrik/fenetre_0_height.png b/public/old-models/lafabrik/fenetre_0_height.png similarity index 100% rename from public/models/lafabrik/fenetre_0_height.png rename to public/old-models/lafabrik/fenetre_0_height.png diff --git a/public/models/lafabrik/fenetre_0_metallic.png b/public/old-models/lafabrik/fenetre_0_metallic.png similarity index 100% rename from public/models/lafabrik/fenetre_0_metallic.png rename to public/old-models/lafabrik/fenetre_0_metallic.png diff --git a/public/models/lafabrik/fenetre_0_mixed_ao.png b/public/old-models/lafabrik/fenetre_0_mixed_ao.png similarity index 100% rename from public/models/lafabrik/fenetre_0_mixed_ao.png rename to public/old-models/lafabrik/fenetre_0_mixed_ao.png diff --git a/public/models/lafabrik/fenetre_0_normal.png b/public/old-models/lafabrik/fenetre_0_normal.png similarity index 100% rename from public/models/lafabrik/fenetre_0_normal.png rename to public/old-models/lafabrik/fenetre_0_normal.png diff --git a/public/models/lafabrik/fenetre_0_normal_opengl.png b/public/old-models/lafabrik/fenetre_0_normal_opengl.png similarity index 100% rename from public/models/lafabrik/fenetre_0_normal_opengl.png rename to public/old-models/lafabrik/fenetre_0_normal_opengl.png diff --git a/public/models/lafabrik/fenetre_0_occlusionroughnessmetallic.png b/public/old-models/lafabrik/fenetre_0_occlusionroughnessmetallic.png similarity index 100% rename from public/models/lafabrik/fenetre_0_occlusionroughnessmetallic.png rename to public/old-models/lafabrik/fenetre_0_occlusionroughnessmetallic.png diff --git a/public/models/lafabrik/fenetre_0_roughness.png b/public/old-models/lafabrik/fenetre_0_roughness.png similarity index 100% rename from public/models/lafabrik/fenetre_0_roughness.png rename to public/old-models/lafabrik/fenetre_0_roughness.png diff --git a/public/models/lafabrik/model.bin b/public/old-models/lafabrik/model.bin similarity index 100% rename from public/models/lafabrik/model.bin rename to public/old-models/lafabrik/model.bin diff --git a/public/models/lafabrik/model.gltf b/public/old-models/lafabrik/model.gltf similarity index 100% rename from public/models/lafabrik/model.gltf rename to public/old-models/lafabrik/model.gltf diff --git a/public/models/lafabrik/panneau_base_color.png b/public/old-models/lafabrik/panneau_base_color.png similarity index 100% rename from public/models/lafabrik/panneau_base_color.png rename to public/old-models/lafabrik/panneau_base_color.png diff --git a/public/models/lafabrik/panneau_basecolor.png b/public/old-models/lafabrik/panneau_basecolor.png similarity index 100% rename from public/models/lafabrik/panneau_basecolor.png rename to public/old-models/lafabrik/panneau_basecolor.png diff --git a/public/models/lafabrik/panneau_height.png b/public/old-models/lafabrik/panneau_height.png similarity index 100% rename from public/models/lafabrik/panneau_height.png rename to public/old-models/lafabrik/panneau_height.png diff --git a/public/models/lafabrik/panneau_metallic.png b/public/old-models/lafabrik/panneau_metallic.png similarity index 100% rename from public/models/lafabrik/panneau_metallic.png rename to public/old-models/lafabrik/panneau_metallic.png diff --git a/public/models/lafabrik/panneau_mixed_ao.png b/public/old-models/lafabrik/panneau_mixed_ao.png similarity index 100% rename from public/models/lafabrik/panneau_mixed_ao.png rename to public/old-models/lafabrik/panneau_mixed_ao.png diff --git a/public/models/lafabrik/panneau_normal.png b/public/old-models/lafabrik/panneau_normal.png similarity index 100% rename from public/models/lafabrik/panneau_normal.png rename to public/old-models/lafabrik/panneau_normal.png diff --git a/public/models/lafabrik/panneau_normal_opengl.png b/public/old-models/lafabrik/panneau_normal_opengl.png similarity index 100% rename from public/models/lafabrik/panneau_normal_opengl.png rename to public/old-models/lafabrik/panneau_normal_opengl.png diff --git a/public/models/lafabrik/panneau_occlusionroughnessmetallic.png b/public/old-models/lafabrik/panneau_occlusionroughnessmetallic.png similarity index 100% rename from public/models/lafabrik/panneau_occlusionroughnessmetallic.png rename to public/old-models/lafabrik/panneau_occlusionroughnessmetallic.png diff --git a/public/models/lafabrik/panneau_roughness.png b/public/old-models/lafabrik/panneau_roughness.png similarity index 100% rename from public/models/lafabrik/panneau_roughness.png rename to public/old-models/lafabrik/panneau_roughness.png diff --git a/public/models/lafabrik/plan_de_travail_base_color.png b/public/old-models/lafabrik/plan_de_travail_base_color.png similarity index 100% rename from public/models/lafabrik/plan_de_travail_base_color.png rename to public/old-models/lafabrik/plan_de_travail_base_color.png diff --git a/public/models/lafabrik/plan_de_travail_basecolor.png b/public/old-models/lafabrik/plan_de_travail_basecolor.png similarity index 100% rename from public/models/lafabrik/plan_de_travail_basecolor.png rename to public/old-models/lafabrik/plan_de_travail_basecolor.png diff --git a/public/models/lafabrik/plan_de_travail_height.png b/public/old-models/lafabrik/plan_de_travail_height.png similarity index 100% rename from public/models/lafabrik/plan_de_travail_height.png rename to public/old-models/lafabrik/plan_de_travail_height.png diff --git a/public/models/lafabrik/plan_de_travail_metallic.png b/public/old-models/lafabrik/plan_de_travail_metallic.png similarity index 100% rename from public/models/lafabrik/plan_de_travail_metallic.png rename to public/old-models/lafabrik/plan_de_travail_metallic.png diff --git a/public/models/lafabrik/plan_de_travail_mixed_ao.png b/public/old-models/lafabrik/plan_de_travail_mixed_ao.png similarity index 100% rename from public/models/lafabrik/plan_de_travail_mixed_ao.png rename to public/old-models/lafabrik/plan_de_travail_mixed_ao.png diff --git a/public/models/lafabrik/plan_de_travail_normal.png b/public/old-models/lafabrik/plan_de_travail_normal.png similarity index 100% rename from public/models/lafabrik/plan_de_travail_normal.png rename to public/old-models/lafabrik/plan_de_travail_normal.png diff --git a/public/models/lafabrik/plan_de_travail_normal_opengl.png b/public/old-models/lafabrik/plan_de_travail_normal_opengl.png similarity index 100% rename from public/models/lafabrik/plan_de_travail_normal_opengl.png rename to public/old-models/lafabrik/plan_de_travail_normal_opengl.png diff --git a/public/models/lafabrik/plan_de_travail_occlusionroughnessmetallic.png b/public/old-models/lafabrik/plan_de_travail_occlusionroughnessmetallic.png similarity index 100% rename from public/models/lafabrik/plan_de_travail_occlusionroughnessmetallic.png rename to public/old-models/lafabrik/plan_de_travail_occlusionroughnessmetallic.png diff --git a/public/models/lafabrik/plan_de_travail_roughness.png b/public/old-models/lafabrik/plan_de_travail_roughness.png similarity index 100% rename from public/models/lafabrik/plan_de_travail_roughness.png rename to public/old-models/lafabrik/plan_de_travail_roughness.png diff --git a/public/models/lafabrik/porte_base_color.png b/public/old-models/lafabrik/porte_base_color.png similarity index 100% rename from public/models/lafabrik/porte_base_color.png rename to public/old-models/lafabrik/porte_base_color.png diff --git a/public/models/lafabrik/porte_basecolor.png b/public/old-models/lafabrik/porte_basecolor.png similarity index 100% rename from public/models/lafabrik/porte_basecolor.png rename to public/old-models/lafabrik/porte_basecolor.png diff --git a/public/models/lafabrik/porte_height.png b/public/old-models/lafabrik/porte_height.png similarity index 100% rename from public/models/lafabrik/porte_height.png rename to public/old-models/lafabrik/porte_height.png diff --git a/public/models/lafabrik/porte_metallic.png b/public/old-models/lafabrik/porte_metallic.png similarity index 100% rename from public/models/lafabrik/porte_metallic.png rename to public/old-models/lafabrik/porte_metallic.png diff --git a/public/models/lafabrik/porte_mixed_ao.png b/public/old-models/lafabrik/porte_mixed_ao.png similarity index 100% rename from public/models/lafabrik/porte_mixed_ao.png rename to public/old-models/lafabrik/porte_mixed_ao.png diff --git a/public/models/lafabrik/porte_normal.png b/public/old-models/lafabrik/porte_normal.png similarity index 100% rename from public/models/lafabrik/porte_normal.png rename to public/old-models/lafabrik/porte_normal.png diff --git a/public/models/lafabrik/porte_normal_opengl.png b/public/old-models/lafabrik/porte_normal_opengl.png similarity index 100% rename from public/models/lafabrik/porte_normal_opengl.png rename to public/old-models/lafabrik/porte_normal_opengl.png diff --git a/public/models/lafabrik/porte_occlusionroughnessmetallic.png b/public/old-models/lafabrik/porte_occlusionroughnessmetallic.png similarity index 100% rename from public/models/lafabrik/porte_occlusionroughnessmetallic.png rename to public/old-models/lafabrik/porte_occlusionroughnessmetallic.png diff --git a/public/models/lafabrik/porte_roughness.png b/public/old-models/lafabrik/porte_roughness.png similarity index 100% rename from public/models/lafabrik/porte_roughness.png rename to public/old-models/lafabrik/porte_roughness.png diff --git a/public/models/lafabrik/porte_stock_base_color.png b/public/old-models/lafabrik/porte_stock_base_color.png similarity index 100% rename from public/models/lafabrik/porte_stock_base_color.png rename to public/old-models/lafabrik/porte_stock_base_color.png diff --git a/public/models/lafabrik/porte_stock_basecolor.png b/public/old-models/lafabrik/porte_stock_basecolor.png similarity index 100% rename from public/models/lafabrik/porte_stock_basecolor.png rename to public/old-models/lafabrik/porte_stock_basecolor.png diff --git a/public/models/lafabrik/porte_stock_height.png b/public/old-models/lafabrik/porte_stock_height.png similarity index 100% rename from public/models/lafabrik/porte_stock_height.png rename to public/old-models/lafabrik/porte_stock_height.png diff --git a/public/models/lafabrik/porte_stock_metallic.png b/public/old-models/lafabrik/porte_stock_metallic.png similarity index 100% rename from public/models/lafabrik/porte_stock_metallic.png rename to public/old-models/lafabrik/porte_stock_metallic.png diff --git a/public/models/lafabrik/porte_stock_mixed_ao.png b/public/old-models/lafabrik/porte_stock_mixed_ao.png similarity index 100% rename from public/models/lafabrik/porte_stock_mixed_ao.png rename to public/old-models/lafabrik/porte_stock_mixed_ao.png diff --git a/public/models/lafabrik/porte_stock_normal.png b/public/old-models/lafabrik/porte_stock_normal.png similarity index 100% rename from public/models/lafabrik/porte_stock_normal.png rename to public/old-models/lafabrik/porte_stock_normal.png diff --git a/public/models/lafabrik/porte_stock_normal_opengl.png b/public/old-models/lafabrik/porte_stock_normal_opengl.png similarity index 100% rename from public/models/lafabrik/porte_stock_normal_opengl.png rename to public/old-models/lafabrik/porte_stock_normal_opengl.png diff --git a/public/models/lafabrik/porte_stock_occlusionroughnessmetallic.png b/public/old-models/lafabrik/porte_stock_occlusionroughnessmetallic.png similarity index 100% rename from public/models/lafabrik/porte_stock_occlusionroughnessmetallic.png rename to public/old-models/lafabrik/porte_stock_occlusionroughnessmetallic.png diff --git a/public/models/lafabrik/porte_stock_roughness.png b/public/old-models/lafabrik/porte_stock_roughness.png similarity index 100% rename from public/models/lafabrik/porte_stock_roughness.png rename to public/old-models/lafabrik/porte_stock_roughness.png diff --git a/public/models/lafabrik/stock_0_base_color.png b/public/old-models/lafabrik/stock_0_base_color.png similarity index 100% rename from public/models/lafabrik/stock_0_base_color.png rename to public/old-models/lafabrik/stock_0_base_color.png diff --git a/public/models/lafabrik/stock_0_basecolor.png b/public/old-models/lafabrik/stock_0_basecolor.png similarity index 100% rename from public/models/lafabrik/stock_0_basecolor.png rename to public/old-models/lafabrik/stock_0_basecolor.png diff --git a/public/models/lafabrik/stock_0_height.png b/public/old-models/lafabrik/stock_0_height.png similarity index 100% rename from public/models/lafabrik/stock_0_height.png rename to public/old-models/lafabrik/stock_0_height.png diff --git a/public/models/lafabrik/stock_0_metallic.png b/public/old-models/lafabrik/stock_0_metallic.png similarity index 100% rename from public/models/lafabrik/stock_0_metallic.png rename to public/old-models/lafabrik/stock_0_metallic.png diff --git a/public/models/lafabrik/stock_0_mixed_ao.png b/public/old-models/lafabrik/stock_0_mixed_ao.png similarity index 100% rename from public/models/lafabrik/stock_0_mixed_ao.png rename to public/old-models/lafabrik/stock_0_mixed_ao.png diff --git a/public/models/lafabrik/stock_0_normal.png b/public/old-models/lafabrik/stock_0_normal.png similarity index 100% rename from public/models/lafabrik/stock_0_normal.png rename to public/old-models/lafabrik/stock_0_normal.png diff --git a/public/models/lafabrik/stock_0_normal_opengl.png b/public/old-models/lafabrik/stock_0_normal_opengl.png similarity index 100% rename from public/models/lafabrik/stock_0_normal_opengl.png rename to public/old-models/lafabrik/stock_0_normal_opengl.png diff --git a/public/models/lafabrik/stock_0_occlusionroughnessmetallic.png b/public/old-models/lafabrik/stock_0_occlusionroughnessmetallic.png similarity index 100% rename from public/models/lafabrik/stock_0_occlusionroughnessmetallic.png rename to public/old-models/lafabrik/stock_0_occlusionroughnessmetallic.png diff --git a/public/models/lafabrik/stock_0_roughness.png b/public/old-models/lafabrik/stock_0_roughness.png similarity index 100% rename from public/models/lafabrik/stock_0_roughness.png rename to public/old-models/lafabrik/stock_0_roughness.png diff --git a/public/models/lafabrik/tiges_base_color.png b/public/old-models/lafabrik/tiges_base_color.png similarity index 100% rename from public/models/lafabrik/tiges_base_color.png rename to public/old-models/lafabrik/tiges_base_color.png diff --git a/public/models/lafabrik/tiges_basecolor.png b/public/old-models/lafabrik/tiges_basecolor.png similarity index 100% rename from public/models/lafabrik/tiges_basecolor.png rename to public/old-models/lafabrik/tiges_basecolor.png diff --git a/public/models/lafabrik/tiges_height.png b/public/old-models/lafabrik/tiges_height.png similarity index 100% rename from public/models/lafabrik/tiges_height.png rename to public/old-models/lafabrik/tiges_height.png diff --git a/public/models/lafabrik/tiges_metallic.png b/public/old-models/lafabrik/tiges_metallic.png similarity index 100% rename from public/models/lafabrik/tiges_metallic.png rename to public/old-models/lafabrik/tiges_metallic.png diff --git a/public/models/lafabrik/tiges_mixed_ao.png b/public/old-models/lafabrik/tiges_mixed_ao.png similarity index 100% rename from public/models/lafabrik/tiges_mixed_ao.png rename to public/old-models/lafabrik/tiges_mixed_ao.png diff --git a/public/models/lafabrik/tiges_normal.png b/public/old-models/lafabrik/tiges_normal.png similarity index 100% rename from public/models/lafabrik/tiges_normal.png rename to public/old-models/lafabrik/tiges_normal.png diff --git a/public/models/lafabrik/tiges_normal_opengl.png b/public/old-models/lafabrik/tiges_normal_opengl.png similarity index 100% rename from public/models/lafabrik/tiges_normal_opengl.png rename to public/old-models/lafabrik/tiges_normal_opengl.png diff --git a/public/models/lafabrik/tiges_occlusionroughnessmetallic.png b/public/old-models/lafabrik/tiges_occlusionroughnessmetallic.png similarity index 100% rename from public/models/lafabrik/tiges_occlusionroughnessmetallic.png rename to public/old-models/lafabrik/tiges_occlusionroughnessmetallic.png diff --git a/public/models/lafabrik/tiges_roughness.png b/public/old-models/lafabrik/tiges_roughness.png similarity index 100% rename from public/models/lafabrik/tiges_roughness.png rename to public/old-models/lafabrik/tiges_roughness.png diff --git a/public/models/lafabrik/toit_base_color.png b/public/old-models/lafabrik/toit_base_color.png similarity index 100% rename from public/models/lafabrik/toit_base_color.png rename to public/old-models/lafabrik/toit_base_color.png diff --git a/public/models/lafabrik/toit_basecolor.png b/public/old-models/lafabrik/toit_basecolor.png similarity index 100% rename from public/models/lafabrik/toit_basecolor.png rename to public/old-models/lafabrik/toit_basecolor.png diff --git a/public/models/lafabrik/toit_height.png b/public/old-models/lafabrik/toit_height.png similarity index 100% rename from public/models/lafabrik/toit_height.png rename to public/old-models/lafabrik/toit_height.png diff --git a/public/models/lafabrik/toit_metallic.png b/public/old-models/lafabrik/toit_metallic.png similarity index 100% rename from public/models/lafabrik/toit_metallic.png rename to public/old-models/lafabrik/toit_metallic.png diff --git a/public/models/lafabrik/toit_mixed_ao.png b/public/old-models/lafabrik/toit_mixed_ao.png similarity index 100% rename from public/models/lafabrik/toit_mixed_ao.png rename to public/old-models/lafabrik/toit_mixed_ao.png diff --git a/public/models/lafabrik/toit_normal.png b/public/old-models/lafabrik/toit_normal.png similarity index 100% rename from public/models/lafabrik/toit_normal.png rename to public/old-models/lafabrik/toit_normal.png diff --git a/public/models/lafabrik/toit_normal_opengl.png b/public/old-models/lafabrik/toit_normal_opengl.png similarity index 100% rename from public/models/lafabrik/toit_normal_opengl.png rename to public/old-models/lafabrik/toit_normal_opengl.png diff --git a/public/models/lafabrik/toit_occlusionroughnessmetallic.png b/public/old-models/lafabrik/toit_occlusionroughnessmetallic.png similarity index 100% rename from public/models/lafabrik/toit_occlusionroughnessmetallic.png rename to public/old-models/lafabrik/toit_occlusionroughnessmetallic.png diff --git a/public/models/lafabrik/toit_roughness.png b/public/old-models/lafabrik/toit_roughness.png similarity index 100% rename from public/models/lafabrik/toit_roughness.png rename to public/old-models/lafabrik/toit_roughness.png diff --git a/public/models/lafabrik/tuyaux_base_color.png b/public/old-models/lafabrik/tuyaux_base_color.png similarity index 100% rename from public/models/lafabrik/tuyaux_base_color.png rename to public/old-models/lafabrik/tuyaux_base_color.png diff --git a/public/models/lafabrik/tuyaux_basecolor.png b/public/old-models/lafabrik/tuyaux_basecolor.png similarity index 100% rename from public/models/lafabrik/tuyaux_basecolor.png rename to public/old-models/lafabrik/tuyaux_basecolor.png diff --git a/public/models/lafabrik/tuyaux_height.png b/public/old-models/lafabrik/tuyaux_height.png similarity index 100% rename from public/models/lafabrik/tuyaux_height.png rename to public/old-models/lafabrik/tuyaux_height.png diff --git a/public/models/lafabrik/tuyaux_metallic.png b/public/old-models/lafabrik/tuyaux_metallic.png similarity index 100% rename from public/models/lafabrik/tuyaux_metallic.png rename to public/old-models/lafabrik/tuyaux_metallic.png diff --git a/public/models/lafabrik/tuyaux_mixed_ao.png b/public/old-models/lafabrik/tuyaux_mixed_ao.png similarity index 100% rename from public/models/lafabrik/tuyaux_mixed_ao.png rename to public/old-models/lafabrik/tuyaux_mixed_ao.png diff --git a/public/models/lafabrik/tuyaux_normal.png b/public/old-models/lafabrik/tuyaux_normal.png similarity index 100% rename from public/models/lafabrik/tuyaux_normal.png rename to public/old-models/lafabrik/tuyaux_normal.png diff --git a/public/models/lafabrik/tuyaux_normal_opengl.png b/public/old-models/lafabrik/tuyaux_normal_opengl.png similarity index 100% rename from public/models/lafabrik/tuyaux_normal_opengl.png rename to public/old-models/lafabrik/tuyaux_normal_opengl.png diff --git a/public/models/lafabrik/tuyaux_occlusionroughnessmetallic.png b/public/old-models/lafabrik/tuyaux_occlusionroughnessmetallic.png similarity index 100% rename from public/models/lafabrik/tuyaux_occlusionroughnessmetallic.png rename to public/old-models/lafabrik/tuyaux_occlusionroughnessmetallic.png diff --git a/public/models/lafabrik/tuyaux_roughness.png b/public/old-models/lafabrik/tuyaux_roughness.png similarity index 100% rename from public/models/lafabrik/tuyaux_roughness.png rename to public/old-models/lafabrik/tuyaux_roughness.png diff --git a/public/models/lafabrik/verre_fenetre_base_color.png b/public/old-models/lafabrik/verre_fenetre_base_color.png similarity index 100% rename from public/models/lafabrik/verre_fenetre_base_color.png rename to public/old-models/lafabrik/verre_fenetre_base_color.png diff --git a/public/models/lafabrik/verre_fenetre_basecolor.png b/public/old-models/lafabrik/verre_fenetre_basecolor.png similarity index 100% rename from public/models/lafabrik/verre_fenetre_basecolor.png rename to public/old-models/lafabrik/verre_fenetre_basecolor.png diff --git a/public/models/lafabrik/verre_fenetre_height.png b/public/old-models/lafabrik/verre_fenetre_height.png similarity index 100% rename from public/models/lafabrik/verre_fenetre_height.png rename to public/old-models/lafabrik/verre_fenetre_height.png diff --git a/public/models/lafabrik/verre_fenetre_metallic.png b/public/old-models/lafabrik/verre_fenetre_metallic.png similarity index 100% rename from public/models/lafabrik/verre_fenetre_metallic.png rename to public/old-models/lafabrik/verre_fenetre_metallic.png diff --git a/public/models/lafabrik/verre_fenetre_mixed_ao.png b/public/old-models/lafabrik/verre_fenetre_mixed_ao.png similarity index 100% rename from public/models/lafabrik/verre_fenetre_mixed_ao.png rename to public/old-models/lafabrik/verre_fenetre_mixed_ao.png diff --git a/public/models/lafabrik/verre_fenetre_normal.png b/public/old-models/lafabrik/verre_fenetre_normal.png similarity index 100% rename from public/models/lafabrik/verre_fenetre_normal.png rename to public/old-models/lafabrik/verre_fenetre_normal.png diff --git a/public/models/lafabrik/verre_fenetre_normal_opengl.png b/public/old-models/lafabrik/verre_fenetre_normal_opengl.png similarity index 100% rename from public/models/lafabrik/verre_fenetre_normal_opengl.png rename to public/old-models/lafabrik/verre_fenetre_normal_opengl.png diff --git a/public/models/lafabrik/verre_fenetre_occlusionroughnessmetallic.png b/public/old-models/lafabrik/verre_fenetre_occlusionroughnessmetallic.png similarity index 100% rename from public/models/lafabrik/verre_fenetre_occlusionroughnessmetallic.png rename to public/old-models/lafabrik/verre_fenetre_occlusionroughnessmetallic.png diff --git a/public/models/lafabrik/verre_fenetre_roughness.png b/public/old-models/lafabrik/verre_fenetre_roughness.png similarity index 100% rename from public/models/lafabrik/verre_fenetre_roughness.png rename to public/old-models/lafabrik/verre_fenetre_roughness.png diff --git a/public/models/maison1/contours_baseColor.png b/public/old-models/maison1/contours_baseColor.png similarity index 100% rename from public/models/maison1/contours_baseColor.png rename to public/old-models/maison1/contours_baseColor.png diff --git a/public/models/maison1/contours_normal.png b/public/old-models/maison1/contours_normal.png similarity index 100% rename from public/models/maison1/contours_normal.png rename to public/old-models/maison1/contours_normal.png diff --git a/public/models/maison1/contours_occlusionRoughnessMetallic.png b/public/old-models/maison1/contours_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/maison1/contours_occlusionRoughnessMetallic.png rename to public/old-models/maison1/contours_occlusionRoughnessMetallic.png diff --git a/public/models/maison1/fenetre_baseColor.png b/public/old-models/maison1/fenetre_baseColor.png similarity index 100% rename from public/models/maison1/fenetre_baseColor.png rename to public/old-models/maison1/fenetre_baseColor.png diff --git a/public/models/maison1/fenetre_normal.png b/public/old-models/maison1/fenetre_normal.png similarity index 100% rename from public/models/maison1/fenetre_normal.png rename to public/old-models/maison1/fenetre_normal.png diff --git a/public/models/maison1/fenetre_occlusionRoughnessMetallic.png b/public/old-models/maison1/fenetre_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/maison1/fenetre_occlusionRoughnessMetallic.png rename to public/old-models/maison1/fenetre_occlusionRoughnessMetallic.png diff --git a/public/models/maison1/maison.bin b/public/old-models/maison1/maison.bin similarity index 100% rename from public/models/maison1/maison.bin rename to public/old-models/maison1/maison.bin diff --git a/public/models/maison1/maison_baseColor.png b/public/old-models/maison1/maison_baseColor.png similarity index 100% rename from public/models/maison1/maison_baseColor.png rename to public/old-models/maison1/maison_baseColor.png diff --git a/public/models/maison1/maison_normal.png b/public/old-models/maison1/maison_normal.png similarity index 100% rename from public/models/maison1/maison_normal.png rename to public/old-models/maison1/maison_normal.png diff --git a/public/models/maison1/maison_occlusionRoughnessMetallic.png b/public/old-models/maison1/maison_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/maison1/maison_occlusionRoughnessMetallic.png rename to public/old-models/maison1/maison_occlusionRoughnessMetallic.png diff --git a/public/models/maison1/model.gltf b/public/old-models/maison1/model.gltf similarity index 100% rename from public/models/maison1/model.gltf rename to public/old-models/maison1/model.gltf diff --git a/public/models/maison1/panneau_baseColor.png b/public/old-models/maison1/panneau_baseColor.png similarity index 100% rename from public/models/maison1/panneau_baseColor.png rename to public/old-models/maison1/panneau_baseColor.png diff --git a/public/models/maison1/panneau_normal.png b/public/old-models/maison1/panneau_normal.png similarity index 100% rename from public/models/maison1/panneau_normal.png rename to public/old-models/maison1/panneau_normal.png diff --git a/public/models/maison1/panneau_occlusionRoughnessMetallic.png b/public/old-models/maison1/panneau_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/maison1/panneau_occlusionRoughnessMetallic.png rename to public/old-models/maison1/panneau_occlusionRoughnessMetallic.png diff --git a/public/models/maison1/porte_baseColor.png b/public/old-models/maison1/porte_baseColor.png similarity index 100% rename from public/models/maison1/porte_baseColor.png rename to public/old-models/maison1/porte_baseColor.png diff --git a/public/models/maison1/porte_normal.png b/public/old-models/maison1/porte_normal.png similarity index 100% rename from public/models/maison1/porte_normal.png rename to public/old-models/maison1/porte_normal.png diff --git a/public/models/maison1/porte_occlusionRoughnessMetallic.png b/public/old-models/maison1/porte_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/maison1/porte_occlusionRoughnessMetallic.png rename to public/old-models/maison1/porte_occlusionRoughnessMetallic.png diff --git a/public/models/maison1/toit_baseColor.png b/public/old-models/maison1/toit_baseColor.png similarity index 100% rename from public/models/maison1/toit_baseColor.png rename to public/old-models/maison1/toit_baseColor.png diff --git a/public/models/maison1/toit_normal.png b/public/old-models/maison1/toit_normal.png similarity index 100% rename from public/models/maison1/toit_normal.png rename to public/old-models/maison1/toit_normal.png diff --git a/public/models/maison1/toit_occlusionRoughnessMetallic.png b/public/old-models/maison1/toit_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/maison1/toit_occlusionRoughnessMetallic.png rename to public/old-models/maison1/toit_occlusionRoughnessMetallic.png diff --git a/public/models/packderelance/cabledroit_base_color.png b/public/old-models/packderelance/cabledroit_Base_color.png similarity index 100% rename from public/models/packderelance/cabledroit_base_color.png rename to public/old-models/packderelance/cabledroit_Base_color.png diff --git a/public/models/packderelance/cabledroit_normal.png b/public/old-models/packderelance/cabledroit_Normal.png similarity index 100% rename from public/models/packderelance/cabledroit_normal.png rename to public/old-models/packderelance/cabledroit_Normal.png diff --git a/public/models/packderelance/cabledroit_height.png b/public/old-models/packderelance/cabledroit_height.png similarity index 100% rename from public/models/packderelance/cabledroit_height.png rename to public/old-models/packderelance/cabledroit_height.png diff --git a/public/models/packderelance/cabledroit_metallic.png b/public/old-models/packderelance/cabledroit_metallic.png similarity index 100% rename from public/models/packderelance/cabledroit_metallic.png rename to public/old-models/packderelance/cabledroit_metallic.png diff --git a/public/models/packderelance/cabledroit_mixed_ao.png b/public/old-models/packderelance/cabledroit_mixed_ao.png similarity index 100% rename from public/models/packderelance/cabledroit_mixed_ao.png rename to public/old-models/packderelance/cabledroit_mixed_ao.png diff --git a/public/models/packderelance/cabledroit_normal_opengl.png b/public/old-models/packderelance/cabledroit_normal_opengl.png similarity index 100% rename from public/models/packderelance/cabledroit_normal_opengl.png rename to public/old-models/packderelance/cabledroit_normal_opengl.png diff --git a/public/models/packderelance/cabledroit_roughness.png b/public/old-models/packderelance/cabledroit_roughness.png similarity index 100% rename from public/models/packderelance/cabledroit_roughness.png rename to public/old-models/packderelance/cabledroit_roughness.png diff --git a/public/models/packderelance/cablegauche_base_color.png b/public/old-models/packderelance/cablegauche_Base_color.png similarity index 100% rename from public/models/packderelance/cablegauche_base_color.png rename to public/old-models/packderelance/cablegauche_Base_color.png diff --git a/public/models/packderelance/cablegauche_normal.png b/public/old-models/packderelance/cablegauche_Normal.png similarity index 100% rename from public/models/packderelance/cablegauche_normal.png rename to public/old-models/packderelance/cablegauche_Normal.png diff --git a/public/models/packderelance/cablegauche_height.png b/public/old-models/packderelance/cablegauche_height.png similarity index 100% rename from public/models/packderelance/cablegauche_height.png rename to public/old-models/packderelance/cablegauche_height.png diff --git a/public/models/packderelance/cablegauche_metallic.png b/public/old-models/packderelance/cablegauche_metallic.png similarity index 100% rename from public/models/packderelance/cablegauche_metallic.png rename to public/old-models/packderelance/cablegauche_metallic.png diff --git a/public/models/packderelance/cablegauche_mixed_ao.png b/public/old-models/packderelance/cablegauche_mixed_ao.png similarity index 100% rename from public/models/packderelance/cablegauche_mixed_ao.png rename to public/old-models/packderelance/cablegauche_mixed_ao.png diff --git a/public/models/packderelance/cablegauche_normal_opengl.png b/public/old-models/packderelance/cablegauche_normal_opengl.png similarity index 100% rename from public/models/packderelance/cablegauche_normal_opengl.png rename to public/old-models/packderelance/cablegauche_normal_opengl.png diff --git a/public/models/packderelance/cablegauche_roughness.png b/public/old-models/packderelance/cablegauche_roughness.png similarity index 100% rename from public/models/packderelance/cablegauche_roughness.png rename to public/old-models/packderelance/cablegauche_roughness.png diff --git a/public/models/packderelance/charnie_res_base_color.png b/public/old-models/packderelance/charnie_res_base_color.png similarity index 100% rename from public/models/packderelance/charnie_res_base_color.png rename to public/old-models/packderelance/charnie_res_base_color.png diff --git a/public/models/packderelance/charnie_res_height.png b/public/old-models/packderelance/charnie_res_height.png similarity index 100% rename from public/models/packderelance/charnie_res_height.png rename to public/old-models/packderelance/charnie_res_height.png diff --git a/public/models/packderelance/charnie_res_metallic.png b/public/old-models/packderelance/charnie_res_metallic.png similarity index 100% rename from public/models/packderelance/charnie_res_metallic.png rename to public/old-models/packderelance/charnie_res_metallic.png diff --git a/public/models/packderelance/charnie_res_mixed_ao.png b/public/old-models/packderelance/charnie_res_mixed_ao.png similarity index 100% rename from public/models/packderelance/charnie_res_mixed_ao.png rename to public/old-models/packderelance/charnie_res_mixed_ao.png diff --git a/public/models/packderelance/charnie_res_normal.png b/public/old-models/packderelance/charnie_res_normal.png similarity index 100% rename from public/models/packderelance/charnie_res_normal.png rename to public/old-models/packderelance/charnie_res_normal.png diff --git a/public/models/packderelance/charnie_res_normal_opengl.png b/public/old-models/packderelance/charnie_res_normal_opengl.png similarity index 100% rename from public/models/packderelance/charnie_res_normal_opengl.png rename to public/old-models/packderelance/charnie_res_normal_opengl.png diff --git a/public/models/packderelance/charnie_res_roughness.png b/public/old-models/packderelance/charnie_res_roughness.png similarity index 100% rename from public/models/packderelance/charnie_res_roughness.png rename to public/old-models/packderelance/charnie_res_roughness.png diff --git a/public/models/packderelance/lock_base_color.png b/public/old-models/packderelance/lock_base_color.png similarity index 100% rename from public/models/packderelance/lock_base_color.png rename to public/old-models/packderelance/lock_base_color.png diff --git a/public/models/packderelance/lock_height.png b/public/old-models/packderelance/lock_height.png similarity index 100% rename from public/models/packderelance/lock_height.png rename to public/old-models/packderelance/lock_height.png diff --git a/public/models/packderelance/lock_metallic.png b/public/old-models/packderelance/lock_metallic.png similarity index 100% rename from public/models/packderelance/lock_metallic.png rename to public/old-models/packderelance/lock_metallic.png diff --git a/public/models/packderelance/lock_mixed_ao.png b/public/old-models/packderelance/lock_mixed_ao.png similarity index 100% rename from public/models/packderelance/lock_mixed_ao.png rename to public/old-models/packderelance/lock_mixed_ao.png diff --git a/public/models/packderelance/lock_normal.png b/public/old-models/packderelance/lock_normal.png similarity index 100% rename from public/models/packderelance/lock_normal.png rename to public/old-models/packderelance/lock_normal.png diff --git a/public/models/packderelance/lock_normal_opengl.png b/public/old-models/packderelance/lock_normal_opengl.png similarity index 100% rename from public/models/packderelance/lock_normal_opengl.png rename to public/old-models/packderelance/lock_normal_opengl.png diff --git a/public/models/packderelance/lock_roughness.png b/public/old-models/packderelance/lock_roughness.png similarity index 100% rename from public/models/packderelance/lock_roughness.png rename to public/old-models/packderelance/lock_roughness.png diff --git a/public/models/packderelance/manchemart_base_color.png b/public/old-models/packderelance/manchemart_base_color.png similarity index 100% rename from public/models/packderelance/manchemart_base_color.png rename to public/old-models/packderelance/manchemart_base_color.png diff --git a/public/models/packderelance/manchemart_height.png b/public/old-models/packderelance/manchemart_height.png similarity index 100% rename from public/models/packderelance/manchemart_height.png rename to public/old-models/packderelance/manchemart_height.png diff --git a/public/models/packderelance/manchemart_metallic.png b/public/old-models/packderelance/manchemart_metallic.png similarity index 100% rename from public/models/packderelance/manchemart_metallic.png rename to public/old-models/packderelance/manchemart_metallic.png diff --git a/public/models/packderelance/manchemart_mixed_ao.png b/public/old-models/packderelance/manchemart_mixed_ao.png similarity index 100% rename from public/models/packderelance/manchemart_mixed_ao.png rename to public/old-models/packderelance/manchemart_mixed_ao.png diff --git a/public/models/packderelance/manchemart_normal.png b/public/old-models/packderelance/manchemart_normal.png similarity index 100% rename from public/models/packderelance/manchemart_normal.png rename to public/old-models/packderelance/manchemart_normal.png diff --git a/public/models/packderelance/manchemart_normal_opengl.png b/public/old-models/packderelance/manchemart_normal_opengl.png similarity index 100% rename from public/models/packderelance/manchemart_normal_opengl.png rename to public/old-models/packderelance/manchemart_normal_opengl.png diff --git a/public/models/packderelance/manchemart_roughness.png b/public/old-models/packderelance/manchemart_roughness.png similarity index 100% rename from public/models/packderelance/manchemart_roughness.png rename to public/old-models/packderelance/manchemart_roughness.png diff --git a/public/models/packderelance/model.gltf b/public/old-models/packderelance/model.gltf similarity index 100% rename from public/models/packderelance/model.gltf rename to public/old-models/packderelance/model.gltf diff --git a/public/models/packderelance/mousse_bas_base_color.png b/public/old-models/packderelance/mousse_bas_base_color.png similarity index 100% rename from public/models/packderelance/mousse_bas_base_color.png rename to public/old-models/packderelance/mousse_bas_base_color.png diff --git a/public/models/packderelance/mousse_bas_height.png b/public/old-models/packderelance/mousse_bas_height.png similarity index 100% rename from public/models/packderelance/mousse_bas_height.png rename to public/old-models/packderelance/mousse_bas_height.png diff --git a/public/models/packderelance/mousse_bas_metallic.png b/public/old-models/packderelance/mousse_bas_metallic.png similarity index 100% rename from public/models/packderelance/mousse_bas_metallic.png rename to public/old-models/packderelance/mousse_bas_metallic.png diff --git a/public/models/packderelance/mousse_bas_mixed_ao.png b/public/old-models/packderelance/mousse_bas_mixed_ao.png similarity index 100% rename from public/models/packderelance/mousse_bas_mixed_ao.png rename to public/old-models/packderelance/mousse_bas_mixed_ao.png diff --git a/public/models/packderelance/mousse_bas_normal.png b/public/old-models/packderelance/mousse_bas_normal.png similarity index 100% rename from public/models/packderelance/mousse_bas_normal.png rename to public/old-models/packderelance/mousse_bas_normal.png diff --git a/public/models/packderelance/mousse_bas_normal_opengl.png b/public/old-models/packderelance/mousse_bas_normal_opengl.png similarity index 100% rename from public/models/packderelance/mousse_bas_normal_opengl.png rename to public/old-models/packderelance/mousse_bas_normal_opengl.png diff --git a/public/models/packderelance/mousse_bas_roughness.png b/public/old-models/packderelance/mousse_bas_roughness.png similarity index 100% rename from public/models/packderelance/mousse_bas_roughness.png rename to public/old-models/packderelance/mousse_bas_roughness.png diff --git a/public/models/packderelance/mousse_base_color.png b/public/old-models/packderelance/mousse_base_color.png similarity index 100% rename from public/models/packderelance/mousse_base_color.png rename to public/old-models/packderelance/mousse_base_color.png diff --git a/public/models/packderelance/mousse_height.png b/public/old-models/packderelance/mousse_height.png similarity index 100% rename from public/models/packderelance/mousse_height.png rename to public/old-models/packderelance/mousse_height.png diff --git a/public/models/packderelance/mousse_metallic.png b/public/old-models/packderelance/mousse_metallic.png similarity index 100% rename from public/models/packderelance/mousse_metallic.png rename to public/old-models/packderelance/mousse_metallic.png diff --git a/public/models/packderelance/mousse_mixed_ao.png b/public/old-models/packderelance/mousse_mixed_ao.png similarity index 100% rename from public/models/packderelance/mousse_mixed_ao.png rename to public/old-models/packderelance/mousse_mixed_ao.png diff --git a/public/models/packderelance/mousse_normal.png b/public/old-models/packderelance/mousse_normal.png similarity index 100% rename from public/models/packderelance/mousse_normal.png rename to public/old-models/packderelance/mousse_normal.png diff --git a/public/models/packderelance/mousse_normal_opengl.png b/public/old-models/packderelance/mousse_normal_opengl.png similarity index 100% rename from public/models/packderelance/mousse_normal_opengl.png rename to public/old-models/packderelance/mousse_normal_opengl.png diff --git a/public/models/packderelance/mousse_roughness.png b/public/old-models/packderelance/mousse_roughness.png similarity index 100% rename from public/models/packderelance/mousse_roughness.png rename to public/old-models/packderelance/mousse_roughness.png diff --git a/public/models/packderelance/patinf_base_color.png b/public/old-models/packderelance/patinf_base_color.png similarity index 100% rename from public/models/packderelance/patinf_base_color.png rename to public/old-models/packderelance/patinf_base_color.png diff --git a/public/models/packderelance/patinf_height.png b/public/old-models/packderelance/patinf_height.png similarity index 100% rename from public/models/packderelance/patinf_height.png rename to public/old-models/packderelance/patinf_height.png diff --git a/public/models/packderelance/patinf_metallic.png b/public/old-models/packderelance/patinf_metallic.png similarity index 100% rename from public/models/packderelance/patinf_metallic.png rename to public/old-models/packderelance/patinf_metallic.png diff --git a/public/models/packderelance/patinf_mixed_ao.png b/public/old-models/packderelance/patinf_mixed_ao.png similarity index 100% rename from public/models/packderelance/patinf_mixed_ao.png rename to public/old-models/packderelance/patinf_mixed_ao.png diff --git a/public/models/packderelance/patinf_normal.png b/public/old-models/packderelance/patinf_normal.png similarity index 100% rename from public/models/packderelance/patinf_normal.png rename to public/old-models/packderelance/patinf_normal.png diff --git a/public/models/packderelance/patinf_normal_opengl.png b/public/old-models/packderelance/patinf_normal_opengl.png similarity index 100% rename from public/models/packderelance/patinf_normal_opengl.png rename to public/old-models/packderelance/patinf_normal_opengl.png diff --git a/public/models/packderelance/patinf_roughness.png b/public/old-models/packderelance/patinf_roughness.png similarity index 100% rename from public/models/packderelance/patinf_roughness.png rename to public/old-models/packderelance/patinf_roughness.png diff --git a/public/models/packderelance/patsup_base_color.png b/public/old-models/packderelance/patsup_base_color.png similarity index 100% rename from public/models/packderelance/patsup_base_color.png rename to public/old-models/packderelance/patsup_base_color.png diff --git a/public/models/packderelance/patsup_height.png b/public/old-models/packderelance/patsup_height.png similarity index 100% rename from public/models/packderelance/patsup_height.png rename to public/old-models/packderelance/patsup_height.png diff --git a/public/models/packderelance/patsup_metallic.png b/public/old-models/packderelance/patsup_metallic.png similarity index 100% rename from public/models/packderelance/patsup_metallic.png rename to public/old-models/packderelance/patsup_metallic.png diff --git a/public/models/packderelance/patsup_mixed_ao.png b/public/old-models/packderelance/patsup_mixed_ao.png similarity index 100% rename from public/models/packderelance/patsup_mixed_ao.png rename to public/old-models/packderelance/patsup_mixed_ao.png diff --git a/public/models/packderelance/patsup_normal.png b/public/old-models/packderelance/patsup_normal.png similarity index 100% rename from public/models/packderelance/patsup_normal.png rename to public/old-models/packderelance/patsup_normal.png diff --git a/public/models/packderelance/patsup_normal_opengl.png b/public/old-models/packderelance/patsup_normal_opengl.png similarity index 100% rename from public/models/packderelance/patsup_normal_opengl.png rename to public/old-models/packderelance/patsup_normal_opengl.png diff --git a/public/models/packderelance/patsup_roughness.png b/public/old-models/packderelance/patsup_roughness.png similarity index 100% rename from public/models/packderelance/patsup_roughness.png rename to public/old-models/packderelance/patsup_roughness.png diff --git a/public/models/packderelance/puces_base_color.png b/public/old-models/packderelance/puces_base_color.png similarity index 100% rename from public/models/packderelance/puces_base_color.png rename to public/old-models/packderelance/puces_base_color.png diff --git a/public/models/packderelance/puces_height.png b/public/old-models/packderelance/puces_height.png similarity index 100% rename from public/models/packderelance/puces_height.png rename to public/old-models/packderelance/puces_height.png diff --git a/public/models/packderelance/puces_metallic.png b/public/old-models/packderelance/puces_metallic.png similarity index 100% rename from public/models/packderelance/puces_metallic.png rename to public/old-models/packderelance/puces_metallic.png diff --git a/public/models/packderelance/puces_mixed_ao.png b/public/old-models/packderelance/puces_mixed_ao.png similarity index 100% rename from public/models/packderelance/puces_mixed_ao.png rename to public/old-models/packderelance/puces_mixed_ao.png diff --git a/public/models/packderelance/puces_normal.png b/public/old-models/packderelance/puces_normal.png similarity index 100% rename from public/models/packderelance/puces_normal.png rename to public/old-models/packderelance/puces_normal.png diff --git a/public/models/packderelance/puces_normal_opengl.png b/public/old-models/packderelance/puces_normal_opengl.png similarity index 100% rename from public/models/packderelance/puces_normal_opengl.png rename to public/old-models/packderelance/puces_normal_opengl.png diff --git a/public/models/packderelance/puces_roughness.png b/public/old-models/packderelance/puces_roughness.png similarity index 100% rename from public/models/packderelance/puces_roughness.png rename to public/old-models/packderelance/puces_roughness.png diff --git a/public/models/packderelance/tetemart_base_color.png b/public/old-models/packderelance/tetemart_base_color.png similarity index 100% rename from public/models/packderelance/tetemart_base_color.png rename to public/old-models/packderelance/tetemart_base_color.png diff --git a/public/models/packderelance/tetemart_height.png b/public/old-models/packderelance/tetemart_height.png similarity index 100% rename from public/models/packderelance/tetemart_height.png rename to public/old-models/packderelance/tetemart_height.png diff --git a/public/models/packderelance/tetemart_metallic.png b/public/old-models/packderelance/tetemart_metallic.png similarity index 100% rename from public/models/packderelance/tetemart_metallic.png rename to public/old-models/packderelance/tetemart_metallic.png diff --git a/public/models/packderelance/tetemart_mixed_ao.png b/public/old-models/packderelance/tetemart_mixed_ao.png similarity index 100% rename from public/models/packderelance/tetemart_mixed_ao.png rename to public/old-models/packderelance/tetemart_mixed_ao.png diff --git a/public/models/packderelance/tetemart_normal.png b/public/old-models/packderelance/tetemart_normal.png similarity index 100% rename from public/models/packderelance/tetemart_normal.png rename to public/old-models/packderelance/tetemart_normal.png diff --git a/public/models/packderelance/tetemart_normal_opengl.png b/public/old-models/packderelance/tetemart_normal_opengl.png similarity index 100% rename from public/models/packderelance/tetemart_normal_opengl.png rename to public/old-models/packderelance/tetemart_normal_opengl.png diff --git a/public/models/packderelance/tetemart_roughness.png b/public/old-models/packderelance/tetemart_roughness.png similarity index 100% rename from public/models/packderelance/tetemart_roughness.png rename to public/old-models/packderelance/tetemart_roughness.png diff --git a/public/models/panneauaffichage/affichage_Base_color.png b/public/old-models/panneauaffichage/affichage_Base_color.png similarity index 100% rename from public/models/panneauaffichage/affichage_Base_color.png rename to public/old-models/panneauaffichage/affichage_Base_color.png diff --git a/public/models/panneauaffichage/affichage_Height.png b/public/old-models/panneauaffichage/affichage_Height.png similarity index 100% rename from public/models/panneauaffichage/affichage_Height.png rename to public/old-models/panneauaffichage/affichage_Height.png diff --git a/public/models/panneauaffichage/affichage_Metallic.png b/public/old-models/panneauaffichage/affichage_Metallic.png similarity index 100% rename from public/models/panneauaffichage/affichage_Metallic.png rename to public/old-models/panneauaffichage/affichage_Metallic.png diff --git a/public/models/panneauaffichage/affichage_Mixed_AO.png b/public/old-models/panneauaffichage/affichage_Mixed_AO.png similarity index 100% rename from public/models/panneauaffichage/affichage_Mixed_AO.png rename to public/old-models/panneauaffichage/affichage_Mixed_AO.png diff --git a/public/models/panneauaffichage/affichage_Normal.png b/public/old-models/panneauaffichage/affichage_Normal.png similarity index 100% rename from public/models/panneauaffichage/affichage_Normal.png rename to public/old-models/panneauaffichage/affichage_Normal.png diff --git a/public/models/panneauaffichage/affichage_Normal_OpenGL.png b/public/old-models/panneauaffichage/affichage_Normal_OpenGL.png similarity index 100% rename from public/models/panneauaffichage/affichage_Normal_OpenGL.png rename to public/old-models/panneauaffichage/affichage_Normal_OpenGL.png diff --git a/public/models/panneauaffichage/affichage_Roughness.png b/public/old-models/panneauaffichage/affichage_Roughness.png similarity index 100% rename from public/models/panneauaffichage/affichage_Roughness.png rename to public/old-models/panneauaffichage/affichage_Roughness.png diff --git a/public/models/panneauaffichage/affiche1_Base_color.png b/public/old-models/panneauaffichage/affiche1_Base_color.png similarity index 100% rename from public/models/panneauaffichage/affiche1_Base_color.png rename to public/old-models/panneauaffichage/affiche1_Base_color.png diff --git a/public/models/panneauaffichage/affiche1_Height.png b/public/old-models/panneauaffichage/affiche1_Height.png similarity index 100% rename from public/models/panneauaffichage/affiche1_Height.png rename to public/old-models/panneauaffichage/affiche1_Height.png diff --git a/public/models/panneauaffichage/affiche1_Metallic.png b/public/old-models/panneauaffichage/affiche1_Metallic.png similarity index 100% rename from public/models/panneauaffichage/affiche1_Metallic.png rename to public/old-models/panneauaffichage/affiche1_Metallic.png diff --git a/public/models/panneauaffichage/affiche1_Mixed_AO.png b/public/old-models/panneauaffichage/affiche1_Mixed_AO.png similarity index 100% rename from public/models/panneauaffichage/affiche1_Mixed_AO.png rename to public/old-models/panneauaffichage/affiche1_Mixed_AO.png diff --git a/public/models/panneauaffichage/affiche1_Normal.png b/public/old-models/panneauaffichage/affiche1_Normal.png similarity index 100% rename from public/models/panneauaffichage/affiche1_Normal.png rename to public/old-models/panneauaffichage/affiche1_Normal.png diff --git a/public/models/panneauaffichage/affiche1_Normal_OpenGL.png b/public/old-models/panneauaffichage/affiche1_Normal_OpenGL.png similarity index 100% rename from public/models/panneauaffichage/affiche1_Normal_OpenGL.png rename to public/old-models/panneauaffichage/affiche1_Normal_OpenGL.png diff --git a/public/models/panneauaffichage/affiche1_Roughness.png b/public/old-models/panneauaffichage/affiche1_Roughness.png similarity index 100% rename from public/models/panneauaffichage/affiche1_Roughness.png rename to public/old-models/panneauaffichage/affiche1_Roughness.png diff --git a/public/models/panneauaffichage/affiche2_Base_color.png b/public/old-models/panneauaffichage/affiche2_Base_color.png similarity index 100% rename from public/models/panneauaffichage/affiche2_Base_color.png rename to public/old-models/panneauaffichage/affiche2_Base_color.png diff --git a/public/models/panneauaffichage/affiche2_Height.png b/public/old-models/panneauaffichage/affiche2_Height.png similarity index 100% rename from public/models/panneauaffichage/affiche2_Height.png rename to public/old-models/panneauaffichage/affiche2_Height.png diff --git a/public/models/panneauaffichage/affiche2_Metallic.png b/public/old-models/panneauaffichage/affiche2_Metallic.png similarity index 100% rename from public/models/panneauaffichage/affiche2_Metallic.png rename to public/old-models/panneauaffichage/affiche2_Metallic.png diff --git a/public/models/panneauaffichage/affiche2_Mixed_AO.png b/public/old-models/panneauaffichage/affiche2_Mixed_AO.png similarity index 100% rename from public/models/panneauaffichage/affiche2_Mixed_AO.png rename to public/old-models/panneauaffichage/affiche2_Mixed_AO.png diff --git a/public/models/panneauaffichage/affiche2_Normal.png b/public/old-models/panneauaffichage/affiche2_Normal.png similarity index 100% rename from public/models/panneauaffichage/affiche2_Normal.png rename to public/old-models/panneauaffichage/affiche2_Normal.png diff --git a/public/models/panneauaffichage/affiche2_Normal_OpenGL.png b/public/old-models/panneauaffichage/affiche2_Normal_OpenGL.png similarity index 100% rename from public/models/panneauaffichage/affiche2_Normal_OpenGL.png rename to public/old-models/panneauaffichage/affiche2_Normal_OpenGL.png diff --git a/public/models/panneauaffichage/affiche2_Roughness.png b/public/old-models/panneauaffichage/affiche2_Roughness.png similarity index 100% rename from public/models/panneauaffichage/affiche2_Roughness.png rename to public/old-models/panneauaffichage/affiche2_Roughness.png diff --git a/public/models/panneauaffichage/affiche3_Base_color.png b/public/old-models/panneauaffichage/affiche3_Base_color.png similarity index 100% rename from public/models/panneauaffichage/affiche3_Base_color.png rename to public/old-models/panneauaffichage/affiche3_Base_color.png diff --git a/public/models/panneauaffichage/affiche3_Height.png b/public/old-models/panneauaffichage/affiche3_Height.png similarity index 100% rename from public/models/panneauaffichage/affiche3_Height.png rename to public/old-models/panneauaffichage/affiche3_Height.png diff --git a/public/models/panneauaffichage/affiche3_Metallic.png b/public/old-models/panneauaffichage/affiche3_Metallic.png similarity index 100% rename from public/models/panneauaffichage/affiche3_Metallic.png rename to public/old-models/panneauaffichage/affiche3_Metallic.png diff --git a/public/models/panneauaffichage/affiche3_Mixed_AO.png b/public/old-models/panneauaffichage/affiche3_Mixed_AO.png similarity index 100% rename from public/models/panneauaffichage/affiche3_Mixed_AO.png rename to public/old-models/panneauaffichage/affiche3_Mixed_AO.png diff --git a/public/models/panneauaffichage/affiche3_Normal.png b/public/old-models/panneauaffichage/affiche3_Normal.png similarity index 100% rename from public/models/panneauaffichage/affiche3_Normal.png rename to public/old-models/panneauaffichage/affiche3_Normal.png diff --git a/public/models/panneauaffichage/affiche3_Normal_OpenGL.png b/public/old-models/panneauaffichage/affiche3_Normal_OpenGL.png similarity index 100% rename from public/models/panneauaffichage/affiche3_Normal_OpenGL.png rename to public/old-models/panneauaffichage/affiche3_Normal_OpenGL.png diff --git a/public/models/panneauaffichage/affiche3_Roughness.png b/public/old-models/panneauaffichage/affiche3_Roughness.png similarity index 100% rename from public/models/panneauaffichage/affiche3_Roughness.png rename to public/old-models/panneauaffichage/affiche3_Roughness.png diff --git a/public/models/panneauaffichage/affiche4_Base_color.png b/public/old-models/panneauaffichage/affiche4_Base_color.png similarity index 100% rename from public/models/panneauaffichage/affiche4_Base_color.png rename to public/old-models/panneauaffichage/affiche4_Base_color.png diff --git a/public/models/panneauaffichage/affiche4_Height.png b/public/old-models/panneauaffichage/affiche4_Height.png similarity index 100% rename from public/models/panneauaffichage/affiche4_Height.png rename to public/old-models/panneauaffichage/affiche4_Height.png diff --git a/public/models/panneauaffichage/affiche4_Metallic.png b/public/old-models/panneauaffichage/affiche4_Metallic.png similarity index 100% rename from public/models/panneauaffichage/affiche4_Metallic.png rename to public/old-models/panneauaffichage/affiche4_Metallic.png diff --git a/public/models/panneauaffichage/affiche4_Mixed_AO.png b/public/old-models/panneauaffichage/affiche4_Mixed_AO.png similarity index 100% rename from public/models/panneauaffichage/affiche4_Mixed_AO.png rename to public/old-models/panneauaffichage/affiche4_Mixed_AO.png diff --git a/public/models/panneauaffichage/affiche4_Normal.png b/public/old-models/panneauaffichage/affiche4_Normal.png similarity index 100% rename from public/models/panneauaffichage/affiche4_Normal.png rename to public/old-models/panneauaffichage/affiche4_Normal.png diff --git a/public/models/panneauaffichage/affiche4_Normal_OpenGL.png b/public/old-models/panneauaffichage/affiche4_Normal_OpenGL.png similarity index 100% rename from public/models/panneauaffichage/affiche4_Normal_OpenGL.png rename to public/old-models/panneauaffichage/affiche4_Normal_OpenGL.png diff --git a/public/models/panneauaffichage/affiche4_Roughness.png b/public/old-models/panneauaffichage/affiche4_Roughness.png similarity index 100% rename from public/models/panneauaffichage/affiche4_Roughness.png rename to public/old-models/panneauaffichage/affiche4_Roughness.png diff --git a/public/models/panneauaffichage/afficheprincipal_Base_color.png b/public/old-models/panneauaffichage/afficheprincipal_Base_color.png similarity index 100% rename from public/models/panneauaffichage/afficheprincipal_Base_color.png rename to public/old-models/panneauaffichage/afficheprincipal_Base_color.png diff --git a/public/models/panneauaffichage/afficheprincipal_Height.png b/public/old-models/panneauaffichage/afficheprincipal_Height.png similarity index 100% rename from public/models/panneauaffichage/afficheprincipal_Height.png rename to public/old-models/panneauaffichage/afficheprincipal_Height.png diff --git a/public/models/panneauaffichage/afficheprincipal_Metallic.png b/public/old-models/panneauaffichage/afficheprincipal_Metallic.png similarity index 100% rename from public/models/panneauaffichage/afficheprincipal_Metallic.png rename to public/old-models/panneauaffichage/afficheprincipal_Metallic.png diff --git a/public/models/panneauaffichage/afficheprincipal_Mixed_AO.png b/public/old-models/panneauaffichage/afficheprincipal_Mixed_AO.png similarity index 100% rename from public/models/panneauaffichage/afficheprincipal_Mixed_AO.png rename to public/old-models/panneauaffichage/afficheprincipal_Mixed_AO.png diff --git a/public/models/panneauaffichage/afficheprincipal_Normal.png b/public/old-models/panneauaffichage/afficheprincipal_Normal.png similarity index 100% rename from public/models/panneauaffichage/afficheprincipal_Normal.png rename to public/old-models/panneauaffichage/afficheprincipal_Normal.png diff --git a/public/models/panneauaffichage/afficheprincipal_Normal_OpenGL.png b/public/old-models/panneauaffichage/afficheprincipal_Normal_OpenGL.png similarity index 100% rename from public/models/panneauaffichage/afficheprincipal_Normal_OpenGL.png rename to public/old-models/panneauaffichage/afficheprincipal_Normal_OpenGL.png diff --git a/public/models/panneauaffichage/afficheprincipal_Roughness.png b/public/old-models/panneauaffichage/afficheprincipal_Roughness.png similarity index 100% rename from public/models/panneauaffichage/afficheprincipal_Roughness.png rename to public/old-models/panneauaffichage/afficheprincipal_Roughness.png diff --git a/public/models/panneauaffichage/cadranhoribas_Base_color.png b/public/old-models/panneauaffichage/cadranhoribas_Base_color.png similarity index 100% rename from public/models/panneauaffichage/cadranhoribas_Base_color.png rename to public/old-models/panneauaffichage/cadranhoribas_Base_color.png diff --git a/public/models/panneauaffichage/cadranhoribas_Height.png b/public/old-models/panneauaffichage/cadranhoribas_Height.png similarity index 100% rename from public/models/panneauaffichage/cadranhoribas_Height.png rename to public/old-models/panneauaffichage/cadranhoribas_Height.png diff --git a/public/models/panneauaffichage/cadranhoribas_Metallic.png b/public/old-models/panneauaffichage/cadranhoribas_Metallic.png similarity index 100% rename from public/models/panneauaffichage/cadranhoribas_Metallic.png rename to public/old-models/panneauaffichage/cadranhoribas_Metallic.png diff --git a/public/models/panneauaffichage/cadranhoribas_Mixed_AO.png b/public/old-models/panneauaffichage/cadranhoribas_Mixed_AO.png similarity index 100% rename from public/models/panneauaffichage/cadranhoribas_Mixed_AO.png rename to public/old-models/panneauaffichage/cadranhoribas_Mixed_AO.png diff --git a/public/models/panneauaffichage/cadranhoribas_Normal.png b/public/old-models/panneauaffichage/cadranhoribas_Normal.png similarity index 100% rename from public/models/panneauaffichage/cadranhoribas_Normal.png rename to public/old-models/panneauaffichage/cadranhoribas_Normal.png diff --git a/public/models/panneauaffichage/cadranhoribas_Normal_OpenGL.png b/public/old-models/panneauaffichage/cadranhoribas_Normal_OpenGL.png similarity index 100% rename from public/models/panneauaffichage/cadranhoribas_Normal_OpenGL.png rename to public/old-models/panneauaffichage/cadranhoribas_Normal_OpenGL.png diff --git a/public/models/panneauaffichage/cadranhoribas_Roughness.png b/public/old-models/panneauaffichage/cadranhoribas_Roughness.png similarity index 100% rename from public/models/panneauaffichage/cadranhoribas_Roughness.png rename to public/old-models/panneauaffichage/cadranhoribas_Roughness.png diff --git a/public/models/panneauaffichage/cadranhorihaut_Base_color.png b/public/old-models/panneauaffichage/cadranhorihaut_Base_color.png similarity index 100% rename from public/models/panneauaffichage/cadranhorihaut_Base_color.png rename to public/old-models/panneauaffichage/cadranhorihaut_Base_color.png diff --git a/public/models/panneauaffichage/cadranhorihaut_Height.png b/public/old-models/panneauaffichage/cadranhorihaut_Height.png similarity index 100% rename from public/models/panneauaffichage/cadranhorihaut_Height.png rename to public/old-models/panneauaffichage/cadranhorihaut_Height.png diff --git a/public/models/panneauaffichage/cadranhorihaut_Metallic.png b/public/old-models/panneauaffichage/cadranhorihaut_Metallic.png similarity index 100% rename from public/models/panneauaffichage/cadranhorihaut_Metallic.png rename to public/old-models/panneauaffichage/cadranhorihaut_Metallic.png diff --git a/public/models/panneauaffichage/cadranhorihaut_Mixed_AO.png b/public/old-models/panneauaffichage/cadranhorihaut_Mixed_AO.png similarity index 100% rename from public/models/panneauaffichage/cadranhorihaut_Mixed_AO.png rename to public/old-models/panneauaffichage/cadranhorihaut_Mixed_AO.png diff --git a/public/models/panneauaffichage/cadranhorihaut_Normal.png b/public/old-models/panneauaffichage/cadranhorihaut_Normal.png similarity index 100% rename from public/models/panneauaffichage/cadranhorihaut_Normal.png rename to public/old-models/panneauaffichage/cadranhorihaut_Normal.png diff --git a/public/models/panneauaffichage/cadranhorihaut_Normal_OpenGL.png b/public/old-models/panneauaffichage/cadranhorihaut_Normal_OpenGL.png similarity index 100% rename from public/models/panneauaffichage/cadranhorihaut_Normal_OpenGL.png rename to public/old-models/panneauaffichage/cadranhorihaut_Normal_OpenGL.png diff --git a/public/models/panneauaffichage/cadranhorihaut_Roughness.png b/public/old-models/panneauaffichage/cadranhorihaut_Roughness.png similarity index 100% rename from public/models/panneauaffichage/cadranhorihaut_Roughness.png rename to public/old-models/panneauaffichage/cadranhorihaut_Roughness.png diff --git a/public/models/panneauaffichage/cadranvertidroite_Base_color.png b/public/old-models/panneauaffichage/cadranvertidroite_Base_color.png similarity index 100% rename from public/models/panneauaffichage/cadranvertidroite_Base_color.png rename to public/old-models/panneauaffichage/cadranvertidroite_Base_color.png diff --git a/public/models/panneauaffichage/cadranvertidroite_Height.png b/public/old-models/panneauaffichage/cadranvertidroite_Height.png similarity index 100% rename from public/models/panneauaffichage/cadranvertidroite_Height.png rename to public/old-models/panneauaffichage/cadranvertidroite_Height.png diff --git a/public/models/panneauaffichage/cadranvertidroite_Metallic.png b/public/old-models/panneauaffichage/cadranvertidroite_Metallic.png similarity index 100% rename from public/models/panneauaffichage/cadranvertidroite_Metallic.png rename to public/old-models/panneauaffichage/cadranvertidroite_Metallic.png diff --git a/public/models/panneauaffichage/cadranvertidroite_Mixed_AO.png b/public/old-models/panneauaffichage/cadranvertidroite_Mixed_AO.png similarity index 100% rename from public/models/panneauaffichage/cadranvertidroite_Mixed_AO.png rename to public/old-models/panneauaffichage/cadranvertidroite_Mixed_AO.png diff --git a/public/models/panneauaffichage/cadranvertidroite_Normal.png b/public/old-models/panneauaffichage/cadranvertidroite_Normal.png similarity index 100% rename from public/models/panneauaffichage/cadranvertidroite_Normal.png rename to public/old-models/panneauaffichage/cadranvertidroite_Normal.png diff --git a/public/models/panneauaffichage/cadranvertidroite_Normal_OpenGL.png b/public/old-models/panneauaffichage/cadranvertidroite_Normal_OpenGL.png similarity index 100% rename from public/models/panneauaffichage/cadranvertidroite_Normal_OpenGL.png rename to public/old-models/panneauaffichage/cadranvertidroite_Normal_OpenGL.png diff --git a/public/models/panneauaffichage/cadranvertidroite_Roughness.png b/public/old-models/panneauaffichage/cadranvertidroite_Roughness.png similarity index 100% rename from public/models/panneauaffichage/cadranvertidroite_Roughness.png rename to public/old-models/panneauaffichage/cadranvertidroite_Roughness.png diff --git a/public/models/panneauaffichage/cadranvertigauche_Base_color.png b/public/old-models/panneauaffichage/cadranvertigauche_Base_color.png similarity index 100% rename from public/models/panneauaffichage/cadranvertigauche_Base_color.png rename to public/old-models/panneauaffichage/cadranvertigauche_Base_color.png diff --git a/public/models/panneauaffichage/cadranvertigauche_Height.png b/public/old-models/panneauaffichage/cadranvertigauche_Height.png similarity index 100% rename from public/models/panneauaffichage/cadranvertigauche_Height.png rename to public/old-models/panneauaffichage/cadranvertigauche_Height.png diff --git a/public/models/panneauaffichage/cadranvertigauche_Metallic.png b/public/old-models/panneauaffichage/cadranvertigauche_Metallic.png similarity index 100% rename from public/models/panneauaffichage/cadranvertigauche_Metallic.png rename to public/old-models/panneauaffichage/cadranvertigauche_Metallic.png diff --git a/public/models/panneauaffichage/cadranvertigauche_Mixed_AO.png b/public/old-models/panneauaffichage/cadranvertigauche_Mixed_AO.png similarity index 100% rename from public/models/panneauaffichage/cadranvertigauche_Mixed_AO.png rename to public/old-models/panneauaffichage/cadranvertigauche_Mixed_AO.png diff --git a/public/models/panneauaffichage/cadranvertigauche_Normal.png b/public/old-models/panneauaffichage/cadranvertigauche_Normal.png similarity index 100% rename from public/models/panneauaffichage/cadranvertigauche_Normal.png rename to public/old-models/panneauaffichage/cadranvertigauche_Normal.png diff --git a/public/models/panneauaffichage/cadranvertigauche_Normal_OpenGL.png b/public/old-models/panneauaffichage/cadranvertigauche_Normal_OpenGL.png similarity index 100% rename from public/models/panneauaffichage/cadranvertigauche_Normal_OpenGL.png rename to public/old-models/panneauaffichage/cadranvertigauche_Normal_OpenGL.png diff --git a/public/models/panneauaffichage/cadranvertigauche_Roughness.png b/public/old-models/panneauaffichage/cadranvertigauche_Roughness.png similarity index 100% rename from public/models/panneauaffichage/cadranvertigauche_Roughness.png rename to public/old-models/panneauaffichage/cadranvertigauche_Roughness.png diff --git a/public/models/panneauaffichage/model.gltf b/public/old-models/panneauaffichage/model.gltf similarity index 100% rename from public/models/panneauaffichage/model.gltf rename to public/old-models/panneauaffichage/model.gltf diff --git a/public/models/panneauaffichage/pin_Base_color.png b/public/old-models/panneauaffichage/pin_Base_color.png similarity index 100% rename from public/models/panneauaffichage/pin_Base_color.png rename to public/old-models/panneauaffichage/pin_Base_color.png diff --git a/public/models/panneauaffichage/pin_Height.png b/public/old-models/panneauaffichage/pin_Height.png similarity index 100% rename from public/models/panneauaffichage/pin_Height.png rename to public/old-models/panneauaffichage/pin_Height.png diff --git a/public/models/panneauaffichage/pin_Metallic.png b/public/old-models/panneauaffichage/pin_Metallic.png similarity index 100% rename from public/models/panneauaffichage/pin_Metallic.png rename to public/old-models/panneauaffichage/pin_Metallic.png diff --git a/public/models/panneauaffichage/pin_Mixed_AO.png b/public/old-models/panneauaffichage/pin_Mixed_AO.png similarity index 100% rename from public/models/panneauaffichage/pin_Mixed_AO.png rename to public/old-models/panneauaffichage/pin_Mixed_AO.png diff --git a/public/models/panneauaffichage/pin_Normal.png b/public/old-models/panneauaffichage/pin_Normal.png similarity index 100% rename from public/models/panneauaffichage/pin_Normal.png rename to public/old-models/panneauaffichage/pin_Normal.png diff --git a/public/models/panneauaffichage/pin_Normal_OpenGL.png b/public/old-models/panneauaffichage/pin_Normal_OpenGL.png similarity index 100% rename from public/models/panneauaffichage/pin_Normal_OpenGL.png rename to public/old-models/panneauaffichage/pin_Normal_OpenGL.png diff --git a/public/models/panneauaffichage/pin_Roughness.png b/public/old-models/panneauaffichage/pin_Roughness.png similarity index 100% rename from public/models/panneauaffichage/pin_Roughness.png rename to public/old-models/panneauaffichage/pin_Roughness.png diff --git a/public/models/panneauclassique/model.gltf b/public/old-models/panneauclassique/model.gltf similarity index 100% rename from public/models/panneauclassique/model.gltf rename to public/old-models/panneauclassique/model.gltf diff --git a/public/models/panneaufleche/model.gltf b/public/old-models/panneaufleche/model.gltf similarity index 100% rename from public/models/panneaufleche/model.gltf rename to public/old-models/panneaufleche/model.gltf diff --git a/public/models/persoprincipal-animated/DefaultMaterial_diffuse-DefaultMaterial_diffuse.png.png b/public/old-models/persoprincipal-animated/DefaultMaterial_diffuse-DefaultMaterial_diffuse.png.png similarity index 100% rename from public/models/persoprincipal-animated/DefaultMaterial_diffuse-DefaultMaterial_diffuse.png.png rename to public/old-models/persoprincipal-animated/DefaultMaterial_diffuse-DefaultMaterial_diffuse.png.png diff --git a/public/models/persoprincipal-animated/DefaultMaterial_normal.png b/public/old-models/persoprincipal-animated/DefaultMaterial_normal.png similarity index 100% rename from public/models/persoprincipal-animated/DefaultMaterial_normal.png rename to public/old-models/persoprincipal-animated/DefaultMaterial_normal.png diff --git a/public/models/persoprincipal-animated/model.bin b/public/old-models/persoprincipal-animated/model.bin similarity index 100% rename from public/models/persoprincipal-animated/model.bin rename to public/old-models/persoprincipal-animated/model.bin diff --git a/public/models/persoprincipal-animated/model.gltf b/public/old-models/persoprincipal-animated/model.gltf similarity index 100% rename from public/models/persoprincipal-animated/model.gltf rename to public/old-models/persoprincipal-animated/model.gltf diff --git a/public/models/persoprincipal/defaultmaterial_basecolor.png b/public/old-models/persoprincipal/defaultmaterial_basecolor.png similarity index 100% rename from public/models/persoprincipal/defaultmaterial_basecolor.png rename to public/old-models/persoprincipal/defaultmaterial_basecolor.png diff --git a/public/models/persoprincipal/defaultmaterial_normal.png b/public/old-models/persoprincipal/defaultmaterial_normal.png similarity index 100% rename from public/models/persoprincipal/defaultmaterial_normal.png rename to public/old-models/persoprincipal/defaultmaterial_normal.png diff --git a/public/models/persoprincipal/defaultmaterial_occlusionroughnessmetallic.png b/public/old-models/persoprincipal/defaultmaterial_occlusionroughnessmetallic.png similarity index 100% rename from public/models/persoprincipal/defaultmaterial_occlusionroughnessmetallic.png rename to public/old-models/persoprincipal/defaultmaterial_occlusionroughnessmetallic.png diff --git a/public/models/persoprincipal/mc.bin b/public/old-models/persoprincipal/mc.bin similarity index 100% rename from public/models/persoprincipal/mc.bin rename to public/old-models/persoprincipal/mc.bin diff --git a/public/models/persoprincipal/model.gltf b/public/old-models/persoprincipal/model.gltf similarity index 100% rename from public/models/persoprincipal/model.gltf rename to public/old-models/persoprincipal/model.gltf diff --git a/public/models/potager/potager.bin b/public/old-models/potager/potager.bin similarity index 100% rename from public/models/potager/potager.bin rename to public/old-models/potager/potager.bin diff --git a/public/models/potager/potager.gltf b/public/old-models/potager/potager.gltf similarity index 100% rename from public/models/potager/potager.gltf rename to public/old-models/potager/potager.gltf diff --git a/public/models/potager/potager_baseColor.png b/public/old-models/potager/potager_baseColor.png similarity index 100% rename from public/models/potager/potager_baseColor.png rename to public/old-models/potager/potager_baseColor.png diff --git a/public/models/potager/potager_normal.png b/public/old-models/potager/potager_normal.png similarity index 100% rename from public/models/potager/potager_normal.png rename to public/old-models/potager/potager_normal.png diff --git a/public/models/potager/potager_occlusionRoughnessMetallic.png b/public/old-models/potager/potager_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/potager/potager_occlusionRoughnessMetallic.png rename to public/old-models/potager/potager_occlusionRoughnessMetallic.png diff --git a/public/models/puce/model.gltf b/public/old-models/puce/model.gltf similarity index 100% rename from public/models/puce/model.gltf rename to public/old-models/puce/model.gltf diff --git a/public/models/puce/puces_Base_color.png b/public/old-models/puce/puces_Base_color.png similarity index 100% rename from public/models/puce/puces_Base_color.png rename to public/old-models/puce/puces_Base_color.png diff --git a/public/models/puce/puces_Height.png b/public/old-models/puce/puces_Height.png similarity index 100% rename from public/models/puce/puces_Height.png rename to public/old-models/puce/puces_Height.png diff --git a/public/models/puce/puces_Metallic.png b/public/old-models/puce/puces_Metallic.png similarity index 100% rename from public/models/puce/puces_Metallic.png rename to public/old-models/puce/puces_Metallic.png diff --git a/public/models/puce/puces_Mixed_AO.png b/public/old-models/puce/puces_Mixed_AO.png similarity index 100% rename from public/models/puce/puces_Mixed_AO.png rename to public/old-models/puce/puces_Mixed_AO.png diff --git a/public/models/puce/puces_Normal.png b/public/old-models/puce/puces_Normal.png similarity index 100% rename from public/models/puce/puces_Normal.png rename to public/old-models/puce/puces_Normal.png diff --git a/public/models/puce/puces_Normal_OpenGL.png b/public/old-models/puce/puces_Normal_OpenGL.png similarity index 100% rename from public/models/puce/puces_Normal_OpenGL.png rename to public/old-models/puce/puces_Normal_OpenGL.png diff --git a/public/models/puce/puces_Roughness.png b/public/old-models/puce/puces_Roughness.png similarity index 100% rename from public/models/puce/puces_Roughness.png rename to public/old-models/puce/puces_Roughness.png diff --git a/public/models/pylone/cable1_base_color.png b/public/old-models/pylone/cable1_base_color.png similarity index 100% rename from public/models/pylone/cable1_base_color.png rename to public/old-models/pylone/cable1_base_color.png diff --git a/public/models/pylone/cable1_height.png b/public/old-models/pylone/cable1_height.png similarity index 100% rename from public/models/pylone/cable1_height.png rename to public/old-models/pylone/cable1_height.png diff --git a/public/models/pylone/cable1_metallic.png b/public/old-models/pylone/cable1_metallic.png similarity index 100% rename from public/models/pylone/cable1_metallic.png rename to public/old-models/pylone/cable1_metallic.png diff --git a/public/models/pylone/cable1_mixed_ao.png b/public/old-models/pylone/cable1_mixed_ao.png similarity index 100% rename from public/models/pylone/cable1_mixed_ao.png rename to public/old-models/pylone/cable1_mixed_ao.png diff --git a/public/models/pylone/cable1_normal.png b/public/old-models/pylone/cable1_normal.png similarity index 100% rename from public/models/pylone/cable1_normal.png rename to public/old-models/pylone/cable1_normal.png diff --git a/public/models/pylone/cable1_normal_opengl.png b/public/old-models/pylone/cable1_normal_opengl.png similarity index 100% rename from public/models/pylone/cable1_normal_opengl.png rename to public/old-models/pylone/cable1_normal_opengl.png diff --git a/public/models/pylone/cable1_roughness.png b/public/old-models/pylone/cable1_roughness.png similarity index 100% rename from public/models/pylone/cable1_roughness.png rename to public/old-models/pylone/cable1_roughness.png diff --git a/public/models/pylone/cable2_base_color.png b/public/old-models/pylone/cable2_base_color.png similarity index 100% rename from public/models/pylone/cable2_base_color.png rename to public/old-models/pylone/cable2_base_color.png diff --git a/public/models/pylone/cable2_height.png b/public/old-models/pylone/cable2_height.png similarity index 100% rename from public/models/pylone/cable2_height.png rename to public/old-models/pylone/cable2_height.png diff --git a/public/models/pylone/cable2_metallic.png b/public/old-models/pylone/cable2_metallic.png similarity index 100% rename from public/models/pylone/cable2_metallic.png rename to public/old-models/pylone/cable2_metallic.png diff --git a/public/models/pylone/cable2_mixed_ao.png b/public/old-models/pylone/cable2_mixed_ao.png similarity index 100% rename from public/models/pylone/cable2_mixed_ao.png rename to public/old-models/pylone/cable2_mixed_ao.png diff --git a/public/models/pylone/cable2_normal.png b/public/old-models/pylone/cable2_normal.png similarity index 100% rename from public/models/pylone/cable2_normal.png rename to public/old-models/pylone/cable2_normal.png diff --git a/public/models/pylone/cable2_normal_opengl.png b/public/old-models/pylone/cable2_normal_opengl.png similarity index 100% rename from public/models/pylone/cable2_normal_opengl.png rename to public/old-models/pylone/cable2_normal_opengl.png diff --git a/public/models/pylone/cable2_roughness.png b/public/old-models/pylone/cable2_roughness.png similarity index 100% rename from public/models/pylone/cable2_roughness.png rename to public/old-models/pylone/cable2_roughness.png diff --git a/public/models/pylone/chap_base_color.png b/public/old-models/pylone/chap_base_color.png similarity index 100% rename from public/models/pylone/chap_base_color.png rename to public/old-models/pylone/chap_base_color.png diff --git a/public/models/pylone/chap_height.png b/public/old-models/pylone/chap_height.png similarity index 100% rename from public/models/pylone/chap_height.png rename to public/old-models/pylone/chap_height.png diff --git a/public/models/pylone/chap_metallic.png b/public/old-models/pylone/chap_metallic.png similarity index 100% rename from public/models/pylone/chap_metallic.png rename to public/old-models/pylone/chap_metallic.png diff --git a/public/models/pylone/chap_mixed_ao.png b/public/old-models/pylone/chap_mixed_ao.png similarity index 100% rename from public/models/pylone/chap_mixed_ao.png rename to public/old-models/pylone/chap_mixed_ao.png diff --git a/public/models/pylone/chap_normal.png b/public/old-models/pylone/chap_normal.png similarity index 100% rename from public/models/pylone/chap_normal.png rename to public/old-models/pylone/chap_normal.png diff --git a/public/models/pylone/chap_normal_opengl.png b/public/old-models/pylone/chap_normal_opengl.png similarity index 100% rename from public/models/pylone/chap_normal_opengl.png rename to public/old-models/pylone/chap_normal_opengl.png diff --git a/public/models/pylone/chap_roughness.png b/public/old-models/pylone/chap_roughness.png similarity index 100% rename from public/models/pylone/chap_roughness.png rename to public/old-models/pylone/chap_roughness.png diff --git a/public/models/pylone/lampe_base_color.png b/public/old-models/pylone/lampe_base_color.png similarity index 100% rename from public/models/pylone/lampe_base_color.png rename to public/old-models/pylone/lampe_base_color.png diff --git a/public/models/pylone/lampe_height.png b/public/old-models/pylone/lampe_height.png similarity index 100% rename from public/models/pylone/lampe_height.png rename to public/old-models/pylone/lampe_height.png diff --git a/public/models/pylone/lampe_metallic.png b/public/old-models/pylone/lampe_metallic.png similarity index 100% rename from public/models/pylone/lampe_metallic.png rename to public/old-models/pylone/lampe_metallic.png diff --git a/public/models/pylone/lampe_mixed_ao.png b/public/old-models/pylone/lampe_mixed_ao.png similarity index 100% rename from public/models/pylone/lampe_mixed_ao.png rename to public/old-models/pylone/lampe_mixed_ao.png diff --git a/public/models/pylone/lampe_normal.png b/public/old-models/pylone/lampe_normal.png similarity index 100% rename from public/models/pylone/lampe_normal.png rename to public/old-models/pylone/lampe_normal.png diff --git a/public/models/pylone/lampe_normal_opengl.png b/public/old-models/pylone/lampe_normal_opengl.png similarity index 100% rename from public/models/pylone/lampe_normal_opengl.png rename to public/old-models/pylone/lampe_normal_opengl.png diff --git a/public/models/pylone/lampe_opacity.png b/public/old-models/pylone/lampe_opacity.png similarity index 100% rename from public/models/pylone/lampe_opacity.png rename to public/old-models/pylone/lampe_opacity.png diff --git a/public/models/pylone/lampe_roughness.png b/public/old-models/pylone/lampe_roughness.png similarity index 100% rename from public/models/pylone/lampe_roughness.png rename to public/old-models/pylone/lampe_roughness.png diff --git a/public/models/pylone/model.gltf b/public/old-models/pylone/model.gltf similarity index 100% rename from public/models/pylone/model.gltf rename to public/old-models/pylone/model.gltf diff --git a/public/models/pylone/panneaux_base_color.png b/public/old-models/pylone/panneaux_base_color.png similarity index 100% rename from public/models/pylone/panneaux_base_color.png rename to public/old-models/pylone/panneaux_base_color.png diff --git a/public/models/pylone/panneaux_height.png b/public/old-models/pylone/panneaux_height.png similarity index 100% rename from public/models/pylone/panneaux_height.png rename to public/old-models/pylone/panneaux_height.png diff --git a/public/models/pylone/panneaux_metallic.png b/public/old-models/pylone/panneaux_metallic.png similarity index 100% rename from public/models/pylone/panneaux_metallic.png rename to public/old-models/pylone/panneaux_metallic.png diff --git a/public/models/pylone/panneaux_mixed_ao.png b/public/old-models/pylone/panneaux_mixed_ao.png similarity index 100% rename from public/models/pylone/panneaux_mixed_ao.png rename to public/old-models/pylone/panneaux_mixed_ao.png diff --git a/public/models/pylone/panneaux_normal.png b/public/old-models/pylone/panneaux_normal.png similarity index 100% rename from public/models/pylone/panneaux_normal.png rename to public/old-models/pylone/panneaux_normal.png diff --git a/public/models/pylone/panneaux_normal_opengl.png b/public/old-models/pylone/panneaux_normal_opengl.png similarity index 100% rename from public/models/pylone/panneaux_normal_opengl.png rename to public/old-models/pylone/panneaux_normal_opengl.png diff --git a/public/models/pylone/panneaux_roughness.png b/public/old-models/pylone/panneaux_roughness.png similarity index 100% rename from public/models/pylone/panneaux_roughness.png rename to public/old-models/pylone/panneaux_roughness.png diff --git a/public/models/pylone/pied_base_color.png b/public/old-models/pylone/pied_base_color.png similarity index 100% rename from public/models/pylone/pied_base_color.png rename to public/old-models/pylone/pied_base_color.png diff --git a/public/models/pylone/pied_height.png b/public/old-models/pylone/pied_height.png similarity index 100% rename from public/models/pylone/pied_height.png rename to public/old-models/pylone/pied_height.png diff --git a/public/models/pylone/pied_metallic.png b/public/old-models/pylone/pied_metallic.png similarity index 100% rename from public/models/pylone/pied_metallic.png rename to public/old-models/pylone/pied_metallic.png diff --git a/public/models/pylone/pied_mixed_ao.png b/public/old-models/pylone/pied_mixed_ao.png similarity index 100% rename from public/models/pylone/pied_mixed_ao.png rename to public/old-models/pylone/pied_mixed_ao.png diff --git a/public/models/pylone/pied_normal.png b/public/old-models/pylone/pied_normal.png similarity index 100% rename from public/models/pylone/pied_normal.png rename to public/old-models/pylone/pied_normal.png diff --git a/public/models/pylone/pied_normal_opengl.png b/public/old-models/pylone/pied_normal_opengl.png similarity index 100% rename from public/models/pylone/pied_normal_opengl.png rename to public/old-models/pylone/pied_normal_opengl.png diff --git a/public/models/pylone/pied_roughness.png b/public/old-models/pylone/pied_roughness.png similarity index 100% rename from public/models/pylone/pied_roughness.png rename to public/old-models/pylone/pied_roughness.png diff --git a/public/models/pylone/puces_base_color.png b/public/old-models/pylone/puces_base_color.png similarity index 100% rename from public/models/pylone/puces_base_color.png rename to public/old-models/pylone/puces_base_color.png diff --git a/public/models/pylone/puces_height.png b/public/old-models/pylone/puces_height.png similarity index 100% rename from public/models/pylone/puces_height.png rename to public/old-models/pylone/puces_height.png diff --git a/public/models/pylone/puces_metallic.png b/public/old-models/pylone/puces_metallic.png similarity index 100% rename from public/models/pylone/puces_metallic.png rename to public/old-models/pylone/puces_metallic.png diff --git a/public/models/pylone/puces_mixed_ao.png b/public/old-models/pylone/puces_mixed_ao.png similarity index 100% rename from public/models/pylone/puces_mixed_ao.png rename to public/old-models/pylone/puces_mixed_ao.png diff --git a/public/models/pylone/puces_normal.png b/public/old-models/pylone/puces_normal.png similarity index 100% rename from public/models/pylone/puces_normal.png rename to public/old-models/pylone/puces_normal.png diff --git a/public/models/pylone/puces_normal_opengl.png b/public/old-models/pylone/puces_normal_opengl.png similarity index 100% rename from public/models/pylone/puces_normal_opengl.png rename to public/old-models/pylone/puces_normal_opengl.png diff --git a/public/models/pylone/puces_roughness.png b/public/old-models/pylone/puces_roughness.png similarity index 100% rename from public/models/pylone/puces_roughness.png rename to public/old-models/pylone/puces_roughness.png diff --git a/public/models/refroidisseur/model.bin b/public/old-models/refroidisseur/model.bin similarity index 100% rename from public/models/refroidisseur/model.bin rename to public/old-models/refroidisseur/model.bin diff --git a/public/models/refroidisseur/model.gltf b/public/old-models/refroidisseur/model.gltf similarity index 100% rename from public/models/refroidisseur/model.gltf rename to public/old-models/refroidisseur/model.gltf diff --git a/public/models/refroidisseur/refroidisseur_base_color.png b/public/old-models/refroidisseur/refroidisseur_base_color.png similarity index 100% rename from public/models/refroidisseur/refroidisseur_base_color.png rename to public/old-models/refroidisseur/refroidisseur_base_color.png diff --git a/public/models/refroidisseur/refroidisseur_height.png b/public/old-models/refroidisseur/refroidisseur_height.png similarity index 100% rename from public/models/refroidisseur/refroidisseur_height.png rename to public/old-models/refroidisseur/refroidisseur_height.png diff --git a/public/models/refroidisseur/refroidisseur_metallic.png b/public/old-models/refroidisseur/refroidisseur_metallic.png similarity index 100% rename from public/models/refroidisseur/refroidisseur_metallic.png rename to public/old-models/refroidisseur/refroidisseur_metallic.png diff --git a/public/models/refroidisseur/refroidisseur_mixed_ao.png b/public/old-models/refroidisseur/refroidisseur_mixed_ao.png similarity index 100% rename from public/models/refroidisseur/refroidisseur_mixed_ao.png rename to public/old-models/refroidisseur/refroidisseur_mixed_ao.png diff --git a/public/models/refroidisseur/refroidisseur_normal.png b/public/old-models/refroidisseur/refroidisseur_normal.png similarity index 100% rename from public/models/refroidisseur/refroidisseur_normal.png rename to public/old-models/refroidisseur/refroidisseur_normal.png diff --git a/public/models/refroidisseur/refroidisseur_normal_opengl.png b/public/old-models/refroidisseur/refroidisseur_normal_opengl.png similarity index 100% rename from public/models/refroidisseur/refroidisseur_normal_opengl.png rename to public/old-models/refroidisseur/refroidisseur_normal_opengl.png diff --git a/public/models/refroidisseur/refroidisseur_roughness.png b/public/old-models/refroidisseur/refroidisseur_roughness.png similarity index 100% rename from public/models/refroidisseur/refroidisseur_roughness.png rename to public/old-models/refroidisseur/refroidisseur_roughness.png diff --git a/public/models/sapin/mat.1_basecolor.png b/public/old-models/sapin/mat.1_basecolor.png similarity index 100% rename from public/models/sapin/mat.1_basecolor.png rename to public/old-models/sapin/mat.1_basecolor.png diff --git a/public/models/sapin/mat.1_normal.png b/public/old-models/sapin/mat.1_normal.png similarity index 100% rename from public/models/sapin/mat.1_normal.png rename to public/old-models/sapin/mat.1_normal.png diff --git a/public/models/sapin/mat.1_occlusionroughnessmetallic.png b/public/old-models/sapin/mat.1_occlusionroughnessmetallic.png similarity index 100% rename from public/models/sapin/mat.1_occlusionroughnessmetallic.png rename to public/old-models/sapin/mat.1_occlusionroughnessmetallic.png diff --git a/public/models/sapin/mat_basecolor.png b/public/old-models/sapin/mat_basecolor.png similarity index 100% rename from public/models/sapin/mat_basecolor.png rename to public/old-models/sapin/mat_basecolor.png diff --git a/public/models/sapin/mat_normal.png b/public/old-models/sapin/mat_normal.png similarity index 100% rename from public/models/sapin/mat_normal.png rename to public/old-models/sapin/mat_normal.png diff --git a/public/models/sapin/mat_occlusionroughnessmetallic.png b/public/old-models/sapin/mat_occlusionroughnessmetallic.png similarity index 100% rename from public/models/sapin/mat_occlusionroughnessmetallic.png rename to public/old-models/sapin/mat_occlusionroughnessmetallic.png diff --git a/public/models/sapin/model.gltf b/public/old-models/sapin/model.gltf similarity index 100% rename from public/models/sapin/model.gltf rename to public/old-models/sapin/model.gltf diff --git a/public/models/sapin/sapin.bin b/public/old-models/sapin/sapin.bin similarity index 100% rename from public/models/sapin/sapin.bin rename to public/old-models/sapin/sapin.bin diff --git a/public/models/sky/model.glb b/public/old-models/sky/model.glb similarity index 100% rename from public/models/sky/model.glb rename to public/old-models/sky/model.glb diff --git a/public/models/skybox/skybox.bin b/public/old-models/skybox/skybox.bin similarity index 100% rename from public/models/skybox/skybox.bin rename to public/old-models/skybox/skybox.bin diff --git a/public/models/skybox/skybox.glb b/public/old-models/skybox/skybox.glb similarity index 100% rename from public/models/skybox/skybox.glb rename to public/old-models/skybox/skybox.glb diff --git a/public/models/skybox/skybox.gltf b/public/old-models/skybox/skybox.gltf similarity index 100% rename from public/models/skybox/skybox.gltf rename to public/old-models/skybox/skybox.gltf diff --git a/public/models/skybox/skybox_baseColor.png b/public/old-models/skybox/skybox_baseColor.png similarity index 100% rename from public/models/skybox/skybox_baseColor.png rename to public/old-models/skybox/skybox_baseColor.png diff --git a/public/models/skybox/skybox_normal.png b/public/old-models/skybox/skybox_normal.png similarity index 100% rename from public/models/skybox/skybox_normal.png rename to public/old-models/skybox/skybox_normal.png diff --git a/public/models/skybox/skybox_occlusionRoughnessMetallic.png b/public/old-models/skybox/skybox_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/skybox/skybox_occlusionRoughnessMetallic.png rename to public/old-models/skybox/skybox_occlusionRoughnessMetallic.png diff --git a/public/models/talkie/antenne_Base_color.png b/public/old-models/talkie/antenne_Base_color.png similarity index 100% rename from public/models/talkie/antenne_Base_color.png rename to public/old-models/talkie/antenne_Base_color.png diff --git a/public/models/talkie/antenne_Height.png b/public/old-models/talkie/antenne_Height.png similarity index 100% rename from public/models/talkie/antenne_Height.png rename to public/old-models/talkie/antenne_Height.png diff --git a/public/models/talkie/antenne_Metallic.png b/public/old-models/talkie/antenne_Metallic.png similarity index 100% rename from public/models/talkie/antenne_Metallic.png rename to public/old-models/talkie/antenne_Metallic.png diff --git a/public/models/talkie/antenne_Mixed_AO.png b/public/old-models/talkie/antenne_Mixed_AO.png similarity index 100% rename from public/models/talkie/antenne_Mixed_AO.png rename to public/old-models/talkie/antenne_Mixed_AO.png diff --git a/public/models/talkie/antenne_normal.png b/public/old-models/talkie/antenne_Normal.png similarity index 100% rename from public/models/talkie/antenne_normal.png rename to public/old-models/talkie/antenne_Normal.png diff --git a/public/models/talkie/antenne_normal_opengl.png b/public/old-models/talkie/antenne_Normal_OpenGL.png similarity index 100% rename from public/models/talkie/antenne_normal_opengl.png rename to public/old-models/talkie/antenne_Normal_OpenGL.png diff --git a/public/models/talkie/antenne_Roughness.png b/public/old-models/talkie/antenne_Roughness.png similarity index 100% rename from public/models/talkie/antenne_Roughness.png rename to public/old-models/talkie/antenne_Roughness.png diff --git a/public/models/talkie/boutona_Base_color.png b/public/old-models/talkie/boutona_Base_color.png similarity index 100% rename from public/models/talkie/boutona_Base_color.png rename to public/old-models/talkie/boutona_Base_color.png diff --git a/public/models/talkie/boutona_Height.png b/public/old-models/talkie/boutona_Height.png similarity index 100% rename from public/models/talkie/boutona_Height.png rename to public/old-models/talkie/boutona_Height.png diff --git a/public/models/talkie/boutona_Metallic.png b/public/old-models/talkie/boutona_Metallic.png similarity index 100% rename from public/models/talkie/boutona_Metallic.png rename to public/old-models/talkie/boutona_Metallic.png diff --git a/public/models/talkie/boutona_Mixed_AO.png b/public/old-models/talkie/boutona_Mixed_AO.png similarity index 100% rename from public/models/talkie/boutona_Mixed_AO.png rename to public/old-models/talkie/boutona_Mixed_AO.png diff --git a/public/models/talkie/boutona_normal.png b/public/old-models/talkie/boutona_Normal.png similarity index 100% rename from public/models/talkie/boutona_normal.png rename to public/old-models/talkie/boutona_Normal.png diff --git a/public/models/talkie/boutona_normal_opengl.png b/public/old-models/talkie/boutona_Normal_OpenGL.png similarity index 100% rename from public/models/talkie/boutona_normal_opengl.png rename to public/old-models/talkie/boutona_Normal_OpenGL.png diff --git a/public/models/talkie/boutona_Roughness.png b/public/old-models/talkie/boutona_Roughness.png similarity index 100% rename from public/models/talkie/boutona_Roughness.png rename to public/old-models/talkie/boutona_Roughness.png diff --git a/public/models/talkie/boutonb_Base_color.png b/public/old-models/talkie/boutonb_Base_color.png similarity index 100% rename from public/models/talkie/boutonb_Base_color.png rename to public/old-models/talkie/boutonb_Base_color.png diff --git a/public/models/talkie/boutonb_Height.png b/public/old-models/talkie/boutonb_Height.png similarity index 100% rename from public/models/talkie/boutonb_Height.png rename to public/old-models/talkie/boutonb_Height.png diff --git a/public/models/talkie/boutonb_Metallic.png b/public/old-models/talkie/boutonb_Metallic.png similarity index 100% rename from public/models/talkie/boutonb_Metallic.png rename to public/old-models/talkie/boutonb_Metallic.png diff --git a/public/models/talkie/boutonb_Mixed_AO.png b/public/old-models/talkie/boutonb_Mixed_AO.png similarity index 100% rename from public/models/talkie/boutonb_Mixed_AO.png rename to public/old-models/talkie/boutonb_Mixed_AO.png diff --git a/public/models/talkie/boutonb_normal.png b/public/old-models/talkie/boutonb_Normal.png similarity index 100% rename from public/models/talkie/boutonb_normal.png rename to public/old-models/talkie/boutonb_Normal.png diff --git a/public/models/talkie/boutonb_normal_opengl.png b/public/old-models/talkie/boutonb_Normal_OpenGL.png similarity index 100% rename from public/models/talkie/boutonb_normal_opengl.png rename to public/old-models/talkie/boutonb_Normal_OpenGL.png diff --git a/public/models/talkie/boutonb_Roughness.png b/public/old-models/talkie/boutonb_Roughness.png similarity index 100% rename from public/models/talkie/boutonb_Roughness.png rename to public/old-models/talkie/boutonb_Roughness.png diff --git a/public/models/talkie/cable1_Base_color.png b/public/old-models/talkie/cable1_Base_color.png similarity index 100% rename from public/models/talkie/cable1_Base_color.png rename to public/old-models/talkie/cable1_Base_color.png diff --git a/public/models/talkie/cable1_Height.png b/public/old-models/talkie/cable1_Height.png similarity index 100% rename from public/models/talkie/cable1_Height.png rename to public/old-models/talkie/cable1_Height.png diff --git a/public/models/talkie/cable1_Metallic.png b/public/old-models/talkie/cable1_Metallic.png similarity index 100% rename from public/models/talkie/cable1_Metallic.png rename to public/old-models/talkie/cable1_Metallic.png diff --git a/public/models/talkie/cable1_Mixed_AO.png b/public/old-models/talkie/cable1_Mixed_AO.png similarity index 100% rename from public/models/talkie/cable1_Mixed_AO.png rename to public/old-models/talkie/cable1_Mixed_AO.png diff --git a/public/models/talkie/cable1_normal.png b/public/old-models/talkie/cable1_Normal.png similarity index 100% rename from public/models/talkie/cable1_normal.png rename to public/old-models/talkie/cable1_Normal.png diff --git a/public/models/talkie/cable1_normal_opengl.png b/public/old-models/talkie/cable1_Normal_OpenGL.png similarity index 100% rename from public/models/talkie/cable1_normal_opengl.png rename to public/old-models/talkie/cable1_Normal_OpenGL.png diff --git a/public/models/talkie/cable1_Roughness.png b/public/old-models/talkie/cable1_Roughness.png similarity index 100% rename from public/models/talkie/cable1_Roughness.png rename to public/old-models/talkie/cable1_Roughness.png diff --git a/public/models/talkie/cable2_Base_color.png b/public/old-models/talkie/cable2_Base_color.png similarity index 100% rename from public/models/talkie/cable2_Base_color.png rename to public/old-models/talkie/cable2_Base_color.png diff --git a/public/models/talkie/cable2_Height.png b/public/old-models/talkie/cable2_Height.png similarity index 100% rename from public/models/talkie/cable2_Height.png rename to public/old-models/talkie/cable2_Height.png diff --git a/public/models/talkie/cable2_Metallic.png b/public/old-models/talkie/cable2_Metallic.png similarity index 100% rename from public/models/talkie/cable2_Metallic.png rename to public/old-models/talkie/cable2_Metallic.png diff --git a/public/models/talkie/cable2_Mixed_AO.png b/public/old-models/talkie/cable2_Mixed_AO.png similarity index 100% rename from public/models/talkie/cable2_Mixed_AO.png rename to public/old-models/talkie/cable2_Mixed_AO.png diff --git a/public/models/talkie/cable2_normal.png b/public/old-models/talkie/cable2_Normal.png similarity index 100% rename from public/models/talkie/cable2_normal.png rename to public/old-models/talkie/cable2_Normal.png diff --git a/public/models/talkie/cable2_normal_opengl.png b/public/old-models/talkie/cable2_Normal_OpenGL.png similarity index 100% rename from public/models/talkie/cable2_normal_opengl.png rename to public/old-models/talkie/cable2_Normal_OpenGL.png diff --git a/public/models/talkie/cable2_Roughness.png b/public/old-models/talkie/cable2_Roughness.png similarity index 100% rename from public/models/talkie/cable2_Roughness.png rename to public/old-models/talkie/cable2_Roughness.png diff --git a/public/models/talkie/cadre_Base_color.png b/public/old-models/talkie/cadre_Base_color.png similarity index 100% rename from public/models/talkie/cadre_Base_color.png rename to public/old-models/talkie/cadre_Base_color.png diff --git a/public/models/talkie/cadre_Height.png b/public/old-models/talkie/cadre_Height.png similarity index 100% rename from public/models/talkie/cadre_Height.png rename to public/old-models/talkie/cadre_Height.png diff --git a/public/models/talkie/cadre_Metallic.png b/public/old-models/talkie/cadre_Metallic.png similarity index 100% rename from public/models/talkie/cadre_Metallic.png rename to public/old-models/talkie/cadre_Metallic.png diff --git a/public/models/talkie/cadre_Mixed_AO.png b/public/old-models/talkie/cadre_Mixed_AO.png similarity index 100% rename from public/models/talkie/cadre_Mixed_AO.png rename to public/old-models/talkie/cadre_Mixed_AO.png diff --git a/public/models/talkie/cadre_normal.png b/public/old-models/talkie/cadre_Normal.png similarity index 100% rename from public/models/talkie/cadre_normal.png rename to public/old-models/talkie/cadre_Normal.png diff --git a/public/models/talkie/cadre_normal_opengl.png b/public/old-models/talkie/cadre_Normal_OpenGL.png similarity index 100% rename from public/models/talkie/cadre_normal_opengl.png rename to public/old-models/talkie/cadre_Normal_OpenGL.png diff --git a/public/models/talkie/cadre_Roughness.png b/public/old-models/talkie/cadre_Roughness.png similarity index 100% rename from public/models/talkie/cadre_Roughness.png rename to public/old-models/talkie/cadre_Roughness.png diff --git a/public/models/talkie/e_cran_base_color.png b/public/old-models/talkie/e_cran_base_color.png similarity index 100% rename from public/models/talkie/e_cran_base_color.png rename to public/old-models/talkie/e_cran_base_color.png diff --git a/public/models/talkie/e_cran_height.png b/public/old-models/talkie/e_cran_height.png similarity index 100% rename from public/models/talkie/e_cran_height.png rename to public/old-models/talkie/e_cran_height.png diff --git a/public/models/talkie/e_cran_metallic.png b/public/old-models/talkie/e_cran_metallic.png similarity index 100% rename from public/models/talkie/e_cran_metallic.png rename to public/old-models/talkie/e_cran_metallic.png diff --git a/public/models/talkie/e_cran_mixed_ao.png b/public/old-models/talkie/e_cran_mixed_ao.png similarity index 100% rename from public/models/talkie/e_cran_mixed_ao.png rename to public/old-models/talkie/e_cran_mixed_ao.png diff --git a/public/models/talkie/e_cran_normal.png b/public/old-models/talkie/e_cran_normal.png similarity index 100% rename from public/models/talkie/e_cran_normal.png rename to public/old-models/talkie/e_cran_normal.png diff --git a/public/models/talkie/e_cran_normal_opengl.png b/public/old-models/talkie/e_cran_normal_opengl.png similarity index 100% rename from public/models/talkie/e_cran_normal_opengl.png rename to public/old-models/talkie/e_cran_normal_opengl.png diff --git a/public/models/talkie/e_cran_roughness.png b/public/old-models/talkie/e_cran_roughness.png similarity index 100% rename from public/models/talkie/e_cran_roughness.png rename to public/old-models/talkie/e_cran_roughness.png diff --git a/public/models/talkie/hautparleur_Base_color.png b/public/old-models/talkie/hautparleur_Base_color.png similarity index 100% rename from public/models/talkie/hautparleur_Base_color.png rename to public/old-models/talkie/hautparleur_Base_color.png diff --git a/public/models/talkie/hautparleur_Height.png b/public/old-models/talkie/hautparleur_Height.png similarity index 100% rename from public/models/talkie/hautparleur_Height.png rename to public/old-models/talkie/hautparleur_Height.png diff --git a/public/models/talkie/hautparleur_Metallic.png b/public/old-models/talkie/hautparleur_Metallic.png similarity index 100% rename from public/models/talkie/hautparleur_Metallic.png rename to public/old-models/talkie/hautparleur_Metallic.png diff --git a/public/models/talkie/hautparleur_Mixed_AO.png b/public/old-models/talkie/hautparleur_Mixed_AO.png similarity index 100% rename from public/models/talkie/hautparleur_Mixed_AO.png rename to public/old-models/talkie/hautparleur_Mixed_AO.png diff --git a/public/models/talkie/hautparleur_normal.png b/public/old-models/talkie/hautparleur_Normal.png similarity index 100% rename from public/models/talkie/hautparleur_normal.png rename to public/old-models/talkie/hautparleur_Normal.png diff --git a/public/models/talkie/hautparleur_normal_opengl.png b/public/old-models/talkie/hautparleur_Normal_OpenGL.png similarity index 100% rename from public/models/talkie/hautparleur_normal_opengl.png rename to public/old-models/talkie/hautparleur_Normal_OpenGL.png diff --git a/public/models/talkie/hautparleur_Roughness.png b/public/old-models/talkie/hautparleur_Roughness.png similarity index 100% rename from public/models/talkie/hautparleur_Roughness.png rename to public/old-models/talkie/hautparleur_Roughness.png diff --git a/public/models/talkie/model.bin b/public/old-models/talkie/model.bin similarity index 100% rename from public/models/talkie/model.bin rename to public/old-models/talkie/model.bin diff --git a/public/models/talkie/model.gltf b/public/old-models/talkie/model.gltf similarity index 100% rename from public/models/talkie/model.gltf rename to public/old-models/talkie/model.gltf diff --git a/public/models/talkie/prise_Base_color.png b/public/old-models/talkie/prise_Base_color.png similarity index 100% rename from public/models/talkie/prise_Base_color.png rename to public/old-models/talkie/prise_Base_color.png diff --git a/public/models/talkie/prise_Height.png b/public/old-models/talkie/prise_Height.png similarity index 100% rename from public/models/talkie/prise_Height.png rename to public/old-models/talkie/prise_Height.png diff --git a/public/models/talkie/prise_Metallic.png b/public/old-models/talkie/prise_Metallic.png similarity index 100% rename from public/models/talkie/prise_Metallic.png rename to public/old-models/talkie/prise_Metallic.png diff --git a/public/models/talkie/prise_Mixed_AO.png b/public/old-models/talkie/prise_Mixed_AO.png similarity index 100% rename from public/models/talkie/prise_Mixed_AO.png rename to public/old-models/talkie/prise_Mixed_AO.png diff --git a/public/models/talkie/prise_normal.png b/public/old-models/talkie/prise_Normal.png similarity index 100% rename from public/models/talkie/prise_normal.png rename to public/old-models/talkie/prise_Normal.png diff --git a/public/models/talkie/prise_normal_opengl.png b/public/old-models/talkie/prise_Normal_OpenGL.png similarity index 100% rename from public/models/talkie/prise_normal_opengl.png rename to public/old-models/talkie/prise_Normal_OpenGL.png diff --git a/public/models/talkie/prise_Roughness.png b/public/old-models/talkie/prise_Roughness.png similarity index 100% rename from public/models/talkie/prise_Roughness.png rename to public/old-models/talkie/prise_Roughness.png diff --git a/public/models/talkie/talkie_Base_color.png b/public/old-models/talkie/talkie_Base_color.png similarity index 100% rename from public/models/talkie/talkie_Base_color.png rename to public/old-models/talkie/talkie_Base_color.png diff --git a/public/models/talkie/talkie_Height.png b/public/old-models/talkie/talkie_Height.png similarity index 100% rename from public/models/talkie/talkie_Height.png rename to public/old-models/talkie/talkie_Height.png diff --git a/public/models/talkie/talkie_Metallic.png b/public/old-models/talkie/talkie_Metallic.png similarity index 100% rename from public/models/talkie/talkie_Metallic.png rename to public/old-models/talkie/talkie_Metallic.png diff --git a/public/models/talkie/talkie_Mixed_AO.png b/public/old-models/talkie/talkie_Mixed_AO.png similarity index 100% rename from public/models/talkie/talkie_Mixed_AO.png rename to public/old-models/talkie/talkie_Mixed_AO.png diff --git a/public/models/talkie/talkie_normal.png b/public/old-models/talkie/talkie_Normal.png similarity index 100% rename from public/models/talkie/talkie_normal.png rename to public/old-models/talkie/talkie_Normal.png diff --git a/public/models/talkie/talkie_normal_opengl.png b/public/old-models/talkie/talkie_Normal_OpenGL.png similarity index 100% rename from public/models/talkie/talkie_normal_opengl.png rename to public/old-models/talkie/talkie_Normal_OpenGL.png diff --git a/public/models/talkie/talkie_Roughness.png b/public/old-models/talkie/talkie_Roughness.png similarity index 100% rename from public/models/talkie/talkie_Roughness.png rename to public/old-models/talkie/talkie_Roughness.png diff --git a/public/models/talkie/touches_Base_color.png b/public/old-models/talkie/touches_Base_color.png similarity index 100% rename from public/models/talkie/touches_Base_color.png rename to public/old-models/talkie/touches_Base_color.png diff --git a/public/models/talkie/touches_Height.png b/public/old-models/talkie/touches_Height.png similarity index 100% rename from public/models/talkie/touches_Height.png rename to public/old-models/talkie/touches_Height.png diff --git a/public/models/talkie/touches_Metallic.png b/public/old-models/talkie/touches_Metallic.png similarity index 100% rename from public/models/talkie/touches_Metallic.png rename to public/old-models/talkie/touches_Metallic.png diff --git a/public/models/talkie/touches_Mixed_AO.png b/public/old-models/talkie/touches_Mixed_AO.png similarity index 100% rename from public/models/talkie/touches_Mixed_AO.png rename to public/old-models/talkie/touches_Mixed_AO.png diff --git a/public/models/talkie/touches_normal.png b/public/old-models/talkie/touches_Normal.png similarity index 100% rename from public/models/talkie/touches_normal.png rename to public/old-models/talkie/touches_Normal.png diff --git a/public/models/talkie/touches_normal_opengl.png b/public/old-models/talkie/touches_Normal_OpenGL.png similarity index 100% rename from public/models/talkie/touches_normal_opengl.png rename to public/old-models/talkie/touches_Normal_OpenGL.png diff --git a/public/models/talkie/touches_Roughness.png b/public/old-models/talkie/touches_Roughness.png similarity index 100% rename from public/models/talkie/touches_Roughness.png rename to public/old-models/talkie/touches_Roughness.png diff --git a/public/models/talkie/écran_Base_color.png b/public/old-models/talkie/écran_Base_color.png similarity index 100% rename from public/models/talkie/écran_Base_color.png rename to public/old-models/talkie/écran_Base_color.png diff --git a/public/models/talkie/écran_Height.png b/public/old-models/talkie/écran_Height.png similarity index 100% rename from public/models/talkie/écran_Height.png rename to public/old-models/talkie/écran_Height.png diff --git a/public/models/talkie/écran_Metallic.png b/public/old-models/talkie/écran_Metallic.png similarity index 100% rename from public/models/talkie/écran_Metallic.png rename to public/old-models/talkie/écran_Metallic.png diff --git a/public/models/talkie/écran_Mixed_AO.png b/public/old-models/talkie/écran_Mixed_AO.png similarity index 100% rename from public/models/talkie/écran_Mixed_AO.png rename to public/old-models/talkie/écran_Mixed_AO.png diff --git a/public/models/talkie/écran_Normal.png b/public/old-models/talkie/écran_Normal.png similarity index 100% rename from public/models/talkie/écran_Normal.png rename to public/old-models/talkie/écran_Normal.png diff --git a/public/models/talkie/écran_Normal_OpenGL.png b/public/old-models/talkie/écran_Normal_OpenGL.png similarity index 100% rename from public/models/talkie/écran_Normal_OpenGL.png rename to public/old-models/talkie/écran_Normal_OpenGL.png diff --git a/public/models/talkie/écran_Roughness.png b/public/old-models/talkie/écran_Roughness.png similarity index 100% rename from public/models/talkie/écran_Roughness.png rename to public/old-models/talkie/écran_Roughness.png diff --git a/public/models/terrain/model.gltf b/public/old-models/terrain/model.gltf similarity index 100% rename from public/models/terrain/model.gltf rename to public/old-models/terrain/model.gltf diff --git a/public/models/terrain/terrain.bin b/public/old-models/terrain/terrain.bin similarity index 100% rename from public/models/terrain/terrain.bin rename to public/old-models/terrain/terrain.bin diff --git a/public/models/terrain/terrain.glb b/public/old-models/terrain/terrain.glb similarity index 100% rename from public/models/terrain/terrain.glb rename to public/old-models/terrain/terrain.glb diff --git a/public/models/terrain/terrain_baseColor.png b/public/old-models/terrain/terrain_baseColor.png similarity index 100% rename from public/models/terrain/terrain_baseColor.png rename to public/old-models/terrain/terrain_baseColor.png diff --git a/public/models/terrain/terrain_normal.png b/public/old-models/terrain/terrain_normal.png similarity index 100% rename from public/models/terrain/terrain_normal.png rename to public/old-models/terrain/terrain_normal.png diff --git a/public/models/terrain/terrain_occlusionRoughnessMetallic.png b/public/old-models/terrain/terrain_occlusionRoughnessMetallic.png similarity index 100% rename from public/models/terrain/terrain_occlusionRoughnessMetallic.png rename to public/old-models/terrain/terrain_occlusionRoughnessMetallic.png diff --git a/public/models/tuyauxlac/model.gltf b/public/old-models/tuyauxlac/model.gltf similarity index 100% rename from public/models/tuyauxlac/model.gltf rename to public/old-models/tuyauxlac/model.gltf diff --git a/public/models/tuyauxlac/tuyaux_Base_color.png b/public/old-models/tuyauxlac/tuyaux_Base_color.png similarity index 100% rename from public/models/tuyauxlac/tuyaux_Base_color.png rename to public/old-models/tuyauxlac/tuyaux_Base_color.png diff --git a/public/models/tuyauxlac/tuyaux_Height.png b/public/old-models/tuyauxlac/tuyaux_Height.png similarity index 100% rename from public/models/tuyauxlac/tuyaux_Height.png rename to public/old-models/tuyauxlac/tuyaux_Height.png diff --git a/public/models/tuyauxlac/tuyaux_Metallic.png b/public/old-models/tuyauxlac/tuyaux_Metallic.png similarity index 100% rename from public/models/tuyauxlac/tuyaux_Metallic.png rename to public/old-models/tuyauxlac/tuyaux_Metallic.png diff --git a/public/models/tuyauxlac/tuyaux_Mixed_AO.png b/public/old-models/tuyauxlac/tuyaux_Mixed_AO.png similarity index 100% rename from public/models/tuyauxlac/tuyaux_Mixed_AO.png rename to public/old-models/tuyauxlac/tuyaux_Mixed_AO.png diff --git a/public/models/tuyauxlac/tuyaux_Normal.png b/public/old-models/tuyauxlac/tuyaux_Normal.png similarity index 100% rename from public/models/tuyauxlac/tuyaux_Normal.png rename to public/old-models/tuyauxlac/tuyaux_Normal.png diff --git a/public/models/tuyauxlac/tuyaux_Normal_OpenGL.png b/public/old-models/tuyauxlac/tuyaux_Normal_OpenGL.png similarity index 100% rename from public/models/tuyauxlac/tuyaux_Normal_OpenGL.png rename to public/old-models/tuyauxlac/tuyaux_Normal_OpenGL.png diff --git a/public/models/tuyauxlac/tuyaux_Opacity.png b/public/old-models/tuyauxlac/tuyaux_Opacity.png similarity index 100% rename from public/models/tuyauxlac/tuyaux_Opacity.png rename to public/old-models/tuyauxlac/tuyaux_Opacity.png diff --git a/public/models/tuyauxlac/tuyaux_Roughness.png b/public/old-models/tuyauxlac/tuyaux_Roughness.png similarity index 100% rename from public/models/tuyauxlac/tuyaux_Roughness.png rename to public/old-models/tuyauxlac/tuyaux_Roughness.png diff --git a/public/models/tuyauxpuzzle/model.gltf b/public/old-models/tuyauxpuzzle/model.gltf similarity index 100% rename from public/models/tuyauxpuzzle/model.gltf rename to public/old-models/tuyauxpuzzle/model.gltf diff --git a/public/models/tuyauxpuzzle/tuyaux_Base_color.png b/public/old-models/tuyauxpuzzle/tuyaux_Base_color.png similarity index 100% rename from public/models/tuyauxpuzzle/tuyaux_Base_color.png rename to public/old-models/tuyauxpuzzle/tuyaux_Base_color.png diff --git a/public/models/tuyauxpuzzle/tuyaux_Height.png b/public/old-models/tuyauxpuzzle/tuyaux_Height.png similarity index 100% rename from public/models/tuyauxpuzzle/tuyaux_Height.png rename to public/old-models/tuyauxpuzzle/tuyaux_Height.png diff --git a/public/models/tuyauxpuzzle/tuyaux_Metallic.png b/public/old-models/tuyauxpuzzle/tuyaux_Metallic.png similarity index 100% rename from public/models/tuyauxpuzzle/tuyaux_Metallic.png rename to public/old-models/tuyauxpuzzle/tuyaux_Metallic.png diff --git a/public/models/tuyauxpuzzle/tuyaux_Mixed_AO.png b/public/old-models/tuyauxpuzzle/tuyaux_Mixed_AO.png similarity index 100% rename from public/models/tuyauxpuzzle/tuyaux_Mixed_AO.png rename to public/old-models/tuyauxpuzzle/tuyaux_Mixed_AO.png diff --git a/public/models/tuyauxpuzzle/tuyaux_Normal.png b/public/old-models/tuyauxpuzzle/tuyaux_Normal.png similarity index 100% rename from public/models/tuyauxpuzzle/tuyaux_Normal.png rename to public/old-models/tuyauxpuzzle/tuyaux_Normal.png diff --git a/public/models/tuyauxpuzzle/tuyaux_Normal_OpenGL.png b/public/old-models/tuyauxpuzzle/tuyaux_Normal_OpenGL.png similarity index 100% rename from public/models/tuyauxpuzzle/tuyaux_Normal_OpenGL.png rename to public/old-models/tuyauxpuzzle/tuyaux_Normal_OpenGL.png diff --git a/public/models/tuyauxpuzzle/tuyaux_Opacity.png b/public/old-models/tuyauxpuzzle/tuyaux_Opacity.png similarity index 100% rename from public/models/tuyauxpuzzle/tuyaux_Opacity.png rename to public/old-models/tuyauxpuzzle/tuyaux_Opacity.png diff --git a/public/models/tuyauxpuzzle/tuyaux_Roughness.png b/public/old-models/tuyauxpuzzle/tuyaux_Roughness.png similarity index 100% rename from public/models/tuyauxpuzzle/tuyaux_Roughness.png rename to public/old-models/tuyauxpuzzle/tuyaux_Roughness.png diff --git a/public/models/vase/color.jpg b/public/old-models/vase/color.jpg similarity index 100% rename from public/models/vase/color.jpg rename to public/old-models/vase/color.jpg diff --git a/public/models/vase/displace.jpg b/public/old-models/vase/displace.jpg similarity index 100% rename from public/models/vase/displace.jpg rename to public/old-models/vase/displace.jpg diff --git a/public/models/vase/metalness.jpg b/public/old-models/vase/metalness.jpg similarity index 100% rename from public/models/vase/metalness.jpg rename to public/old-models/vase/metalness.jpg diff --git a/public/models/vase/model.gltf b/public/old-models/vase/model.gltf similarity index 100% rename from public/models/vase/model.gltf rename to public/old-models/vase/model.gltf diff --git a/public/models/vase/normal.jpg b/public/old-models/vase/normal.jpg similarity index 100% rename from public/models/vase/normal.jpg rename to public/old-models/vase/normal.jpg diff --git a/public/models/vase/roughness.jpg b/public/old-models/vase/roughness.jpg similarity index 100% rename from public/models/vase/roughness.jpg rename to public/old-models/vase/roughness.jpg diff --git a/src/data/galleryModels.ts b/src/data/galleryModels.ts index 6a913a6..446ecb5 100644 --- a/src/data/galleryModels.ts +++ b/src/data/galleryModels.ts @@ -4,24 +4,23 @@ export interface GalleryModel { path: string; } +/** + * List of 3D models available in the gallery. + * Only includes models that exist in `/public/models/`. + */ export const galleryModels: GalleryModel[] = [ { id: "arbre", name: "Arbre", path: "/models/arbre/model.gltf" }, - { - id: "arbre-animated", - name: "Arbre animé", - path: "/models/arbre-animated/model.gltf", - }, - { id: "blocking", name: "Blocking", path: "/models/blocking/model.gltf" }, - { - id: "boiteauxlettres", - name: "Boîte aux lettres", - path: "/models/boiteauxlettres/model.gltf", - }, + { id: "blocking", name: "Blocking", path: "/models/blocking/terrain.gltf" }, { id: "boiteimmeuble", name: "Boîte immeuble", path: "/models/boiteimmeuble/model.gltf", }, + { + id: "boitesimple", + name: "Boîte simple", + path: "/models/boitesimple/model.gltf", + }, { id: "buisson", name: "Buisson", path: "/models/buisson/model.gltf" }, { id: "buisson-animated", @@ -30,38 +29,7 @@ export const galleryModels: GalleryModel[] = [ }, { id: "cable1", name: "Câble 1", path: "/models/cable1/model.gltf" }, { id: "cable2", name: "Câble 2", path: "/models/cable2/model.gltf" }, - { - id: "champdeble", - name: "Champ de blé", - path: "/models/champdeble/model.gltf", - }, - { - id: "champdeble-animated", - name: "Champ de blé animé", - path: "/models/champdeble-animated/model.gltf", - }, - { - id: "champdesoja", - name: "Champ de soja", - path: "/models/champdesoja/model.gltf", - }, - { - id: "champdesoja-animated", - name: "Champ de soja animé", - path: "/models/champdesoja-animated/model.gltf", - }, - { - id: "champsdetournesol", - name: "Champ de tournesol", - path: "/models/champsdetournesol/model.gltf", - }, - { - id: "champsdetournesol-animated", - name: "Champ de tournesol animé", - path: "/models/champsdetournesol-animated/model.gltf", - }, { id: "chemins", name: "Chemins", path: "/models/chemins/model.gltf" }, - { id: "cloud", name: "Nuage", path: "/models/cloud/model.glb" }, { id: "createurdepluie", name: "Créateur de pluie", @@ -112,9 +80,9 @@ export const galleryModels: GalleryModel[] = [ }, { id: "gerant", name: "Gérant", path: "/models/gerant/model.gltf" }, { - id: "gerant-animated", + id: "gerant_anim", name: "Gérant animé", - path: "/models/gerant-animated/model.gltf", + path: "/models/gerant_anim/model.gltf", }, { id: "habitant1", @@ -159,16 +127,6 @@ export const galleryModels: GalleryModel[] = [ name: "Panneau flèche", path: "/models/panneaufleche/model.gltf", }, - { - id: "panneausolaire", - name: "Panneau solaire", - path: "/models/panneausolaire/model.gltf", - }, - { - id: "parcebike", - name: "Parc e-bike", - path: "/models/parcebike/model.gltf", - }, { id: "persoprincipal", name: "Personnage principal", @@ -188,11 +146,7 @@ export const galleryModels: GalleryModel[] = [ path: "/models/refroidisseur/model.gltf", }, { id: "sapin", name: "Sapin", path: "/models/sapin/model.gltf" }, - { - id: "sapin-animated", - name: "Sapin animé", - path: "/models/sapin-animated/model.gltf", - }, + { id: "skybox", name: "Skybox", path: "/models/skybox/skybox.gltf" }, { id: "talkie", name: "Talkie", path: "/models/talkie/model.gltf" }, { id: "terrain", name: "Terrain", path: "/models/terrain/model.gltf" }, { diff --git a/src/index.css b/src/index.css index 1cfdbaf..d9d7c6d 100644 --- a/src/index.css +++ b/src/index.css @@ -299,6 +299,217 @@ canvas { .gallery-light-panel { top: 78px; } + + .gallery-keyboard-hints { + display: none; + } +} + +/* Gallery - Header */ +.gallery-header { + position: absolute; + top: clamp(18px, 3vw, 34px); + right: clamp(18px, 3vw, 38px); + z-index: 2; + text-align: right; +} + +.gallery-header .gallery-title { + position: static; + transform: none; +} + +.gallery-subtitle { + margin: 6px 0 0; + color: #a9a196; + font-size: 12px; + font-weight: 500; + letter-spacing: 0.02em; +} + +/* Gallery - Loading */ +.gallery-loading { + display: flex; + flex-direction: column; + align-items: center; + gap: 12px; + color: #f4efe7; +} + +.gallery-loading-spinner { + animation: gallery-spin 1s linear infinite; +} + +.gallery-loading-text { + font-family: Inter, "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + font-weight: 600; + letter-spacing: 0.02em; +} + +@keyframes gallery-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +/* Gallery - Empty state */ +.gallery-page--empty { + display: grid; + place-items: center; +} + +.gallery-empty-state { + display: flex; + flex-direction: column; + align-items: center; + gap: 16px; + padding: 32px; + color: #a9a196; + text-align: center; +} + +.gallery-empty-state h1 { + margin: 0; + color: #f4efe7; + font-size: 24px; + font-weight: 700; + letter-spacing: -0.02em; +} + +.gallery-empty-state p { + margin: 0; + max-width: 320px; + font-size: 14px; + line-height: 1.5; +} + +/* Gallery - Error state */ +.gallery-viewer-error { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 12px; + height: 100%; + min-height: 360px; + padding: 24px; + color: #fecaca; + text-align: center; +} + +.gallery-viewer-error span { + font-size: 14px; + font-weight: 500; +} + +/* Gallery - Navigation buttons */ +.gallery-nav-button { + display: grid; + place-items: center; + width: 54px; + height: 54px; + border: 0; + background: transparent; + color: #f4efe7; + cursor: pointer; + transition: + background 160ms ease, + color 160ms ease, + transform 100ms ease; +} + +.gallery-nav-button:hover, +.gallery-nav-button:focus-visible { + background: #f4efe7; + color: #050505; + outline: none; +} + +.gallery-nav-button:active { + transform: scale(0.95); +} + +/* Gallery - Model info */ +.gallery-model-name { + max-width: 100%; + overflow: hidden; + color: #f4efe7; + font-size: 15px; + font-weight: 700; + letter-spacing: 0.03em; + text-overflow: ellipsis; + text-transform: uppercase; + white-space: nowrap; +} + +.gallery-model-counter { + margin-top: 2px; + color: #a9a196; + font-family: Inter, "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 11px; + font-weight: 600; +} + +/* Gallery - Texture status spinner */ +.gallery-texture-status-spinner { + animation: gallery-spin 1s linear infinite; +} + +/* Gallery - Keyboard hints */ +.gallery-keyboard-hints { + position: absolute; + top: clamp(18px, 3vw, 34px); + left: clamp(18px, 3vw, 38px); + z-index: 2; + display: flex; + align-items: center; + gap: 8px; + color: #a9a196; + font-family: Inter, "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 11px; + font-weight: 600; +} + +.gallery-keyboard-hints kbd { + display: inline-flex; + align-items: center; + justify-content: center; + min-width: 22px; + height: 22px; + padding: 0 6px; + border: 1px solid #a9a196; + border-radius: 4px; + background: transparent; + color: #f4efe7; + font-family: inherit; + font-size: 10px; + font-weight: 700; +} + +.gallery-keyboard-hints-separator { + margin: 0 4px; + opacity: 0.5; +} + +@media (max-width: 720px) { + .gallery-header { + right: 50%; + transform: translateX(50%); + text-align: center; + } + + .gallery-subtitle { + display: none; + } + + .gallery-nav-button { + width: 48px; + height: 50px; + } } /* Docs layout */ diff --git a/src/pages/gallery/page.tsx b/src/pages/gallery/page.tsx index dd17a57..2438beb 100644 --- a/src/pages/gallery/page.tsx +++ b/src/pages/gallery/page.tsx @@ -1,14 +1,17 @@ import { Bounds, Center, + Html, OrbitControls, useAnimations, useGLTF, + useProgress, } from "@react-three/drei"; import { Canvas } from "@react-three/fiber"; import { Component, Suspense, + useCallback, useEffect, useMemo, useRef, @@ -19,6 +22,7 @@ import { ArrowLeft, ArrowRight, CheckCircle2, + Loader2, SlidersHorizontal, TriangleAlert, } from "lucide-react"; @@ -26,9 +30,24 @@ import * as THREE from "three"; import { SkyModel } from "@/components/three/world/SkyModel"; import { galleryModels, type GalleryModel } from "@/data/galleryModels"; import { + AMBIENT_INTENSITY_MAX, + AMBIENT_INTENSITY_MIN, + AMBIENT_INTENSITY_STEP, AMBIENT_LIGHT_COLOR, LIGHTING_DEFAULTS, + SUN_INTENSITY_MAX, + SUN_INTENSITY_MIN, + SUN_INTENSITY_STEP, SUN_LIGHT_COLOR, + SUN_X_MAX, + SUN_X_MIN, + SUN_X_STEP, + SUN_Y_MAX, + SUN_Y_MIN, + SUN_Y_STEP, + SUN_Z_MAX, + SUN_Z_MIN, + SUN_Z_STEP, } from "@/data/world/lightingConfig"; import { GAME_SCENE_FALLBACK_SKY_MODEL_PATH, @@ -104,13 +123,62 @@ const LOADING_TEXTURE_DIAGNOSTIC: TextureDiagnostic = { }; const GALLERY_LIGHT_CONTROLS: GalleryLightControl[] = [ - { key: "ambientIntensity", label: "Ambiance", min: 0, max: 5, step: 0.1 }, - { key: "sunIntensity", label: "Soleil", min: 0, max: 8, step: 0.1 }, - { key: "sunX", label: "Soleil X", min: -100, max: 100, step: 1 }, - { key: "sunY", label: "Soleil Y", min: -100, max: 150, step: 1 }, - { key: "sunZ", label: "Soleil Z", min: -100, max: 100, step: 1 }, + { + key: "ambientIntensity", + label: "Ambiance", + min: AMBIENT_INTENSITY_MIN, + max: AMBIENT_INTENSITY_MAX, + step: AMBIENT_INTENSITY_STEP, + }, + { + key: "sunIntensity", + label: "Soleil", + min: SUN_INTENSITY_MIN, + max: SUN_INTENSITY_MAX, + step: SUN_INTENSITY_STEP, + }, + { + key: "sunX", + label: "Soleil X", + min: SUN_X_MIN, + max: SUN_X_MAX, + step: SUN_X_STEP, + }, + { + key: "sunY", + label: "Soleil Y", + min: SUN_Y_MIN, + max: SUN_Y_MAX, + step: SUN_Y_STEP, + }, + { + key: "sunZ", + label: "Soleil Z", + min: SUN_Z_MIN, + max: SUN_Z_MAX, + step: SUN_Z_STEP, + }, ]; +function GalleryLoadingIndicator(): React.JSX.Element { + const { progress } = useProgress(); + + return ( + +
+ + + {progress < 100 ? `${Math.round(progress)}%` : "Préparation..."} + +
+ + ); +} + class GalleryViewerErrorBoundary extends Component< GalleryViewerErrorBoundaryProps, GalleryViewerErrorBoundaryState @@ -134,7 +202,8 @@ class GalleryViewerErrorBoundary extends Component< if (this.state.hasError) { return (
- Ce modèle ne peut pas être affiché pour le moment. + + Ce modèle ne peut pas être affiché pour le moment.
); } @@ -321,7 +390,23 @@ function TextureStatusBadge({ }: { diagnostic: TextureDiagnostic; }): React.JSX.Element { + const isLoading = diagnostic.status === "loading"; const hasWarning = diagnostic.status === "warning"; + + if (isLoading) { + return ( +
+
+ ); + } + const Icon = hasWarning ? TriangleAlert : CheckCircle2; return ( @@ -390,6 +475,18 @@ function GalleryLightingPanel({ ); } +function GalleryEmptyState(): React.JSX.Element { + return ( +
+
+ +

Aucun modèle disponible

+

La galerie ne contient aucun modèle à afficher pour le moment.

+
+
+ ); +} + function getTextureDiagnostic( modelId: string, modelScene: THREE.Object3D, @@ -462,38 +559,114 @@ export function GalleryPage(): React.JSX.Element { const [textureDiagnostic, setTextureDiagnostic] = useState( LOADING_TEXTURE_DIAGNOSTIC, ); - const activeModel = galleryModels[activeModelIndex] ?? galleryModels[0]!; + const modelCount = galleryModels.length; + const activeModel = galleryModels[activeModelIndex] ?? galleryModels[0]; + const activeTextureDiagnostic = - textureDiagnostic.modelId === activeModel.id + activeModel && textureDiagnostic.modelId === activeModel.id ? textureDiagnostic : LOADING_TEXTURE_DIAGNOSTIC; - const goToPreviousModel = (): void => { + // Preload adjacent models for smoother navigation + useEffect(() => { + if (modelCount <= 1) return; + + const prevIndex = + activeModelIndex === 0 ? modelCount - 1 : activeModelIndex - 1; + const nextIndex = + activeModelIndex === modelCount - 1 ? 0 : activeModelIndex + 1; + + const prevModel = galleryModels[prevIndex]; + const nextModel = galleryModels[nextIndex]; + + if (prevModel) { + useGLTF.preload(prevModel.path); + } + if (nextModel) { + useGLTF.preload(nextModel.path); + } + }, [activeModelIndex, modelCount]); + + // Memoized callbacks to prevent unnecessary re-renders + const goToPreviousModel = useCallback((): void => { setActiveModelIndex((currentIndex) => currentIndex === 0 ? modelCount - 1 : currentIndex - 1, ); - }; + }, [modelCount]); - const goToNextModel = (): void => { + const goToNextModel = useCallback((): void => { setActiveModelIndex((currentIndex) => currentIndex === modelCount - 1 ? 0 : currentIndex + 1, ); - }; + }, [modelCount]); - const handleLightChange = ( - key: keyof GalleryLightingConfig, - value: number, - ): void => { - setLighting((currentLighting) => ({ - ...currentLighting, - [key]: value, - })); - }; + const handleLightChange = useCallback( + (key: keyof GalleryLightingConfig, value: number): void => { + setLighting((currentLighting) => ({ + ...currentLighting, + [key]: value, + })); + }, + [], + ); - const resetLighting = (): void => { + const resetLighting = useCallback((): void => { setLighting({ ...LIGHTING_DEFAULTS }); - }; + }, []); + + const toggleLightPanel = useCallback((): void => { + setLightPanelOpen((open) => !open); + }, []); + + // Keyboard navigation + useEffect(() => { + const handleKeyDown = (event: KeyboardEvent): void => { + // Ignore if user is typing in an input + if ( + event.target instanceof HTMLInputElement || + event.target instanceof HTMLTextAreaElement + ) { + return; + } + + switch (event.key) { + case "ArrowLeft": + event.preventDefault(); + goToPreviousModel(); + break; + case "ArrowRight": + event.preventDefault(); + goToNextModel(); + break; + case "l": + case "L": + event.preventDefault(); + toggleLightPanel(); + break; + case "r": + case "R": + if (!lightPanelOpen) return; + event.preventDefault(); + resetLighting(); + break; + } + }; + + window.addEventListener("keydown", handleKeyDown); + return () => window.removeEventListener("keydown", handleKeyDown); + }, [ + goToPreviousModel, + goToNextModel, + toggleLightPanel, + resetLighting, + lightPanelOpen, + ]); + + // Guard against empty gallery (after all hooks) + if (modelCount === 0 || !activeModel) { + return ; + } return (
@@ -502,7 +675,7 @@ export function GalleryPage(): React.JSX.Element {
- + }>
- {activeModel.name} - + {activeModel.name} + {activeModelIndex + 1} / {modelCount}
@@ -541,7 +716,7 @@ export function GalleryPage(): React.JSX.Element { lighting={lighting} onChange={handleLightChange} onReset={resetLighting} - onToggle={() => setLightPanelOpen((open) => !open)} + onToggle={toggleLightPanel} open={lightPanelOpen} />
From 52bb1b291553c8e3138a63e556f96d10960575af Mon Sep 17 00:00:00 2001 From: Tom Boullay Date: Fri, 29 May 2026 09:00:04 +0200 Subject: [PATCH 10/10] chore: code quality audit and lint fixes - Fix all 63 ESLint errors across codebase - Consolidate MaterialWithTextureSlots type in src/types/three/three.ts - Add CSS custom properties for design tokens - Extract ebike constants to src/data/ebike/ebikeConfig.ts - Add proper TypeScript types for window extensions - Fix React hooks violations (refs during render, setState in effects) - Remove unused exports and redundant CSS - Add type guards for Three.js material handling - Clean up AI slop comments and legacy CSS patterns --- src/components/ebike/Ebike.tsx | 117 ++++++----- src/components/ebike/EbikeGPSMap.tsx | 82 +++++--- src/components/three/world/SkyModel.tsx | 40 ++-- src/data/ebike/ebikeConfig.ts | 16 ++ src/data/galleryModels.ts | 4 - src/index.css | 269 +++++++++--------------- src/pages/backgroundmap/page.tsx | 170 +++++++++------ src/pages/gallery/page.tsx | 66 ++---- src/pages/waypoint/page.tsx | 105 ++++----- src/pathfinding/useGPS.ts | 10 +- src/pathfinding/useWaypointGPS.ts | 10 +- src/types/ebike/ebikeWindow.ts | 11 + src/types/three/three.ts | 19 ++ src/utils/three/dispose.ts | 42 ++-- src/world/Environment.tsx | 2 +- src/world/GameCinematics.tsx | 3 + src/world/debug/TestMap.tsx | 12 +- src/world/player/PlayerController.tsx | 37 +++- 18 files changed, 550 insertions(+), 465 deletions(-) create mode 100644 src/data/ebike/ebikeConfig.ts create mode 100644 src/types/ebike/ebikeWindow.ts diff --git a/src/components/ebike/Ebike.tsx b/src/components/ebike/Ebike.tsx index 13cfdce..b7104c4 100644 --- a/src/components/ebike/Ebike.tsx +++ b/src/components/ebike/Ebike.tsx @@ -1,4 +1,4 @@ -import { useEffect, useRef, useState, useMemo } from "react"; +import { useEffect, useRef, useState, useMemo, useCallback } from "react"; import * as THREE from "three"; import { useFrame, useThree } from "@react-three/fiber"; import { EbikeGPSMap } from "@/components/ebike/EbikeGPSMap"; @@ -9,25 +9,15 @@ import { useDebugFolder } from "@/hooks/debug/useDebugFolder"; import { animateCameraTransformTransition } from "@/world/GameCinematics"; import { useGameStore } from "@/managers/stores/useGameStore"; import { PLAYER_EYE_HEIGHT } from "@/data/player/playerConfig"; +import { + EBIKE_CAMERA_TRANSFORM, + EBIKE_DROP_PLAYER_TRANSFORM, +} from "@/data/ebike/ebikeConfig"; import type { Vector3Tuple } from "@/types/three/three"; +import "@/types/ebike/ebikeWindow"; const EBIKE_MODEL_PATH = "/models/ebike/model.gltf"; -export interface CameraTransform { - position: Vector3Tuple; - rotation: Vector3Tuple; -} - -export const EBIKE_CAMERA_TRANSFORM: CameraTransform = { - position: [-3.5, 6, 0], - rotation: [-10, -90, 0], -}; - -const EBIKE_DROP_PLAYER_TRANSFORM: CameraTransform = { - position: [0, 1.5, -3], - rotation: [0, 0, 0], -}; - interface EbikeProps { position: Vector3Tuple; } @@ -71,14 +61,24 @@ export function Ebike({ position }: EbikeProps): React.JSX.Element { new THREE.Vector3(...position), ); - const restingPosition = useRef([ + // Use ref for internal state, and state for debug visualization (to avoid ref access during render) + const restingPositionRef = useRef([ position[0], position[1] - PLAYER_EYE_HEIGHT, position[2], ]); - const restingRotation = useRef(0); + const restingRotationRef = useRef(0); const forkRef = useRef(null); + // State for debug visualization (synced from refs during useFrame) + const [showCameraPoints, setShowCameraPoints] = useState(true); + const [debugRestingPosition, setDebugRestingPosition] = + useState([ + position[0], + position[1] - PLAYER_EYE_HEIGHT, + position[2], + ]); + useEffect(() => { if (model) { const fork = model.getObjectByName("fourche"); @@ -89,28 +89,28 @@ export function Ebike({ position }: EbikeProps): React.JSX.Element { }, [model]); useEffect(() => { - (window as any).ebikeVisualGroup = groupRef; - (window as any).ebikeParkedPosition = restingPosition.current; - (window as any).ebikeParkedRotation = restingRotation.current; + window.ebikeVisualGroup = groupRef; + window.ebikeParkedPosition = restingPositionRef.current; + window.ebikeParkedRotation = restingRotationRef.current; return () => { - (window as any).ebikeVisualGroup = null; - (window as any).ebikeParkedPosition = null; - (window as any).ebikeParkedRotation = null; + window.ebikeVisualGroup = null; + window.ebikeParkedPosition = null; + window.ebikeParkedRotation = null; }; }, []); useFrame((_, delta) => { if (groupRef.current) { if (movementMode === "ebike") { - restingPosition.current = [ + restingPositionRef.current = [ groupRef.current.position.x, groupRef.current.position.y, groupRef.current.position.z, ]; - restingRotation.current = groupRef.current.rotation.y; + restingRotationRef.current = groupRef.current.rotation.y; // Smoothly rotate the front fork ("fourche") up to 15 degrees in its own Z axis - const steerFactor = (window as any).ebikeSteerFactor || 0; + const steerFactor = window.ebikeSteerFactor ?? 0; if (forkRef.current) { // 15 degrees is 0.26 radians const targetForkRotation = steerFactor * 0.26; @@ -127,51 +127,57 @@ export function Ebike({ position }: EbikeProps): React.JSX.Element { lastGpsUpdatePos.current.copy(currentPos); setGpsStartPos({ x: currentPos.x, y: currentPos.y, z: currentPos.z }); } + + // Sync debug visualization state (throttled to avoid excessive re-renders) + if (showCameraPoints) { + setDebugRestingPosition([...restingPositionRef.current]); + } } else { - groupRef.current.position.set(...restingPosition.current); - groupRef.current.rotation.set(0, restingRotation.current, 0); + groupRef.current.position.set(...restingPositionRef.current); + groupRef.current.rotation.set(0, restingRotationRef.current, 0); // Reset fork rotation when parked if (forkRef.current) { forkRef.current.rotation.z = 0; } } - (window as any).ebikeParkedPosition = restingPosition.current; - (window as any).ebikeParkedRotation = restingRotation.current; + window.ebikeParkedPosition = restingPositionRef.current; + window.ebikeParkedRotation = restingRotationRef.current; } }); + // Debug visualization positions computed from state (not refs) const camPointPos: Vector3Tuple = [ - restingPosition.current[0] + EBIKE_CAMERA_TRANSFORM.position[0], - restingPosition.current[1] + EBIKE_CAMERA_TRANSFORM.position[1], - restingPosition.current[2] + EBIKE_CAMERA_TRANSFORM.position[2], + debugRestingPosition[0] + EBIKE_CAMERA_TRANSFORM.position[0], + debugRestingPosition[1] + EBIKE_CAMERA_TRANSFORM.position[1], + debugRestingPosition[2] + EBIKE_CAMERA_TRANSFORM.position[2], ]; const dropPointPos: Vector3Tuple = [ - restingPosition.current[0] + EBIKE_DROP_PLAYER_TRANSFORM.position[0], - restingPosition.current[1] + EBIKE_DROP_PLAYER_TRANSFORM.position[1], - restingPosition.current[2] + EBIKE_DROP_PLAYER_TRANSFORM.position[2], + debugRestingPosition[0] + EBIKE_DROP_PLAYER_TRANSFORM.position[0], + debugRestingPosition[1] + EBIKE_DROP_PLAYER_TRANSFORM.position[1], + debugRestingPosition[2] + EBIKE_DROP_PLAYER_TRANSFORM.position[2], ]; - const handleInteract = (): void => { + const handleInteract = useCallback((): void => { if (movementMode === "walk") { const cameraOffset = new THREE.Vector3( ...EBIKE_CAMERA_TRANSFORM.position, ); cameraOffset.applyAxisAngle( new THREE.Vector3(0, 1, 0), - restingRotation.current, + restingRotationRef.current, ); const targetCamPos: Vector3Tuple = [ - restingPosition.current[0] + cameraOffset.x, - restingPosition.current[1] + cameraOffset.y, - restingPosition.current[2] + cameraOffset.z, + restingPositionRef.current[0] + cameraOffset.x, + restingPositionRef.current[1] + cameraOffset.y, + restingPositionRef.current[2] + cameraOffset.z, ]; const targetRotation: Vector3Tuple = [ EBIKE_CAMERA_TRANSFORM.rotation[0], EBIKE_CAMERA_TRANSFORM.rotation[1] + - THREE.MathUtils.radToDeg(restingRotation.current), + THREE.MathUtils.radToDeg(restingRotationRef.current), EBIKE_CAMERA_TRANSFORM.rotation[2], ]; @@ -207,27 +213,28 @@ export function Ebike({ position }: EbikeProps): React.JSX.Element { useGameStore.getState().setPlayerMovementMode("walk"); }); } - }; + }, [movementMode, camera, position]); + // Store handleInteract in a ref for use in debug folder callback const handleInteractRef = useRef(handleInteract); - handleInteractRef.current = handleInteract; + useEffect(() => { + handleInteractRef.current = handleInteract; + }, [handleInteract]); - const debugRef = useRef({ showCameraPoints: true }); - const debugActions = useRef({ - toggleRide: () => { - handleInteractRef.current(); - }, - }); + // Mutable object for lil-gui binding + const debugState = useRef({ showCameraPoints: true }); useDebugFolder("Ebike", (folder) => { folder - .add(debugRef.current, "showCameraPoints") + .add(debugState.current, "showCameraPoints") .name("Show Camera Points") .onChange((value: boolean) => { - debugRef.current.showCameraPoints = value; + setShowCameraPoints(value); }); - folder.add(debugActions.current, "toggleRide").name("Monter / Descendre"); + folder + .add({ toggleRide: () => handleInteractRef.current() }, "toggleRide") + .name("Monter / Descendre"); }); return ( @@ -268,7 +275,7 @@ export function Ebike({ position }: EbikeProps): React.JSX.Element { - {debugRef.current.showCameraPoints && ( + {showCameraPoints && ( <> diff --git a/src/components/ebike/EbikeGPSMap.tsx b/src/components/ebike/EbikeGPSMap.tsx index 3aa65cd..e51108c 100644 --- a/src/components/ebike/EbikeGPSMap.tsx +++ b/src/components/ebike/EbikeGPSMap.tsx @@ -1,10 +1,17 @@ -import React, { useRef, useEffect, useState, useMemo } from "react"; +import React, { + useRef, + useEffect, + useState, + useMemo, + useCallback, +} from "react"; import * as THREE from "three"; import { findClosestWaypoint, findWaypointPath, } from "@/pathfinding/WaypointAStar"; import type { Waypoint } from "@/pathfinding/types"; +import type { Vector3Tuple } from "@/types/three/three"; function computeImageSource( img: HTMLImageElement | HTMLCanvasElement, baseBounds: { minX: number; maxX: number; minZ: number; maxZ: number }, @@ -66,7 +73,7 @@ export interface EbikeGPSMapProps { /** * Optional world position for the GPS screen (defaults to origin) */ - position?: [number, number, number]; + position?: Vector3Tuple; /** * Resolution of the offscreen canvas used for the map texture. @@ -107,17 +114,20 @@ export const EbikeGPSMap: React.FC = ({ >(null); // Offscreen high-res canvas for crystal clear rendering - const [offscreenCanvas] = useState(() => { + // Use useMemo to create canvas once - this is a stable reference that won't change + const offscreenCanvas = useMemo(() => { const canvas = document.createElement("canvas"); canvas.width = canvasSize; canvas.height = canvasSize; return canvas; - }); + // eslint-disable-next-line react-hooks/exhaustive-deps -- Canvas should only be created once + }, []); // Resize the canvas whenever canvasSize changes + // Note: Modifying canvas dimensions is intentional and necessary for rendering useEffect(() => { - offscreenCanvas.width = canvasSize; - offscreenCanvas.height = canvasSize; + // Use Object.assign to resize canvas - this is a necessary mutation for canvas rendering + Object.assign(offscreenCanvas, { width: canvasSize, height: canvasSize }); if (textureRef.current) { textureRef.current.needsUpdate = true; } @@ -128,12 +138,16 @@ export const EbikeGPSMap: React.FC = ({ // Load waypoints (localStorage with /roadNetwork.json fallback) useEffect(() => { + let cancelled = false; const saved = localStorage.getItem("la-fabrik-waypoints"); if (saved) { try { const parsed = JSON.parse(saved); if (Array.isArray(parsed) && parsed.length > 0) { - setWaypoints(parsed); + // Use queueMicrotask to avoid synchronous setState in effect + queueMicrotask(() => { + if (!cancelled) setWaypoints(parsed); + }); return; } } catch (e) { @@ -151,20 +165,25 @@ export const EbikeGPSMap: React.FC = ({ throw new Error("Not found"); }) .then((data) => { - if (Array.isArray(data)) { + if (!cancelled && Array.isArray(data)) { setWaypoints(data); } }) .catch((err) => { console.log("[GPS Component] No default road network found.", err); }); + + return () => { + cancelled = true; + }; }, []); // Pre-load background map image (standard HTML5 Image loader) // Since the user's PNG is already transparent, we don't need fetch or pixel manipulation! useEffect(() => { if (!mapImageUrl) { - setMapImage(null); + // Use queueMicrotask to avoid synchronous setState in effect + queueMicrotask(() => setMapImage(null)); return; } @@ -245,16 +264,20 @@ export const EbikeGPSMap: React.FC = ({ }, [waypoints, startPosSnapped, destPosSnapped]); // Translation helper: 3D world to Canvas pixels - const worldToCanvas = (wx: number, wz: number, canvasSize: number) => { - const { minX, maxX, minZ, maxZ } = bounds; - const px = ((wx - minX) / (maxX - minX)) * canvasSize; - const py = ((wz - minZ) / (maxZ - minZ)) * canvasSize; - return { x: px, y: py }; - }; + const worldToCanvas = useCallback( + (wx: number, wz: number, size: number) => { + const { minX, maxX, minZ, maxZ } = bounds; + const px = ((wx - minX) / (maxX - minX)) * size; + const py = ((wz - minZ) / (maxZ - minZ)) * size; + return { x: px, y: py }; + }, + [bounds], + ); - // Draw loop - const draw = () => { + // Draw loop - returns true if texture needs update + const draw = useCallback(() => { const canvas = offscreenCanvas; + if (!canvas) return; const ctx = canvas.getContext("2d", { willReadFrequently: true, alpha: true, @@ -451,12 +474,16 @@ export const EbikeGPSMap: React.FC = ({ ctx.fillStyle = "#ffffff"; ctx.fill(); } - - // 5. Update WebGL Texture - if (textureRef.current) { - textureRef.current.needsUpdate = true; - } - }; + }, [ + offscreenCanvas, + mapImage, + baseBounds, + bounds, + activePath, + worldToCanvas, + destPosSnapped, + startPosSnapped, + ]); // 60 FPS animation ticker useEffect(() => { @@ -467,14 +494,19 @@ export const EbikeGPSMap: React.FC = ({ draw(); + // Update texture after draw + if (textureRef.current) { + textureRef.current.needsUpdate = true; + } + animId = requestAnimationFrame(tick); }; animId = requestAnimationFrame(tick); return () => cancelAnimationFrame(animId); - }, [waypoints, startPos, destPos, bounds, mapImage]); + }, [draw]); return ( - + @@ -139,7 +136,7 @@ function SkyModelContent({ useEffect(() => { return () => { - disposeSkyModelMaterials(model); + disposeModelMaterials(model); }; }, [model]); @@ -200,30 +197,17 @@ function createSkyMaterial( function createUnlitSkyMaterial( material: THREE.Material, ): THREE.MeshBasicMaterial { - const sourceMaterial = material as THREE.MeshStandardMaterial; + const hasStandardProperties = + "isMeshStandardMaterial" in material && material.isMeshStandardMaterial; + const sourceMaterial = hasStandardProperties + ? (material as THREE.MeshStandardMaterial) + : null; return new THREE.MeshBasicMaterial({ - color: sourceMaterial.color?.clone() ?? new THREE.Color("#ffffff"), - map: sourceMaterial.map ?? null, - opacity: sourceMaterial.opacity, + color: sourceMaterial?.color?.clone() ?? new THREE.Color("#ffffff"), + map: sourceMaterial?.map ?? null, + opacity: material.opacity, toneMapped: false, - transparent: sourceMaterial.transparent, + transparent: material.transparent, }); } - -function disposeSkyModelMaterials(model: THREE.Object3D): void { - model.traverse((object) => { - if (!(object instanceof THREE.Mesh)) return; - - if (Array.isArray(object.material)) { - for (const material of object.material) { - material.dispose(); - } - return; - } - - object.material.dispose(); - }); -} - -useGLTF.preload(SKYBOX_MODEL_PATH); diff --git a/src/data/ebike/ebikeConfig.ts b/src/data/ebike/ebikeConfig.ts new file mode 100644 index 0000000..686b29f --- /dev/null +++ b/src/data/ebike/ebikeConfig.ts @@ -0,0 +1,16 @@ +import type { Vector3Tuple } from "@/types/three/three"; + +export interface CameraTransform { + position: Vector3Tuple; + rotation: Vector3Tuple; +} + +export const EBIKE_CAMERA_TRANSFORM: CameraTransform = { + position: [-3.5, 6, 0], + rotation: [-10, -90, 0], +}; + +export const EBIKE_DROP_PLAYER_TRANSFORM: CameraTransform = { + position: [0, 1.5, -3], + rotation: [0, 0, 0], +}; diff --git a/src/data/galleryModels.ts b/src/data/galleryModels.ts index 446ecb5..925160f 100644 --- a/src/data/galleryModels.ts +++ b/src/data/galleryModels.ts @@ -4,10 +4,6 @@ export interface GalleryModel { path: string; } -/** - * List of 3D models available in the gallery. - * Only includes models that exist in `/public/models/`. - */ export const galleryModels: GalleryModel[] = [ { id: "arbre", name: "Arbre", path: "/models/arbre/model.gltf" }, { id: "blocking", name: "Blocking", path: "/models/blocking/terrain.gltf" }, diff --git a/src/index.css b/src/index.css index 36e67f9..bed3353 100644 --- a/src/index.css +++ b/src/index.css @@ -4,6 +4,14 @@ :root { color-scheme: dark; font-family: "Helvetica Neue", Helvetica, Inter, Arial, sans-serif; + + /* Gallery & docs design tokens */ + --font-primary: "Helvetica Neue", Helvetica, Inter, Arial, sans-serif; + --font-body: Inter, "Helvetica Neue", Helvetica, Arial, sans-serif; + --color-bg: #050505; + --color-text: #f4efe7; + --color-text-muted: #a9a196; + --color-border: #d8d0c4; } html, @@ -36,9 +44,9 @@ canvas { width: 100vw; height: 100vh; overflow: hidden; - background: #050505; - color: #f4efe7; - font-family: "Helvetica Neue", Helvetica, Inter, Arial, sans-serif; + background: var(--color-bg); + color: var(--color-text); + font-family: var(--font-primary); } .gallery-title { @@ -47,7 +55,7 @@ canvas { right: clamp(18px, 3vw, 38px); z-index: 2; margin: 0; - color: #f4efe7; + color: var(--color-text); font-size: clamp(18px, 2vw, 26px); font-weight: 700; letter-spacing: 0.32em; @@ -60,16 +68,6 @@ canvas { height: 100%; } -.gallery-viewer-error { - display: grid; - place-items: center; - height: 100%; - min-height: 360px; - padding: 24px; - color: #fecaca; - text-align: center; -} - .gallery-bottom-bar { position: absolute; right: 50%; @@ -79,9 +77,9 @@ canvas { grid-template-columns: 54px minmax(190px, 340px) 54px; align-items: center; overflow: hidden; - border: 2px solid #d8d0c4; + border: 2px solid var(--color-border); border-radius: 0; - background: #050505; + background: var(--color-bg); box-shadow: none; transform: translateX(50%); } @@ -93,7 +91,7 @@ canvas { height: 54px; border: 0; background: transparent; - color: #f4efe7; + color: var(--color-text); cursor: pointer; transition: background 160ms ease, @@ -102,8 +100,8 @@ canvas { .gallery-bottom-bar button:hover, .gallery-bottom-bar button:focus-visible { - background: #f4efe7; - color: #050505; + background: var(--color-text); + color: var(--color-bg); outline: none; } @@ -112,15 +110,15 @@ canvas { place-items: center; min-height: 54px; padding: 0 20px; - border-right: 2px solid #d8d0c4; - border-left: 2px solid #d8d0c4; + border-right: 2px solid var(--color-border); + border-left: 2px solid var(--color-border); text-align: center; } .gallery-model-info span { max-width: 100%; overflow: hidden; - color: #f4efe7; + color: var(--color-text); font-size: 15px; font-weight: 700; letter-spacing: 0.03em; @@ -131,8 +129,8 @@ canvas { .gallery-model-info small { margin-top: 2px; - color: #a9a196; - font-family: Inter, "Helvetica Neue", Helvetica, Arial, sans-serif; + color: var(--color-text-muted); + font-family: var(--font-body); font-size: 11px; font-weight: 600; } @@ -147,25 +145,25 @@ canvas { gap: 8px; max-width: min(320px, calc(100vw - 36px)); padding: 10px 13px; - border: 2px solid #d8d0c4; + border: 2px solid var(--color-border); border-radius: 0; - background: #050505; - color: #d8d0c4; - font-family: Inter, "Helvetica Neue", Helvetica, Arial, sans-serif; + background: var(--color-bg); + color: var(--color-border); + font-family: var(--font-body); font-size: 12px; font-weight: 700; } .gallery-texture-status--ok { - color: #d8d0c4; + color: var(--color-border); } .gallery-texture-status--warning { - color: #f4efe7; + color: var(--color-text); } .gallery-texture-status--loading { - color: #a9a196; + color: var(--color-text-muted); } .gallery-light-panel { @@ -188,28 +186,28 @@ canvas { place-items: center; width: 42px; height: 42px; - border: 2px solid #d8d0c4; + border: 2px solid var(--color-border); border-right: 0; border-radius: 0; - background: #050505; - color: #f4efe7; + background: var(--color-bg); + color: var(--color-text); cursor: pointer; } .gallery-light-panel-toggle:hover, .gallery-light-panel-toggle:focus-visible { - background: #f4efe7; - color: #050505; + background: var(--color-text); + color: var(--color-bg); outline: none; } .gallery-light-panel-content { width: 236px; padding: 16px; - border: 2px solid #d8d0c4; + border: 2px solid var(--color-border); border-right: 0; border-radius: 0; - background: #050505; + background: var(--color-bg); box-shadow: none; } @@ -221,7 +219,7 @@ canvas { } .gallery-light-panel-content header span { - color: #f4efe7; + color: var(--color-text); font-size: 12px; font-weight: 800; letter-spacing: 0.18em; @@ -230,7 +228,7 @@ canvas { .gallery-light-panel-content header button { border: 0; background: transparent; - color: #a9a196; + color: var(--color-text-muted); cursor: pointer; font-size: 12px; font-weight: 700; @@ -238,7 +236,7 @@ canvas { .gallery-light-panel-content header button:hover, .gallery-light-panel-content header button:focus-visible { - color: #f4efe7; + color: var(--color-text); outline: none; } @@ -252,20 +250,20 @@ canvas { display: flex; align-items: center; justify-content: space-between; - color: #d8d0c4; - font-family: Inter, "Helvetica Neue", Helvetica, Arial, sans-serif; + color: var(--color-border); + font-family: var(--font-body); font-size: 12px; font-weight: 700; } .gallery-light-control strong { - color: #f4efe7; + color: var(--color-text); font-variant-numeric: tabular-nums; } .gallery-light-control input { width: 100%; - accent-color: #f4efe7; + accent-color: var(--color-text); } @media (max-width: 720px) { @@ -299,32 +297,6 @@ canvas { .gallery-light-panel { top: 78px; } - - .gallery-keyboard-hints { - display: none; - } -} - -/* Gallery - Header */ -.gallery-header { - position: absolute; - top: clamp(18px, 3vw, 34px); - right: clamp(18px, 3vw, 38px); - z-index: 2; - text-align: right; -} - -.gallery-header .gallery-title { - position: static; - transform: none; -} - -.gallery-subtitle { - margin: 6px 0 0; - color: #a9a196; - font-size: 12px; - font-weight: 500; - letter-spacing: 0.02em; } /* Gallery - Loading */ @@ -333,7 +305,7 @@ canvas { flex-direction: column; align-items: center; gap: 12px; - color: #f4efe7; + color: var(--color-text); } .gallery-loading-spinner { @@ -341,7 +313,7 @@ canvas { } .gallery-loading-text { - font-family: Inter, "Helvetica Neue", Helvetica, Arial, sans-serif; + font-family: var(--font-body); font-size: 13px; font-weight: 600; letter-spacing: 0.02em; @@ -357,9 +329,22 @@ canvas { } /* Gallery - Empty state */ -.gallery-page--empty { - display: grid; - place-items: center; +.gallery-empty-state { + display: flex; + flex-direction: column; + align-items: center; + gap: 16px; + padding: 32px; + color: var(--color-text-muted); + text-align: center; +} + +.gallery-empty-state h1 { + margin: 0; + color: var(--color-text); + font-size: 24px; + font-weight: 700; + letter-spacing: -0.02em; } .gallery-empty-state { @@ -414,7 +399,7 @@ canvas { height: 54px; border: 0; background: transparent; - color: #f4efe7; + color: var(--color-text); cursor: pointer; transition: background 160ms ease, @@ -424,8 +409,8 @@ canvas { .gallery-nav-button:hover, .gallery-nav-button:focus-visible { - background: #f4efe7; - color: #050505; + background: var(--color-text); + color: var(--color-bg); outline: none; } @@ -437,7 +422,7 @@ canvas { .gallery-model-name { max-width: 100%; overflow: hidden; - color: #f4efe7; + color: var(--color-text); font-size: 15px; font-weight: 700; letter-spacing: 0.03em; @@ -448,8 +433,8 @@ canvas { .gallery-model-counter { margin-top: 2px; - color: #a9a196; - font-family: Inter, "Helvetica Neue", Helvetica, Arial, sans-serif; + color: var(--color-text-muted); + font-family: var(--font-body); font-size: 11px; font-weight: 600; } @@ -459,53 +444,7 @@ canvas { animation: gallery-spin 1s linear infinite; } -/* Gallery - Keyboard hints */ -.gallery-keyboard-hints { - position: absolute; - top: clamp(18px, 3vw, 34px); - left: clamp(18px, 3vw, 38px); - z-index: 2; - display: flex; - align-items: center; - gap: 8px; - color: #a9a196; - font-family: Inter, "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 11px; - font-weight: 600; -} - -.gallery-keyboard-hints kbd { - display: inline-flex; - align-items: center; - justify-content: center; - min-width: 22px; - height: 22px; - padding: 0 6px; - border: 1px solid #a9a196; - border-radius: 4px; - background: transparent; - color: #f4efe7; - font-family: inherit; - font-size: 10px; - font-weight: 700; -} - -.gallery-keyboard-hints-separator { - margin: 0 4px; - opacity: 0.5; -} - @media (max-width: 720px) { - .gallery-header { - right: 50%; - transform: translateX(50%); - text-align: center; - } - - .gallery-subtitle { - display: none; - } - .gallery-nav-button { width: 48px; height: 50px; @@ -519,15 +458,15 @@ canvas { width: 100vw; height: 100vh; overflow: hidden; - background: #050505; - color: #f4efe7; - font-family: "Helvetica Neue", Helvetica, Inter, Arial, sans-serif; + background: var(--color-bg); + color: var(--color-text); + font-family: var(--font-primary); } /* Docs sidebar navigation */ .docs-sidebar { - border-right: 2px solid #d8d0c4; - background: #050505; + border-right: 2px solid var(--color-border); + background: var(--color-bg); overflow-y: auto; } @@ -538,13 +477,13 @@ canvas { justify-content: space-between; min-height: 78px; padding: 0 18px; - border-bottom: 2px solid #d8d0c4; + border-bottom: 2px solid var(--color-border); } .docs-sidebar__header h1, .docs-content__header span { margin: 0; - color: #f4efe7; + color: var(--color-text); font-size: 21px; font-weight: 700; letter-spacing: -0.04em; @@ -556,13 +495,13 @@ canvas { .docs-nav-group { display: grid; - border-bottom: 2px solid #d8d0c4; + border-bottom: 2px solid var(--color-border); } .docs-nav-group h2 { margin: 0; padding: 13px 16px 8px; - color: #a9a196; + color: var(--color-text-muted); font-size: 10px; font-weight: 800; letter-spacing: 0.14em; @@ -570,7 +509,7 @@ canvas { } .docs-sidebar a { - color: #f4efe7; + color: var(--color-text); text-decoration: none; } @@ -581,7 +520,7 @@ canvas { min-height: 46px; padding: 0 16px; border-top: 1px solid rgba(216, 208, 196, 0.35); - color: #f4efe7; + color: var(--color-text); transition: background 160ms ease, color 160ms ease; @@ -612,7 +551,7 @@ canvas { .docs-nav-item small, .docs-nav-item__meta { - color: #a9a196; + color: var(--color-text-muted); font-size: 11px; font-weight: 600; letter-spacing: -0.01em; @@ -621,8 +560,8 @@ canvas { .docs-sidebar a:hover, .docs-sidebar a:focus-visible, .docs-nav-item--active { - background: #f4efe7; - color: #050505; + background: var(--color-text); + color: var(--color-bg); outline: none; } @@ -632,21 +571,21 @@ canvas { .docs-sidebar a:focus-visible .docs-nav-item__meta, .docs-nav-item--active small, .docs-nav-item--active .docs-nav-item__meta { - color: #050505; + color: var(--color-bg); } /* Docs content */ .docs-content { overflow-y: auto; scroll-behavior: smooth; - background: #050505; + background: var(--color-bg); } .docs-content__header { position: sticky; top: 0; z-index: 2; - background: #050505; + background: var(--color-bg); } .docs-language-toggle { @@ -654,10 +593,10 @@ canvas { align-items: center; gap: 0; padding: 2px; - border: 2px solid #d8d0c4; + border: 2px solid var(--color-border); border-radius: 999px; background: transparent; - color: #f4efe7; + color: var(--color-text); cursor: pointer; } @@ -667,15 +606,15 @@ canvas { min-width: 36px; min-height: 26px; border-radius: 999px; - color: #a9a196; + color: var(--color-text-muted); font-size: 11px; font-weight: 700; letter-spacing: 0.04em; } .docs-language-toggle .is-active { - background: #f4efe7; - color: #050505; + background: var(--color-text); + color: var(--color-bg); } .docs-language-toggle:hover, @@ -694,7 +633,7 @@ canvas { display: flex; justify-content: space-between; margin-bottom: 22px; - color: #a9a196; + color: var(--color-text-muted); font-size: 11px; font-weight: 700; letter-spacing: 0.12em; @@ -704,7 +643,7 @@ canvas { .docs-section h1, .docs-section h2, .docs-section h3 { - color: #f4efe7; + color: var(--color-text); letter-spacing: -0.06em; line-height: 1.05; } @@ -720,7 +659,7 @@ canvas { margin-top: 44px; margin-bottom: 12px; padding-bottom: 10px; - border-bottom: 2px solid #d8d0c4; + border-bottom: 2px solid var(--color-border); font-size: clamp(28px, 4vw, 44px); font-weight: 700; } @@ -735,8 +674,8 @@ canvas { .docs-section p, .docs-section li { - color: #d8d0c4; - font-family: Inter, "Helvetica Neue", Helvetica, Arial, sans-serif; + color: var(--color-border); + font-family: var(--font-body); font-size: 15px; line-height: 1.75; } @@ -747,7 +686,7 @@ canvas { } .docs-section a { - color: #f4efe7; + color: var(--color-text); text-underline-offset: 4px; } @@ -756,7 +695,7 @@ canvas { border-radius: 2px; padding: 2px 5px; background: rgba(216, 208, 196, 0.22); - color: #f4efe7; + color: var(--color-text); font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace; font-size: 0.92em; } @@ -774,7 +713,7 @@ canvas { padding: 0; border: 0; background: transparent; - color: #f4efe7; + color: var(--color-text); line-height: 1.45; white-space: pre; } @@ -790,21 +729,21 @@ canvas { .docs-section th, .docs-section td { padding: 10px 12px; - border: 2px solid #d8d0c4; + border: 2px solid var(--color-border); text-align: left; } .docs-section th { background: #111; - color: #f4efe7; + color: var(--color-text); font-weight: 700; } .docs-section blockquote { margin-left: 0; padding-left: 18px; - border-left: 2px solid #d8d0c4; - color: #a9a196; + border-left: 2px solid var(--color-border); + color: var(--color-text-muted); } /* Docs responsive layout */ @@ -816,7 +755,7 @@ canvas { .docs-sidebar { border-right: 0; - border-bottom: 2px solid #d8d0c4; + border-bottom: 2px solid var(--color-border); } .docs-content { @@ -1655,10 +1594,6 @@ canvas { user-select: none; } -.editor-panel-group-summary::-webkit-details-marker { - display: none; -} - .editor-panel-group-summary:hover { color: #f2f2f2; } diff --git a/src/pages/backgroundmap/page.tsx b/src/pages/backgroundmap/page.tsx index 958bd30..75fcd49 100644 --- a/src/pages/backgroundmap/page.tsx +++ b/src/pages/backgroundmap/page.tsx @@ -1,7 +1,34 @@ -import React, { useState, useEffect, useRef, useMemo } from "react"; +import React, { useState, useRef, useMemo, useCallback } from "react"; import { Canvas, useFrame, useThree } from "@react-three/fiber"; import { MapControls, OrthographicCamera, useGLTF } from "@react-three/drei"; import * as THREE from "three"; +import type { MapControls as MapControlsImpl } from "three-stdlib"; + +// ---------------------------------------------------------------------------- +// Types +// ---------------------------------------------------------------------------- +interface WaypointData { + id: number; + x: number; + y: number; + z: number; + connections: number[]; +} + +interface Bounds { + minX: number; + maxX: number; + minZ: number; + maxZ: number; +} + +// Extend window for global functions +declare global { + interface Window { + applyAutoBounds?: () => void; + downloadMapScreenshot?: () => void; + } +} // ---------------------------------------------------------------------------- // 1. Terrain Scene @@ -24,7 +51,7 @@ function WaypointOverlay({ waypoints, visible, }: { - waypoints: any[]; + waypoints: WaypointData[]; visible: boolean; }) { if (!visible) return null; @@ -47,54 +74,71 @@ function CameraManager({ autoBounds, boundsTextRef, }: { - autoBounds: any; + autoBounds: Bounds | null; boundsTextRef: React.RefObject; }) { const { camera, gl, scene } = useThree(); - const controlsRef = useRef(null); + const controlsRef = useRef(null); + // Use refs to store mutable camera properties that we need to modify + const cameraRef = useRef(camera); - // Apply Auto-Bounds function - useEffect(() => { - const applyAutoBounds = () => { - if (camera instanceof THREE.OrthographicCamera && autoBounds) { - const width = autoBounds.maxX - autoBounds.minX; - const height = autoBounds.maxZ - autoBounds.minZ; - const centerX = (autoBounds.minX + autoBounds.maxX) / 2; - const centerZ = (autoBounds.minZ + autoBounds.maxZ) / 2; + // Update cameraRef in an effect to avoid refs during render error + React.useEffect(() => { + cameraRef.current = camera; + }, [camera]); - camera.position.set(centerX, 200, centerZ); - camera.left = -width / 2; - camera.right = width / 2; - camera.top = height / 2; - camera.bottom = -height / 2; - camera.zoom = 1; - camera.updateProjectionMatrix(); + // Apply Auto-Bounds function using useCallback to create a stable reference + const applyAutoBounds = useCallback(() => { + const cam = cameraRef.current; + if (cam instanceof THREE.OrthographicCamera && autoBounds) { + const width = autoBounds.maxX - autoBounds.minX; + const height = autoBounds.maxZ - autoBounds.minZ; + const centerX = (autoBounds.minX + autoBounds.maxX) / 2; + const centerZ = (autoBounds.minZ + autoBounds.maxZ) / 2; - if (controlsRef.current) { - controlsRef.current.target.set(centerX, 0, centerZ); - controlsRef.current.update(); - } + cam.position.set(centerX, 200, centerZ); + cam.left = -width / 2; + cam.right = width / 2; + cam.top = height / 2; + cam.bottom = -height / 2; + cam.zoom = 1; + cam.updateProjectionMatrix(); + + if (controlsRef.current) { + controlsRef.current.target.set(centerX, 0, centerZ); + controlsRef.current.update(); } - }; + } + }, [autoBounds]); - (window as any).applyAutoBounds = applyAutoBounds; - // Initial apply - applyAutoBounds(); + // Initial apply on autoBounds change (using useFrame to run once after mount) + const hasAppliedRef = useRef(false); + useFrame(() => { + if (!hasAppliedRef.current && autoBounds) { + applyAutoBounds(); + hasAppliedRef.current = true; + } + }); + // Reset hasApplied when autoBounds changes + React.useEffect(() => { + hasAppliedRef.current = false; + window.applyAutoBounds = applyAutoBounds; return () => { - delete (window as any).applyAutoBounds; + delete window.applyAutoBounds; }; - }, [camera, autoBounds]); + }, [applyAutoBounds]); // Track dynamic bounds without triggering React re-renders! useFrame(() => { - if (camera instanceof THREE.OrthographicCamera && boundsTextRef.current) { - const width = (camera.right - camera.left) / camera.zoom; - const height = (camera.top - camera.bottom) / camera.zoom; - const minX = Math.round(camera.position.x - width / 2); - const maxX = Math.round(camera.position.x + width / 2); - const minZ = Math.round(camera.position.z - height / 2); - const maxZ = Math.round(camera.position.z + height / 2); + const cam = cameraRef.current; + if (cam instanceof THREE.OrthographicCamera && boundsTextRef.current) { + const width = (cam.right - cam.left) / cam.zoom; + const height = (cam.top - cam.bottom) / cam.zoom; + const minX = Math.round(cam.position.x - width / 2); + const maxX = Math.round(cam.position.x + width / 2); + const minZ = Math.round(cam.position.z - height / 2); + const maxZ = Math.round(cam.position.z + height / 2); // Direct DOM mutation for 60fps performance (prevents WebGL Context Lost!) boundsTextRef.current.innerText = JSON.stringify( @@ -106,10 +150,10 @@ function CameraManager({ }); // Attach screenshot capture logic - useEffect(() => { - (window as any).downloadMapScreenshot = () => { + React.useEffect(() => { + window.downloadMapScreenshot = () => { // Force an immediate render frame to ensure no UI overlays are missing - gl.render(scene, camera); + gl.render(scene, cameraRef.current); const dataUrl = gl.domElement.toDataURL("image/png"); const a = document.createElement("a"); a.href = dataUrl; @@ -117,9 +161,9 @@ function CameraManager({ a.click(); }; return () => { - delete (window as any).downloadMapScreenshot; + delete window.downloadMapScreenshot; }; - }, [gl, camera, scene]); + }, [gl, scene]); return ( @@ -130,25 +174,35 @@ function CameraManager({ // 4. Main Page Route Component // ---------------------------------------------------------------------------- export function BackgroundMapPage() { - const [waypoints, setWaypoints] = useState([]); - const [showWaypoints, setShowWaypoints] = useState(true); - const boundsTextRef = useRef(null); - - // Load road network waypoints to compute perfect GPS bounds - useEffect(() => { + // Use lazy initialization to avoid setState in useEffect + const [waypoints, setWaypoints] = useState(() => { const saved = localStorage.getItem("la-fabrik-waypoints"); if (saved) { - setWaypoints(JSON.parse(saved)); - } else { + try { + return JSON.parse(saved) as WaypointData[]; + } catch { + return []; + } + } + return []; + }); + const [showWaypoints, setShowWaypoints] = useState(true); + const boundsTextRef = useRef(null); + const hasFetchedRef = useRef(false); + + // Fetch from network as fallback if localStorage was empty + React.useEffect(() => { + if (waypoints.length === 0 && !hasFetchedRef.current) { + hasFetchedRef.current = true; fetch("/roadNetwork.json") .then((res) => res.json()) - .then((data) => setWaypoints(data)) + .then((data: WaypointData[]) => setWaypoints(data)) .catch(() => {}); } - }, []); + }, [waypoints.length]); // Include dependency to satisfy linter // Compute exact bounds that the EbikeGPSMap will use by default - const autoBounds = useMemo(() => { + const autoBounds = useMemo((): Bounds | null => { if (waypoints.length === 0) return null; const xs = waypoints.map((w) => w.x); const zs = waypoints.map((w) => w.z); @@ -271,13 +325,12 @@ export function BackgroundMapPage() { transition: "all 0.2s", }} > - {showWaypoints ? "👁️ Masquer Waypoints" : "👁️‍🗨️ Afficher Waypoints"} + {showWaypoints ? "Masquer Waypoints" : "Afficher Waypoints"}
{ + hiddenExportPlaneCount?: number; } interface GalleryViewerErrorBoundaryProps { @@ -104,16 +107,6 @@ interface GalleryViewerErrorBoundaryState { hasError: boolean; } -const TEXTURE_SLOTS = [ - "map", - "normalMap", - "roughnessMap", - "metalnessMap", - "aoMap", - "emissiveMap", - "alphaMap", -] as const; - const LOADING_TEXTURE_DIAGNOSTIC: TextureDiagnostic = { modelId: null, status: "loading", @@ -221,7 +214,7 @@ function GalleryModelPreview({ useEffect(() => { return () => { - disposeGalleryModelMaterials(modelScene); + disposeModelMaterials(modelScene); }; }, [modelScene]); @@ -253,7 +246,7 @@ function GalleryModelPreview({ } function createGalleryModelScene(scene: THREE.Object3D): THREE.Object3D { - const modelScene = scene.clone(true) as GalleryModelScene; + const modelScene = scene.clone(true); const exportPlaneMeshes: THREE.Mesh[] = []; modelScene.traverse((object) => { @@ -273,7 +266,8 @@ function createGalleryModelScene(scene: THREE.Object3D): THREE.Object3D { mesh.parent?.remove(mesh); } - modelScene.userData.hiddenExportPlaneCount = exportPlaneMeshes.length; + const userData = modelScene.userData as GalleryModelSceneUserData; + userData.hiddenExportPlaneCount = exportPlaneMeshes.length; return modelScene; } @@ -298,33 +292,21 @@ function isExportPlaneMesh(mesh: THREE.Mesh): boolean { function createGalleryMaterial(material: THREE.Material): THREE.Material { const galleryMaterial = material.clone(); - const materialWithNormalMap = galleryMaterial as THREE.Material & { - normalMap?: THREE.Texture | null; - }; galleryMaterial.side = THREE.DoubleSide; - if (materialWithNormalMap.normalMap) { - materialWithNormalMap.normalMap = null; + if (hasNormalMap(galleryMaterial)) { + galleryMaterial.normalMap = null; galleryMaterial.needsUpdate = true; } return galleryMaterial; } -function disposeGalleryModelMaterials(modelScene: THREE.Object3D): void { - modelScene.traverse((object) => { - if (!(object instanceof THREE.Mesh)) return; - - if (Array.isArray(object.material)) { - for (const material of object.material) { - material.dispose(); - } - return; - } - - object.material.dispose(); - }); +function hasNormalMap( + material: THREE.Material, +): material is THREE.Material & { normalMap: THREE.Texture | null } { + return "normalMap" in material && material.normalMap !== undefined; } function GalleryScene({ @@ -491,8 +473,8 @@ function getTextureDiagnostic( ): TextureDiagnostic { let textureCount = 0; let missingTextureImageCount = 0; - const hiddenExportPlaneCount = - (modelScene as GalleryModelScene).userData.hiddenExportPlaneCount ?? 0; + const userData = modelScene.userData as GalleryModelSceneUserData; + const hiddenExportPlaneCount = userData.hiddenExportPlaneCount ?? 0; modelScene.traverse((object) => { if (!(object instanceof THREE.Mesh)) return; @@ -502,10 +484,10 @@ function getTextureDiagnostic( : [object.material]; for (const material of materials) { - const materialRecord = material as unknown as Record; + const texturedMaterial = material as MaterialWithTextureSlots; - for (const textureSlot of TEXTURE_SLOTS) { - const texture = materialRecord[textureSlot]; + for (const textureSlot of MATERIAL_TEXTURE_KEYS) { + const texture = texturedMaterial[textureSlot]; if (!(texture instanceof THREE.Texture)) continue; textureCount += 1; @@ -559,14 +541,13 @@ export function GalleryPage(): React.JSX.Element { ); const modelCount = galleryModels.length; - const activeModel = galleryModels[activeModelIndex] ?? galleryModels[0]; + const activeModel = galleryModels[activeModelIndex]; const activeTextureDiagnostic = activeModel && textureDiagnostic.modelId === activeModel.id ? textureDiagnostic : LOADING_TEXTURE_DIAGNOSTIC; - // Preload adjacent models for smoother navigation useEffect(() => { if (modelCount <= 1) return; @@ -586,7 +567,6 @@ export function GalleryPage(): React.JSX.Element { } }, [activeModelIndex, modelCount]); - // Memoized callbacks to prevent unnecessary re-renders const goToPreviousModel = useCallback((): void => { setActiveModelIndex((currentIndex) => currentIndex === 0 ? modelCount - 1 : currentIndex - 1, diff --git a/src/pages/waypoint/page.tsx b/src/pages/waypoint/page.tsx index a5ee7b1..e8dd655 100644 --- a/src/pages/waypoint/page.tsx +++ b/src/pages/waypoint/page.tsx @@ -1,5 +1,6 @@ import React, { useState, useEffect, useRef } from "react"; import { Canvas, useFrame, useThree } from "@react-three/fiber"; +import type { ThreeEvent } from "@react-three/fiber"; import { useGLTF, OrthographicCamera, @@ -159,7 +160,7 @@ const EditorScene: React.FC = ({ {/* 1. Terrain Mesh (Raycasted for adding/dragging) */} { + onClick={(e: ThreeEvent) => { e.stopPropagation(); // Only click-to-create a new node if they are not actively dragging a link if (dragStartNodeId === null && e.point) { @@ -256,7 +257,7 @@ const WaypointMarkers: React.FC = ({ onPointerOut={() => { setHoveredNodeId(null); }} - onPointerDown={(e: any) => { + onPointerDown={(e: ThreeEvent) => { e.stopPropagation(); if (e.button === 0) { // Left click start drag link connection @@ -388,7 +389,33 @@ const ConnectionLines: React.FC = ({ // ========================================== export const WaypointEditorPage: React.FC = () => { - const [waypoints, setWaypoints] = useState([]); + // Use lazy initialization to load from localStorage on mount + const [waypoints, setWaypoints] = useState(() => { + console.log( + "[Initialisation] Chargement des waypoints depuis localStorage...", + ); + const saved = localStorage.getItem("la-fabrik-waypoints"); + if (saved) { + try { + const list = JSON.parse(saved); + console.log( + `[Initialisation] ${list.length} waypoints chargés avec succès !`, + ); + return list; + } catch (e) { + console.error( + "[Initialisation] Erreur de parsing du stockage local", + e, + ); + return []; + } + } else { + console.log( + "[Initialisation] Aucun point enregistré en localStorage. Démarrage à vide.", + ); + return []; + } + }); const [selectedId, setSelectedId] = useState(null); const [hoveredNodeId, setHoveredNodeId] = useState(null); @@ -425,38 +452,35 @@ export const WaypointEditorPage: React.FC = () => { number | null >(null); - // Load from localstorage on mount - useEffect(() => { - console.log( - "[Initialisation] Chargement des waypoints depuis localStorage...", - ); - const saved = localStorage.getItem("la-fabrik-waypoints"); - if (saved) { - try { - const list = JSON.parse(saved); - console.log( - `[Initialisation] ${list.length} waypoints chargés avec succès !`, - ); - setWaypoints(list); - } catch (e) { - console.error( - "[Initialisation] Erreur de parsing du stockage local", - e, - ); - } - } else { - console.log( - "[Initialisation] Aucun point enregistré en localStorage. Démarrage à vide.", - ); - } - }, []); - // Save to localstorage when waypoints change const saveWaypoints = (list: Waypoint[]) => { setWaypoints(list); localStorage.setItem("la-fabrik-waypoints", JSON.stringify(list)); }; + // Delete current selected node + const handleDeleteNode = (id: number) => { + console.log( + `[Suppression] Action de suppression définitive du Point : ID = ${id}`, + ); + setWaypoints((currentWaypoints) => { + const updatedList = currentWaypoints + .filter((wp) => wp.id !== id) + .map((wp) => ({ + ...wp, + connections: wp.connections.filter((cId) => cId !== id), + })); + console.log( + `[Suppression] Point ${id} supprimé. ${updatedList.length} points restants.`, + ); + localStorage.setItem("la-fabrik-waypoints", JSON.stringify(updatedList)); + return updatedList; + }); + setSelectedId((currentSelected) => + currentSelected === id ? null : currentSelected, + ); + }; + // Delete a specific connection (break the link) const deleteSelectedConnection = (idA: number, idB: number) => { console.log( @@ -673,29 +697,6 @@ export const WaypointEditorPage: React.FC = () => { } }; - // Delete current selected node - const handleDeleteNode = (id: number) => { - console.log( - `[Suppression] Action de suppression définitive du Point : ID = ${id}`, - ); - setWaypoints((currentWaypoints) => { - const updatedList = currentWaypoints - .filter((wp) => wp.id !== id) - .map((wp) => ({ - ...wp, - connections: wp.connections.filter((cId) => cId !== id), - })); - console.log( - `[Suppression] Point ${id} supprimé. ${updatedList.length} points restants.`, - ); - localStorage.setItem("la-fabrik-waypoints", JSON.stringify(updatedList)); - return updatedList; - }); - setSelectedId((currentSelected) => - currentSelected === id ? null : currentSelected, - ); - }; - // Connect Mode Trigger const startConnecting = (id: number) => { console.log( diff --git a/src/pathfinding/useGPS.ts b/src/pathfinding/useGPS.ts index fbb7780..b005900 100644 --- a/src/pathfinding/useGPS.ts +++ b/src/pathfinding/useGPS.ts @@ -38,8 +38,6 @@ export function useGPS({ // Initialize the pathfinding grid useEffect(() => { let active = true; - setLoading(true); - setError(null); async function initGrid() { try { @@ -63,9 +61,13 @@ export function useGPS({ colorMapImgRef.current = colorMapImg; setLoading(false); } - } catch (err: any) { + } catch (err: unknown) { if (active) { - setError(err.message || "Failed to initialize GPS system"); + const message = + err instanceof Error + ? err.message + : "Failed to initialize GPS system"; + setError(message); setLoading(false); } } diff --git a/src/pathfinding/useWaypointGPS.ts b/src/pathfinding/useWaypointGPS.ts index 201e012..e93643e 100644 --- a/src/pathfinding/useWaypointGPS.ts +++ b/src/pathfinding/useWaypointGPS.ts @@ -23,8 +23,6 @@ export function useWaypointGPS({ // Load waypoint list and background color map image useEffect(() => { let active = true; - setLoading(true); - setError(null); async function initGPS() { try { @@ -49,9 +47,13 @@ export function useWaypointGPS({ colorMapImgRef.current = colorMapImg; setLoading(false); } - } catch (err: any) { + } catch (err: unknown) { if (active) { - setError(err.message || "Failed to initialize Waypoint GPS"); + const message = + err instanceof Error + ? err.message + : "Failed to initialize Waypoint GPS"; + setError(message); setLoading(false); } } diff --git a/src/types/ebike/ebikeWindow.ts b/src/types/ebike/ebikeWindow.ts new file mode 100644 index 0000000..90cd966 --- /dev/null +++ b/src/types/ebike/ebikeWindow.ts @@ -0,0 +1,11 @@ +import type * as THREE from "three"; +import type { Vector3Tuple } from "@/types/three/three"; + +declare global { + interface Window { + ebikeVisualGroup: React.RefObject | null; + ebikeParkedPosition: Vector3Tuple | null; + ebikeParkedRotation: number | null; + ebikeSteerFactor: number | undefined; + } +} diff --git a/src/types/three/three.ts b/src/types/three/three.ts index 70cd0f0..36c70ff 100644 --- a/src/types/three/three.ts +++ b/src/types/three/three.ts @@ -1,4 +1,5 @@ import type { Octree } from "three-stdlib"; +import type * as THREE from "three"; export type Vector3Tuple = [number, number, number]; @@ -13,3 +14,21 @@ export interface ModelTransformProps { export type ColliderShape = "cuboid" | "ball" | "hull"; export type OctreeReadyHandler = (octree: Octree) => void; + +/** + * Keys for texture slots that may exist on various material types. + */ +export type TextureMaterialKey = Extract< + | keyof THREE.MeshBasicMaterial + | keyof THREE.MeshStandardMaterial + | keyof THREE.MeshPhysicalMaterial + | keyof THREE.MeshToonMaterial, + string +>; + +/** + * Interface for materials that may have texture slots. + * Used for type-safe texture diagnostic access and disposal. + */ +export type MaterialWithTextureSlots = THREE.Material & + Partial>; diff --git a/src/utils/three/dispose.ts b/src/utils/three/dispose.ts index 87b5275..42fd67b 100644 --- a/src/utils/three/dispose.ts +++ b/src/utils/three/dispose.ts @@ -1,21 +1,18 @@ import * as THREE from "three"; - -type TextureMaterialKey = Extract< - | keyof THREE.MeshBasicMaterial - | keyof THREE.MeshStandardMaterial - | keyof THREE.MeshPhysicalMaterial - | keyof THREE.MeshToonMaterial, - string ->; - -type MaterialWithTextureSlots = THREE.Material & - Partial>; +import type { + MaterialWithTextureSlots, + TextureMaterialKey, +} from "@/types/three/three"; interface DisposeObject3DOptions { disposeTextures?: boolean; } -const MATERIAL_TEXTURE_KEYS = [ +/** + * Common texture slot keys found on Three.js materials. + * Exported for use in texture diagnostics and disposal. + */ +export const MATERIAL_TEXTURE_KEYS = [ "alphaMap", "aoMap", "bumpMap", @@ -40,6 +37,8 @@ const MATERIAL_TEXTURE_KEYS = [ "transmissionMap", ] as const satisfies readonly TextureMaterialKey[]; +export type { MaterialWithTextureSlots }; + export function disposeObject3D( object: THREE.Object3D, options: DisposeObject3DOptions = {}, @@ -57,6 +56,25 @@ export function disposeObject3D( }); } +/** + * Disposes only materials (not geometry) from an Object3D and its children. + * Useful for cloned models where you want to preserve the original geometry. + */ +export function disposeModelMaterials( + object: THREE.Object3D, + options: DisposeObject3DOptions = {}, +): void { + object.traverse((child) => { + if (!(child instanceof THREE.Mesh)) return; + + if (Array.isArray(child.material)) { + child.material.forEach((material) => disposeMaterial(material, options)); + } else if (child.material) { + disposeMaterial(child.material, options); + } + }); +} + function disposeMaterial( material: THREE.Material, options: DisposeObject3DOptions, diff --git a/src/world/Environment.tsx b/src/world/Environment.tsx index 78edb2f..430bc66 100644 --- a/src/world/Environment.tsx +++ b/src/world/Environment.tsx @@ -37,7 +37,7 @@ export function Environment(): React.JSX.Element { {showSky ? ( { + let cancelled = false; + // 1. Try localStorage const saved = localStorage.getItem("la-fabrik-waypoints"); if (saved) { @@ -111,7 +113,10 @@ export function TestMap({ onOctreeReady }: TestMapProps): React.JSX.Element { console.log( `[TestMap] ${parsed.length} waypoints chargés depuis localStorage.`, ); - setWaypoints(parsed); + // Schedule state update to avoid synchronous setState in effect + queueMicrotask(() => { + if (!cancelled) setWaypoints(parsed); + }); return; } } catch (e) { @@ -129,6 +134,7 @@ export function TestMap({ onOctreeReady }: TestMapProps): React.JSX.Element { throw new Error("Impossible de charger /roadNetwork.json"); }) .then((data) => { + if (cancelled) return; if (Array.isArray(data)) { console.log( `[TestMap] ${data.length} waypoints chargés depuis /roadNetwork.json.`, @@ -139,6 +145,10 @@ export function TestMap({ onOctreeReady }: TestMapProps): React.JSX.Element { .catch((err) => { console.log("[TestMap] Aucun point d'A* trouvé par défaut.", err); }); + + return () => { + cancelled = true; + }; }, []); return ( diff --git a/src/world/player/PlayerController.tsx b/src/world/player/PlayerController.tsx index 122a0bc..2298f9c 100644 --- a/src/world/player/PlayerController.tsx +++ b/src/world/player/PlayerController.tsx @@ -29,7 +29,22 @@ import { InteractionManager } from "@/managers/InteractionManager"; import { useGameStore } from "@/managers/stores/useGameStore"; import { useSettingsStore } from "@/managers/stores/useSettingsStore"; import type { Vector3Tuple } from "@/types/three/three"; -import { EBIKE_CAMERA_TRANSFORM } from "@/components/ebike/Ebike"; +import { EBIKE_CAMERA_TRANSFORM } from "@/data/ebike/ebikeConfig"; + +/** Global window properties used for ebike communication */ +interface EbikeGlobalState { + ebikeParkedPosition?: Vector3Tuple; + ebikeParkedRotation?: number; + ebikeSteerFactor?: number; + ebikeVisualGroup?: React.RefObject; + playerPos?: Vector3Tuple; + ebikeAngle?: number; +} + +declare global { + // eslint-disable-next-line @typescript-eslint/no-empty-object-type -- Extending Window with EbikeGlobalState properties + interface Window extends EbikeGlobalState {} +} type Keys = { forward: boolean; @@ -146,12 +161,11 @@ export function PlayerController({ useEffect(() => { movementModeRef.current = movementMode; }, [movementMode]); + // eslint-disable-next-line react-hooks/immutability -- Three.js camera properties (position, rotation, fov) must be mutated directly; this is the standard pattern for R3F useEffect(() => { if (movementMode === "ebike") { - const targetPos: Vector3Tuple = (window as any).ebikeParkedPosition || [ - 0, 8.2, 0, - ]; - const targetRot: number = (window as any).ebikeParkedRotation || 0; + const targetPos: Vector3Tuple = window.ebikeParkedPosition ?? [0, 8.2, 0]; + const targetRot: number = window.ebikeParkedRotation ?? 0; const headY = targetPos[1] + PLAYER_EYE_HEIGHT; const bottomY = targetPos[1] + PLAYER_CAPSULE_RADIUS; @@ -189,6 +203,7 @@ export function PlayerController({ prevMovementModeRef.current === "ebike" ) { const perspectiveCam = camera as THREE.PerspectiveCamera; + // eslint-disable-next-line react-hooks/immutability -- Three.js camera.fov must be mutated directly for dynamic FOV changes perspectiveCam.fov = 60; perspectiveCam.updateProjectionMatrix(); @@ -300,6 +315,7 @@ export function PlayerController({ }; }, []); + // eslint-disable-next-line react-hooks/immutability -- Three.js camera properties (position, rotation, fov) must be mutated directly in frame loop; this is the standard pattern for R3F game loops useFrame((_, delta) => { if (!initializedRef.current) return; @@ -435,17 +451,18 @@ export function PlayerController({ if (keys.current.left) targetSteer = 1; else if (keys.current.right) targetSteer = -1; - const currentSteer = (window as any).ebikeSteerFactor || 0; + const currentSteer = window.ebikeSteerFactor ?? 0; const steerFactor = THREE.MathUtils.lerp( currentSteer, targetSteer, 8 * dt, ); - (window as any).ebikeSteerFactor = steerFactor; + window.ebikeSteerFactor = steerFactor; const speed = velocity.current.length(); const targetFov = 60 + Math.min(speed * 0.35, 9); const perspectiveCam = camera as THREE.PerspectiveCamera; + // eslint-disable-next-line react-hooks/immutability -- Three.js camera.fov must be mutated directly for dynamic FOV changes during frame updates perspectiveCam.fov = THREE.MathUtils.lerp( perspectiveCam.fov, targetFov, @@ -482,7 +499,7 @@ export function PlayerController({ ); camera.rotation.set(pitchRad, yawRad, rollRad, "YXZ"); - const ebikeVisual = (window as any).ebikeVisualGroup?.current; + const ebikeVisual = window.ebikeVisualGroup?.current; if (ebikeVisual) { ebikeVisual.position.set( capsule.current.end.x, @@ -496,12 +513,12 @@ export function PlayerController({ camera.position.copy(capsule.current.end); } - (window as any).playerPos = [ + window.playerPos = [ capsule.current.end.x, capsule.current.end.y, capsule.current.end.z, ]; - (window as any).ebikeAngle = ebikeAngle.current; + window.ebikeAngle = ebikeAngle.current; }); return null;