BramStoutProductions / MiEx

A modern Minecraft Exporter
BSD 3-Clause "New" or "Revised" License
55 stars 7 forks source link

Holes In Remove Caves #89

Closed Fyoncle closed 1 month ago

Fyoncle commented 3 months ago

VANILLA Flowers RARELY causing holes in the remove caves thingy image

Fyoncle commented 3 months ago

When using texture packs it also doesnt seem like backface culling working for leaves and stuff

VANILLA LEAVES.

BramStout commented 3 months ago

VANILLA Flowers RARELY causing holes in the remove caves thingy image

This isn't "remove caves", that's a completely different thing. This looks like an issue with occlusion culling (removing faces between blocks that occlude each other). It looks like flowers can trigger a block face to get culled.

A couple of questions: Does it always occlude the same faces, when doing multiple exports of the same region? Does it do this with any resource pack, or only with a specific resource pack?

BramStout commented 3 months ago

When using texture packs it also doesnt seem like backface culling working for leaves and stuff

VANILLA LEAVES.

I'm not entirely sure what you mean with this. Could you elaborate?

Fyoncle commented 3 months ago

When using texture packs it also doesnt seem like backface culling working for leaves and stuff VANILLA LEAVES.

I'm not entirely sure what you mean with this. Could you elaborate?

Basically leaves not culling, all the faces inside them is also exported instead of only the outside of them. That is completely destructive at shadows and stuff in resource packs that doesn't use alpha for leaves but only have a solid texture. I think you stated a way to make specific blocks have special things depending on the config, but i'm not sure.

BramStout commented 3 months ago

When using texture packs it also doesnt seem like backface culling working for leaves and stuff VANILLA LEAVES.

I'm not entirely sure what you mean with this. Could you elaborate?

Basically leaves not culling, all the faces inside them is also exported instead of only the outside of them. That is completely destructive at shadows and stuff in resource packs that doesn't use alpha for leaves but only have a solid texture. I think you stated a way to make specific blocks have special things depending on the config, but i'm not sure.

Minecraft renders the insides of leaves, so MiEx does this as well by default. You can change this in the miex_config.json file. In there you have the leavesOcclusion which tells MiEx to export out the blocks specified in this list the way that Minecraft renders leaves (a.k.a. keep the inside faces). You also have transparentOcclusion which tells MiEx to export out the blocks specified in this list the way that Minecraft renders normal transparent blocks (a.k.a. without inside faces but it doesn't occlude solid blocks so the log blocks still show up). You can also have it not in either list, in which case MiEx exports out the block as if it's a solid opaque block and it'll occlude other blocks, which also means no inner faces.

What you can do is add the following JSON data into a miex_config.json file in the resource pack that has solid leaves:

{
    "leavesOcclusion.remove": ["acacia_leaves", "azalea_leaves" , "birch_leaves", "cherry_leaves", 
                                   "dark_oak_leaves", "jungle_leaves", "oak_leaves", "spruce_leaves", 
                                   "mangrove_leaves", "flowering_azalea_leaves"]
}

This basically removes the leaves blocks from the leavesOcclusion causing MiEx to see them as solid opaque blocks.

If the leaves textures do have transparency, but you just don't want the inner faces then you can do this:

{
    "leavesOcclusion.remove": ["acacia_leaves", "azalea_leaves" , "birch_leaves", "cherry_leaves", 
                                   "dark_oak_leaves", "jungle_leaves", "oak_leaves", "spruce_leaves", 
                                   "mangrove_leaves", "flowering_azalea_leaves"],
    "transparentOcclusion.add": ["acacia_leaves", "azalea_leaves" , "birch_leaves", "cherry_leaves", 
                                   "dark_oak_leaves", "jungle_leaves", "oak_leaves", "spruce_leaves", 
                                   "mangrove_leaves", "flowering_azalea_leaves"]
}

Which removes the leaves from leavesOcclusion and adds them to transparentOcclusion causing MiEx to see them as normal transparent blocks, where it'll remove inner faces but these transparent blocks don't occlude solid opaque blocks.