# Tutoriel 11 — LODs pour les grandes salles

Les grandes salles avec de la géométrie détaillée — arènes larges, donjons multi-niveaux, salles de boss — peuvent faire chuter les FPS en VR. Les **groupes LOD (Level of Detail)** permettent à Unity de substituer des meshes plus simples quand les objets sont loin de la caméra.

---

## C'est quoi un LOD group ?

Un composant `LODGroup` contient plusieurs meshes à niveaux de détail décroissants :

| Niveau LOD | Distance | Usage |
|---|---|---|
| LOD0 | 0–15 m | Détail complet (vu de près) |
| LOD1 | 15–40 m | Nombre de polygones réduit (~50 %) |
| LOD2 | 40–80 m | Très basse résolution (~20 %) |
| Culled | >80 m | Pas rendu du tout |

Unity bascule automatiquement entre les niveaux selon la taille à l'écran de l'objet, pas la distance brute — un grand pilier reste détaillé plus longtemps qu'une petite torche.

---

## Quand utiliser les LODs

Les LODs sont utiles quand :
- Ta salle fait 20 m ou plus de large
- Tu as des props répétés (piliers, torches, tonneaux) placés de nombreuses fois
- Les meshes ont plus de 500 triangles chacun

Pour les petites salles avec des primitives Unity (Cubes, Planes), les LODs ne sont pas nécessaires.

---

## Étape 1 — Créer les meshes LOD dans Blender

Tu as besoin de **deux ou trois versions de chaque mesh** à détails décroissants :

1. Pars de ton mesh en détail complet (ex. un pilier en pierre, 1 200 triangles)
2. Sélectionne le mesh → **Modifier → Decimate** → règle **Ratio** à `0.5` → **Apply** → c'est LOD1
3. Duplique à nouveau → Decimate à `0.15` → Apply → c'est LOD2
4. Exporte les trois en fichiers FBX séparés : `pilier_lod0.fbx`, `pilier_lod1.fbx`, `pilier_lod2.fbx`

> **Règle de base :** LOD1 ne doit pas être visuellement différent de LOD0 quand on se tient à 15 m en VR. Teste en reculant dans Blender avec la caméra dézoomée.

Pour la géométrie simple (murs Cube, Planes plats), saute les LODs — les primitives Unity ont quasiment aucun coût.

---

## Étape 2 — Importer dans Unity

1. Importe les trois fichiers FBX dans `Assets/`
2. Pour chacun : règle **Scale Factor** = `1`, **Mesh Compression** = `Off`, clique **Apply**

---

## Étape 3 — Créer l'objet LOD group

1. Clic droit dans la Hierarchy → **Create Empty** → renomme `Pilier_A`
2. Sélectionne-le → **Add Component** → `LOD Group`

Dans l'Inspector, tu vois les slots LOD0, LOD1, LOD2 :

3. Clique sur **LOD 0** → **+ (Add)** → glisse le GameObject avec le mesh renderer `pilier_lod0`
4. Répète pour LOD 1 (`pilier_lod1`) et LOD 2 (`pilier_lod2`)
5. Ajoute un `MeshCollider` sur l'enfant LOD0 (la collision est invisible — pas besoin de collider haute poly)

Ajuste les seuils de transition en déplaçant les curseurs dans le composant LOD Group. Point de départ :
- LOD0 : 0–40 % de la hauteur d'écran
- LOD1 : 40–15 %
- LOD2 : 15–5 %
- Culled : < 5 %

---

## Étape 4 — Appliquer les LOD groups aux objets répétés

Tout prop placé plus de 4 fois est un candidat LOD :
- Piliers en pierre
- Supports de torche
- Tonneaux / caisses
- Segments d'arche

Crée l'objet LOD Group une fois, puis **duplique-le** dans toute la salle. Toutes les instances partagent les mêmes assets mesh (Unity ne les reuploade pas par instance).

---

## Étape 5 — Planes et sols larges

Les grandes surfaces planes (Planes, Cubes larges) ont peu de polygones et ne bénéficient pas des LODs. À la place, réduis leur impact en :

- Découpant un grand Plane de 50 m en 4–6 tuiles — Unity culls les tuiles hors du champ de vision
- Gardant la résolution de texture à 512 × 512 pour les surfaces en tiling (le tiling gère le détail)

---

## Étape 6 — Tester les performances

1. Exporte le bundle et charge-le en jeu
2. Déplace-toi dans la salle — observe les transitions LOD (elles doivent être invisibles en VR)
3. Si les transitions "poppent" visiblement, augmente le chevauchement entre les seuils LOD ou réduis l'écart de polygones entre LOD0 et LOD1

> **Les casques VR tournent à 72–90 Hz avec un coût de rendu stéréo élevé.** Une salle qui tourne à 45 FPS sur écran peut être inconfortable en VR. Priorité à un faible nombre de draw calls plutôt qu'à un maximum de détails visuels.

---

## Budget LOD de référence

| Type d'objet | Triangles LOD0 | Triangles LOD1 | Triangles LOD2 |
|---|---|---|---|
| Petit prop (tonneau, caisse) | 300 | 80 | — |
| Prop moyen (pilier, statue) | 1 200 | 400 | 100 |
| Grande structure (arche, autel) | 3 000 | 800 | 200 |
| Segment de mur (section 5 m) | — | — | — (pas de LOD nécessaire) |

---

## Objets qui n'ont jamais besoin de LODs

Certains objets sont toujours proches du joueur et ne nécessitent pas de niveaux multiples :
- La surface du sol
- L'environnement immédiat du joueur (dans les 5 m autour de SpawnHere)
- Les objets collision-only (triggers invisibles, murs invisibles)

---

## Récapitulatif

| Étape | Action |
|---|---|
| 1 | Créer les meshes LOD dans Blender avec le modificateur Decimate |
| 2 | Importer tous les niveaux de détail dans Unity |
| 3 | Créer un objet LOD Group et assigner chaque niveau |
| 4 | Utiliser les LOD groups sur les props répétés |
| 5 | Découper les grandes surfaces planes en tuiles plutôt que LODs |
| 6 | Tester en jeu pour les pops et le framerate |
