I have been lurking the forums for some time and trying to create something but was unsuccessful. First of all, I'm working on a space-based game where the player can visit many planets. The planet terrains are generated with fractal noise. I have this already done in 2D (top-down roguelike game) but I have discontinued that code due to many portability issues and some library dependencies that are no longer maintained.
Doing some research Irrlicht was my logical choice after several (performance reasons) fails with Unity. For the sake of my terrain generator and RPG ruleset (and my sanity ) I want to leave the terrain representation as squares. Please drop all the Minecraft flaming now because my (hobby) game was in development much longer than Minecraft and will be much different that it is.
I have seen PolyVox as one solution but I'm not sure do I really need such a complex system for "voxel" management when neither my terrain or anything else is generated as voxels. So how does it currently work? When the terrain is generated it is only stored as a seed and provides a heightmap for the basic terrain. After this step rivers and lakes are added and only them are stored in 3d arrays section by section (only water tiles and terrain tiles that are different from the generated terrain are saved!). The third step is the addition of caves which is stored into the same 3D array as rivers and changed terrain.
Now, as the player plays the terrain is generated on the fly from the seed and the changeset arrays are loaded into memory to draw the final version. This allows me to save only the important (changed terrain) data to disk and save massive amounts of storage, saving, and loading times.
Now, getting to the actual question. Since I have these 3D arrays of per-square map data I have to parse through it, add it to a PolyVox region, convert it to Irrlicht mesh and finally have a whole bunch of troubles with texturing, lightning, and some other calculations. From my point of view I don't really need PolyVox as I already managed to make an engine that will draw this terrain in Unity.
It worked like this. I looped through the 3D arrays of the terrain and added the vertices to vertices arrays depending on the neighboring positions of each square. This resulted in a 3D representation of a terrain almost the same as we had in SimCity2000, Transport Tycoon, or even Rollecoaster Tycoon - which is exactly what I wanted and expected. But the performances of Unity were awful even with a 64x64 squares terrain. I don't know why because the mesh was created only ONCE and contained at most two triangles per square - for a total of 8192 triangles. Definitely not something worth of slowing down on a dual-core Intel processor. So I ditched it.
Now, do you believe that I still need all the hassle with PolyVox for this or that maybe having my own "voxel" or "block" manager in Irrlicht? Do you think it will have better performances? Also, how hard should it be to have some per-square texturing inside the mesh? I also expect some dynamic modification of the terrain - explosions and spells - but that would be easily handled by modifying the terrain 3D arrays and regenerating the mesh OR modifying it. What about dynamic lights? Collision?
I have faith in Irrlicht and believe that it could handle all this, especially with a terrain that requires a minimal amount of polygons... Am I right here?