
As you can see from the pic there are about 131k mini meshes being drawn. the way I believe Minecraft does it (as do I), is display all the blocks that have either Air or some transparency adjacent to them. So, if a block is in the middle of 6 Rock blocks it doesn't get displayed however if one of those blocks was say Air or a flower it would be displayed. As a consequence of this a lot of the blocks underground have to be displayed even if you don't see them from the surface (because of caves etc). I assume thats why when playing minecraft and the landscape is first being loaded/drawn you see a lot of lava/underground water etc.
I didn't even go down the road of using standard meshes because I knew there would be so many of them. Admittedly you lose a lot of functionality using minimeshes but you just have to take the hit.
Quite a big hit I have is the multi textured cubes. If you look closely at the pic you can see cubes that have a grassy on top and a grassy/soil effect on the side, what you cannot see is the soil effect underneath the cube. These are three seperate minimeshes for one cube because it needs three seperate textures. Obviously using a standard mesh I could create using sixgroups and texture the sides to suit but not with a minimesh.
The landscape is loaded in (16w x 16d x 128h blocks) and roughly 7x7 of these are loaded at any one time and as you wander around the world 16x16 blocks get removed and replaced by new ones as head in different directions.
I'm just completing the animated mini's now for things like fire and water.
I'm having to use normal meshes for certain things such as collisions etc. eg. I continually look at all the blocks surrounding the player and place transparent full meshes over the minimeshes which allows the player to walk over/jump on the cubes. A bit CPU intensive but can't see another way of doing it at the moment.
I do think I can get a bit more speed out of the application by optimizing my code, I have used the minimesh shader (not at the moment though) which does improve the FPS a bit by about 15-20%. But to get any major speed boost I will have to use batch enable/disable of meshes, I don't think there is any way out of that. So far all the processing is in the display/selection/deletion and player placement of the cubes. There is nothing in there yet for actual background gameplay as such.
Also bear in mind that I am a very old-skool VB coder. Ok, I'm doing this in VB.net but even the concept of collections and arraylists are reasonable new to me. I originally started coding this using a massive 3D array DIM map(6000,128,6000) as INT32 !!!!!
That didn't last long before I realised that I would probably struggle with an infinite landscape.
Anyway, onward and upward......