I have been playing Doom and its related games for the first time recently and I have enjoyed Doomsday Engine enormously, and if there is one feature I would love to see added it would be voxels. I have to say I can't stand the look of modern lighting and 3D models in Doom, but I think that the voxel project captures the aesthetic of the 2D sprites perfectly.
I took a look at the issue and from what I have gathered the engine would need to turn the voxel information into a mesh to display with OpenGL. I know that the Polymost renderer by Ken Silverman for Duke Nukem 3D is OpenGL accelerated and supports voxels (there is a voxel pack for Duke 3D as well), so it is possible to display voxels, the question is "how". From what I understand the voxel information needs to be used to build a 3D mesh that can then be used like any other 3D model mesh, and since Doomsday already supports 3D models the meshing itself is the tricky part.
I have found two articles on that topic:
http://0fps.wordpress.com/2012/06/30/me ... raft-game/
http://0fps.wordpress.com/2012/07/07/me ... ft-part-2/
The article discusses four algorithms. The first one is pure brute force, each voxel becomes a cube (six quads) and the second one uses occlusion to hide voxels on the inside, both algorithms are not very good.
The third one is no more than factor 8 times worse than the best possible mesh, it uses a greedy sweepline algorithm to find the smallest mesh in each dimension, reducing the one 3D problem to three 2D problems. The results are pretty good and it still uses quads. The fourth algorithm (second article) uses polygon triangulation, so there are no quads. If that's a good thing or a bad one I can't say. There is also a web demo to compare algorithms:
The next problem is the texture. The way it's solved in the article is to simply treat each colour as its own voxel model, but then the mesh will have more faces than it would if everything had the same colour. The voxels from the voxel pack make heavy use of dithering, just like the sprites did, so this would yield results similar to the brute force algorithm. A better idea would be to treat the voxel model as one shape and then use the result to somehow construct a texture that's then applied to the mesh.
What do you guys think?