117 lines
6.7 KiB
Markdown
117 lines
6.7 KiB
Markdown
# 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`.
|