129 lines
7.3 KiB
Markdown
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.
|