fix(model): load lafabrik glb
This commit is contained in:
@@ -84,11 +84,11 @@ This matters for `lafabrik`: adding `public/models/lafabrik-LOD/` is not enough
|
|||||||
To add LOD support for a model:
|
To add LOD support for a model:
|
||||||
|
|
||||||
1. Add the light model in `public/models/<name>-LOD/model.gltf`.
|
1. Add the light model in `public/models/<name>-LOD/model.gltf`.
|
||||||
2. Keep the regular model in `public/models/<name>/model.gltf`.
|
2. Keep the regular model in `public/models/<name>/model.glb` or `public/models/<name>/model.gltf`.
|
||||||
3. Add the mapping in `src/data/world/mapLodConfig.ts`.
|
3. Add the mapping in `src/data/world/mapLodConfig.ts`.
|
||||||
4. If the model uses a dedicated component, call `useMapLodModelPath()` in that component.
|
4. If the model uses a dedicated component, call `useMapLodModelPath()` in that component.
|
||||||
5. Preload both paths when the component is dedicated and uses `useGLTF.preload()`.
|
5. Preload both paths when the component is dedicated and uses `useGLTF.preload()`.
|
||||||
6. Verify the GLTF references: buffers, textures, opacity maps, and relative paths.
|
6. Verify the GLTF/GLB references: buffers, textures, opacity maps, and relative paths.
|
||||||
|
|
||||||
## Current LOD Models
|
## Current LOD Models
|
||||||
|
|
||||||
|
|||||||
@@ -14,12 +14,12 @@ This document tracks the current map-rendering performance pass.
|
|||||||
|
|
||||||
The first performance bottleneck was draw calls. Some assets were exported as many small GLTF primitives even when they used only a few materials.
|
The first performance bottleneck was draw calls. Some assets were exported as many small GLTF primitives even when they used only a few materials.
|
||||||
|
|
||||||
| Model | Instances | Meshes / primitives | Notes |
|
| Model | Instances | Meshes / primitives | Notes |
|
||||||
| ---------------- | --------: | ------------------: | ---------------------------------------------------------------- |
|
| ---------------- | --------: | ------------------: | ------------------------------------------------------------------------------------ |
|
||||||
| `generateur` | 3 | 3152 | Worst draw-call offender. Needs asset-side mesh merging. |
|
| `generateur` | 3 | 3152 | Worst draw-call offender. Needs asset-side mesh merging. |
|
||||||
| `lafabrik` | 4 | 56 | Moderate draw calls, heavy 2048 texture set. |
|
| `lafabrik` | 4 | 474 | High primitive count; current HD GLB has embedded geometry and no external textures. |
|
||||||
| `ecole` | 1 | 107 | One material but many primitives; should be merged. |
|
| `ecole` | 1 | 107 | One material but many primitives; should be merged. |
|
||||||
| `fermeverticale` | 3 | 1 | Geometry is fine; textures are large for the visible complexity. |
|
| `fermeverticale` | 3 | 1 | Geometry is fine; textures are large for the visible complexity. |
|
||||||
|
|
||||||
`generateur` was especially expensive because three visible instances could multiply thousands of primitives into thousands of draw calls. Instancing reduces repeated instance cost, but the source asset still needs a cleaner export.
|
`generateur` was especially expensive because three visible instances could multiply thousands of primitives into thousands of draw calls. Instancing reduces repeated instance cost, but the source asset still needs a cleaner export.
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ Estimated source primitive count versus runtime merged groups:
|
|||||||
| `generateur` | 3152 | 8 |
|
| `generateur` | 3152 | 8 |
|
||||||
| `ecole` | 107 | 2 |
|
| `ecole` | 107 | 2 |
|
||||||
| `eolienne` | 118 | 8 |
|
| `eolienne` | 118 | 8 |
|
||||||
| `lafabrik` | 56 | 14 |
|
| `lafabrik` | 474 | ~77 |
|
||||||
|
|
||||||
This is a code-side safety net, not a replacement for clean asset exports. Clean GLB exports with merged meshes and fewer textures remain the preferred long-term path.
|
This is a code-side safety net, not a replacement for clean asset exports. Clean GLB exports with merged meshes and fewer textures remain the preferred long-term path.
|
||||||
|
|
||||||
@@ -255,7 +255,7 @@ Design/export should prioritize:
|
|||||||
1. Produce lower-poly `buisson`, `arbre`, `sapin`, and crop assets.
|
1. Produce lower-poly `buisson`, `arbre`, `sapin`, and crop assets.
|
||||||
2. Add LOD or billboard variants for far vegetation.
|
2. Add LOD or billboard variants for far vegetation.
|
||||||
3. Merge `generateur` meshes from 3152 primitives to a small number of material groups.
|
3. Merge `generateur` meshes from 3152 primitives to a small number of material groups.
|
||||||
4. Reduce `lafabrik` texture count and downscale flat/low-detail maps.
|
4. Keep `lafabrik` exports texture-light, and merge repeated material primitives where possible.
|
||||||
5. Merge `ecole` primitives because it uses a single material.
|
5. Merge `ecole` primitives because it uses a single material.
|
||||||
6. Prefer runtime `.glb` or compressed runtime textures when the pipeline supports it.
|
6. Prefer runtime `.glb` or compressed runtime textures when the pipeline supports it.
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import {
|
|||||||
import { getMapLodModelPath } from "@/data/world/mapLodConfig";
|
import { getMapLodModelPath } from "@/data/world/mapLodConfig";
|
||||||
import { useMapLodModelPath } from "@/hooks/world/useMapLodModelPath";
|
import { useMapLodModelPath } from "@/hooks/world/useMapLodModelPath";
|
||||||
|
|
||||||
const LA_FABRIK_MODEL_PATH = "/models/lafabrik/model.gltf";
|
const LA_FABRIK_MODEL_PATH = "/models/lafabrik/model.glb";
|
||||||
const LA_FABRIK_LOD_MODEL_PATH = getMapLodModelPath("lafabrik");
|
const LA_FABRIK_LOD_MODEL_PATH = getMapLodModelPath("lafabrik");
|
||||||
|
|
||||||
type LaFabrikMapModelProps = Omit<MergedStaticMapModelProps, "modelPath">;
|
type LaFabrikMapModelProps = Omit<MergedStaticMapModelProps, "modelPath">;
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ export const galleryModels: GalleryModel[] = [
|
|||||||
path: "/models/habitant2-animated/model.gltf",
|
path: "/models/habitant2-animated/model.gltf",
|
||||||
},
|
},
|
||||||
{ id: "immeuble1", name: "Immeuble", path: "/models/immeuble1/model.gltf" },
|
{ id: "immeuble1", name: "Immeuble", path: "/models/immeuble1/model.gltf" },
|
||||||
{ id: "lafabrik", name: "La Fabrik", path: "/models/lafabrik/model.gltf" },
|
{ id: "lafabrik", name: "La Fabrik", path: "/models/lafabrik/model.glb" },
|
||||||
{ id: "maison1", name: "Maison", path: "/models/maison1/model.gltf" },
|
{ id: "maison1", name: "Maison", path: "/models/maison1/model.gltf" },
|
||||||
{
|
{
|
||||||
id: "packderelance",
|
id: "packderelance",
|
||||||
|
|||||||
Reference in New Issue
Block a user