Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fb8705369e | ||
|
|
c3d1443732 | ||
|
|
1967342247 |
@@ -10,6 +10,12 @@ Créer un monde **Sanctuary** en Petit, Moyen ou Grand, puis activer les ancres
|
||||
correspondantes. Le module Sanctuary Test n’est pas requis.
|
||||
[Intégration et vérification du pack beta.224](docs/four-islands-base224.md).
|
||||
|
||||
## beta.298 — normales de l'ancre (préparation locale)
|
||||
|
||||
[Retrait du petit cadre résiduel dans la passe PBR](docs/media-anchor-normals-beta298.md).
|
||||
Le modèle invisible de l'ancre ne doit plus laisser de reflet sur la vidéo
|
||||
avec les shaders Sanctuary activés.
|
||||
|
||||
## beta.297 — correctifs des cadres disponibles
|
||||
|
||||
[Menu de taille à la pose, lecteur au Maj + clic droit et cadre en volume](docs/media-frame-fixes-beta297.md).
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
# MEDIA-07 — normales résiduelles de l'ancre
|
||||
|
||||
Retour du 27 octobre 2026 : une bordure légèrement brillante reste sur la
|
||||
vidéo à l'emplacement de l'ancre, dans le coin inférieur gauche.
|
||||
Branche `codex/media-anchor-model`, préparation **beta.298**, Media **0.3.2**.
|
||||
|
||||
## Cause et correction
|
||||
|
||||
Le bloc est invisible pour le rendu Minecraft, mais conserve un ancien modèle
|
||||
de cadre 1 × 1 avec **30 faces**. La passe PBR de Sanctuary collectait aussi
|
||||
les modèles des blocs invisibles. Elle dessinait donc les normales et le
|
||||
matériau de ce petit cadre, alors que sa couleur n'était pas rendue.
|
||||
Les essais graphiques de MEDIA-06 avaient les shaders Sanctuary désactivés ;
|
||||
ils ne couvraient pas cette passe.
|
||||
|
||||
La collecte PBR des modèles opaques et du verre respecte maintenant
|
||||
`RenderShape.MODEL`. Les fluides gardent leur chemin dédié, y compris l'eau
|
||||
contenue dans un bloc. Le modèle de bloc de l'ancre est également vidé ;
|
||||
sa texture de particules reste disponible. L'objet utilise déjà un modèle
|
||||
indépendant et garde son apparence dans l'inventaire et dans la main.
|
||||
Le grand cadre reste dessiné par son maillage aux dimensions de l'écran.
|
||||
|
||||
Aucun identifiant, paquet, format de données ou règle d'interaction ne change.
|
||||
Les ancres existantes bénéficient du correctif au chargement du client.
|
||||
La sauvegarde et les dimensions ne nécessitent aucune migration.
|
||||
|
||||
## Validation
|
||||
|
||||
Reproduction avec le JAR beta.297 publié : deux clients Vulkan, Sodium,
|
||||
Sound Physics et **shaders Sanctuary/PBR actifs**. Le diagnostic constate
|
||||
`INVISIBLE`, 30 faces et admission de l'ancre dans la passe PBR opaque.
|
||||
Le bois et le verre visibles sont admis dans leurs passes respectives, l'eau
|
||||
dans la passe transparente.
|
||||
|
||||
Après correction, les deux clients constatent **zéro face**, ancre refusée
|
||||
par les deux passes de matériau, PBR réellement appliqué et vidéo en mouvement.
|
||||
Les chemins bois, verre et eau restent admis. Pose, taille 9 × 5 et ouverture
|
||||
du lecteur testées dans le laboratoire ; un clic de pose a dû être rejoué
|
||||
après la réception de l'inventaire du test.
|
||||
|
||||
Captures finales du client A inspectées, en gros plan du coin inférieur gauche,
|
||||
de face et en vue rasante : aucune empreinte du cadre 1 × 1 sur la vidéo.
|
||||
La sortie OpenAL est active sur les deux clients. Le JAR Sanctuary testé,
|
||||
avec un seul Media embarqué et sans sonde, a pour SHA-256
|
||||
`e6fdc36a212dcfcc89d31fbb29bc8eeec9d002cc9223ea6dcbfb31b7df17ec23`.
|
||||
|
||||
`check build assemblePack assembleServerPack :sanctuary-test:exportDuoLaunch`
|
||||
réussis en **3 min 6 s**, 162 tâches, **18 GameTests requis** au profil
|
||||
`property270,claims272,claims277,claims278`, atlas ciblé. Contrats Media inclus.
|
||||
Compilation des vérifications client PBR, y compris les nouveaux contrôles
|
||||
des blocs invisibles et des modèles visibles, réussie en **37 s**. La suite
|
||||
graphique PBR historique complète n'est pas rejouée ; ce parcours ciblé
|
||||
exerce la sélection réelle des matériaux du JAR construit.
|
||||
|
||||
Un lancement de client a automatiquement basculé hors Vulkan après une course
|
||||
d'extraction MoltenVK entre les deux processus : il a été rejeté, arrêté et
|
||||
relancé sous Vulkan. Seuls les relevés Vulkan sont retenus. Après les captures
|
||||
et les relevés valides, le client B s'est arrêté sur l'écriture du journal de
|
||||
la sonde (`No space left on device`). Le disque local ne disposait plus que
|
||||
de 136 Mio au contrôle suivant ; ce parcours ne vaut donc pas essai d'endurance.
|
||||
Ce défaut d'espace appartient au laboratoire, la sonde n'est pas distribuée.
|
||||
|
||||
[Relevé structuré](media-anchor-normals-results.json). Pas de nouvelle mesure
|
||||
de synchronisation vidéo/live ou de source publique. Mur graphique orienté sud.
|
||||
Laboratoires isolés sous `build/media-prototype/anchor-model-*`, captures finales
|
||||
dans `anchor-model-after/client-a/screenshots/`. Aucun monde personnel utilisé.
|
||||
Cette préparation ne modifie pas la version beta.297 actuellement installée
|
||||
sur le canal, la Beta et Prism.
|
||||
@@ -0,0 +1,104 @@
|
||||
{
|
||||
"ticket": "MEDIA-07",
|
||||
"state": "local preparation; beta.297 remains installed",
|
||||
"artifact": {
|
||||
"version": "beta.298",
|
||||
"bytes": 18301295,
|
||||
"sha256": "e6fdc36a212dcfcc89d31fbb29bc8eeec9d002cc9223ea6dcbfb31b7df17ec23",
|
||||
"media_version": "0.3.2",
|
||||
"nested_media_count": 1,
|
||||
"anchor_block_faces": 0,
|
||||
"probe_embedded": false
|
||||
},
|
||||
"backend": "Vulkan",
|
||||
"clients": [
|
||||
{
|
||||
"client": "client-a",
|
||||
"model": {
|
||||
"anchor_model_quads": 0,
|
||||
"anchor_render_shape": "INVISIBLE",
|
||||
"shaders_active": true,
|
||||
"pbr_enabled": true,
|
||||
"pbr_applied": true,
|
||||
"anchor_pbr_opaque": false,
|
||||
"water_pbr_opaque": false,
|
||||
"wood_pbr_opaque": true,
|
||||
"anchor_pbr_transparent": false,
|
||||
"water_pbr_transparent": true,
|
||||
"glass_pbr_transparent": true
|
||||
},
|
||||
"vulkan_video_uploads": 1625
|
||||
},
|
||||
{
|
||||
"client": "client-b",
|
||||
"model": {
|
||||
"anchor_model_quads": 0,
|
||||
"anchor_render_shape": "INVISIBLE",
|
||||
"shaders_active": true,
|
||||
"pbr_enabled": true,
|
||||
"pbr_applied": true,
|
||||
"anchor_pbr_opaque": false,
|
||||
"water_pbr_opaque": false,
|
||||
"wood_pbr_opaque": true,
|
||||
"anchor_pbr_transparent": false,
|
||||
"water_pbr_transparent": true,
|
||||
"glass_pbr_transparent": true
|
||||
},
|
||||
"vulkan_video_uploads": 1448
|
||||
}
|
||||
],
|
||||
"before": {
|
||||
"version": "beta.297",
|
||||
"clients": [
|
||||
{
|
||||
"client": "client-a",
|
||||
"anchor_model_quads": 30,
|
||||
"anchor_render_shape": "INVISIBLE",
|
||||
"shaders_active": true,
|
||||
"pbr_enabled": true,
|
||||
"anchor_pbr_opaque": true,
|
||||
"water_pbr_opaque": false,
|
||||
"wood_pbr_opaque": true,
|
||||
"anchor_pbr_transparent": false,
|
||||
"water_pbr_transparent": true,
|
||||
"glass_pbr_transparent": true
|
||||
},
|
||||
{
|
||||
"client": "client-b",
|
||||
"anchor_model_quads": 30,
|
||||
"anchor_render_shape": "INVISIBLE",
|
||||
"shaders_active": true,
|
||||
"pbr_enabled": true,
|
||||
"anchor_pbr_opaque": true,
|
||||
"water_pbr_opaque": false,
|
||||
"wood_pbr_opaque": true,
|
||||
"anchor_pbr_transparent": false,
|
||||
"water_pbr_transparent": true,
|
||||
"glass_pbr_transparent": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"build": {
|
||||
"check_build_assemble": "passed",
|
||||
"duration": "3m06s",
|
||||
"tasks": 162,
|
||||
"required_gametests": 18,
|
||||
"client_checks_compile": "passed, 37s, 6 tasks; historical PBR graphic suite not rerun"
|
||||
},
|
||||
"limits": [
|
||||
"No new live synchronization or public-source validation",
|
||||
"Graphical wall faces south",
|
||||
"Canonical Prism and dedicated Beta unchanged",
|
||||
"One automatic fallback after concurrent MoltenVK extraction was rejected and the client relaunched in Vulkan",
|
||||
"Client B stopped after valid samples and captures because the probe could not write its log: No space left on device; not an endurance test"
|
||||
],
|
||||
"graphics_checks": {
|
||||
"lower_left_front_video": "inspected, no 1x1 frame imprint",
|
||||
"lower_left_grazing_video": "inspected, no 1x1 frame imprint",
|
||||
"placement_resize_reader": "passed; placement replayed after inventory arrival",
|
||||
"final_screenshots": [
|
||||
"anchor-model-shaders-front-settled.png",
|
||||
"anchor-model-shaders-side-settled.png"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
# Sanctuary beta.298
|
||||
|
||||
Le petit cadre brillant dans le coin inférieur gauche de la vidéo est corrigé
|
||||
avec les shaders Sanctuary activés. Le modèle invisible de l'ancre ne fournit
|
||||
plus de faces à la passe des normales PBR. Le grand cadre conserve sa taille
|
||||
et son épaisseur ; le lecteur et le redimensionnement gardent leurs gestes.
|
||||
|
||||
Les écrans déjà posés conservent leur source, leurs dimensions et leurs données.
|
||||
Aucun bloc à remplacer ni conversion de sauvegarde. Media passe en 0.3.2 ;
|
||||
Minecraft 26.3, Fabric et Dream Displays 1.10.4 restent inchangés.
|
||||
|
||||
Correctif vérifié à deux clients Vulkan avec PBR actif, vidéo en mouvement et
|
||||
gros plans de face et en vue rasante. Le détail des contrôles et leurs limites
|
||||
est dans `docs/media-anchor-normals-beta298.md` ; pas de nouvelle validation
|
||||
des sources publiques ni de l'endurance du lecteur.
|
||||
+1
-1
@@ -8,7 +8,7 @@ Plateforme épinglée : Minecraft **26.3**, Fabric Loader **0.19.5**, Fabric API
|
||||
## Préparer le kit
|
||||
|
||||
Dans les sources : `./gradlew check build assemblePack assembleServerPack`.
|
||||
Le kit de la livraison courante est `build/Sanctuary-Server-beta.297.zip` ; les manifestes locaux sont
|
||||
Le kit de la livraison courante est `build/Sanctuary-Server-beta.298.zip` ; les manifestes locaux sont
|
||||
dans `build/packwiz-server/`. Le ZIP est un amorçage : il télécharge les mods
|
||||
depuis le canal au premier démarrage, il n'est pas une copie hors ligne du pack.
|
||||
Il n'est utilisable sur le canal public qu'après publication de cette version.
|
||||
|
||||
+2
-2
@@ -9,8 +9,8 @@ loom_version=1.17.20
|
||||
fabric_api_version=0.160.5+26.3
|
||||
|
||||
# Release counter: beta.001, .002, .003, ... (see docs/versioning.md).
|
||||
mod_version=beta.297
|
||||
pack_version=beta.297
|
||||
mod_version=beta.298
|
||||
pack_version=beta.298
|
||||
resource_pack_version=beta.121
|
||||
maven_group=fr.koka.sanctuary
|
||||
jei_version=30.32.0-sanctuary.4
|
||||
|
||||
@@ -20,6 +20,10 @@ public final class AnchorProbeClient {
|
||||
public static void tick(Minecraft mc){
|
||||
if(mc.player==null||mc.level==null)return;
|
||||
var ctl=Probe.control();String who=System.getProperty("sanctuary.mediaClient");
|
||||
if(ctl.has("shaders_enabled")&&fr.koka.sanctuary.client.shader.VanillaLight.enabled()!=ctl.get("shaders_enabled").getAsBoolean())
|
||||
fr.koka.sanctuary.client.shader.VanillaLight.setEnabled(ctl.get("shaders_enabled").getAsBoolean());
|
||||
if(ctl.has("pbr_enabled")&&fr.koka.sanctuary.client.shader.VanillaLight.pbr()!=ctl.get("pbr_enabled").getAsBoolean())
|
||||
fr.koka.sanctuary.client.shader.VanillaLight.setPbr(ctl.get("pbr_enabled").getAsBoolean());
|
||||
if(ctl.has("hide_gui")&&mc.gui.hud.isHidden()!=ctl.get("hide_gui").getAsBoolean())mc.gui.hud.toggle();
|
||||
boolean a=who.endsWith("a");
|
||||
Vec3 aim=a?new Vec3(-3.5,81.5,.5):new Vec3(0,83,1);
|
||||
@@ -33,6 +37,7 @@ public final class AnchorProbeClient {
|
||||
net.minecraft.client.Screenshot.grab(mc.gameDirectory,"anchor-"+Probe.phase+".png",mc.gameRenderer.mainRenderTarget(),1,m->{});captured=Probe.phase;
|
||||
}
|
||||
var row=new JsonObject();row.addProperty("step",done);row.addProperty("screen",mc.gui.screen()==null?"":mc.gui.screen().getClass().getSimpleName());
|
||||
if(ctl.has("inspect_anchor_model"))inspectModel(mc,row);
|
||||
var target=Anchors.target(mc.level,mc.player);row.addProperty("target",target!=null);if(target!=null)row.addProperty("distance",target.distance());
|
||||
if(mc.gui.screen() instanceof AnchorScreen screen){var v=screen.snapshot();row.addProperty("settings",v.settings());row.addProperty("editable",v.editable());row.addProperty("message",v.message());row.addProperty("width",v.width());row.addProperty("height",v.height());}
|
||||
else if(mc.gui.screen()!=null&&mc.gui.screen().getClass().getSimpleName().equals("DisplayMenu")){
|
||||
@@ -40,6 +45,27 @@ public final class AnchorProbeClient {
|
||||
}
|
||||
Probe.write(Probe.LAB.resolve("anchor-"+who+".jsonl"),row);
|
||||
}
|
||||
private static void inspectModel(Minecraft mc,JsonObject row){
|
||||
var state=mc.level.getBlockState(AnchorProbe.POS);
|
||||
if(!state.is(Anchors.BLOCK))return;
|
||||
var parts=new java.util.ArrayList<net.minecraft.client.renderer.block.dispatch.BlockStateModelPart>();
|
||||
mc.getModelManager().getBlockStateModelSet().get(state).collectParts(net.minecraft.util.RandomSource.create(0),parts);
|
||||
int quads=0;for(var part:parts)for(int f=0;f<7;f++)quads+=part.getQuads(f==6?null:Direction.values()[f]).size();
|
||||
row.addProperty("anchor_model_quads",quads);row.addProperty("anchor_render_shape",state.getRenderShape().name());
|
||||
row.addProperty("shaders_active",fr.koka.sanctuary.client.shader.VanillaLight.active());
|
||||
row.addProperty("pbr_enabled",fr.koka.sanctuary.client.shader.VanillaLight.pbr());
|
||||
try{
|
||||
var pbr=fr.koka.sanctuary.client.shader.ProceduralPbr.class.getDeclaredMethod("applied");pbr.setAccessible(true);
|
||||
row.addProperty("pbr_applied",(boolean)pbr.invoke(null));
|
||||
var type=Class.forName("fr.koka.sanctuary.client.shader.PbrTerrain");var ctor=type.getDeclaredConstructor(boolean.class);ctor.setAccessible(true);
|
||||
var candidate=type.getDeclaredMethod("candidate",net.minecraft.world.level.block.state.BlockState.class);candidate.setAccessible(true);
|
||||
for(boolean transparent:new boolean[]{false,true})try(var terrain=(AutoCloseable)ctor.newInstance(transparent)){
|
||||
row.addProperty(transparent?"anchor_pbr_transparent":"anchor_pbr_opaque",(boolean)candidate.invoke(terrain,state));
|
||||
row.addProperty(transparent?"water_pbr_transparent":"water_pbr_opaque",(boolean)candidate.invoke(terrain,net.minecraft.world.level.block.Blocks.WATER.defaultBlockState()));
|
||||
row.addProperty(transparent?"glass_pbr_transparent":"wood_pbr_opaque",(boolean)candidate.invoke(terrain,(transparent?net.minecraft.world.level.block.Blocks.GLASS:net.minecraft.world.level.block.Blocks.OAK_PLANKS).defaultBlockState()));
|
||||
}
|
||||
}catch(Exception e){throw new IllegalStateException(e);}
|
||||
}
|
||||
private static boolean perform(Minecraft mc,String step,JsonObject ctl){
|
||||
if(step.equals("place")){
|
||||
mc.gameMode.useItemOn(mc.player,InteractionHand.MAIN_HAND,new BlockHitResult(new Vec3(-3.5,81.5,1),Direction.SOUTH,new BlockPos(-4,81,0),false));return true;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
plugins { id 'java-library' }
|
||||
|
||||
group = rootProject.maven_group
|
||||
version = '0.3.1'
|
||||
version = '0.3.2'
|
||||
base { archivesName = 'sanctuary-media' }
|
||||
evaluationDependsOn(':sanctuary')
|
||||
|
||||
|
||||
+2
-165
@@ -1,170 +1,7 @@
|
||||
{
|
||||
"ambientocclusion": false,
|
||||
"textures": {
|
||||
"particle": "minecraft:block/oak_planks",
|
||||
"wood": "minecraft:block/oak_planks",
|
||||
"redstone": "minecraft:block/redstone_block"
|
||||
"particle": "minecraft:block/oak_planks"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"to": [
|
||||
16,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"faces": {
|
||||
"north": {
|
||||
"texture": "#wood"
|
||||
},
|
||||
"south": {
|
||||
"texture": "#wood"
|
||||
},
|
||||
"east": {
|
||||
"texture": "#wood"
|
||||
},
|
||||
"west": {
|
||||
"texture": "#wood"
|
||||
},
|
||||
"up": {
|
||||
"texture": "#wood"
|
||||
},
|
||||
"down": {
|
||||
"texture": "#wood"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [
|
||||
0,
|
||||
15,
|
||||
0
|
||||
],
|
||||
"to": [
|
||||
16,
|
||||
16,
|
||||
1
|
||||
],
|
||||
"faces": {
|
||||
"north": {
|
||||
"texture": "#wood"
|
||||
},
|
||||
"south": {
|
||||
"texture": "#wood"
|
||||
},
|
||||
"east": {
|
||||
"texture": "#wood"
|
||||
},
|
||||
"west": {
|
||||
"texture": "#wood"
|
||||
},
|
||||
"up": {
|
||||
"texture": "#wood"
|
||||
},
|
||||
"down": {
|
||||
"texture": "#wood"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [
|
||||
0,
|
||||
1,
|
||||
0
|
||||
],
|
||||
"to": [
|
||||
1,
|
||||
15,
|
||||
1
|
||||
],
|
||||
"faces": {
|
||||
"north": {
|
||||
"texture": "#wood"
|
||||
},
|
||||
"south": {
|
||||
"texture": "#wood"
|
||||
},
|
||||
"east": {
|
||||
"texture": "#wood"
|
||||
},
|
||||
"west": {
|
||||
"texture": "#wood"
|
||||
},
|
||||
"up": {
|
||||
"texture": "#wood"
|
||||
},
|
||||
"down": {
|
||||
"texture": "#wood"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [
|
||||
15,
|
||||
1,
|
||||
0
|
||||
],
|
||||
"to": [
|
||||
16,
|
||||
15,
|
||||
1
|
||||
],
|
||||
"faces": {
|
||||
"north": {
|
||||
"texture": "#wood"
|
||||
},
|
||||
"south": {
|
||||
"texture": "#wood"
|
||||
},
|
||||
"east": {
|
||||
"texture": "#wood"
|
||||
},
|
||||
"west": {
|
||||
"texture": "#wood"
|
||||
},
|
||||
"up": {
|
||||
"texture": "#wood"
|
||||
},
|
||||
"down": {
|
||||
"texture": "#wood"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [
|
||||
1,
|
||||
1,
|
||||
0
|
||||
],
|
||||
"to": [
|
||||
3,
|
||||
3,
|
||||
2
|
||||
],
|
||||
"faces": {
|
||||
"north": {
|
||||
"texture": "#redstone"
|
||||
},
|
||||
"south": {
|
||||
"texture": "#redstone"
|
||||
},
|
||||
"east": {
|
||||
"texture": "#redstone"
|
||||
},
|
||||
"west": {
|
||||
"texture": "#redstone"
|
||||
},
|
||||
"up": {
|
||||
"texture": "#redstone"
|
||||
},
|
||||
"down": {
|
||||
"texture": "#redstone"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
"elements": []
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"id": "sanctuary_media",
|
||||
"version": "0.3.1",
|
||||
"version": "0.3.2",
|
||||
"name": "Sanctuary Media",
|
||||
"license": "GPL-3.0-or-later",
|
||||
"environment": "*",
|
||||
|
||||
+6
@@ -142,6 +142,12 @@ public final class Pbr134ClientChecks implements FabricClientGameTest {
|
||||
check(failures==0,"Close PBR stays stable under subpixel motion: failing distances="+failures);
|
||||
}
|
||||
private static void materials(){
|
||||
try(var materials=new PbrMaterials()){
|
||||
check(!materials.candidate(Blocks.BARRIER.defaultBlockState())&&!materials.candidate(Blocks.MOVING_PISTON.defaultBlockState()),
|
||||
"Invisible and entity-rendered blocks cannot leave normals from their baked terrain model");
|
||||
check(materials.candidate(Blocks.OAK_PLANKS.defaultBlockState())&&materials.candidate(Blocks.GLASS.defaultBlockState()),
|
||||
"Visible wooden and glass terrain models keep their material pass");
|
||||
}
|
||||
int[] flat=new int[16];Arrays.fill(flat,0xFF808080);var profile=PbrMaterials.profile("bricks");
|
||||
for(int p:PbrMaterials.generate(flat,4,4,profile))check((p>>8&0xFFFF)==0x8080,"Flat source has neutral normal");
|
||||
flat[5]=0xFFFFFFFF;var slope=PbrMaterials.generate(flat,4,4,profile);check((slope[4]>>16&255)<128&&(slope[6]>>16&255)>128,"Height gradients produce opposite normal slopes");
|
||||
|
||||
@@ -24,7 +24,9 @@ final class PbrMaterials implements AutoCloseable {
|
||||
return state.getFluidState().is(net.minecraft.tags.FluidTags.WATER)&&state.liquid()?2:
|
||||
(name.equals("glass")||name.endsWith("_glass")||name.equals("glass_pane")||name.endsWith("_glass_pane"))?1:0;
|
||||
}
|
||||
boolean candidate(BlockState state){return !state.isAir();}
|
||||
// Invisible blocks may still have a baked model (for particles or items).
|
||||
// Their hidden faces must never enter the normal/material buffer.
|
||||
boolean candidate(BlockState state){return state.getRenderShape()==net.minecraft.world.level.block.RenderShape.MODEL;}
|
||||
Profile profile(BlockState state){return profiles.computeIfAbsent(state,s->profile(BuiltInRegistries.BLOCK.getKey(s.getBlock()).getPath()));}
|
||||
static Profile profile(String name){
|
||||
if(name.equals("water"))return new Profile(.12f,0);
|
||||
|
||||
@@ -31,7 +31,7 @@ final class PbrTerrain implements AutoCloseable {
|
||||
PbrTerrain(){this(false);}
|
||||
PbrTerrain(boolean transparent){this.transparent=transparent;maxBytes=(transparent?8L:24L)*1024*1024;}
|
||||
private boolean candidate(net.minecraft.world.level.block.state.BlockState state){
|
||||
return transparent ? PbrMaterials.family(state)==1||state.getFluidState().is(net.minecraft.tags.FluidTags.WATER)
|
||||
return transparent ? (materials.candidate(state)&&PbrMaterials.family(state)==1)||state.getFluidState().is(net.minecraft.tags.FluidTags.WATER)
|
||||
: materials.candidate(state)&&!state.liquid()&&PbrMaterials.family(state)==0;
|
||||
}
|
||||
private final Long2ObjectOpenHashMap<Section> sections=new Long2ObjectOpenHashMap<>();
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
name = "Sanctuary"
|
||||
author = "KOKA99CAB"
|
||||
version = "beta.297"
|
||||
version = "beta.298"
|
||||
pack-format = "packwiz:1.1.0"
|
||||
|
||||
[index]
|
||||
|
||||
Reference in New Issue
Block a user