I feel like I can give a rough update on this subject, as my Game does Voxel ray-casting / ray-tracing
While it's true, modern Hardware isn't meant for Voxel ray-casting, it works perfectly well with it.
There are two different methods used currently that both have their ups and downs.
Ray MarchingBasically, you inch slightly forward each iteration and check if you've hit something. It makes sense to use Octrees for this to speed up the search.
Gavan Woolery has an
excellent Game currently in the works that uses this technique. While he transitioned "away" from the traditional Voxel look (to an even cooler one in my opinion), his engine is the only one that I currently know that uses this technique for an actual Game.
Ray Casting a Sparse Voxel OctreeThere have been
many different
papers on this technique, and it seems very promising. So far, I know at least one other Game that uses it, Voxelnauts by
I've been using it in my own Game,
Spellwrath. The technique is extremely Memory efficient and fast! You can store and render Billions of Voxels in real-time with ease. Quite impossible with Rasterization techniques.
So far, I know at least one other Game that uses this technique,
Voxelnauts.
There is also
Atomontage Engine by Branislav Syles. However, he has his own Version of SVO's, of which I don't know the Details.
So, why are there only these few Games? Well, the Problem is simple:
Adding and Moving Voxels (Removing Voxels is easy). In theory, if you add or move a Voxel in the Sparse Voxel Octree, you Need to completely rebuild it. For Ray-Marching methods, this isn't always the case, but even there you have some structure that speeds up the ray-marching that needs to be rebuild at some Point.
When Polly was talking about a CPU bottleneck, this is what he meant.
How does Gavan solve this? He's a magician.
How does Voxelnauts and Atomontage solve this? From what I can tell, they mainly use Transformation Matrices to move entire blocks of Voxels. Pretty much like Skeletal Animations. This way, they don't need to rebuild the Octree.
As for adding Voxels I can only speculate. I believe they either have SVO that has "empty"/transparent Voxels, so that adding would be just filling in the blanks, or they have some method to rebuild the SVO localy.
How do I solve this? I can freely add 4 Voxels near any existing Voxels due to how I do SVOs. If I Need more space, for Buildings and such, I have "empty" Spaces put in by hand "offline" inside my SVO that get filled.
Everything else that moves, I use 2D Sprites