Попросите ресурс о быстром алгоритме трассировки лучей

Во-первых, я сожалею об этом грубом вопросе, но я не хочу представлять слишком много детали, таким образом, я просто прошу связанный ресурс как статьи, библиотеки или подсказки.

Моя потребность программы сделать интенсивное вычисление треугольного лучом пересечения (существуют миллионы лучей и треугольников), и моя цель состоит в том, чтобы сделать его с такой скоростью, как я могу.

То, что я сделал:

  1. Используйте самый быстрый треугольный лучом алгоритм, который я знаю.

  2. Используйте дерево октантов. (От игрового драгоценного камня программирования 1, 4.10. 4.11)

  3. Используйте Эффективный и Устойчивый Перекрестный Алгоритм Поля Луча, который используется в алгоритме дерева октантов.

Это быстрее, чем, прежде чем я применил те лучшие алгоритмы, но я полагаю, что это могло быть быстрее, Вы могли пролить свет на какие-либо возможные места, которые могли сделать его быстрее?

Спасибо.

6
задан warrenm 17 July 2010 в 06:53
поделиться

5 ответов

[

]Место, чтобы задать эти вопросы - []ompf2.com[]. Форум с темами о трассировке лучей в реальном времени (хотя и не в реальном времени)[

].
3
ответ дан 17 December 2019 в 00:10
поделиться

Форум OMPF - подходящее место для этого вопроса, но так как я здесь сегодня...

Не используйте пересечение лучей/боксов для обхода октябрьского дерева. Вы можете использовать его для корневого узла дерева, но это все. Как только вы узнаете расстояние до входа и выхода из корневого ящика, вы можете вычислить расстояния до x,y и z плоскостей раздела - плоскостей, которые подразделяют ящик. Если расстояния до передней и задней плоскостей равны f и b соответственно, то можно определить, в какие дочерние узлы бокса попадают расстояния f,b,x,y,z. Можно также определить порядок пересечения дочерних узлов и полностью отвергнуть многие из них.

В большинстве случаев 4 дочерних узла могут быть поражены, так как луч начинается с одного октанта и изменяет октанты только при пересечении одной из 3 плоскостей раздела.

Кроме того, так как он становится рекурсивным, вам понадобятся расстояния входа и выхода для дочерних узлов. Эти расстояния выбираются из множества (f,b,x,y,z), которое вы уже вычислили.

Я оптимизировал это очень долгое время, и могу с уверенностью сказать, что для деревьев глубиной в несколько уровней у вас еще на порядковом уровне. Я начал с того места, где вы сейчас находитесь.

2
ответ дан 17 December 2019 в 00:10
поделиться
[

] Есть несколько оптимизаций, которые вы можете сделать, но все они зависят от точного домена вашей проблемы. Что касается общих алгоритмов, то вы на правильном пути. В зависимости от области, вы можете:[

] [
    ] [
  1. ]Ввести портальную систему[
  2. ] [
  3. ]Переместить вычисления на GPU и воспользоваться преимуществами параллельных вычислений[
  4. ] [
  5. ]Довольно популярной тенденцией в трассировке лучей в последнее время является []Сопряженные иерархии томов[][
  6. ] [
]
1
ответ дан 17 December 2019 в 00:10
поделиться

Полезный ресурс, который я видел, - это журнал графических инструментов . В зависимости от ваших сцен другой BVH может быть более подходящим, чем октодерево.

Кроме того, если вы не проверяли свою производительность с помощью профилировщика, вам следует это сделать. Shark отлично работает на OSX, и я получил хорошие результаты с Very Sleepy на Windows.

0
ответ дан 17 December 2019 в 00:10
поделиться

Вы уже хорошо начали использовать пространственную сортировку в сочетании с алгоритмами быстрого пересечения. Для отслеживания одиночных лучей за один раз одна из лучших структур (для статических сцен) - это дерево K-d, построенное с использованием эвристики площади поверхности.

Однако для действительно высокоскоростной трассировки лучей необходимо воспользоваться следующими преимуществами:

  • Когерентные пакеты лучей
  • Фруста
  • SIMD

Я бы посоветовал вам начать с « Анимированные сцены с трассировкой лучей с использованием когерентного обхода сетки ». Это простой пример такого современного подхода. Вы также можете следить за ссылками, чтобы увидеть, как эти идеи применяются к деревьям K-d и BVH.

На той же странице также ознакомьтесь с разделом «Современное состояние в анимированных сценах с трассировкой лучей».

Еще один отличный набор ресурсов - это все публикации SIGGRAPH за эти годы. Это очень конкурентная конференция, поэтому эти доклады, как правило, будут первоклассными.

Наконец, если вы хотите использовать существующий код, посетите страницу проекта OpenRT .

1
ответ дан 17 December 2019 в 00:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: