Коли використовувати двійковий простір для розділення, Quadtree, Octree?


76

Нещодавно я дізнався про бінарні просторові дерева розділів та їх застосування для 3D-графіки та виявлення зіткнень. Я також коротко ознайомився з матеріалами, що стосуються квадратиків та октрій. Коли б ви користувались квадратиками над bsp деревами, або навпаки? Чи вони взаємозамінні? Я був би задоволений, якби мав достатньо інформації для заповнення такої таблиці:

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

Що таке A, B і C?

Відповіді:


72

На ваше запитання немає однозначної відповіді. Це повністю залежить від того, як організовані ваші дані.

Щось пам’ятайте:

Квадреї найкраще працюють для даних, які в основному є двовимірними, як відображення карти в навігаційних системах. У цьому випадку це швидше, ніж octrees, оскільки він краще адаптується до геометрії та утримує вузлові структури невеликими.

Octrees і BVH (Bounding Volume Hierarchies) виграють, якщо дані тривимірні. Це також дуже добре працює, якщо ваші геометричні об’єкти об’єднані в тривимірний простір. (див. Octree проти BVH ) (архівовано зоригінал)

Перевага Oc- та Quadtrees полягає в тому, що ви можете припинити генерування дерев у будь-який час. Якщо ви хочете відтворити графіку за допомогою графічного прискорювача, це дозволяє вам просто генерувати дерева на рівні об’єкта і відправляти кожен об’єкт за один виклик витягування до графічного API. Це працює набагато краще, ніж надсилання окремих трикутників (щось, що вам потрібно зробити, якщо ви використовуєте BSP-дерева у повній мірі).

BSP-дерева насправді є особливим випадком. Вони дуже добре працюють у 2D та 3D, але створення хороших BSP-дерев - це вид мистецтва сам по собі. BSP-Дерева мають недолік, що, можливо, вам доведеться розділити свою геометрію на менші частини. Це може збільшити загальну кількість полігонів у вашому наборі даних. Вони приємні для візуалізації, але набагато краще для виявлення зіткнень та трасування променів.

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

Це, до речі, причина, через яку вони були настільки популярними 10 років тому. Quake використовував їх, оскільки це дозволяло графічному двигуну / програмному растеризатору не використовувати дорогий z-буфер.

Всі згадані дерева - це лише родини дерев. Є пухкі октрі, гібридні дерева kd-дерев та безліч інших споріднених споруд.


1
Хороша відповідь, хоча я не впевнений, що ви маєте на увазі під "надсиланням" об'єкта на графічний процесор замість окремих трикутників. Ви маєте на увазі VBO проти негайного режиму? Тому що це можна зробити за допомогою обох підходів, про які я думав ...
Актау,

@DavidJeske Цій відповіді шість років. Довгий час в інформатиці. Можливо, це зараз змінилося.
Nils Pipenbrinck

Коментар про те, що малювання буде повільнішим із BSP, є неправильним. BSP призначені для оптимізації великої статичної геометрії. Спочатку вони використовувались для оптимізації оклюзії для програмного растрування, а з тих пір також використовувались для попереднього обчислення пакетів малювання для апаратної растеризації. BSP не підходять, коли існує багато випадків інстансування, оскільки об’єкти повинні бути екземплярами та розподілені на BSP. BSP також погано впливають на динамічні об'єкти, оскільки вони занадто повільні для побудови.
Девід Джеске,

1
BSP дійсно, і я маю на увазі справді , погано для будь-якої сучасної сцени. Вони були чудовими ще в той день, коли доводилося сортувати жменю трикутників. В даний час трохи перетягування (навіть із жорсткими шейдерами фрагментів) набагато швидше, ніж очевидне сортування та малювання кожного трикутника в сцені. Малювання z-prepass усуває всі надмірності і все ще швидше.
RecursiveExceptionException

14

Найбільша практична різниця між BSP-деревами та іншими видами 3D-дерев полягає в тому, що BSP-дерева можуть бути більш оптимальними, але працюватимуть лише на статичній геометрії. Це пояснюється тим, що BSP-Дерева, як правило, будуються дуже повільно, часто займаючи години або дні для типового статичного рівня міської гри.

Дві основні причини, за якими BSP-Дерева будуються довше: (a) вони використовують нерівні по осі площини розщеплення, для оптимального пошуку яких потрібно більше часу, і (b) вони поділяють геометрію на межі осей, не гарантуючи, що будь-які об'єкти перетинають площини розколу.

Інші типи 3D-дерев (Octrees, Quadtrees, kd-tree, Bounding-Volume-Hierarchy) використовують вирівняні по осі обмежуючі томи, і томи (необов’язково) можуть перекриватися, тому вміщені об’єкти не потрібно обрізати за обсягом межі. Вони обидва роблять дерева менш оптимальними, ніж BSP-дерева, але швидше будують і легше змінюють для динамічних об’єктів.

Екстраполяція цих факторів у ситуації ...

Зовнішні ділянки, як правило, використовують наземні подання на основі висоти поля, або прості карти висоти, або більш складні методи географічного відображення, такі як ROAM. Сама земля не бере участі у розділі простору 3D, лише предмети, розміщені на землі.

Світи з великою кількістю прикладів простішої та подібної геометрії (будинки, дерева, астероїди тощо) часто використовують дерево, яке не є BSP (наприклад, BVH), оскільки внесення геометрії до дерева BSP означало б дублювання та розбиття детальна геометрія для кожного екземпляра.

І навпаки, велика власна статична сітка без екземплярів, така як міська сцена або складне внутрішнє середовище, зазвичай використовує BSP-дерево для поліпшення продуктивності. Той факт, що BSP-дерево розбиває геометрію на межі вузлів, корисний для продуктивності візуалізації, оскільки вузли BSP можуть використовуватися як заздалегідь організовані пакети візуалізації трикутника. BSP-дерево можна також оптимізувати для оклюзії, уникаючи необхідності малювати частини BSP-дерева, які, як відомо, стоять за іншою геометрією.

Дивіться також: Октрі проти BVH (архівовано зоригінал), Габаритний обсяг ієрархії Підручник , BSP Навчальний посібник .


1
@rjdkolb Я зафіксував його на новому місці, якщо ви все ще зацікавлені.
Барт

8

BSP найкраще підходить для міського середовища.

Quadtree найкраще підходить, коли ви використовуєте карту висот для місцевості тощо.

Жовтень найкраще підходить, коли у вас є згустки геометрії в тривимірному просторі, наприклад, Сонячна система.


3

BSP - хороший варіант для прискорення виявлення зіткнень, залежно від того, який аромат ви використовуєте. Вони особливо швидкі при точкових та лінійних або променевих випробуваннях, дещо менш швидкі та трохи складніші для речей з об’ємом.

Що стосується їх використання в графіці, BSP майже застаріли. Жовтень добре працює для таких речей, як знищення видимості, як і дерева AABB.


1

У мене немає великого досвіду роботи з BSP, але я можу сказати, що вам слід переходити з октрі на квадрати, коли сцена, яку ви рендеруєте, висока. Тобто висота більше половини ширини, а глибина - маленьке правило. Як правило, октрі не приносять величезних витрат на квадри, і вони можуть потенційно пришвидшити справу. YMMV.


0

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


1
Поясніть, будь ласка, підходить BSP для великого чи малого простору? Більше чи менше об’єктів?
Мартін

0

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

Що стосується квадрі та октри - на скільки вимірів ви дбаєте? Два виміри означають чотирикутник, чотири - октрі. Як уже зазначалося, як квадратичне дерево може працювати в трьох просторах, але якщо ви хочете, щоб кожен вимір отримав належну обробку, октрі - це шлях.


0

Якщо ви не знаєте, що робите, завжди йдіть за октрі, щоб ви могли перестати зосереджуватися на надмірній оптимізації та почати працювати над більш серйозними функціями. Серйозно вузькі місця завжди будуть десь в іншому місці, або ви розробляєте свій код навколо оптимізованої системи, яка врешті-решт запобігає певним змінам у подальшому.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.