Ray - algoritmos de intersección de octree

Estoy buscando un buen algoritmo de intersección de octárbol de rayos, que me dé las hojas por las que el rayo pasa de manera iterativa. Estoy planeando implementarlo en la CPU, ya que no quiero sumergirme en CUDA todavía :)

En este momento, mi Voxel raycaster solo hace DDA 3D (versión Amanatides / Woo) en una matriz no jerárquica de voxels XxYxZ. Puede imaginar que esto es bastante costoso cuando hay mucho espacio vacío, como se muestra en la siguiente imagen (rojo más brillante = más trabajo :)):

Ya he descubierto que hay dos tipos de algoritmos para esta tarea:de abajo hacia arriba, que trabaja desde las hojas hacia arriba, yDe arriba hacia abajo, que es básicamente la búsqueda en profundidad.

Ya he encontrado el algoritmo de Revelles del 2000, llamadoUn algoritmo paramétrico eficiente para el recorrido de octree, lo que parece interesante, pero es bastante viejo. Este es un algoritmo de arriba hacia abajo.

El enfoque de abajo hacia arriba más popular parece serK. Sung, un algoritmo de recorrido de octetos de DDA para trazado de rayos, Eurographics'91, North Holland-Elsevier, ISBN 0444 89096 3, p. 73-85. El problema es que la mayoría de los algoritmos de recorrido de Octree DDA esperan que el octree sea de igual profundidad, lo que no quiero. Los subárboles vacíos deben ser solo un puntero nulo o algo similar.

En la literatura más reciente sobre Sparse Voxel Octrees he logrado leer, (en particular,El trabajo de Laine en SVOTodos parecen estar basados ​​en algún tipo de versión de DDA implementada en GPU (estilo Amanatides / Woo).

Ahora, aquí está mi pregunta: ¿Alguien tiene alguna experiencia en la implementación de un algoritmo básico de intersección de rayos y octetos? ¿Qué recomendarías?

Respuestas a la pregunta(2)

Su respuesta a la pregunta