Yep, I think the trick is to have your landscape consisting of a number of meshes. In one dimension your voxels might go 0-1023, and you your could generate seperate meshes for 0-32, 32-64, 64-96, etc.Obviously you actually have to break it up in three dimensions, but hopefully you get the idea.
In the above example, if voxel 17 is modified you only need to regenerate the first mesh. But note that if voxel 32 is modified then you have to regenerate both of the first two meshes (I think this only applies with smooth terrain, not cubic terrain).
You need to choose your mesh size appropriatly. Make it too small and you'll end up with too many batches, hurting rendering speed. Make it too large and it'll take too long to regenerate each mesh.
DefiniteIntegral wrote:
To aid rendering speed you could re-extract larger areas eg 128x128x128 over time in areas where no editing is occuring to reduce batch count. Due to time restrictions I have not implemented this feature in my own code so I can't give you much advice in that area.
I am also intrested in trying to combine batches when appropriate. Use a single big batch when possible, or smaller ones to allow for local changes or for culling purposes. It could be done by reextraction or also by stitching together existing meshes. I'm not yet sure of the best way to share/combine the vertex and index buffers. It's an area for future research...