120 lines
7.1 KiB
Markdown
120 lines
7.1 KiB
Markdown
# SHADER-129 — arêtes connectées et portées étendues
|
||
|
||
Demandes du 17 septembre 2026 : highlight optionnel, puis raccordement CTM de
|
||
tous les blocs coplanaires, portée indépendante 16–256 blocs, ombres à 128/256,
|
||
suppression de l'atténuation au zénith et du réalignement cyclique des ombres.
|
||
Branche `codex/edge-highlights-beta129`, socle beta.128, Minecraft 26.3 / Java 25.
|
||
|
||
## Résultat
|
||
|
||
Dans **Options → Shaders → Sanctuary · Vanilla Light**, les reflets sur les
|
||
arêtes sont désactivés par défaut. L'intensité va de 0 à 100 ; la valeur 30
|
||
éclaircit au maximum de 12 %. Leur portée se règle indépendamment des ombres :
|
||
**16, 32, 64, 128 ou 256 blocs**. Les anciens réglages restent conservés.
|
||
|
||
Le highlight raccorde les surfaces plates, y compris entre matériaux différents,
|
||
sans dessiner les jonctions intérieures. Il suit les contours visibles du relief,
|
||
y compris les dalles et escaliers. Il multiplie la couleur existante pour garder
|
||
les pixels des textures et composer avec les ombres. Ce CTM géométrique utilise
|
||
la profondeur déjà produite par Minecraft : aucune liste de blocs autorisés,
|
||
aucun pack CTM à fournir, aucune exploration CPU du volume de 256 blocs.
|
||
Une cassure/repose modifie le contour dès que le terrain natif est réaffiché.
|
||
|
||
Le trait proche suit la grille de 1/16 de bloc. À distance, la couverture devient
|
||
partielle pour limiter le scintillement des traits plus petits qu'un pixel.
|
||
La portée choisie s'efface progressivement dans son dernier quart et respecte
|
||
la brume ainsi que la distance de rendu. Une passe plein écran, quatre sondes
|
||
de profondeur et un tampon uniforme de 176 octets ; aucun retour GPU vers CPU
|
||
en production. L'arrêt de l'option ou une intensité nulle libèrent ce tampon.
|
||
|
||
Ce n'est pas un remplacement des textures par des variantes CTM. Le calcul
|
||
concerne les faces visibles alignées sur la grille : les faces hors écran,
|
||
les surfaces transparentes absentes de la profondeur et les géométries
|
||
arbitrairement inclinées ne sont pas reconstruites. À très grande distance,
|
||
les détails plus petits qu'un pixel peuvent rester imperceptibles. Aucun
|
||
chargement de chunk forcé, aucune promesse de FPS.
|
||
|
||
Les ombres proposent les cinq mêmes portées. La carte reste plafonnée à
|
||
4096 × 4096 : les grandes distances réduisent sa précision spatiale. Le cache
|
||
garde ses limites de 96 Mio, quatre sections et 3 ms souples de construction
|
||
par image ; la réconciliation des chunks est limitée aux ticks et changements
|
||
de caméra/terrain plutôt qu'à toutes les images.
|
||
|
||
L'intensité solaire reste pleine au zénith. Les contours opaques restent nets,
|
||
le filtrage du feuillage et les ombres légères de la lune sont conservés.
|
||
Le réalignement de la grille lumineuse a lieu au changement d'ancrage de la
|
||
caméra, avec transfert de phase par texels entiers. La rotation du soleil ne
|
||
réarrondit plus la projection de l'origine mondiale à chaque image, source
|
||
de sauts périodiques amplifiés aux grandes coordonnées. Le soleil continue
|
||
d'avancer ; une ombre pixélisée peut naturellement changer de case. Cette
|
||
correction ne modifie pas l'horloge serveur ni sa cadence native.
|
||
|
||
Textes FR/EN. Aucun changement de règles, sauvegardes, génération, gemmes,
|
||
sculptures ou découvertes.
|
||
|
||
## Vérifications et livraison
|
||
|
||
Le client natif réussit en **2 min 41 s**, dans un monde neuf plat, graine 122,
|
||
sur macOS / Apple M1 / OpenGL :
|
||
|
||
- CTM : 596 échantillons éclaircis sur le contour et 65 068 conservés ; les
|
||
20 centres et 20 jonctions coplanaires ciblés restent intacts, y compris
|
||
au changement de matériau. L'intensité 90 produit environ trois fois le gain.
|
||
- Ouverture d'un trou : 716 échantillons éclaircis ; la fermeture restitue
|
||
l'image connectée. Au-delà de 16 blocs, le réglage 16 supprime le contour ;
|
||
le réglage 64 le rétablit (254 échantillons éclaircis).
|
||
- Cinq portées CTM et cinq portées d'ombres, persistance/clamp, migration des
|
||
anciennes préférences, arrêt/libération, rechargement, caméra et vue oblique
|
||
avec ombres. Captures françaises/anglaises inspectées ; suppression ensuite
|
||
d'un préfixe redondant dans le libellé de portée.
|
||
- Soleil, lune, nouvelle lune, ombres opaques nettes à midi et transmission
|
||
du feuillage restent vérifiés. Casters hors écran et retrait/repose actifs.
|
||
- 2 000 petits pas solaires aux coordonnées ±100 000 vérifient l'absence de
|
||
saut de translation de la carte ; changement d'ancrage par texels entiers.
|
||
La séquence du vrai service realtime suit 294 images : angle avancé de
|
||
0,000694 radian, aucun rebond dans les 65 664 échantillons de sol suivis.
|
||
Sur cette courte séquence, aucune case opaque n'a changé ; cela ne constitue
|
||
pas une mesure de mouvement visible sur une journée entière.
|
||
|
||
La fixture initiale capturait parfois le terrain avant la fin de sa construction
|
||
native : elle attend désormais la réception de toute la plateforme et la fin
|
||
compilée des sections. Aucun changement de gameplay pour contourner ce problème.
|
||
|
||
Commande : `./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true
|
||
-PsanctuaryPixelShadows122ClientTests=true -PsanctuaryClientNoVsync=true
|
||
-PsanctuaryQuickTests=true`. Log `build/shader129-client.log`, captures sous
|
||
`mods/sanctuary/build/run/clientGameTest/screenshots/`.
|
||
|
||
`./gradlew check build assemblePack assembleTestPack -x :sanctuary:runGameTest`
|
||
réussit en **2 min 17 s**, 126 tâches. Une dernière passe d’assemblage intègre
|
||
la simplification du libellé de portée (2 min 18 s). Les archives sont vérifiées :
|
||
**17 entrées de production** diffèrent de beta.128, limitées au shader et à ses
|
||
interfaces. Même JAR dans normal/Test, sources archivées conformes, ressources
|
||
du template exactes, assets des gemmes inchangés. Aucun monde ni test embarqué.
|
||
Le serveur GameTest dédié
|
||
reste exclu conformément au refus antérieur de son EULA. Aucun monde personnel
|
||
utilisé pour les essais, aucun résultat Windows/Vulkan revendiqué.
|
||
|
||
|
||
Archives vérifiées dans `build/` et recopiées dans le dossier de livraison
|
||
habituel `sanctuary-beta/build/` :
|
||
|
||
- Normal : 10 353 946 octets, SHA-256
|
||
`2c7735194faab8a699004e69ad543ce6e8fabdebe297b759bffd31fea2dcc2e8`.
|
||
- Test : 10 372 872 octets, SHA-256
|
||
`cca572ee313d1d7e66ed745bb48bac62490998760d9b7bbfc7a1f6d60c430dce`.
|
||
- JAR Sanctuary :
|
||
`ca3e2ff4e0717a3a54c1d57478d43aade39d001b71c4eec745d76f010f7def54`.
|
||
|
||
[Release beta.129](https://git.botsu.net/koka/sanctuary-beta/releases/tag/beta.129)
|
||
publiée depuis `35103a7ea8635dc4ed26293f00e86d99aaacfca8`. Canal packwiz
|
||
`2eaa0130a4cd475c598beefdab40f48fc8681ab7`. Deux synchronisations isolées puis deux synchronisations
|
||
dans l'instance **Sanctuary Beta** ont réussi. Les **923 fichiers personnels**
|
||
suivis, dont les réglages de shader, sont inchangés. Aucun monde personnel ouvert.
|
||
Sauvegarde préalable des fichiers gérés : `sanctuary-backups/before-beta.129/`.
|
||
Le JAR installé a le hash vérifié ci-dessus. Reçus locaux :
|
||
`build/shader129-artifact.json`, `build/shader129-isolated.json` et
|
||
`build/shader129-prism.json`. Le checkout initial avec ses modifications en
|
||
cours a été préservé ; seule la copie des archives versionnées rejoint son
|
||
répertoire `build/`.
|