110 lines
6.4 KiB
Markdown
110 lines
6.4 KiB
Markdown
# SHADER-134 — PBR procédural optionnel et herbe SSGI
|
||
|
||
Demande : ajouter en option des normales calculées à partir des textures actives,
|
||
avec rugosité des matériaux et reflets orientés. Retour : le SSGI renforcé
|
||
éclaire artificiellement l'intérieur de l'herbe ; vérifier et corriger ce cas.
|
||
Branche `codex/pbr-beta134`, socle beta.133, Minecraft 26.3 / Java 25.
|
||
|
||
## Contrat
|
||
|
||
PBR initialement OFF, intensité 50 réglable 0–100. Cartes de normales à partir
|
||
des différences de luminance, amplitude limitée ; rugosité/métallicité par
|
||
famille de blocs, repli rugueux pour les types inconnus. Analyse des ressources
|
||
actives conservée en cache jusqu'à désactivation ou rechargement ; pas de fichiers
|
||
écrits dans le pack personnel, pas de GPU readback en production.
|
||
|
||
Portée 32 blocs, sections visibles construites progressivement. Budget de maillage
|
||
24 Mio, atlas de 4 096 matériaux en 16 × 16 avec bordures (1 280 × 1 280 RGBA8,
|
||
6,25 Mio), copie RGBA8 de l'image courante et uniformes. Les textures de plus haute
|
||
résolution sont échantillonnées à 16 × 16 ; première image des textures animées.
|
||
La couleur et l'animation restent celles de l'atlas natif. Pas de parallax ni
|
||
de géométrie ajoutée aux blocs ; les motifs clairs peuvent donner un faux relief.
|
||
|
||
La passe utilise une réponse spéculaire GGX (normales, rugosité, métallicité,
|
||
Fresnel) et module l'éclairage diffus déjà rendu. Elle ne remplace pas tout le
|
||
pipeline Minecraft par un moteur PBR physique. Soleil/lune, exposition au ciel et
|
||
carte d'ombres active limitent les reflets ; pas de reflets miroir, d'environnement
|
||
SSR, ni de direction locale déduite pour chaque torche. Aucun rendu PBR d'eau,
|
||
d'entités, d'items ou de modèles spéciaux hors maillage de terrain.
|
||
|
||
## SSGI
|
||
|
||
Les normales des faces presque axiales sont stabilisées sur leur axe. Deux passes
|
||
spatiales filtrent la lumière indirecte à demi-résolution, avec rejet des voisins
|
||
hors du plan du récepteur et interpolation de l'échantillonnage. Les textures de
|
||
l'image restent nettes. Un tampon RGBA16F supplémentaire à demi-résolution porte
|
||
le budget des cibles SSGI à environ 8 octets par pixel plein écran (contre 6).
|
||
Pas d'historique temporel ni de rémanence ajoutés.
|
||
|
||
Un parcours de 12 blocs a reproduit des bandes sur un mur et un éclaircissement
|
||
artificiel d'herbe à 35 et 100. Le filtrage seul ne suffisait pas : la collecte
|
||
réinjectait aussi trop fortement la lumière ambiante neutre. Elle conserve
|
||
maintenant la composante chromatique de la source, en soustrayant son canal
|
||
linéaire minimum. L'éclairage ambiant neutre reste celui de Minecraft. Ce réglage
|
||
vise le transfert de couleur voulu, pas une simulation physique complète du
|
||
rebond blanc. Les sources hors champ/cachées restent absentes du SSGI ; le résultat
|
||
peut encore varier lors d'un déplacement important. PBR et SSGI restent indépendants.
|
||
|
||
## Vérification
|
||
|
||
Test PBR ciblé réussi en 1 min 13 s : relief éclairé/ombré, intensités 20/50/100,
|
||
soleil matin/soir, cache stable, préférences, OFF/zéro, mouvement infinitésimal,
|
||
redimensionnement, rechargement et combinaison des effets. Le premier parcours
|
||
SSGI est conservé comme reproduction ; résultats finaux ci-dessous.
|
||
|
||
|
||
Le parcours corrigé a réussi en **2 min 47 s** avec 13 positions réparties sur
|
||
12 blocs, à 35 et 100, chaque fois comparées à OFF. Un mob immobile, des brins
|
||
d'herbe et un mur figurent dans la scène. Retour au point initial sans rémanence.
|
||
Sur les captures de ce parcours, le maximum du gain vert moyen mesuré dans
|
||
l'herbe passe sous 9,73 niveaux à 35 et 24,51 à 100. Le test impose ensuite
|
||
respectivement des limites de 12 et 30 à chaque position. L'essai reproduisant
|
||
le défaut atteignait notamment 23,68 et 49,20 à l'extrémité droite.
|
||
Ces mesures décrivent cette scène, pas une garantie d'absence d'artefacts
|
||
dans tous les mondes ni sur toutes les cartes graphiques.
|
||
|
||
|
||
La suite client complète réussit en **7 min** sur macOS / Apple M1 / OpenGL.
|
||
Elle inclut le parcours latéral et ses seuils de gain, les deux couleurs de rebond,
|
||
le PBR, les ombres, le feuillage, les cinq précisions, le CTM, les émissifs, le
|
||
bloom, les préférences et les écrans FR/EN. Log : `build/shader134-client-full.log`.
|
||
Le contrôle PBR final réussit en **1 min 19 s** : placement/retrait d'un toit,
|
||
invalidations de lumière/maillage et rendu combiné avec les ombres actives. Les
|
||
reflets utilisent maintenant la grille des ombres pour leur test de visibilité. Aucun résultat Windows/Vulkan ni
|
||
mesure de FPS revendiqués.
|
||
|
||
|
||
## Construction et artefacts
|
||
|
||
`./gradlew check build assemblePack assembleTestPack -x :sanctuary:runGameTest`
|
||
réussit en **2 min 22 s**, 126 tâches. Le serveur GameTest dédié reste exclu
|
||
conformément au refus EULA antérieur. Log : `build/shader134-build.log`.
|
||
Packs normal/Test : même JAR Sanctuary. Sources archivées et template identiques
|
||
aux sources. Comparaison à beta.133 : **23 entrées de production** changées,
|
||
limitées au rendu, à ses options et points d'appel. Gameplay et gemmes inchangés.
|
||
|
||
- `Sanctuary-beta.134.mrpack` : 10421971 octets, SHA-256 `d5bc79acb1d56e7dcf83c976156fdb2fcde80c98e443bde8a6ab312d56887b7f`.
|
||
- `Sanctuary-Test-beta.134.mrpack` : 10440898 octets, SHA-256 `04308ebb9adaf76b30a3cbf4fa32ab897e76842803fc8c8411cfa32952d1bdd5`.
|
||
|
||
JAR : `a6e69622a5e6629f70dd19b7494ad3b00916bc02169b73635f0e2d563929b7fa`.
|
||
|
||
Comparateur local : `build/Shader-beta.134-comparaison.html`. Il contient les
|
||
captures natives PBR OFF/50/100 et le parcours SSGI de 12 blocs OFF/35/100.
|
||
Le parcours est une succession de positions enregistrées, pas une mesure des FPS.
|
||
|
||
|
||
## Livraison
|
||
|
||
[Release beta.134](https://git.botsu.net/koka/sanctuary-beta/releases/tag/beta.134)
|
||
publiée depuis `fc4a0cb68ed2d89163c8e74773976df5bab4f3f1`. Canal packwiz
|
||
`35ec0f6e145002f6367944df5b75e2703958eaef` ; téléchargements publics vérifiés par SHA-256.
|
||
Deux synchronisations isolées puis deux dans la même instance **Sanctuary Beta**
|
||
réussissent. Un seul JAR beta.134 actif ; les **923 fichiers personnels suivis**,
|
||
dont sauvegardes et préférences, gardent leurs hashes. Copie préalable dans
|
||
`sanctuary-backups/before-beta.134/`, aucun monde personnel ouvert.
|
||
|
||
Packs normal/Test/template et comparateur natif vérifiés également dans
|
||
`sanctuary-beta/build/`. Le checkout original garde ses changements préexistants.
|
||
Reçus locaux ignorés : `build/shader134-artifact.json`, `build/shader134-isolated.json`,
|
||
`build/shader134-prism.json`, `build/shader134-publication.log`.
|