128 lines
7.1 KiB
Markdown
128 lines
7.1 KiB
Markdown
# LIGHT-141 — Direction locale pour les normales PBR
|
||
|
||
Socle beta.140 `c9f5c56`, branche `codex/directional-lights-beta141`.
|
||
Minecraft 26.3 / Java 25. Livraison beta.141.
|
||
|
||
## Contrat
|
||
|
||
Estimer une direction d'arrivée depuis les six voisins du champ lumineux,
|
||
avec intensité et confiance. Conserver cette estimation dans une texture
|
||
compacte reconstruite avec le champ, uniquement quand le PBR est actif.
|
||
Les sources portées utilisent leurs positions déjà disponibles. Brancher ces
|
||
directions sur les normales et reflets PBR existants, sans nouveau bouton.
|
||
Les sources opposées doivent réduire la directionnalité, sans bascule brutale.
|
||
Les champs précédent/courant gardent leur fondu et les obstacles restent pris
|
||
en compte pour les blocs posés. Aucun changement de lumière de gameplay,
|
||
de sauvegarde ou de génération ; aucune promesse de lancer de rayons exact.
|
||
|
||
## Programme de vérification
|
||
|
||
Contrôles natifs OpenGL/Vulkan : direction, sources opposées, murs, rendu de
|
||
relief en intérieur, déplacement des sources, transitions et PBR OFF.
|
||
Régression des lumières beta.139/140 puis check/build et assemblage. GameTest
|
||
serveur dédié exclu selon le refus EULA antérieur. Aucun monde personnel ouvert.
|
||
|
||
## Réalisation
|
||
|
||
Le champ RGB conserve une texture directionnelle RGBA8 supplémentaire :
|
||
les trois composantes codent la direction pondérée, l'alpha sa réponse lumineuse.
|
||
Les voisins plus lumineux et accessibles contribuent à l'estimation ; les
|
||
arrivées opposées s'annulent dans le vecteur, sans supprimer l'éclairage natif.
|
||
Le shader interpole les moments pondérés avant normalisation, y compris entre
|
||
les champs précédent et courant. La confiance réduit le relief quand aucune
|
||
direction ne domine.
|
||
|
||
Cette texture est préparée dans le budget de reconstruction existant, avec
|
||
un maximum de six voisins par cellule éclairée et une table d'énergie réutilisée.
|
||
Aucune recherche de sources ni rayons par pixel pour les blocs posés. La
|
||
lecture GPU interpole huit cellules par champ ; les deux champs sont utilisés
|
||
pendant le fondu. Les sources mobiles réutilisent les positions, intensités et
|
||
transitions déjà collectées, dans la limite existante de 128 sources.
|
||
|
||
Une texture directionnelle occupe environ 1,5 Mo à 16 blocs de distance et
|
||
19 Mo à 64 blocs, par copie CPU/GPU ; deux champs coexistent lors des transitions.
|
||
Le champ directionnel n'est construit que si PBR est actif avec une intensité
|
||
non nulle. Sa désactivation libère les directions après la transition.
|
||
Le coût est borné par ces réglages, sans garantie de FPS.
|
||
|
||
La passe PBR applique la différence entre normale de base et normale perturbée,
|
||
puis un reflet GGX local. Elle garde sa portée de 32 blocs et les réglages PBR
|
||
existants ; Lumières colorées doit être actif. Le soleil et la lune continuent
|
||
à fonctionner lorsque les lumières colorées sont coupées. Les aides FR/EN
|
||
expliquent cette dépendance.
|
||
|
||
C'est une direction dominante approximative : deux lumières colorées opposées
|
||
ne produisent pas deux reflets indépendants. Les sources mobiles gardent la
|
||
propagation radiale et les limites d'occultation existantes. Les normales PBR
|
||
concernent les surfaces de blocs prises en charge, pas tous les modèles de mobs.
|
||
Les exclusions existantes des panoramas et de l'immersion restent inchangées.
|
||
|
||
## Premier essai ciblé
|
||
|
||
L'essai natif OpenGL ciblé réussit en **1 min 12 s** : direction gauche/droite,
|
||
annulation des sources opposées avec énergie conservée, occultation par un mur,
|
||
relief sur la pierre en intérieur et avec une torche en main, stabilité au repos,
|
||
libération des directions avec PBR OFF et maintien du chemin solaire avec
|
||
Lumières colorées OFF. La somme d'écarts PBR OFF/ON sur la pierre vaut 878 114
|
||
au réglage PBR 100 % ; c'est une comparaison de pixels, pas une mesure de FPS.
|
||
Log : `build/directional141-focused.log`.
|
||
|
||
Les essais de préparation ont révélé un conflit de nom de matrice GLSL, corrigé,
|
||
puis des erreurs de fixture (angle 180° normalisé par Minecraft, suppression
|
||
d'entités alors que la sélection était vide, commande d'heure déjà à minuit),
|
||
corrigées sans changer le rendu.
|
||
|
||
## Validation complète OpenGL
|
||
|
||
La chaîne complète réussit en **3 min 1 s** sur OpenGL / Apple M1 :
|
||
`COLORED139_PASS`, `COLORED140_PASS` et `DIRECTIONAL141_PASS`.
|
||
Elle réunit les contrôles de couleurs, objets portés, caméra, occultation,
|
||
rechargement des ressources, préférences, distances/fondus et directions PBR.
|
||
Le test ciblé est reproductible avec `-PsanctuaryDirectional141Only=true` ;
|
||
la chaîne complète utilise `-PsanctuaryDirectional141ClientTests=true` avec
|
||
les deux suites de lumières existantes.
|
||
Log : `build/directional141-opengl.log`. Captures natives conservées dans
|
||
`build/directional141-opengl-screenshots/`. Comparaison autonome sans retraitement :
|
||
`build/Shader-beta.141-comparaison.html`.
|
||
|
||
## Validation complète Vulkan
|
||
|
||
La même chaîne réussit en **2 min 56 s** sur Vulkan / Apple M1, MoltenVK 1.4.2,
|
||
profondeur 0–1 et transparence améliorée. Les trois marqueurs de réussite sont
|
||
présents dans `build/directional141-vulkan.log`. L'écart PBR local OFF/ON vaut
|
||
878 107, contre 878 114 sous OpenGL dans cette scène. Les captures natives sont
|
||
conservées dans `build/directional141-vulkan-screenshots/`.
|
||
Les deux moteurs vérifient la compilation, les chemins actifs et désactivés,
|
||
le cache, les murs, les sources opposées et portées, ainsi que les régressions
|
||
beta.139/140. Pas de validation des pilotes Windows de l'utilisateur revendiquée.
|
||
|
||
## Construction et archives
|
||
|
||
`./gradlew check build assemblePack assembleTestPack -x :sanctuary:runGameTest`
|
||
réussit en **2 min 35 s**, 126 tâches. Le GameTest serveur dédié reste exclu
|
||
selon le refus EULA antérieur. Les suites clientes ci-dessus ont été exécutées
|
||
séparément. Log : `build/shader141-build.log`.
|
||
|
||
Comparaison à beta.140 : **8 entrées de production modifiées**, limitées au
|
||
champ lumineux, à sa préparation avant le PBR, au shader PBR et aux aides FR/EN.
|
||
Les archives normale/Test contiennent le même JAR Sanctuary, sans classes
|
||
de test. Version, dépendances exactes, sources des JAR, textures de gemmes et
|
||
de la clé de Steve, et template complet sont vérifiés.
|
||
Reçu : `build/shader141-artifact.json`.
|
||
|
||
SHA-256 du JAR : `660f29c3fa77fee4de6a8db5673c61619985804494f70e961998da36f396d0f1`.
|
||
|
||
- Sanctuary-beta.141.mrpack : `08df23dac9e98fbfa2935f747345c38244bddc3a3d9371c6416f251e85a7eb19`.
|
||
- Sanctuary-Test-beta.141.mrpack : `a300ef5bfff7b6990c9f5c2760e9c3a23d7a27aeb10b8f04d29db9a7409fa0e1`.
|
||
|
||
## Livraison
|
||
|
||
[Release beta.141](https://git.botsu.net/koka/sanctuary-beta/releases/tag/beta.141)
|
||
publiée sur le commit source `93ed5574a4f77bd3a083b254498f4994efe31179` ; canal stable
|
||
`7e6c84400f80db24bf5204cd21d628194ae9f0f7` vérifié après publication.
|
||
Deux synchronisations isolées puis deux dans la même instance Sanctuary Beta
|
||
réussissent. Les **923 fichiers personnels** suivis gardent leurs hashes.
|
||
Sauvegarde préalable : `sanctuary-backups/before-beta.141/`. Aucun monde personnel
|
||
ouvert. Reçus : `build/shader141-isolated.json` et `build/shader141-prism.json`.
|
||
Archives normale/Test/template et comparaison copiées dans `sanctuary-beta/build/`.
|