feat(world): triplanar seabed shader with procedural normal maps and detail shading

Rock is normal-mapped triplanar in world space at two scales, sand carries an
oriented ripple normal map on the xz plane, and a grain map drives detail
occlusion, albedo mottling and roughness. The three maps are seamless,
seeded, mipmapped textures built synchronously by SeabedDetailTextures, so
no asset is needed and builds are deterministic. The mesh has no tangents:
perturbed normals are computed in world space and written to NORMAL.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
OlivierandClaude Fable 5.1 committed 2026-10-06 23:05:33 +02:00
1 parent f22a5e69aa
commit 17f58912c1
12 files changed
+208 -16

No files matched your search

Binary file not shown.

Before

Width:  |  Height:  |  Size: 164 KiB

After

Width:  |  Height:  |  Size: 268 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 KiB

After

Width:  |  Height:  |  Size: 296 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 153 KiB

After

Width:  |  Height:  |  Size: 377 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 129 KiB

After

Width:  |  Height:  |  Size: 239 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 KiB

After

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 131 KiB

+9 -4
View File
@@ -251,10 +251,15 @@ de contacts existant les sépare du fond.
- Brouillard, lumière directionnelle et particules de la scène de test
actuelle sont conservés et réglés par site.
**Écart d'implémentation (graybox)** : le shader livré n'est pas triplanaire.
Il mélange sable et roche par la pente à partir de 20° (sable sous 20°, roche
au-dessus de 40°, fondu entre ; le matériau sonar bascule à 20°) et rend les
rides par modulation d'albédo, sans normal map. À revoir en tranche 6.
**État du 2026-10-06 (demande d'Olivier)** : le shader mélange sable et roche
par la pente à partir de 20° (sable sous 20°, roche au-dessus de 40°, fondu
entre ; le matériau sonar bascule à 20°). La roche est en normal map
**triplanaire** monde (deux échelles, 7 m et 1,7 m) ; le sable porte une normal
map de rides orientée par la houle sur le plan xz ; une carte de grain sert
d'occlusion de détail et de marbrure d'albédo. Les trois cartes sont
procédurales, sans asset, construites par `SeabedDetailTextures` (bruit seedé,
sans couture, mipmaps) dans la couche monde. Le maillage n'a pas de tangentes :
les normales perturbées sont calculées en espace monde dans le shader.
## 8. Architecture proposée
+4 -3
View File
@@ -182,9 +182,10 @@ Plan de masse (nord en haut) :
`terrain_showcase_canyon.png` (gradins et fond ridé), `_crevasse.png`,
`_boulders.png`, `_spurs.png`, `_escarpment.png` (face de la falaise vue du
pied) ; pour le Banc du Vigilant recuit, `zone1_vigilant_tombant.png`
(gradins du tombant) et `zone1_vigilant_plateau.png` (plateau ondulé). Le
rendu (brouillard, rides en albédo, absence d'ombrage de détail) n'est pas
l'objet de ce brief : à ce stade, le relief se lit surtout au sonar.
(gradins du tombant) et `zone1_vigilant_plateau.png` (plateau ondulé). Les
captures sont faites avec le shader à normal maps et ombrage de détail
(brief du Banc du Vigilant, §7) ; brouillard et lumière restent ceux de la
scène de site.
## 8. Décisions laissées à Olivier