I mentioned this I3D 2010 paper in a blog post a while ago, but there was no preprint for it at the time. Now the floodgates of information have been opened with the preprint, a video, and an extended paper all available on the first author’s website. The source code has also been open-sourced with the Apache 2.0 license and posted on Google Code.
I’m not that familiar with previous work in the area, so I don’t know how it stacks up against e.g. Gigavoxels; if anyone has any insight please let me know. One interesting detail from the paper was the way they enhance each cubical voxel with a pair of bounding planes, which they call contours.
They show that the data structure enables casting rays significantly faster than against a triangle model of equivalent complexity. Unfortunately, it appears to still be slower than rendering the triangles the “old-fashioned way”. The technique also requires post-filtering since it does not allow for filtering of color and normal information (which is effectively point-sampled). Finally, building the data structure takes a fair bit of time, making this not particularly well-suited for dynamic scenes.
This is very much in my area of interest so thanks for bringing to my attention! I had a chance to play with the demo last night and it seemed nice. I estimated by eye that the demo dataset was either 512³ or 1024³ and it ran at around 50 fps on my NVidia GTX 260. There’s a lot of preprocessing (several hours) which I believe is mostly for building the octree, but could also be the ambient occlusion calculations. They also provide a tool for converting your own models into voxel format but I haven’t tried this.
If I gt a chance I might try importing the voxel models onto my own engine to see how their CUDA raycasting approach compares with extracting the isosurface and rendering triangles. Their format is a little different to mine, though.
There are several prototype ‘sparse voxel octree’ game engines out there, but this is the first I have seen which has actually released a playable demo to prove it works. Well done NVidia 🙂
Sounds a bit like the data structures used in cube to represent level geometry: http://cubeengine.com/
Cube doesn’t use it as voxels… but the contour stuff is like what cube does.
Cube’s level geometry is real time editable in the game engine, AND very compact.
ah found some of the old docs for cube http://strlen.com/sauerbraten/docs/dev/wikistuff.html scroll down to the bit about edge spans.