Написал давно достатосчно свой рей-трейсер для вокселёв. У меня воксель - это кубоид с заданными сторонами, полностью прозрачный или полностью непрозрачный, и с ребрами параллельными осям координат. Я строю на основе вокселей в сцене октодерево (куда попадают только непрозрачные воксели - sparse voxel octree) для того, чтобы ускорить поиск пересечений луча с облаком вокселей.
Далее для каждого пикселя на экране я пускаю луч из глаза, нахожу ближайший воксель, с которым он пересекается, и рисую пиксель подходящим цветом.
Скачал несколько CT сканов разных кишок и мозгов. Они представляют из себя сетку k x l x m с одинаковым шагом. В «узлах» этой сетки число, представляющее плотность элемента пространства с такими координатами. Я сделал несколько рендерингов, полагая воксели с плотностью меньше пороговой полностью прозрачными, а выше пороговой - полностью непрозрачными.
Теперь я хочу поиграться с прозрачностью. Тут вижу 2 проблемы, ставящие применимость octree под вопрос:
1) Тут нет «прозрачных» вокселей, которые не заносятся в дерево. Каждый воксель в сетке имеет свою прозрачность и должен быть как-то учтен при построении рендеринга.
2) Луч не останавливается сразу, как наткнется на первый же воксель, а должен идти дальше, пока суммарное значение непрозрачности не превысит некий предел. Кроме того, координаты следующего вокселя можно просто рассчитать, так как это будет сосед первого.
Получается, применять октодерево больше нет смысла, а можно, скажем, идти по лучу с неким шагом, пока не накопим нужное значение плотности среды/цвета. Но это медленно. А есть ли какие-либо приемы для рендеринга вокселей с учетом полупрозрачности?