13 KiB
WATER-144 — Eau naturelle pixélisée
Branche codex/water-beta144, socle beta.143 publiée (97ff2b5) et suivi
580b241. Minecraft 26.3, Java 25, dépendances conservées.
Contrat
Options → Shaders → Eau naturelle est activée par défaut avec Sanctuary. L’intensité (0–100 %, défaut 100 %) agit sur la surface et l’immersion. L’interrupteur ou 0 % retrouve le rendu précédent. Les préférences existantes restent conservées ; un moteur externe suspend l’effet comme les autres effets natifs Sanctuary.
La couleur native du biome reste la base, y compris les variantes d’océans.
Les océans (minecraft:is_ocean) imposent le profil clair.
Hors océan, le premier support situé au maximum huit blocs sous la cellule
observée choisit le profil :
| Profil | Fond | Mélange olive #788448 | Alpha natif | Distance de brume native |
|---|---|---|---|---|
| Claire | Pierre, matériaux construits, inconnus | 0 % | ×0,55 | ×1 |
| Légèrement teintée | Sable, sable rouge, gravier, argile | 10 % | ×0,80 | ×0,70 |
| Étang | Terre, terre stérile/enracinée, herbe, podzol, mycélium, boue, racines de palétuvier boueuses | 85 % | ×1 | ×0,40 |
L’eau et les plantes aquatiques sans collision sont traversées. Un support immergé reste un fond ; absence de support, air ou données manquantes donnent une eau claire. La référence visuelle fournie pendant l’implémentation demande un véritable vert olive légèrement jaunâtre : le profil étang passe donc de 45 % à 85 % de mélange, tout en laissant les eaux claires et océaniques natives. Les surfaces profondes sans fond dans la limite restent donc claires. Les profils se mélangent aux sommets sur un bloc, sans filtrer les textures. Aux bords océaniques, les sommets partagés restent clairs et la transition occupe le bloc voisin hors océan. L’eau sous un toit suit son fond, pas l’éclairage du bâtiment.
La ressource client assets/sanctuary/water_materials.json accepte deux listes
d’identifiants de blocs, light et pond, remplaçables par un resource pack.
Les blocs absents des listes sont clairs. Une ressource invalide est signalée
et reprend les familles embarquées. Le template personnel inclut cette ressource.
Rendu et coût
Modification des seules couleurs/alpha des sommets de FluidRenderer, sans
passe écran ni duplication de maillage. Textures, UV, animation, éclairage
et tri des transparences restent natifs. Les calculs de profils sont différés
jusqu’à l’émission d’un sommet visible, puis mutualisés dans la région compilée.
Un test de palette élimine les sections sans eau avant toute copie de biomes.
Les états de blocs viennent des copies natives ; les appartenances océaniques
sont capturées avant l’envoi au worker. La présence du terrain est vérifiée dans le cache client avec chargement
désactivé, sans utiliser ClientLevel.hasChunk (toujours vrai). Aucun
chargement de chunk n’est demandé par le classificateur.
Un changement de bloc invalide la zone dépendante, huit blocs au-dessus et un bloc horizontalement. Les reconstructions natives recopient leurs données ; l’effet ne déclenche aucune reconstruction pour une lumière mobile. Un changement d’option reconstruit seulement les sections chargées contenant de l’eau ; les caches des autres effets restent disponibles. Le cache temporaire disparaît avec sa compilation, sans historique de monde.
Sous l’eau, le profil est échantillonné au maximum une fois par tick, avec transition de 0,5 seconde. La couleur et les distances environnementales sont adaptées dans le rendu natif du brouillard. La teinte finale est appliquée après la normalisation de la vision aquatique, pour éviter de transformer l’olive en jaune fluorescent ; la luminosité issue des modificateurs natifs de vision et le bonus du compagnon calmar sont conservés. Lave et brume atmosphérique ne changent pas. Il n’y a pas de simulation d’absorption volumétrique ni de reflet ajouté.
Validation native
Les essais utilisent un monde plat jetable, graine 122, avec bassins sur quartz, sable et boue, support du sable, plantes aquatiques, toit, frontière de sections et changement de biome océan. Une copie personnelle de ressource remplace réellement les familles de matériaux puis est désactivée.
Les suites graphiques finales OpenGL et Vulkan sont réussies le 18 septembre
2026 (WATER144_PASS et WATER144_EXTRAS_PASS). Elles couvrent surface,
immersion, fond modifié, priorité océan, toit, plantes, cascades, lave inchangée,
blocs gorgés d’eau, préférences FR/EN et rechargement des ressources/chunks.
Les sommets partagés aux limites océaniques et le repli clair lorsque le cache
client ne contient pas le terrain font l’objet d’assertions supplémentaires.
Aucun autre client de test concurrent n’a été détecté pendant ces séries.
Deux passages ciblés supplémentaires (WATER144_TEXTURE_PASS), Vulkan en
1 min 18 s et OpenGL en 1 min 4 s, chargent de vraies textures personnelles
32×32 à deux images animées pour l’eau calme et courante. Grille, animation
visible et retour aux textures natives sont vérifiés après désactivation.
Les fixtures, leurs alpha et les captures restent dans les preuves locales.
Protocole de performance
MacBookPro17,1, Apple M1, 8 Gio, macOS 26.5.1 (25F80), Java 25,
fenêtre logique 854×480, cible Retina 1708×960 pixels, distance de rendu 6 chunks,
ombres 32 blocs / 16 pixels, PBR 50 %, autres effets activés.
VSync désactivée, limite 260 (illimitée), limitation AFK désactivée.
Le mod de test vérifie le limiteur effectif et journalise le mode de présentation.
Pendant les échantillons uniquement, il omet l’attente artificielle de
FramerateLimiter.limitDisplayFPS, afin de mesurer sans temporisation
applicative. Cette sonde reste absente du JAR de production. Les temps couvrent
la frame native, présentation comprise, et ne sont pas des temps GPU isolés.
Pour chaque scène : OFF/ON/ON/OFF/ON/OFF/OFF/ON, dix secondes par passage,
avec stabilisation des sections puis quatre secondes de chauffe entre passages.
Le déplacement avance de 120 blocs et laisse les sections se compiler
naturellement, sans vidange artificielle des caches des autres effets.
La scène de déplacement prolonge le bassin hors de la vue initiale : son terrain
est préparé côté serveur de test, puis découvert normalement par le client.
Le vérificateur exige des compilations réelles dans chaque passage en mouvement.
Les moyennes des quatre médianes et P95 par état sont comparées avec les seuils
+5 % et +2 ms. Les temps de compilation de sections sont consignés également.
Les essais courts initiaux, les exécutions concurrentes et les vérifications
incomplètes du limiteur restent conservés comme preuves de développement ;
ils ne fondent pas ces résultats. Les séries finales ont été exécutées après
la fin du chantier SSR. Les variations négatives sont du bruit de mesure,
pas une promesse d’accélération. Vulkan reste proche de 120 images/s dans
cette chaîne de présentation, malgré le mode IMMEDIATE et l’absence de
limiteur applicatif : les conclusions sont limitées à la machine et aux
conditions ci-dessus.
| Moteur / scène | Médiane OFF → ON (ms) | Variation | P95 OFF → ON (ms) | Δ P95 (ms) |
|---|---|---|---|---|
| vulkan / mixed | 8.069 → 8.092 | +0.29 % | 9.091 → 9.101 | +0.010 |
| vulkan / large | 8.078 → 8.062 | -0.20 % | 9.126 → 9.114 | -0.012 |
| vulkan / moving | 8.123 → 8.103 | -0.24 % | 9.103 → 9.080 | -0.023 |
| opengl / mixed | 4.545 → 4.407 | -3.02 % | 7.080 → 6.733 | -0.347 |
| opengl / large | 4.879 → 5.110 | +4.73 % | 7.519 → 7.767 | +0.248 |
| opengl / moving | 6.817 → 6.338 | -7.02 % | 10.618 → 9.759 | -0.859 |
Les six comparaisons respectent les seuils : médiane ≤ +5 %, P95 ≤ +2 ms. Le cas limitant est la grande surface OpenGL (+4,73 %, +0,248 ms). Les compilations de sections sont mesurées sur le parcours en mouvement :
| Moteur | Sections OFF / ON | Médiane OFF → ON (ms) | P95 OFF → ON (ms) |
|---|---|---|---|
| vulkan | 222 / 220 | 1.889 → 2.186 | 4.307 → 4.898 |
| opengl | 222 / 220 | 1.528 → 1.540 | 5.492 → 5.227 |
Pour reproduire, avec Java 25 et un environnement graphique disponible :
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
-PsanctuaryPixelShadows122ClientTests=true -PsanctuaryWater144ClientTests=true \
-PsanctuaryClientNoVsync=true -PsanctuaryQuickTests=true \
-PsanctuaryClientGraphicsBackend=vulkan > build/water144-vulkan.log 2>&1
python3 scripts/check_water_performance.py build/water144-vulkan.log
Répéter avec opengl, sans autre client graphique simultané. Le vérificateur
refuse les séries incomplètes et les dépassements ; il écrit le reçu détaillé
près du journal. Le marqueur WATER144_PASS atteste les contrôles fonctionnels.
Assemblage et publication
Le GameTest serveur dédié reste exclu conformément au refus antérieur de son
EULA. La commande de livraison est ./gradlew check build assemblePack assembleTestPack -x :sanctuary:runGameTest ; la suite complète non exclue
n’est pas déclarée réussie. Les contrôles natifs de l’eau utilisent le serveur
intégré d’un monde jetable. Aucun essai Windows n’est revendiqué.
L’assemblage avec l’exclusion ci-dessus a réussi en 2 min 33 s (126 tâches).
python3 scripts/pack.py check réussit. Les cinq archives passent le contrôle
ZIP ; les deux MRpack embarquent exactement le même JAR Sanctuary et déclarent
Fabric API 0.160.5+26.3 avec l’empreinte du manifeste source. L’export MRpack est
exécuté depuis chaque dossier de staging packwiz. Les dépendances imbriquées
Demeure et JEI sont vérifiées par l’assemblage natif du dépôt.
Release beta.144 publiée depuis
le commit source 83c377acc1b5a4d4137d7a93c397531f77915303 ; tag exact beta.144.
Canal packwiz stable : c8e28d878a55703bdc28fc046242b42b2fcfa9f6.
Deux synchronisations isolées puis deux synchronisations de l’instance
Sanctuary Beta ont réussi, jeu et lanceur fermés. Les secondes passes sont
idempotentes. Un seul JAR Sanctuary est actif, et son SHA-256 correspond
exactement à celui de la release et du manifeste stable.
Les 923 fichiers personnels suivis (sauvegardes, configurations,
packs, captures et mods non gérés) ont conservé leurs empreintes. Aucun monde
personnel ouvert. Sauvegarde des fichiers remplacés :
sanctuary-backups/before-beta.144/.
Les neuf liens publics (cinq livrables, trois captures, manifeste SHA-256)
ont été retéléchargés anonymement et leurs empreintes comparées. Les reçus de
publication, de téléchargement et des quatre synchronisations restent dans
build/water144-publish.log, build/water144-public-downloads.json,
build/water144-isolated.json et build/water144-prism.json.
Le checkout initial beta.122 et ses modifications restent préservés.
Les sources sont sur codex/water-beta144, dans le worktree isolé.
Les archives vérifiées sont aussi copiées dans sanctuary-beta/build/.
Les preuves détaillées restent dans les dossiers ignorés :
build/water144-*.log, build/water144-*-performance.json,
build/water144-*-isolation.json et build/water144-evidence/.
Artefacts vérifiés
| Artefact | Octets | SHA-256 |
|---|---|---|
| sanctuary-beta.144.jar | 11343257 | 1ddbe941f3262da8a1497ea5df4a992e260b80ae95b341623dd68f8f9729ae88 |
| Sanctuary-beta.144.mrpack | 10483196 | d5ef5a781f5ee796117210d1f6afc96172461315faee34097323beff541ce6f0 |
| Sanctuary-Test-beta.144.mrpack | 10502119 | e7cc32ac19ae98ebbe7a9aac3dc08decdf09396c8175b597f87051399ff3812e |
| Sanctuary-Template-beta.144.zip | 4354678 | e510c0040dc9053492715ac91381b7dbc5a6f7c7defbf81e7502d8e18dbb0ee6 |
| Sanctuary-Prism-auto-update.zip | 92423 | c0920823f40d709c14e074d8d949f2cc3681c24140bf86f21c3be345cfc3e1f6 |
Captures comparatives
Pièces jointes de la release, issues du client Vulkan de validation :
OFF,
ON,
profil étang en proximité.
Les captures sont exportées à 854×480 ; la cible de présentation mesurée est
1708×960. Le manifeste SHA-256 inclut les cinq
livrables et ces trois captures. Les journaux et échantillons détaillés restent
locaux, dans build/water144-evidence/ et les reçus build/water144-*.json.