Files
sanctuary-beta/docs/natural-water-beta144.md
T
2026-09-18 18:42:50 +02:00

11 KiB
Raw Blame History

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. Lintensité (0100 %, défaut 100 %) agit sur la surface et limmersion. Linterrupteur ou 0 % retrouve le rendu précédent. Les préférences existantes restent conservées ; un moteur externe suspend leffet comme les autres effets natifs Sanctuary.

La couleur native du biome reste la base, y compris les variantes docé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

Leau 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 limplé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. Leau sous un toit suit son fond, pas l’éclairage du bâtiment.

La ressource client assets/sanctuary/water_materials.json accepte deux listes didentifiants 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 dun 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 lenvoi 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 nest 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 ; leffet ne déclenche aucune reconstruction pour une lumière mobile. Un changement doption reconstruit seulement les sections chargées contenant de leau ; les caches des autres effets restent disponibles. Le cache temporaire disparaît avec sa compilation, sans historique de monde.

Sous leau, 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 lolive 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 ny a pas de simulation dabsorption 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 deau, 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 lobjet dassertions supplémentaires. Aucun autre client de test concurrent na é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 leau 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 lattente 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 daccélération. Vulkan reste proche de 120 images/s dans cette chaîne de présentation, malgré le mode IMMEDIATE et labsence 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 nest pas déclarée réussie. Les contrôles natifs de leau utilisent le serveur intégré dun monde jetable. Aucun essai Windows nest revendiqué.

Lassemblage avec lexclusion 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 lempreinte du manifeste source. Lexport MRpack est exécuté depuis chaque dossier de staging packwiz. Les dépendances imbriquées Demeure et JEI sont vérifiées par lassemblage natif du dépôt.

La release, le canal et linstance ne sont pas encore mis à jour. 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 fichier public Sanctuary-beta.144-SHA256SUMS.txt 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.