Как сортировать и сравнивать в иерархии ограничивающих томов

В настоящее время я реализую иерархию ограничивающих объемов только для 3D-треугольников. К сожалению, все объяснения BVH не соответствуют той части, где вы сортируете свои объекты для разделения. Для начала я хочу стремиться к сбалансированному дереву и использовать срединный срез. Это потребовало бы от меня сортировки либо треугольников, либо их ограничительных рамок (AABB) после пространственного критерия на оси разделения текущего узла. Я действительно не уверен, достаточно ли максимального или минимального удлинения BB или треугольника для правильного разделения, поскольку некоторые треугольники могут быть больше. Я также не уверен, что лучше сравнивать ограничивающую рамку или треугольник.

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


person funkysash    schedule 21.02.2013    source источник


Ответы (2)


У вас есть несколько вариантов, как вы обнаружили. Проще всего подумать об использовании центроида ограничивающей рамки. Вы также можете отсортировать по минимальной координате и отдельно по максимальной координате.

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

См. статью Инго Уолда: http://www.sci.utah.edu/~wald/Publications/2007/FastBuild/download/fastbuild.pdf

Более быстрый подход с более низким качеством — это линеаризованный BVH: сопоставьте каждый центроид с координатой на кривой заполнения пространства, такой как код Мортона, затем отсортируйте все треугольники по их коду Мортона, затем разбейте отрезки на блоки.

person All the Rage    schedule 22.02.2013
comment
Спасибо за ответ. Биннинг и расчет стоимости, сделанные в статье, кажется, слишком много для того, что я хотел сделать. Я все еще не уверен, что выбрать. Центроиды кажутся хорошей идеей, но я не вижу недостатков или преимуществ по сравнению с сортировкой по минимуму и максимуму. Я также не понимаю, как мне поможет сохранение начальной/конечной точки. - person funkysash; 24.02.2013
comment
Используйте центроиды. Минимальное и максимальное значения нечеткие, если у вас есть общий случай длинных ориентированных треугольников, но вам не нужна особая логика как минимального, так и максимального. Индексы начала/конца в отсортированном списке представляют диапазон, принадлежащий одному блоку. Вы подразделяете диапазон по мере рекурсии. - person All the Rage; 05.03.2013

SAH (эвристика площади поверхности) — наиболее распространенный способ оценить, где разделить набор треугольников в BVH, используемом для трассировки лучей. Вы можете найти хорошее объяснение в главе 4 книги PBRT (http://www.pbrt.org). Он доступен бесплатно здесь: http://pbrt.org/pbrt-2ed-chap4.pdf< /а>

Если у вас есть хоть какой-то смутный интерес к трассировке лучей, я предлагаю вам купить полную книгу.

person Dade916    schedule 25.02.2013