Open Ayliroe opened 2 years ago
I was pondering on the same issue for a while, I was thinking of having 2 Materials (One base martials with texture arrays) and one for fluids like water with some other effects, for a while I as thinking on creating 2 separate meshed that means 2 runs of meshing algorithms which won't be performant, Didn't think of mesh sections. this is a nice scalable solution. I'll be sure to include this and credit you.
Thanks
What is GetID on the third image?
Here's an implementation I found working you can add to your tutorial:
ChunkBase.h:
(A blueprint-accessible array for materials, plus arrays for the material struct and vertices instead of single values)
ChunkBase.cpp:
(On clearing, empty the arrays then refresh using the total amount of materials, not blocks)
NaiveChunk.cpp, in GenerateMesh():
(Get the material for the current block's face, minus 2 to skip null and air enums, clamp as a safety, then pass it to CreateFace() )
NaiveChunk.cpp, in CreateFace():
(Switch all mesh structs and the vertex int to the new arrays)
GreedyChunk.cpp, GenerateMesh():
(Same as NaiveChunk, but using CurrentMask.Block for the face's material)
ApplyMesh():
(First clear all previous sections, then generate a new one for each material on the chunk)
Basically the same code as before, but generates one unique section for each different block material. Straightforward to scale-up (just add materials to the array) and supports both naive/greedy meshing. Maybe you had something in mind too of the like.