Lets consider a large voxelized volume stored in an oct-tree or any other convenient structure. This volume represents, for instance, a landscape, where each block is either empty (air), or it has an specific material that will be later used to apply a texture.
Voxels that are next to each other represent connected sections of the surface.
What I need is an algorithm to generate a mesh from this voxels that represents the volume, with the following caracteristics:
All the "holes" in the voxelized volume are correct.
All the connections are correct, i.e. seamless.
The surface appears smooth.
In a broad sense, I want to somehow preserve the surface topology, meaning that connected sections remain connected in the resulting mesh and that the surface has a curvature that responds to the voxels topology. Imagine trying to render the Minecraft world but getting the mountain ladders to be smooth instead of blocky.