Again looks very promising. I think the material border issue won't be relevant for me as I'm using a single texture atlas for the whole volume. Is this right?
It's still relevant, but I guess how important it is will depend on you data. You are using the material ID to decide which part of the texture atlas to use on a given triangle. You have a well defined boundary between two materials, and a triangle with say grass on it can't be merged with another one which has rock on it. But this will only really matter if you are mixing up your materials, which you probably won't be. You will tend to have a large area of rock, with a large area of grass on top, rather than having voxels which go rock->grass->rock->grass, etc.
Maybe beyzend or onimatrix can help out speeding up the code as they seem to have some previous experience in this field.
The main reason it's slow is because it is a general purpose decimation algorithm, rather than being one designed specifically for the cubic meshes. I already had some code which performed the decimation on the Marching Cubes surface using the edge collapse algorithm, and I have simply adjusted this to also work with the cubic surface. It could be much faster if I wrote one decimator specifically for the cubic mesh (which is what onimatrix did) and one for the Marching Cubes mesh... but of course that is more work.
...to first show the normal volume mesh while calculating the decimated version in the background, then switch both for a rendering speed gain.
Yep, and don't forget that you will probably have hundreds of decimated patches in the scene. When you change a voxel and have to tempoarily use a high resolution mesh, it is only one of these hundreds which is affected. So I don't really think it will make too much difference. Even if the decimation was really fast I would still probably do it this way.
Please keep working on this
Unfortunatly I do need to move onto other things (I'm thinking calculating ambient occlusion might be next...) but I will come back to this at some point. It's good to try it out in the wild for a bit before deciding where it should go. But I need to tidy up a little more first (just a day or two), then I will give an example.