132 lines
7.5 KiB
Markdown
132 lines
7.5 KiB
Markdown
# 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](https://git.botsu.net/koka/sanctuary-beta/releases/tag/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/`.
|