Files
sanctuary-beta/docs/directional-lights-beta141.md
2026-09-18 04:13:00 +02:00

7.1 KiB
Raw Permalink Blame History

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 01 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 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/.