I’m looking for a good ray-octree intersection algorithm, which gives me the leafs the ray passes through in an iterative way. I’m planning on implementing it on the CPU, since I do not want to dive into CUDA just yet 🙂
At the moment, my Voxel raycaster just does 3D DDA (Amanatides/Woo version) on a non-hierarchic array of XxYxZ voxels. You can imagine that this is pretty costly when there’s a lot of empty space, as demonstrated in the following picture (brighter red = more work 🙂 ):

I’ve already figured out that there are two kinds of algorithms for this task: bottom-up, which works from the leafs back upwards, and top-down, which is basicly depth-first search.
I’ve already found Revelles’ algorithm from 2000, called An efficient parametric algorithm for octree traversal, which looks interesting, but is quite old. This is a top-down algorithm.
The most popular bottom-up approach seems to be K. Sung, A DDA Octree Traversal Algorithm for Ray Tracing, Eurographics’91, North Holland-Elsevier, ISBN 0444 89096 3, p. 73-85. Problem is that most DDA Octree traversal algorithms expect the octree to be of equal depth, which I do not want – empty subtrees should just be a null pointer or something similar.
In the more recent literature about Sparse Voxel Octrees I’ve managed to read through, (most notably Laine’s work on SVO’s, they all seem to be based on some kind of GPU-implemented version of DDA (Amanatides/Woo style).
Now, here’s my question: does anybody have any experience implementing a basic, no-frills ray-octree intersection algorithm? What would you recommend?
For the record, this is my implementation of the Revelles paper I ended up using: