Files
sanctuary-beta/docs/shader-beta130.md
T
koka afa77f3d62
Build Sanctuary / build (push) Canceled after 0s
docs: record beta.130 release and preserved Prism data
2026-09-17 21:06:31 +02:00

7.5 KiB
Raw Permalink Blame History

SHADER-130 — bloom et précision commune

Demandes du 17 septembre 2026 : bloom réglable du soleil et des sources lumineuses ; inclusions émissives du fer, cuivre, redstone, lapis, diamant, émeraude, rubis, saphir, quartz et or ; réglage commun « Précision » pour les ombres et le highlight. Branche codex/bloom-beta130, socle beta.129, Minecraft 26.3 / Java 25.

Résultat

Dans Options → Shaders → Sanctuary · Vanilla Light, le bloom possède un interrupteur, une intensité et une diffusion réglables de 0 à 100. Les minerais ont leur propre interrupteur et intensité. Le bloom reste optionnel, désactivé initialement, avec une intensité préparée à 35, une diffusion à 50 et une émission des minerais à 50. Une intensité globale nulle arrête les passes et libère les ressources de cet effet.

Les nouveaux réglages par défaut sont Pixel Shadows activé, distance des ombres 128 blocs, highlight 32 blocs et Précision 16 pixels par bloc. La précision unique propose 8, 16 et 32 et contrôle simultanément ombres et arêtes. La clé JSON historique shadowPixels est conservée : les préférences déjà personnalisées ne sont pas écrasées.

Les vingt textures de minerais sont analysées depuis les ressources actives. La palette de pierre, de deepslate ou de netherrack est comparée aux pixels colorés des inclusions, avec un traitement du quartz et de l'or du Nether. Les reflets clairs accolés aux inclusions sont conservés. Le masque est calculé une fois par texture et conservé en cache jusqu'au rechargement des ressources. Une texture optionnelle <nom>_e.png peut préciser ce masque pour une texture candidate ; sa luminance maximale multipliée par l'alpha remplace la détection automatique. Les couleurs affichées viennent toujours de l'atlas Minecraft actif, y compris son animation.

Les sources sont les faces visibles des modèles de blocs lumineux, la lave, le soleil et la lune. Les lampes éteintes ne produisent pas de halo. Le niveau lumineux natif pondère les sources ordinaires ; l'émission des minerais est purement graphique. La profondeur du terrain élimine les inclusions cachées et masque le soleil derrière les constructions. Le cœur émissif conserve ses pixels nets, tandis qu'un halo séparé est diffusé à résolution réduite puis composé sur l'image.

Aucun niveau de lumière serveur, spawn, règle de jeu, format de sauvegarde, identifiant ou paramètre de génération ne change. Aucun monde personnel n'est ouvert pour les essais.

Coût et limites

La géométrie suit uniquement les sections natives visibles et déjà chargées. Leur palette permet d'écarter rapidement les sections sans source ; le cache invalide les sections touchées lors des modifications. Construction répartie sur les images, au plus quatre sections démarrées et un budget souple de 3 ms, cache GPU plafonné à 32 Mio et 16 384 faces par section. Une section qui dépasse les limites est omise. Aucun chargement de chunk forcé.

Le masque GPU est plafonné à 256 textures, chacune échantillonnée au plus en 64 × 64 ; les textures natives 16 × 16 conservent leurs texels. Les masques animés utilisent leur première image, tandis que la couleur reste animée. La carte d'émission est à la résolution de l'écran ; la diffusion séparable utilise deux cibles flottantes à 1/8 de largeur et de hauteur, sans retour GPU vers CPU en production. Les allocations sont libérées à l'arrêt, au rechargement et à la déconnexion, et recréées au changement de taille.

Cette première version ne reconstruit pas les sources hors écran, les particules, les entités lumineuses ni les modèles dessinés exclusivement par un renderer de block entity. Les packs très différents peuvent demander un masque explicite. Les silhouettes des liquides sont approximées puis masquées par la profondeur native. Aucune promesse de FPS ni validation Windows/Vulkan ; les essais graphiques portent sur macOS / Apple M1 / OpenGL.

Vérifications

Le test client ciblé réussit en 1 min 29 s, dans un nouveau monde plat, graine 122. Il analyse les vingt textures, refuse les pixels gris de leur roche, mesure le gain nocturne et les variations réelles d'intensité/diffusion. Couvrir les minerais de pierre supprime toute source émissive. Retirer les blocs rétablit l'émission ; le rechargement des ressources fait de même. Torche, glowstone, lampe alimentée, lave et soleil sont vérifiés, ainsi que l'arrêt de la lampe et l'occultation du soleil par de la pierre. Les valeurs par défaut et la conservation d'anciens choix personnalisés passent.

Log ciblé : build/shader130-client-bloom.log ; masques inspectables dans mods/sanctuary/build/run/clientGameTest/bloom130-ore-masks.png et son CSV. La suite shader complète réussit en 3 min 16 s : casters hors écran, retrait/repose, trois précisions, cinq portées, lune, zénith, feuillage, realtime, caméra et rechargement restent vérifiés. Les arêtes CTM restent raccordées entre matériaux ; 1 295 échantillons du contour sont éclaircis à précision 8, 596 à 16 et 120 à 32. Les captures françaises/anglaises et le rendu des minerais/du soleil sont inspectés.

Commandes natives : ./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true -PsanctuaryPixelShadows122ClientTests=true -PsanctuaryClientNoVsync=true -PsanctuaryQuickTests=true. Le test ciblé utilise -PsanctuaryBloom130ClientTests=true à la place de la propriété PixelShadows. Log complet : build/shader130-client-full.log ; captures sous mods/sanctuary/build/run/clientGameTest/screenshots/.

./gradlew check build assemblePack assembleTestPack -x :sanctuary:runGameTest réussit en 2 min 24 s, 126 tâches. Le serveur GameTest dédié reste exclu conformément au refus antérieur de son EULA. La comparaison au binaire beta.129 trouve 24 entrées de production modifiées, toutes limitées au shader et à ses interfaces. Gameplay et textures des gemmes inchangés ; aucun test, monde ou modèle GLB embarqué. Les sources archivées correspondent aux sources Java, les packs normal/Test embarquent le même JAR et le template contient exactement les ressources prévues.

Archives vérifiées dans build/ et recopiées dans le dossier habituel sanctuary-beta/build/ :

  • Sanctuary-beta.130.mrpack : 10386021 octets, SHA-256 7a3fcd4e496fa136eb3e0896fa7b856ae91771123186fa8df13c8fb1e0cf3e9a.

  • Sanctuary-Test-beta.130.mrpack : 10404944 octets, SHA-256 8de094fcbc58a300cc24d64c8d1b7931fdb8db354c75defa6bf2a2aa4a123a23.

JAR : 1ac4d1b1339361fb665f03ca3bd359163db5037ffd90e684c5a461759f6076e7.

Release beta.130 publiée depuis 534dfec4f88169a200702b50d1ba87d85c107bee. Canal packwiz 68e06353bf880af04c1c72d4e3a159f11f94b619. Les téléchargements publics sont vérifiés par SHA-256. Deux synchronisations isolées, puis deux dans la même instance Sanctuary Beta, réussissent. Un seul JAR Sanctuary beta.130 est actif. Les 923 fichiers personnels suivis conservent leurs hashes, dont les mondes, packs et préférences de shaders. Sauvegarde préalable dans sanctuary-backups/before-beta.130/ de l'instance. Aucun monde personnel ouvert.

Reçus locaux ignorés : build/shader130-artifact.json, build/shader130-isolated.json, build/shader130-prism.json et build/shader130-publication.log. Le checkout original conserve ses modifications préexistantes ; seuls les trois artefacts versionnés vérifiés sont recopiés dans son dossier build/.