Files
sanctuary-beta/docs/pixel-shadows-source122.md
koka 00be1eb0d0
Build Sanctuary / build (push) Canceled after 0s
Integrate native pixel shadows over beta.126 for beta.127
2026-09-17 17:51:19 +02:00

129 lines
7.3 KiB
Markdown

# Préparation locale des ombres portées pixélisées (ancien numéro beta.122)
Ticket du 17 septembre 2026, branche locale `codex/pixel-shadows-beta122`.
Cette préparation n'a jamais été publiée sous le numéro beta.122, déjà utilisé
par une autre livraison. Elle est intégrée au socle beta.126 et livrée en
[beta.127](shader-beta127.md). Les chemins et mesures ci-dessous décrivent
les essais historiques dans le dossier de préparation.
Demande : ajouter aux réglages de Sanctuary · Vanilla Light des ombres portées
pixélisées, avec une finesse et une distance réglables.
## Utilisation
Dans **Options → Shaders**, activer **Sanctuary · Vanilla Light**, puis
**Ombres portées pixélisées**. L'option est désactivée par défaut pour conserver
le coût et le rendu des installations existantes. Les choix sont :
- finesse de **8, 16 ou 32 pixels par bloc**, défaut 16 ;
- distance de **16, 32 ou 64 blocs**, défaut 32.
Ces préférences sont conservées dans `config/sanctuary-shaders.json`, avec les
anciens champs de couleur. Leurs valeurs numériques sont ramenées aux choix
admis au chargement. Les libellés et explications sont disponibles en FR/EN.
Les réglages s'appliquent sans recharger les ressources.
## Rendu et périmètre
Une carte de profondeur rend les formes d'occultation des blocs solides chargés
autour de la caméra, indépendamment de leur présence à l'écran. Les dalles et
escaliers conservent leurs formes. Le cache est invalidé par les changements de
blocs, les paquets de chunks et les reconstructions du moteur natif.
La direction solaire vient du ciel natif extrait par Minecraft, et respecte
ainsi l'angle solaire de Sanctuary. L'effet s'atténue sous la pluie, à l'horizon,
dans la brume et à la limite de sa portée. Il s'arrête la nuit, dans les dimensions
sans soleil, dans les fluides et lorsqu'un moteur externe suspend Vanilla Light.
La profondeur du monde est lue directement par le GPU après le rendu du monde,
avant la main et l'interface. L'inverse de la projection réelle inclut les effets
de caméra. Les points recevant l'ombre sont arrondis sur une grille ancrée dans
le monde ; le plan de la face est conservé pour limiter les auto-ombres.
La carte solaire utilise également une origine alignée sur ses texels.
Le HUD, la main, les étoiles et les captures panoramiques techniques gardent leur
chemin de rendu. Aucun niveau de lumière de gameplay, règle serveur, sauvegarde
ou générateur n'est changé. Aucune dépendance de rendu n'est ajoutée.
Cette première version couvre les **formes d'occultation des blocs** : les entités
conservent leurs ombres natives ; les feuillages ajourés, modèles non occultants,
block entities animés, eau et verre ne projettent pas de nouvelles silhouettes.
Les transparences et particules déjà composées peuvent recevoir l'assombrissement
du terrain derrière elles. Il n'y a pas d'ombres de lune ou de torches, ni de
séparation de l'éclairage local émissif dans cette passe d'assombrissement.
## Coût et cycle de vie
Les maillages sont mis en cache par section de 16³, avec au plus quatre sections
commencées par image et un budget souple de 3 ms pour leur construction. Les
ombres apparaissent progressivement pendant la préparation après activation ou
déplacement. Le volume des obstacles part de la portée choisie avec une marge de huit blocs,
puis s’étend vers le soleil sur deux fois cette portée, arrondi aux sections.
Les obstacles au-delà de ce volume ou dans des chunks non chargés ne sont pas
représentés. Les mises à jour de lumière seule ne reconstruisent pas les formes.
Le cache de sommets est plafonné à 96 Mio et omet les formes pathologiques qui
dépassent ses limites. Les textures de profondeur font entre 512 et 4 096 pixels
de côté selon finesse et portée. Le coût exact dépend de la scène et du GPU.
Les ressources sont libérées à la désactivation, au changement de monde, à la
reconstruction des ressources et à l'arrêt du client. Cette livraison est locale :
aucun avancement du canal packwiz ni installation personnelle ne fait partie du
ticket.
## Vérification
Validation native sur **Minecraft 26.3, Java 25, macOS / Apple M1, OpenGL 4.1**,
dans un nouveau monde plat de développement, graine **122** :
- Comparaison GPU activation/désactivation sur une plateforme blanche avec
pilier, dalle et escalier : **920 échantillons assombris**, 63 412 inchangés,
aucun éclairci sur les 64 332 échantillons de sol retenus.
- Pilier entièrement hors du frustum : **42 048 échantillons** restent dans
son ombre. Le retrait du pilier restitue la lumière sur **42 048 / 42 048**
échantillons et préserve les 23 616 échantillons déjà éclairés. Sa repose
restitue la même ombre, sans désactiver le cache entre ces manipulations.
- Les trois finesses et les trois portées sont appliquées en direct ; les cartes
GPU sont redimensionnées aux dimensions attendues. Désactiver l'option libère
la texture et ne soumet plus de passe d'ombres.
- À minuit, activer ou désactiver l'option donne la même image et aucune passe
solaire n'est soumise. Au retour du jour, le rendu reprend.
- Le rechargement des ressources restitue la même image. Les préférences
persistent à la relecture du fichier et leurs valeurs extrêmes sont bornées.
- Menus FR/EN inspectés en capture ; les libellés tiennent dans les contrôles
natifs à la taille de test. Les vues de finesse 8/16/32 sont conservées.
```sh
./gradlew :sanctuary:runClientGameTest \
-PsanctuaryClientTests=true -PsanctuaryPixelShadows122ClientTests=true \
-PsanctuaryClientNoVsync=true -PsanctuaryQuickTests=true
```
Succès en **1 min 17 s**, marqueur `PIXEL_SHADOWS122_CLIENT_PASS` dans
`build/pixel-shadows122-client.log`. Captures inspectées dans
`build/pixel-shadows122-evidence/final/`. Les pixels sont relus uniquement dans
le test ; le code de rendu de production n'effectue aucune lecture CPU de GPU.
Les premiers démarrages ont permis de corriger les identifiants de pipelines,
la directive GLSL `#include` attendue par 26.3 et deux libellés répétés du menu.
La commande de livraison est :
```sh
./gradlew check build assemblePack assembleTestPack -x :sanctuary:runGameTest
```
Le serveur GameTest dédié est exclu, conformément au refus de son EULA déjà
consigné dans les livraisons précédentes. Le test graphique utilise le serveur
intégré de son monde neuf. Aucun monde personnel n'est ouvert.
La construction finale **réussit en 2 min 18 s** (126 tâches), journal
`build/pixel-shadows122-build-final.log`. Le contrôle des archives confirme
**868 sources Java** et **1 869 classes** identiques aux sorties construites,
les ressources GLSL/FR/EN exactes dans le JAR et le template, et le même JAR
dans les profils packwiz normal et Test. Aucune fixture cliente n'est embarquée.
Reçu : `build/pixel-shadows122-artifact.json`.
Artefacts locaux : `mods/sanctuary/build/libs/sanctuary-beta.122.jar`,
`build/packwiz/`, `build/packwiz-test/` et `build/Sanctuary-Template-beta.122.zip`.
SHA-256 du JAR :
`66987681cede1d2adc1dda449078e8fa85310eb2c3fecd7a905d772ce75739c9`.
Pas de mesure de FPS, d'essai Windows/Vulkan, de pack Iris ni de silhouettes
animées revendiqués. Le shader reste un assombrissement graphique appliqué au
rendu opaque et déjà composé, avec les limites de transparence décrites plus haut.