docs(draft): acte les décisions D1-D4 de l'Étape 10 (Textures)
D1 placeholder 1×1 + groupe 2 sur toutes les pipelines · D2 échantillonnage inconditionnel · D3 image + Rgba8UnormSrgb · D4 Material propriétaire du bind group. Suite : implémentation 10.1-10.5 (refactor) puis docs (10.6).
This commit is contained in:
+6
-6
@@ -23,23 +23,23 @@ Permettre de texturer un mesh : charger une image → `wgpu::Texture` (+ view +
|
|||||||
texture diffuse à un `Material`, échantillonner dans le shader, **sans casser** le pattern « un seul
|
texture diffuse à un `Material`, échantillonner dans le shader, **sans casser** le pattern « un seul
|
||||||
layout pour tous ».
|
layout pour tous ».
|
||||||
|
|
||||||
## Décisions (à valider)
|
## Décisions (actées le 2026-09-18)
|
||||||
|
|
||||||
- **[ ] D1 (intégration bind group — « un seul layout pour tous »)** : on ajoute un **3ᵉ bind group**
|
- **[x] D1 (intégration bind group — « un seul layout pour tous »)** : on ajoute un **3ᵉ bind group**
|
||||||
`@group(2)` (sampler + texture diffuse) posé sur **toutes** les pipelines, avec une **texture
|
`@group(2)` (sampler + texture diffuse) posé sur **toutes** les pipelines, avec une **texture
|
||||||
blanche 1×1 de secours (placeholder)** utilisée quand un `Material` n'a pas de texture. Cela
|
blanche 1×1 de secours (placeholder)** utilisée quand un `Material` n'a pas de texture. Cela
|
||||||
préserve l'unicité du layout (aucune pipeline multiple), donc un seul flux de rendu. *(alternative
|
préserve l'unicité du layout (aucune pipeline multiple), donc un seul flux de rendu. *(alternative
|
||||||
écartée : bind group optionnel → casse l'unicité du layout, refactor de toutes les pipelines)*.
|
écartée : bind group optionnel → casse l'unicité du layout, refactor de toutes les pipelines)*.
|
||||||
- **[ ] D2 (échantillonnage inconditionnel)** : le fragment shader échantillonne **toujours** la
|
- **[x] D2 (échantillonnage inconditionnel)** : le fragment shader échantillonne **toujours** la
|
||||||
texture diffuse ; le placeholder blanc (texel = 1) reproduit exactement le comportement actuel
|
texture diffuse ; le placeholder blanc (texel = 1) reproduit exactement le comportement actuel
|
||||||
d'un material sans texture. Donc pas de flag conditionnel → un seul flow de shader. En mode lit,
|
d'un material sans texture. Donc pas de flag conditionnel → un seul flow de shader. En mode lit,
|
||||||
le **texel remplace la couleur du vertex** (`texel.rgb * (ambient + diffuse)`) ; en unlit, le texel
|
le **texel remplace la couleur du vertex** (`texel.rgb * (ambient + diffuse)`) ; en unlit, le texel
|
||||||
tel quel. Symétrique du pattern unlit existant.
|
tel quel. Symétrique du pattern unlit existant.
|
||||||
- **[ ] D3 (chargement d'image & format)** : ajouter la dépendance `image` (décodage PNG/JPEG) à
|
- **[x] D3 (chargement d'image & format)** : ajouter la dépendance `image` (décodage PNG/JPEG) à
|
||||||
`lib/Cargo.toml` ; upload en `TextureFormat::Rgba8UnormSrgb`, usage `TEXTURE_BINDING | COPY_DST`,
|
`lib/Cargo.toml` ; upload en `TextureFormat::Rgba8UnormSrgb`, usage `TEXTURE_BINDING | COPY_DST`,
|
||||||
dimension `D2`, `mip_level_count: 1` (**YAGNI** : pas de génération de mipmaps cette étape),
|
dimension `D2`, `mip_level_count: 1` (**YAGNI** : pas de génération de mipmaps cette étape),
|
||||||
sampler `filter: Linear`, `address_mode: Repeat`.
|
sampler `filter: Linear`, `address_mode: Repeat`.
|
||||||
- **[ ] D4 (API et portage)** : nouveau type `Texture` (device + view + sampler). `Material` gagne
|
- **[x] D4 (API et portage)** : nouveau type `Texture` (device + view + sampler). `Material` gagne
|
||||||
`texture: Option<Arc<Texture>>` et détient son **bind group de texture (groupe 2)**, construit
|
`texture: Option<Arc<Texture>>` et détient son **bind group de texture (groupe 2)**, construit
|
||||||
depuis le layout partagé ; sans texture il lie le placeholder. API `Scene` : `add_texture(id, tex)`
|
depuis le layout partagé ; sans texture il lie le placeholder. API `Scene` : `add_texture(id, tex)`
|
||||||
et liaison d'une texture à un material. `draw_entity` bind `set_bind_group(2, ...)`.
|
et liaison d'une texture à un material. `draw_entity` bind `set_bind_group(2, ...)`.
|
||||||
@@ -94,7 +94,7 @@ layout pour tous ».
|
|||||||
|
|
||||||
## Point d'étape
|
## Point d'étape
|
||||||
|
|
||||||
- [ ] Valider D1–D4 avant implémentation.
|
- [x] Valider D1–D4 avant implémentation. *(actées le 2026-09-18)*
|
||||||
- [ ] Caser 10.1–10.6, validation verte, exemples OK.
|
- [ ] Caser 10.1–10.6, validation verte, exemples OK.
|
||||||
- [ ] Deux commits séparés : `refactor(...)` (10.1–10.5) puis `docs(...)` (10.6) + README/DRAFT.
|
- [ ] Deux commits séparés : `refactor(...)` (10.1–10.5) puis `docs(...)` (10.6) + README/DRAFT.
|
||||||
- [ ] Rédiger le bilan et ouvrir la suite (Phase 4.2 Éclairage avancé).
|
- [ ] Rédiger le bilan et ouvrir la suite (Phase 4.2 Éclairage avancé).
|
||||||
|
|||||||
Reference in New Issue
Block a user