# 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`.