ROADMAP — WSG
Vision : une lib Rust de dessin 3D simple, fondée sur wgpu, où l'API utilisateur est
déclarative (graph scène + traits) et où le rendu est 100 % GPU-driven (indirect draws).
Ce document est la vue d'ensemble de progression. Chaque étape a son DRAFT détaillé
(DRAFT.md, remplacé à chaque étape) et sa doc livrée (docs/tech/, docs/user/).
Légende : ✅ fait · 🔶 partiel · ⬜ à faire · ❌ abandonné
Principe : chaque étape est additive et opt-in — non-régression structurelle garantie
(tout reste désactivable, les chemins existants ne changent pas).
Phase 1 — Fondations ✅
| # |
Item |
Statut |
| 1.1 |
Contexte GPU (Instance, Surface, Adapter, Device, Queue) + boucle winit |
✅ |
| 1.2 |
Buffers & Pipeline (vertex buffer, pipeline compilé, fullscreen) |
✅ |
| 1.3 |
Geometry (struct Geometry, buffers GPU, topologie, PrimitiveTopology) |
✅ |
Phase 2 — Scène & Transforms ✅
| # |
Item |
Statut |
| 2.1 |
Primitives procédurales (cube, plane, sphere, cylinder, cone, torus) |
✅ |
| 2.2 |
Transforms (struct Transform, composition translation × rotation × scale) |
✅ |
| 2.3 |
Entités & scène (struct Entity, Scene, TransformStore, graph entité→mesh) |
✅ |
| 2.4 |
Camera (struct Camera, matrices view + perspective, CameraController orbital) |
✅ |
Phase 3 — GPU-driven (cœur de la vision) ✅
| # |
Item |
Statut |
| 3.1 |
Buffers par entité (Transform + Matrix, uniform par slot) |
✅ |
| 3.2 |
Compute matrices (compute shader : transform → world matrix) |
✅ |
| 3.3 |
Indirect draws (draw_args GPU, draw_indirect / draw_indexed_indirect) |
✅ |
| 3.4 |
Culling GPU (bounding sphere → frustum test → indirect args zéro) |
✅ |
Phase 4 — Rendu avancé ✅
| # |
Item |
Statut |
| 4.1 |
Textures & matériaux (struct Texture, Material, bind groups, shader standard) |
✅ |
| 4.2 |
Lighting & ombres (directional + point + spot + ambient, shadow mapping PCF) |
✅ |
| 4.3 |
Batching & LOD (batching par matériau, LOD quadric edge collapse + hystérésis) |
✅ |
| 4.4 |
HDR + Tone Mapping (offscreen Rgba16Float + fullscreen TM pass ACES/Reinhard) |
✅ |
Phase 5 — Qualité & polish ✅
| # |
Item |
Statut |
| 5.1 |
Exemples (7 examples : hello_triangle → demo) |
✅ |
| 5.2 |
Documentation (tech/ + user/ + rustdoc 100 %) |
✅ |
| 5.3 |
Tests & robustesse (99 unit + 4 WGSL validation + 3 doctests) |
✅ |
Phase 6 — Post-MVP ⬜
Au-delà du scope initial. Chaque item est opt-in et indépendant.
| # |
Item |
Impact visuel |
Effort |
Statut |
| 6.1 |
Exposure control (clavier / API live) |
⭐⭐ |
Trés faible |
✅ |
| 6.2 |
Emissive materials (champ emissive → bénéficie du HDR) |
⭐⭐⭐ |
Faible |
✅ |
| 6.3 |
Bloom (post-process : downsample → threshold → blur → composite) |
⭐⭐⭐ |
Moyen |
✅ |
| 6.4 |
MSAA 4× (anti-aliasing multi-échantillons + resolve) |
⭐⭐⭐ |
Moyen |
✅ |
| 6.5 |
Normal mapping / PBR (nouveau shader, tangent space, metalness-roughness) |
⭐⭐⭐ |
Élevé |
✅ |
| 6.6 |
Cascaded Shadow Maps (2–3 cascades + blend, plus de précision près de la camera) |
⭐⭐ |
Élevé |
⬜ |
| 6.7 |
SSAO (ambient occlusion screen-space, depth + normal buffer) |
⭐⭐ |
Élevé |
⬜ |
| 6.13 |
Fog (exponential / exponential² / linear, paramètre par scène) |
⭐⭐⭐ |
Faible |
✅ |
| 6.14 |
Area lights (rectangular area light, BRDF approx — specular + diffuse) |
⭐⭐⭐ |
Élevé |
⬜ |
| 6.15 |
Textured area lights (area light avec texture d’émission, e.g. panneaux LED, néons) |
⭐⭐⭐ |
Moyen |
⬜ |
| 6.16 |
Volumetric lighting (god rays / light scattering — radial blur ou ray-march 3D) |
⭐⭐⭐⭐ |
Élevé |
⬜ |
| 6.17 |
Depth of field (post-process CoC : circle-of-confusion + bokeh blur) |
⭐⭐⭐ |
Moyen |
✅ |
Cibles techniques (refactoring)
| # |
Item |
Statut |
| 6.8 |
Handles typés par ressource (slotmap) — docs/tech/ARCHI_ARENES.md |
⬜ |
| 6.9 |
API update géométrie par entité (per-frame, sans rebuild complet) |
⬜ |
| 6.10 |
Double-buffering des buffers Transform/Matrix (désync CPU/GPU) |
⬜ |
| 6.11 |
Module mesh : primitives en features optionnelles + import (OBJ/gltf) — math/ supprimé |
✅ |
| 6.12 |
Module texture : génération procédurale (checkerboard, gradient, noise) + formats compressés (KTX2, basis) en features optionnelles |
⬜ |
Liens