Когда использовать разделение двоичного пространства, Quadtree, Octree?

недавно я узнал о двоичном пространстве, разделяющем деревья, и их применении к 3d-графике и обнаружению столкновений. Я также кратко просматривал материалы, касающиеся деревья квадрантов и octrees. Когда вы будете использовать quadtrees над деревьями bsp или наоборот? Они взаимозаменяемы? Я был бы доволен если бы у меня было достаточно информации, чтобы заполнить таблицу такой:

            | BSP | Quadtree | Octree
------------+----------------+-------
Situation A |  X  |          |
Situation B |     |     X    |
Situation C |     |          |   X

что такое A, B и C?

7 ответов


нет четкого ответа на ваш вопрос. Это полностью зависит от того, как организованы ваши данные.

Что-то иметь в виду:

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

Octrees и Bvhs (ограничивающие иерархии томов) выигрывают, если данные трехмерны. Это также работает очень хорошо, если ваши геометрические объекты сгруппированы в 3D-пространстве. (см. Octree vs BVH)

преимущество Oc-и Quadtrees что вы можете остановить произвести деревья в любое время вы желаете. Если вы хотите визуализировать графику с помощью графического ускорителя, он позволяет просто генерировать деревья на уровне объекта и отправлять каждый объект в одном вызове draw в графический API. Это выполняет много лучше, чем отправка отдельных треугольников (то, что вы должны сделать, если вы используете BSP-деревья в полной мере).

BSP-деревья-это особый случай. Они очень хорошо работают в 2D и 3D, но создание хороших BSP-деревьев-это форма искусства сама по себе. BSP-деревья имеют недостаток, что вам может потребоваться разделить геометрию на более мелкие части. Это может увеличить общее количество полигонов вашего набора данных. Они хороши для рендеринга, но они намного лучше для обнаружения столкновений и трассировки лучей.

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

Это, кстати, причина, почему они были так популярны 10 лет назад. Землетрясение использовал их, потому что это позволило графический движок / программный растеризатор, чтобы не использовать дорогостоящие Z-буфера.

все упомянутые деревья это просто семейства деревьев. Есть свободные octrees, KD-деревья гибридные деревья и много других связанных структур, а также.


самая большая практическая разница между BSP-деревьями и другими видами 3d-деревьев заключается в том, что BSP-деревья могут быть более оптимальными, но работать только на static геометрия. Это связано с тем, что BSP-деревья, как правило, очень медленно строятся, часто занимая часы или дни для типичного статического уровня городской игры.

две основные причины BSP-деревья занимают больше времени для построения: (a) они используют не выровненные по оси плоскости расщепления, которые занимают больше времени для оптимального поиска, и (b) они подразделяют геометрию на границы оси, обеспечивая объекты поперечный шпагат самолеты.

другие типы 3d-деревьев (Octrees, Quadtrees, KD-tree, Bounding-Volume-Hierarchy) используют выровненные по оси ограничивающие Тома, и Тома (необязательно) могут перекрываться, поэтому содержащиеся объекты не нужно вырезать на границах Тома. Они оба делают деревья менее оптимальными, чем BSP-деревья, но быстрее строить и легче менять для динамических объектов.

экстраполяция этих факторов в положения...

открытые площадки обычно используют наземные представления на основе высоты поля, либо простые карты высот, либо более сложные методы гео-МИП-отображения, такие как ROAM. Сама земля не участвует в 3D-разбиении пространства, только объекты, размещенные на земле.

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

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

Читайте также: Octree vs BVH, Учебник По Иерархии Ограничивающих Томов, учебник BSP.


BSP лучше всего подходит для городской среды.

Quadtree лучше всего подходит для использования карты высоты для местности и т. д.

Octree лучше всего подходит, когда у вас есть сгустки геометрии в 3d-пространстве, такие как Солнечная система.


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

Что касается их использования в графике, BSPs в значительной степени устарели. Octrees хорошо работают для таких вещей, как грубая видимость, как деревья AABB.


У меня нет большого опыта работы с BSP, но я могу сказать, что вы должны пойти с octrees над quadtrees, когда вы сцена, которую вы рендеринг высокий. То есть высота больше половины ширины и глубины-небольшое эмпирическое правило. Как правило, octrees не принесет огромной стоимости над quadtrees, и у них есть потенциал, чтобы ускорить процесс. YMMV.


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


BSP лучше для меньшего, более простого пространства, с которым вы только хотите сделать окклюзию. Если вы хотите, чтобы все пересечения для данного луча, вам нужно перейти на quad/octree.

Что касается quadtree против octree - сколько измерений вы много заботитесь о? Два измерения означают Квадри, четыре-октри. Как уже говорилось, поскольку Квадри может работать в трех пространствах, но если вы хотите, чтобы каждому измерению давали правильное лечение, октри-это путь.