feat: lumières spot (cône + angle) (Étape 13, Phase 4.2)

- Light étendu à 4×Vec4 (64 o) : dir_angle (axe du cône + cos demi-angle)
- FrameUniforms 576→704 o : compteur num_spot, _pad[1]
- Lights + spot: Vec<Light> ; into_frame_array renvoie (arr, n_dir, n_point, n_spot)
- Scene::add_spot_light(pos, dir, color, intensity, radius, half_angle) ; clear_lights inclut spot
- standard_shader.wgsl : 3e boucle d'accumulation (pénombre lissée ±0.1 rad + atténuation linéaire)
- exemple cube : lumière spot verte pointée vers le cube
- Docs : shaders/resources README (704 B), README roadmap (item 11), ROADMAP (item coché)
- Build/test/fmt OK (5 tests + validation WGSL + doctests) ; non-régression par défaut
This commit is contained in:
Jérôme Bousquié
2026-09-18 19:05:13 +02:00
parent d518948deb
commit e8ff364d0d
11 changed files with 211 additions and 70 deletions
+5 -2
View File
@@ -1,4 +1,7 @@
# DRAFT — Étape suivante
> DRAFT vide. L'Étape 12 (Phase 4.2 — multi-lumières) est terminée et son bilan est archivé dans l'historique git
> (commit correspondant). Préparer le plan de l'étape suivante ici.
> DRAFT vide. L'Étape 13 (Phase 4.2 — lumières spot) est terminée et son bilan est archivé dans
> l'historique git (commit correspondant). Préparer le plan de l'étape suivante ici.
>
> Rappel état Phase 4.2 : hémisphérique ✅, multi-lumières (dir + point) ✅ (Étape 12), spot ✅
> (Étape 13). Reste optionnel : **Shadows**.
+1 -1
View File
@@ -140,7 +140,7 @@ generated: { by: human:jerome, at: 2026-07-31T00:00:00Z }
### 4.2 Éclairage avancé
- [x] Lumières hémisphériques *(déjà dans le `standard_shader` : mélange hémisphérique, Étape 2)*
- [x] Support multi-lumières (directionnelles, ponctuelles) *(Étape 12, 2026-09-18 : liste globale dans la `Scene`, tableau `FrameUniforms.lights[8]`, shader accumule ambiant + directionnelles + ponctuelles, `MAX_LIGHTS = 8`)*
- [ ] Lumières spot (cône + angle) *(futur, post-Étape 12 — hors périmètre du multi-lumières initial ; extension triviale : même struct `Light` + champ d'angle/orientation et boucle d'accumulation dédiée)*
- [x] Lumières spot (cône + angle) *(Étape 13, 2026-09-18 : même struct `Light` + champ `dir_angle` (axe du cône + cos du demi-angle) + compteur `num_spot` ; boucle d'accumulation dédiée dans le shader avec pénombre lissée et atténuation linéaire ; `Scene::add_spot_light`)*
- [ ] Shadows (optionnel)
### 4.3 Optimisations