Check out Sparse Voxel Octrees, which removes 'transparent' voxels.
Yeah thats on my list. I didn't look into it yet but i might need to if i want to pursue this experiment.
Why store the color on each voxel? Aren't they being textured based on a material (like Minecraft)?
You certainly can texture them, but many would argue that those will not be voxels anymore. I couldn't care less personally, but i try to achieve a certain look that is not possible to achieve with using textures.
The reason minecraft does it is mostly due to the fact that its voxel resolution is pretty damn low, so it's the only way to get some detail into the world.
Also, you can use run length encoding on the blocks to reduce size. You only need to read it when they change, otherwise you only need the vertices in memory. Or you can store mostly empty chunks as a Dictionary keyed by XYZ instead of an Array. There are lots of tricks available for saving memory.
Yeah there are ways to decrease the total amount of data necessary at a time regarding occlusion, empty chunks etc. But storing the vertex data only in video memory requires a complete reconstruction of the whole chunk if just one voxel changes. It's a trade off between performance and memory.
imo i dont think voxels will catch on for the simple reason that its pretty rare to need to look at the data that hides below the surface. But who knows.
Yeah, using voxel environments makes most sense if you require dynamic changes to it.
If you have static geometry you could only store the surfacing voxels, using an octree would save a bunch of data that way i assume.