Contexte
World42 utilise actuellement un CDLOD/quadtree côté CPU avec génération de terrain via Web Workers.
Avant d’envisager une refonte majeure vers une approche GPU-driven (CBT), il est nécessaire de pousser l’implémentation actuelle au maximum afin d’identifier précisément ses limites réelles (CPU, latence, qualité visuelle, mémoire) et de disposer d’une base de comparaison solide.
Objectif
Améliorer et instrumenter le CDLOD existant pour :
- maximiser la stabilité et la qualité visuelle
- réduire la charge CPU / GC et la latence
- comprendre clairement ce que le CDLOD peut (ou ne peut pas) résoudre
- disposer d’une base mesurée avant une transition vers CBT
Structure cible (organisation du code)
Objectif : séparer décision LOD, planification, génération, cache, et debug
Proposition de modules (à adapter à l’arborescence actuelle) :
-
systems/lod/
LodController.ts : point d’entrée appelé chaque frame, orchestre les étapes (metrics → scheduling → apply)
LodMetrics.ts : calcule SSE, hystérésis, règles anti-cracks, seuils
LodScheduler.ts : budgets par frame, priorités, annulation jobs obsolètes
LodCache.ts : cache LRU + pooling (meshes/buffers/chunks), politique d’éviction
LodDebug.ts : overlay, compteurs, timings, journaux d’événements
workers/
LodWorker.ts : wrapper worker, envoi/réception, lifecycle
worker-protocol.ts : schémas messages (BUILD/APPLY, transferrables, generationId)
-
game_objects/planet/
quadtree/ : structure de nœuds, adressage (face/level/x/y), voisinage
chunks/ : représentation runtime (mesh, bounds, state machine: Idle/Requested/Ready/Active)
terrain/ : génération (noise, sampling), matériaux, shaders, skirts/geomorph
Axes de travail
1) Métriques LOD et stabilité
2) Transitions visuelles
3) Orchestration et budget
4) Optimisations Workers
5) Cache et mémoire
6) Culling spécifique planète
7) Instrumentation & Debug
Portée
- CDLOD CPU conservé (pas de refonte GPU complète à ce stade)
- Travail d’optimisation, stabilisation et mesure (pré-CBT)
Résultat attendu
- CDLOD plus robuste, plus stable et objectivement mesuré
- Identification claire des goulots d’étranglement (CPU/GC/latence/mémoire/visuel)
- Décision éclairée :
- CDLOD optimisé suffisant,
- ou nécessité réelle d’un passage à CBT GPU-driven
Contexte
World42 utilise actuellement un CDLOD/quadtree côté CPU avec génération de terrain via Web Workers.
Avant d’envisager une refonte majeure vers une approche GPU-driven (CBT), il est nécessaire de pousser l’implémentation actuelle au maximum afin d’identifier précisément ses limites réelles (CPU, latence, qualité visuelle, mémoire) et de disposer d’une base de comparaison solide.
Objectif
Améliorer et instrumenter le CDLOD existant pour :
Structure cible (organisation du code)
Objectif : séparer décision LOD, planification, génération, cache, et debug
Proposition de modules (à adapter à l’arborescence actuelle) :
systems/lod/LodController.ts: point d’entrée appelé chaque frame, orchestre les étapes (metrics → scheduling → apply)LodMetrics.ts: calcule SSE, hystérésis, règles anti-cracks, seuilsLodScheduler.ts: budgets par frame, priorités, annulation jobs obsolètesLodCache.ts: cache LRU + pooling (meshes/buffers/chunks), politique d’évictionLodDebug.ts: overlay, compteurs, timings, journaux d’événementsworkers/LodWorker.ts: wrapper worker, envoi/réception, lifecycleworker-protocol.ts: schémas messages (BUILD/APPLY, transferrables, generationId)game_objects/planet/quadtree/: structure de nœuds, adressage (face/level/x/y), voisinagechunks/: représentation runtime (mesh, bounds, state machine: Idle/Requested/Ready/Active)terrain/: génération (noise, sampling), matériaux, shaders, skirts/geomorphAxes de travail
1) Métriques LOD et stabilité
2) Transitions visuelles
3) Orchestration et budget
4) Optimisations Workers
generationId)5) Cache et mémoire
6) Culling spécifique planète
7) Instrumentation & Debug
Portée
Résultat attendu