# SHADER-135 — SSGI en contre-plongée et près des surfaces Demande : supprimer les déchirures horizontales sous une surface, notamment près de la lave, et atténuer proprement le rebond quand la caméra s'approche d'une source ou d'un mur. Branche `codex/shader-closeup-beta135`, socle beta.134. Minecraft 26.3 / Java 25 ; aucune modification de monde ou de gameplay. ## Diagnostic et correction Le calcul des normales comparait l'aire du pixel en unités du monde à un seuil fixe. À courte distance ou à haute résolution, cette aire devient naturellement très petite : le rejet pouvait couper une surface continue. Les deux directions sont maintenant normalisées avant leur produit vectoriel. Les texels de bord sont bornés et les voisins sans profondeur ne créent plus de fausse surface. La composition utilise le centre exact du texel de profondeur. Le rebond s'atténue entre 0,4 et 0,06 bloc de distance au **plan** receveur, et lorsque la vue devient presque tangente. Cette distance évite une découpe circulaire sur un mur plat. L'image native reste nette ; aucune texture du décor n'est floutée. Les sondes sortant du volume de projection sont rejetées. Leur contribution s'atténue près du plan de caméra et de la limite d'épaisseur d'un impact, au lieu d'une contribution pleine jusqu'à cette limite. Trois ressources GLSL modifiées ; aucune passe, cible GPU, lecture CPU, histoire temporelle ou option ajoutée. Les 12 rayons × 10 pas et les deux passes de filtrage spatial restent inchangés. ## Réglages initiaux Demande ajoutée pendant la livraison : **bloom 20 %**, **PBR ON** et **SSGI ON**. Les intensités PBR 50 et SSGI 35 restent inchangées. Les champs absents du fichier de préférences prennent ces nouvelles valeurs ; les choix explicites du joueur restent conservés. Aides françaises et anglaises mises à jour. Vérification native supplémentaire des préférences vierges, partielles et personnalisées. ## Reproduction native Deux scènes isolées : stone au-dessus de la lave, puis coin à 0,5 bloc d'une paroi rouge. Caméra en contre-plongée, sept distances au plafond de 2 à 0,04 bloc, comparaisons OFF/35/100 avant/après. Dans la première scène, à 0,1 bloc et intensité 100, le saut maximal de gain rouge moyen entre lignes de pixels neutres passe de **14,88 à 0,052** niveaux sur 255. Dans le coin, à 0,4 bloc et intensité 35, le rebond auparavant rejeté revient (gain moyen de **6,01** niveaux), puis s'atténue à l'approche du contact. Ces chiffres concernent ces scènes uniquement. Les deux essais ciblés corrigés réussissent en 1 min 18 s et 1 min 17 s sur Apple M1 / OpenGL. Images avant/après conservées dans `build/closeup-*` ; comparateur autonome `build/Shader-beta.135-comparaison.html`. ## Régression et livraison Les contrôles natifs de la suite générale réussissent jusqu'au parcours SSGI : ombres, lune, feuillage, temps réel, CTM, émissifs/bloom, couleurs de rebond, occlusion, réglages, rechargement et déplacement latéral de 12 blocs à 35/100. Log : `build/shader135-client-main.log`. La suite n'est pas présentée comme entièrement réussie : elle s'est arrêtée sur une attente incorrecte du nouveau test, qui demandait du rebond alors que sa source était sortie du champ. Le scénario corrigé distingue la haute résolution avec source visible de la vue très relevée sans source visible. Le bassin possède un fond pour isoler la lave des essais suivants ; les particules du scénario précédent sont effacées avant la comparaison PBR statique. Une première tentative avait aussi rencontré le refus natif de remettre l'horloge à sa valeur actuelle ; la préparation de l'heure est désormais répétable. Ces changements concernent uniquement les tests. Le contrôle final ciblé **réussit en 2 min 52 s** : les deux scènes, 35/100, sept distances, 1280 × 720 avec source visible, source hors champ, mouvement minuscule, rendu combiné, puis contrôles PBR complets (cache, intensités, matériaux, soleil, toit, OFF/zéro, redimensionnement et rechargement). Log : `build/shader135-client-final.log` ; marqueurs `SSGI135_CLOSEUP_PASS` et `PBR134_PASS`. Les seuils de proximité et PBR sont conservés. Le contrôle supplémentaire des nouveaux défauts et du PBR **réussit en 1 min 16 s** : préférences vierges, champs absents, valeurs personnelles conservées, puis rendu PBR et combinaison des effets. Log : `build/shader135-defaults-client.log`. `./gradlew check build assemblePack assembleTestPack -x :sanctuary:runGameTest` réussit en **2 min 18 s**, 126 tâches. Le serveur GameTest dédié demeure exclu conformément au refus EULA antérieur. Les classes des scénarios clients compilent aussi après leur isolation explicite des effets activés par défaut. Log : `build/shader135-build.log` ; compilation : `build/shader135-test-compile.log`. ## Archives vérifiées Comparaison à beta.134 : **6 entrées de production** modifiées, limitées aux trois ressources SSGI, aux valeurs initiales et aux aides FR/EN. Gameplay et textures des gemmes inchangés. Packs normal/Test : JAR Sanctuary identique ; archives de sources et template conformes aux sources. Reçu local ignoré : `build/shader135-artifact.json`. ## Limites Le SSGI utilise seulement les surfaces visibles : les sources hors champ restent absentes et un grand changement de vue peut modifier le rebond. L'atténuation proche est volontaire ; ce n'est pas une simulation volumétrique. Le brouillard natif de submersion continue de suspendre le SSGI, comme en beta.134. Aucun résultat Windows/Vulkan ni mesure de FPS revendiqués. - `Sanctuary-beta.135.mrpack` : 10422391 octets ; SHA-256 `36ac278f9f5ecd2cefd69da16ea7d153ff44c5fc8e6bf0b3a3d6b71f5d767af6`. - `Sanctuary-Test-beta.135.mrpack` : 10441314 octets ; SHA-256 `e096374f7ea0856b20392e5d277e94f6c3d411723d7ffc10ceccdd9f0bf5c4d4`. JAR : `a68ccd04a92a962c46a76b26a80cb44a4faf7a13a562094dde51010ade594c10`. ## Livraison [Release beta.135](https://git.botsu.net/koka/sanctuary-beta/releases/tag/beta.135) publiée depuis `7fada570efb5ed579e6e4d7bc2b87079c7131b31`. Canal packwiz `5b0df577fcd036937c25be3a1f4580f9db3103a1` ; 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.135 actif ; les **923 fichiers personnels suivis**, dont sauvegardes et préférences, gardent leurs hashes. Copie préalable dans `sanctuary-backups/before-beta.135/`, aucun monde personnel ouvert. Packs normal/Test/template et comparateur natif également vérifiés dans `sanctuary-beta/build/`. Le checkout original garde ses changements préexistants. Reçus locaux ignorés : `build/shader135-artifact.json`, `build/shader135-isolated.json`, `build/shader135-prism.json`, `build/shader135-publication.log`.