Сначала вы должны убедиться, что вы используете очень быстрые алгоритмы (их реализация может быть реальной болью, но что вы хотите сделать и как далеко вы хотите идти и как быстро это должно быть, это своего рода tradeof).
еще несколько подсказок от меня
- не используйте методы почтового ящика, в работах иногда обсуждается, что они не так хорошо масштабируются с реальной архитектурой из-за подсчета накладных расходов
- не используйте BSP / Octtrees, они относительно медленные.
- не используйте графический процессор для трассировки лучей, он слишком медленный для продвинутых эффектов, таких как отражение и тени, рефракция, фотонное картирование и т. Д. (Я использую его только для затенения, но это мое пиво )
Для полной статической сцены kd-Trees непобедимы, а для динамических сцен существуют хитроумные алгоритмы, которые очень хорошо масштабируются на четырехъядерном процессоре (я не уверен насчет производительности выше).
И, конечно, для действительно хорошей производительности вам нужно использовать очень много кода SSE (с, конечно, не слишком большим количеством переходов), но не для "такой хорошей" производительности (я говорю здесь, может быть, на 10-15%) Встроенные возможности достаточно для реализации ваших вещей SSE.
И несколько приличных статей о некоторых алгоритмах, о которых я говорил:
«Граничная рамка быстрого выравнивания по оси / оси - тесты с перекрытием с использованием наклонов луча»
(очень быстро, очень хороший паралелизируемый (SSE) тест на удар AABB-Ray) (обратите внимание, что код в документе - это не весь код, просто посмотрите название статьи в Google, вы его найдете)
http://graphics.tu -bs.de / публикации / Eisemann07RS.pdf
«Трассировка лучей деформируемых сцен с использованием иерархий динамического ограничивающего объема»
http://www.sci.utah.edu/~wald/Publications/2007///BVH/download//togbvh.pdf
если вы знаете, как работает вышеприведенный алгоритм, то этот алгоритм намного лучше:
«Использование предварительно вычисленных треугольных кластеров для трассировки ускоренных лучей в динамических сценах»
http://garanzha.com/Documents/UPTC-ART-DS-8-600dpi.pdf
Я также использую тест pluecker для определения быстрого (не очень точного, но хорошо, что вы не можете иметь все), если я попал в многоугольник, очень хорошо работает с SSE и выше.
Итак, мой вывод состоит в том, что существует так много замечательных статей о таком количестве тем, которые имеют отношение к трассировке лучей (как создавать быстрые, эффективные деревья и как затенять (модели BRDF) и т. Д.), это действительно удивительная и интересная область "экспериментов", но вам также нужно иметь много свободного времени, потому что это чертовски сложно, но забавно.