Бінарне розбиття простору (англ. binary space partitioning), в інформатиці, це метод рекурсивного розбиття евклідового простору на опуклі множини за допомогою гіперплощин. Це розбиття призводить до подання об'єктів у просторі за допомогою деревоподібної структури даних, відомої як BSP-дерево.
BSP-дерево розроблялось для використання у тривимірній комп'ютерній графіці, тому що, структура BSP-дерева дозволяє виокремити інформацію, щодо об'єктів сцени, яка дозволяє при рендерингу ефективно виконувати такі операції, як сортування візуальних об'єктів в порядку віддалення від спостерігача та виявлення зіткнень. Також BSP-дерево використовується в застосунках для виконання операцій над формами (конструктивна блокова геометрія) в САПР, виявлення зіткнень у робототехніці, трасуванні променів та в інших застосунках, які виконують обробку складних просторових сцен.
Бінарне розбиття простору часто використовується для 3D-відеоігор, зокрема у шутерах від першої особи. BSP-дерева були вперше застосовані фахівцями компанії LucasArts на початку 80-х років. Популярність у розробників вони здобули завдяки компанії id Software, яка розробила рушії Doom (1993) і Quake (1996).
У відеоіграх, BSP-дерева, що містять статичну геометрію сцени, часто використовуються разом з Z-буфером, щоб правильно об'єднати рухомі об'єкти (наприклад, двері та персонажі) на тлі сцени.
Загальна характеристика
Бінарне розбиття простору — це універсальний процес рекурсивного поділу сцени на два до тих пір, поки розбиття не задовольняє одному або декільком вимогам. Його можна розглядати як узагальнення інших просторових структур дерева таких як к-D дерева і дерева квадрантів.
Виникнення бінарного розбиття простору в комп'ютерній графіці пояснюється тим, що потрібно швидко малювати тривимірні сцени, що складаються з многокутників. Недолік такого розбиття полягає в тому, що створення BSP-дерева може зайняти багато часу. Як правило, тому його виконують один раз на статичній геометрії, як підготовчий крок розрахунку, до візуалізації або інших операцій у реальному часі на сцені.
Конкретний вибір розбиття площини і критерій для завершення процесу поділу варіюється в залежності від призначення BSP-дерева.
У BSP-дереві кожен вузол пов'язаний з прямою, яка розбиває або площиною в 2-вимірному або 3-вимірному просторі відповідно. При цьому всі об'єкти, що лежать з фронтальної сторони площини відносяться до фронтального піддерева, а всі об'єкти, що лежать зі зворотного боку площини відносяться до оборотного піддерева. Для визначення належності об'єкта до фронтальної або зворотної сторони прямій або площині, що розбиває необхідно досліджувати стан кожної його точки. Положення точки відносно площини визначається скалярним добутком нормалі площини і координат точки в однорідних координатах. Можливі три випадки:
- Скалярний добуток більше 0 — точка лежить з фронтальної сторони площині;
- Скалярний добуток дорівнює 0 — точка лежить на площині
- Скалярний добуток менше 0 — точка лежить на звороті площині.
Якщо для всіх точок об'єкта скалярний добуток більше або дорівнює 0, то він відноситься до фронтального піддерева. Якщо для всіх точок об'єкта скалярний добуток менше або дорівнює 0, то він відноситься до оборотного піддерева. Якщо скалярні добутки для точок об'єкта мають різний знак, то його розтинають площиною, яка розбиває так, щоб отримані об'єкти лежали тільки з фронтальної або тільки зі зворотної сторони. Для кожного підвузла BSP-дерева справедливо вищенаведене твердження, з тим винятком, що для розгляду підлягають тільки ті об'єкти, які належать до фронтальної або зворотної сторони батьківського вузла площини, яка розбиває.
Побудова дерева
Вищенаведене визначення описує тільки властивості BSP-дерева, але не каже як його побудувати. Як правило, BSP-дерево будується для набору відрізків на площині або полігонів в просторі, що представляють деяку фігуру або сцену. Розглянемо алгоритм побудови BSP-дерева для набору полігонів в просторі:
- Якщо задана множина полігонів пуста, то закінчити алгоритм;
- Для заданої множини полігонів вибрати площину S, яка розбиває;
- Розсікти всі полігони, які перетинаються з S;
- Віднести всі полігони, що знаходяться з фронтального боку S, до фронтального піддерева F, а всі полігони, що знаходяться із зворотного боку S, до оборотного піддерева B;
- Виконати алгоритм рекурсивно для множини полігонів фронтального піддерева F;
- Виконати алгоритм рекурсивно для множини полігонів оборотного піддерева B.
На наступній діаграмі показано використання цього алгоритму в перетворенні списку ліній або полігонів в BSP-дерево. На кожній з восьми стадій (I.-VIII.) додається один новий вузол до дерева.
Почнемо зі списку ліній (або в 3D-полігонів), що утворюють сцену. У схемах дерев, списки позначаються прямокутниками з округленими кутами, а вузли — кругами. В просторовій схемі ліній напрямок позначається стрілкою. | ||
i. | Наступні етапи
| |
ii. | Тепер ми застосовуємо алгоритм до списку ліній, які знаходяться в передній частині (містять В2, С2, Д2). Ми вибираємо лінію В2, додаємо її у вузол і ділимо список на лінії, які перед В2 (Н2), і ті, що знаходяться за (С2, С3). | |
iii. | Виберіть лінію D2 зі списку ліній в передній частині B2. Це єдиний рядок в списку, так що після додавання його в вузол, більше нічого не повинно бути зроблено. | |
iv. | Ми закінчили з лініями перед В2, тому розглянемо лінії позаду B2 (C2 і D3). Виберіть одну з них (C2), додайте її в вузол, іншу лінію в списку (D3) треба поставити в список ліній в передній частині С2. | |
v. | Тепер подивимося на список ліній в передній частині С2. Існує тільки одна лінія (D3), так що додаємо її до цього вузла і продовжуємо. | |
vi. | Тепер ми додали всі лінії, які знаходилися в передній частині, до BSP-дерева, так що ми тепер починаємо працювати з списком ліній позаду А. Вибираємо лінію (B1) з цього списку, ми додаємо B1 до вузла та ділимо список ліній в лінії, що знаходяться в передній частині B1 (тобто D1) та позаду В1 (тобто C1). | |
vii. | Оброблюємо перший список ліній в передній частині B1, D1 є єдиною лінією в цьому списку, так що додаємо її до цього вузла і продовжуємо. | |
viii. | Дивимося на наступну лінію у списку ліній за B1, залишилася єдина лінія у цьому списку — C1, так що додаємо її до цього вузла, і BSP-дерево завершено. |
Остаточна кількість полігонів або ліній в дереві часто більше (іноді значно більше), ніж початковий список, так як лінії або полігони, які перетинають площину перегородки повинна бути розділена на дві частини. Бажано звести до мінімуму це збільшення, але і підтримувати розумний баланс в кінцевому дереві. Вибір розділової площини дуже важливий в створенні ефективного BSP-дерева.
Вибір площини, яка розбиває
Площина, яка розбиває вибирається таким чином, щоб збалансувати дерево, тобто щоб число полігонів у фронтальному і зворотному піддереві було приблизно однаково: min(|N(Fi) — N(Bi)|)
де N(Fi) — число полігонів з фронтального боку деякої площині i, яка розбиває, N(Bi) — число полігонів зі зворотного боку площини i, яка розбиває.
Застосування
Сортування об'єктів у порядку віддалення від спостерігача
При сортуванні об'єктів в порядку віддалення від спостерігача за допомогою BSP-дерева досліджуються взаємне розташування вектора і точки спостереження (POV) і нормалей площин, які розбивають. Якщо нормаль площини, яка розбиває і вектор спостереження співнаправлені, то фронтальне піддерево знаходиться від спостерігача далі, ніж зворотне, в іншому випадку оборотне піддерево знаходиться від спостерігача далі, ніж фронтальне. При цьому, якщо площина, яка розбиває знаходиться позаду спостерігача, то саму площину, а також фронтальне або оборотне піддерево може бути не видно повністю. Рекурсивний алгоритм сортування полігонів за допомогою BSP-дерева наступний:
Процедура ОбійтиВузол(Вузол) Якщо Вузол <> ПорожнійВказівник Якщо ВекториСпівнаправлені(ВекторСпостереження, Вузол.НормальПлощиниЯкаРозбиває) Якщо СкалярнийДобуток(ТочкаСпостереження, Вузол.НормальПлощиниЯкаРозбиває) >= 0 // Площина знаходиться позаду спостерігача, спостерігач бачить тільки фронтальне піддерево ОбійтиВузол(Вузол.ФронтальнеПіддерево); Інакше // Площина знаходиться спереду спостерігача, // фронтальне піддерево знаходиться далі оборотного ОбійтиВузол(Вузол.ФронтальнеПіддерево); ДодатиПолігонДоСпискуВідображення(Вузол.Полігон); ОбійтиВузол(Вузол.ОборотнеПіддерево); КінецьЯкщо; Інакше Якщо СкалярнийДобуток(ТочкаСпостереження, Вузол.НормальПлощиниЯкаРозбиває) >= 0 // Площина знаходиться спереду спостерігача, // оборотне піддерево знаходиться далі фронтального ОбійтиВузол(Вузол.ОборотнеПіддерево); ДодатиПолігонДоСпискуВідображення(Вузол.Полігон); ОбійтиВузол(Вузол.ФронтальнеПіддерево); Інакше // Площина знаходиться позаду спостерігача, спостерігач бачить тільки оборотне піддерево ОбійтиВузол(Вузол.ОборотнеПіддерево); КінецьЯкщо; КінецьЯкщо; КінецьЯкщо; Кінець;
Цей алгоритм можна оптимізувати, якщо врахувати, що для деякого набору полігонів дерево має вироджену структуру, в тому випадку, коли для кожного полігону з цього набору вся решта лежить тільки з фронтальної або тільки зі зворотної сторони. Саме так зробив Джон Кармак в рушії DOOM.
Алгоритм для прискорення з рекурсивного може бути перетворений в ітеративний.
Відсікання невидимих поверхонь
Відсікання невидимих поверхонь реалізується шляхом введення додаткової інформації в BSP-дерево, такої як рамки (bounding boxes, bounding spheres). Рамки — це прямокутники або паралелепіпеди, окружності або сфери, які обмежують область розташування полігонів деякого піддерева. Таким чином, кожен вузол має дві рамки. Піддерево гарантовано невидимо, якщо зорова піраміда не перетинається з обмежувальним об'єктом. Зворотне невірно. Однак прямого твердження досить, щоб відсікти обробку суттєвої кількості об'єктів.
Вибір геометричних об'єктів, якими представлені рамки, виходить з простоти алгоритму перевірки перетину зорової піраміди з рамкою.
Пошук зіткнень
При пошуку зіткнень BSP-дерево використовується для пошуку площини, розташованої найближче до об'єкта. Найчастіше межі об'єкта задаються обмежувальною сферою (або колом) для спрощення обчислень. Виконується обхід BSP-дерева від кореня до площини, розташованої найближче до об'єкта. При цьому, якщо не виявлено перетинів обмежувальної сфери ні з однією площиною, то зіткнення немає, в іншому випадку — є.
Приклад:
Процедура ПощукЗіткнень(Вузол, Об’єкт) Якщо Вузол <> ПорожнійВказівник Якщо Відстань(Вузол.Площина, Об’єкт.ЦентрОбмежувальноїСфери) > Об’єкт.РадіусОбмежувальноїСфери Якщо СкалярнийДобуток(Об’єкт.ЦентрОбмежувальноїСфери, Вузол.НормальПлощиниЯкаРозбиває) >= 0 // Об’єкт знаходиться з фронтального боку площини, яка розбиває, // обходимо тільки фронтальне піддерево ПошукЗіткнень(Вузол.ФронтальнеПіддерево, Об’єкт); Інакше // Об’єкт знаходиться на зворотному боці площини, яка розбиває, // обходимо тільки оборотне піддерево ПошукЗіткнень(Вузол.ОборотнеПіддерево, Об’єкт); КінецьЯкщо; Інакше Повернути ЄЗіткнення; КінецьЯкщо; Інакше Повернути НемаєЗіткнення; КінецьЯкщо; Кінець;
Алгоритм для прискорення з рекурсивного може бути перетворений в ітеративний.
Хронологія
- 1969 Шумакер опублікував доповідь, в якій описано, як ретельно розташовані літаки в віртуальному середовищі можуть бути використані для прискорення впорядкування полігонів. Методика використовувала глибини когерентності, в якій йдеться про те, що полігон на дальній стороні літака не може якимось чином перешкоджати ближчий полігон. Це було використано в тренажерах, зроблених GE, а також Еванс і Сазерленд. Проте, створення багатокутної організації даних була виконана вручну дизайнером сцени.
- 1980 [en] продовжив ідею Шумакера у справі подання 3D-об'єктів у віртуальному середовищі за допомогою літаків. Це забезпечило повністю автоматизовану і алгоритмічну генерацію ієрархічної багатокутної структури даних, відомої як Binary Space Partitioning Tree (BSP-дерево). Цей процес проходив як попередня обробка стадії офф-лайн, яка була виконана один раз у навколишньому середовищі / об'єкті.
- 1981 Кандидатська дисертація Нейлора представила повноцінний розвиток BSP-дерева і теоретико-графового підходу, що передбачає використання сильно зв'язкових компонентів для попереднього обчислення видимості, а також зв'язок між цими двома методами. У дисертації також включені перші емпіричні дані, що свідчать про те, що розмір дерева і кількість нових полігонів була розумною (з використанням моделі Space Shuttle).
- 1983 [en] описав реалізацію мікрокоду алгоритму BSP-дерева на буферній системі кадру Ikonas. Це була перша демонстрація визначення видимої поверхні в реальному часі з використанням BSP-дерев.
- 1987 Тібо і Нейлор описали як довільні багатогранники можуть бути представлені за допомогою BSP-дерева, на відміну від традиційних b-Rep (граничного уявлення). Це дало тверде уявлення поверхні на основі репрезентації. Набір операцій над многогранниками був описан з використанням інструменту, що дозволяє конструктивна блокова геометрія (CSG) в режимі реального часу.
- 1990 Нейлор, Amanatides і Тібо запропонували алгоритм для об'єднання двох BSP-дерев, щоб сформувати нове BSP-дерево з двох вихідних дерев. Це дає безліч переваг, серед яких: об'єднання рухомих об'єктів, які представлені як BSP-дерева зі статичним середовищем (також представлене BSP-деревом), точне виявлення зіткнень в , належне упорядкування прозорих поверхонь, що містяться в двох взаємопроникаючих об'єктів (використовується для ефекту рентгенівського зору).
- 1990 [en] запропонував автономну генерацію потенційно видимих наборів для прискорення видимого визначення поверхні в ортогональних 2D середовищах.
- 1991 Гордон і Чен описали ефективний спосіб проведення передньо-заднього перекладу з BSP-дерева, а не традиційний ззаду-вперед підхід. Цей алгоритм разом з описом BSP-дерева в стандартній комп'ютерній графіці по підручнику дня ([en]) була використана Джоном Кармаком в створенні Doom (відеоігри).
- 1992 кандидатська дисертація Теллера описувала ефективну генерацію потенційно видимих наборів як крок попередньої обробки для прискорення в режимі реального часу визначення видимої поверхні в довільних 3D полігональних середовищах. Це було використано в Quake (відеоігри) і робить значний внесок у результативність цієї гри.
- Нейлор відповів на питання про те, що характеризує хороше BSP-дерево. Він використовував очікувані моделі випадку (а не аналізував найбільш несприятливі випадки) для математичного виміру очікуваної вартості пошуку дерева і використовував цей захід, щоб побудувати хороші BSP-дерева. Інтуїтивно зрозуміло, що дерево представляє об'єкт в декількох резолюціях моди (більш точно, як дерево наближень).
Примітки
- Schumacker, Robert A.; Brand, Brigitta; Gilliland, Maurice G.; Sharp, Werner H (1969). Study for Applying Computer-Generated Images to Visual Simulation (Report). U.S. Air Force Human Resources Laboratory. p. 142. AFHRL-TR-69-14.
- Fuchs, Henry; Kedem, Zvi. M; Naylor, Bruce F. (1980). «On Visible Surface Generation by A Priori Tree Structures». SIGGRAPH '80 Proceedings of the 7th annual conference on Computer graphics and interactive techniques. ACM, New York. pp. 124—133. doi:10.1145/965105.807481.
- Thibault, William C.; Naylor, Bruce F. (1987). Set operations on polyhedra using binary space partitioning trees. SIGGRAPH '87 Proceedings of the 14th annual conference on Computer graphics and interactive techniques. ACM, New York. с. 153—162. doi:10.1145/37402.37421.
Література
- Mark de Berg. Computational Geometry: Algorithms and Applications. — Springer Science & Business Media, 2008. — P. 259. — .
Посилання
- BSP trees presentation [ 18 серпня 2005 у Wayback Machine.](англ.)
- (англ.)
- A Java applet that demonstrates the process of tree generation [ 8 січня 2007 у Wayback Machine.](англ.)
- A Master Thesis about BSP generating [ 3 квітня 2015 у Wayback Machine.](англ.)
- (англ.)
- BSP in 3D space [ 31 липня 2016 у Wayback Machine.](англ.)
- (рос.)
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Binarne rozbittya prostoru angl binary space partitioning v informatici ce metod rekursivnogo rozbittya evklidovogo prostoru na opukli mnozhini za dopomogoyu giperploshin Ce rozbittya prizvodit do podannya ob yektiv u prostori za dopomogoyu derevopodibnoyi strukturi danih vidomoyi yak BSP derevo Binarne rozbittya prostoru vgori i vidpovidne BSP derevo vnizu Prostir mistit vidrizki A B1 B2 C1 C2 D1 D2 D3 Korenevij vuzol mistit segment A dva piddereva sho vidpovidayut oblastyam po obidvi storoni vid A BSP derevo rozroblyalos dlya vikoristannya u trivimirnij komp yuternij grafici tomu sho struktura BSP dereva dozvolyaye viokremiti informaciyu shodo ob yektiv sceni yaka dozvolyaye pri renderingu efektivno vikonuvati taki operaciyi yak sortuvannya vizualnih ob yektiv v poryadku viddalennya vid sposterigacha ta viyavlennya zitknen Takozh BSP derevo vikoristovuyetsya v zastosunkah dlya vikonannya operacij nad formami konstruktivna blokova geometriya v SAPR viyavlennya zitknen u robototehnici trasuvanni promeniv ta v inshih zastosunkah yaki vikonuyut obrobku skladnih prostorovih scen Binarne rozbittya prostoru chasto vikoristovuyetsya dlya 3D videoigor zokrema u shuterah vid pershoyi osobi BSP dereva buli vpershe zastosovani fahivcyami kompaniyi LucasArts na pochatku 80 h rokiv Populyarnist u rozrobnikiv voni zdobuli zavdyaki kompaniyi id Software yaka rozrobila rushiyi Doom 1993 i Quake 1996 U videoigrah BSP dereva sho mistyat statichnu geometriyu sceni chasto vikoristovuyutsya razom z Z buferom shob pravilno ob yednati ruhomi ob yekti napriklad dveri ta personazhi na tli sceni Zagalna harakteristikaBinarne rozbittya prostoru ce universalnij proces rekursivnogo podilu sceni na dva do tih pir poki rozbittya ne zadovolnyaye odnomu abo dekilkom vimogam Jogo mozhna rozglyadati yak uzagalnennya inshih prostorovih struktur dereva takih yak k D dereva i dereva kvadrantiv Viniknennya binarnogo rozbittya prostoru v komp yuternij grafici poyasnyuyetsya tim sho potribno shvidko malyuvati trivimirni sceni sho skladayutsya z mnogokutnikiv Nedolik takogo rozbittya polyagaye v tomu sho stvorennya BSP dereva mozhe zajnyati bagato chasu Yak pravilo tomu jogo vikonuyut odin raz na statichnij geometriyi yak pidgotovchij krok rozrahunku do vizualizaciyi abo inshih operacij u realnomu chasi na sceni Konkretnij vibir rozbittya ploshini i kriterij dlya zavershennya procesu podilu variyuyetsya v zalezhnosti vid priznachennya BSP dereva U BSP derevi kozhen vuzol pov yazanij z pryamoyu yaka rozbivaye abo ploshinoyu v 2 vimirnomu abo 3 vimirnomu prostori vidpovidno Pri comu vsi ob yekti sho lezhat z frontalnoyi storoni ploshini vidnosyatsya do frontalnogo piddereva a vsi ob yekti sho lezhat zi zvorotnogo boku ploshini vidnosyatsya do oborotnogo piddereva Dlya viznachennya nalezhnosti ob yekta do frontalnoyi abo zvorotnoyi storoni pryamij abo ploshini sho rozbivaye neobhidno doslidzhuvati stan kozhnoyi jogo tochki Polozhennya tochki vidnosno ploshini viznachayetsya skalyarnim dobutkom normali ploshini i koordinat tochki v odnoridnih koordinatah Mozhlivi tri vipadki Skalyarnij dobutok bilshe 0 tochka lezhit z frontalnoyi storoni ploshini Skalyarnij dobutok dorivnyuye 0 tochka lezhit na ploshini Skalyarnij dobutok menshe 0 tochka lezhit na zvoroti ploshini Yaksho dlya vsih tochok ob yekta skalyarnij dobutok bilshe abo dorivnyuye 0 to vin vidnositsya do frontalnogo piddereva Yaksho dlya vsih tochok ob yekta skalyarnij dobutok menshe abo dorivnyuye 0 to vin vidnositsya do oborotnogo piddereva Yaksho skalyarni dobutki dlya tochok ob yekta mayut riznij znak to jogo roztinayut ploshinoyu yaka rozbivaye tak shob otrimani ob yekti lezhali tilki z frontalnoyi abo tilki zi zvorotnoyi storoni Dlya kozhnogo pidvuzla BSP dereva spravedlivo vishenavedene tverdzhennya z tim vinyatkom sho dlya rozglyadu pidlyagayut tilki ti ob yekti yaki nalezhat do frontalnoyi abo zvorotnoyi storoni batkivskogo vuzla ploshini yaka rozbivaye Pobudova derevaPriklad pobudovi 1 A korin i nabir vidrizkiv na vsij ploshini 2 A dilitsya na B i C 3 B dilitsya na D i E 4 D dilitsya na povnistyu opukli F i G yaki i stayut listyam dereva Vishenavedene viznachennya opisuye tilki vlastivosti BSP dereva ale ne kazhe yak jogo pobuduvati Yak pravilo BSP derevo buduyetsya dlya naboru vidrizkiv na ploshini abo poligoniv v prostori sho predstavlyayut deyaku figuru abo scenu Rozglyanemo algoritm pobudovi BSP dereva dlya naboru poligoniv v prostori Yaksho zadana mnozhina poligoniv pusta to zakinchiti algoritm Dlya zadanoyi mnozhini poligoniv vibrati ploshinu S yaka rozbivaye Rozsikti vsi poligoni yaki peretinayutsya z S Vidnesti vsi poligoni sho znahodyatsya z frontalnogo boku S do frontalnogo piddereva F a vsi poligoni sho znahodyatsya iz zvorotnogo boku S do oborotnogo piddereva B Vikonati algoritm rekursivno dlya mnozhini poligoniv frontalnogo piddereva F Vikonati algoritm rekursivno dlya mnozhini poligoniv oborotnogo piddereva B Na nastupnij diagrami pokazano vikoristannya cogo algoritmu v peretvorenni spisku linij abo poligoniv v BSP derevo Na kozhnij z vosmi stadij I VIII dodayetsya odin novij vuzol do dereva Pochnemo zi spisku linij abo v 3D poligoniv sho utvoryuyut scenu U shemah derev spiski poznachayutsya pryamokutnikami z okruglenimi kutami a vuzli krugami V prostorovij shemi linij napryamok poznachayetsya strilkoyu i Nastupni etapi Mi obirayemo liniyu A zi spisku ta dodayemo yiyi do vuzla Mi rozdilili liniyi sho zalishilisya v spisku na tih hto pered A tobto B2 C2 D2 ta tih hto za B1 C1 D1 Mi spochatku opracovuyemo liniyi yaki znahodyatsya pered A na etapah ii v pislya cogo ti sho za na etapah vi vii ii Teper mi zastosovuyemo algoritm do spisku linij yaki znahodyatsya v perednij chastini mistyat V2 S2 D2 Mi vibirayemo liniyu V2 dodayemo yiyi u vuzol i dilimo spisok na liniyi yaki pered V2 N2 i ti sho znahodyatsya za S2 S3 iii Viberit liniyu D2 zi spisku linij v perednij chastini B2 Ce yedinij ryadok v spisku tak sho pislya dodavannya jogo v vuzol bilshe nichogo ne povinno buti zrobleno iv Mi zakinchili z liniyami pered V2 tomu rozglyanemo liniyi pozadu B2 C2 i D3 Viberit odnu z nih C2 dodajte yiyi v vuzol inshu liniyu v spisku D3 treba postaviti v spisok linij v perednij chastini S2 v Teper podivimosya na spisok linij v perednij chastini S2 Isnuye tilki odna liniya D3 tak sho dodayemo yiyi do cogo vuzla i prodovzhuyemo vi Teper mi dodali vsi liniyi yaki znahodilisya v perednij chastini do BSP dereva tak sho mi teper pochinayemo pracyuvati z spiskom linij pozadu A Vibirayemo liniyu B1 z cogo spisku mi dodayemo B1 do vuzla ta dilimo spisok linij v liniyi sho znahodyatsya v perednij chastini B1 tobto D1 ta pozadu V1 tobto C1 vii Obroblyuyemo pershij spisok linij v perednij chastini B1 D1 ye yedinoyu liniyeyu v comu spisku tak sho dodayemo yiyi do cogo vuzla i prodovzhuyemo viii Divimosya na nastupnu liniyu u spisku linij za B1 zalishilasya yedina liniya u comu spisku C1 tak sho dodayemo yiyi do cogo vuzla i BSP derevo zaversheno Ostatochna kilkist poligoniv abo linij v derevi chasto bilshe inodi znachno bilshe nizh pochatkovij spisok tak yak liniyi abo poligoni yaki peretinayut ploshinu peregorodki povinna buti rozdilena na dvi chastini Bazhano zvesti do minimumu ce zbilshennya ale i pidtrimuvati rozumnij balans v kincevomu derevi Vibir rozdilovoyi ploshini duzhe vazhlivij v stvorenni efektivnogo BSP dereva Vibir ploshini yaka rozbivaye Ploshina yaka rozbivaye vibirayetsya takim chinom shob zbalansuvati derevo tobto shob chislo poligoniv u frontalnomu i zvorotnomu pidderevi bulo priblizno odnakovo min N Fi N Bi de N Fi chislo poligoniv z frontalnogo boku deyakoyi ploshini i yaka rozbivaye N Bi chislo poligoniv zi zvorotnogo boku ploshini i yaka rozbivaye ZastosuvannyaSortuvannya ob yektiv u poryadku viddalennya vid sposterigacha Pri sortuvanni ob yektiv v poryadku viddalennya vid sposterigacha za dopomogoyu BSP dereva doslidzhuyutsya vzayemne roztashuvannya vektora i tochki sposterezhennya POV i normalej ploshin yaki rozbivayut Yaksho normal ploshini yaka rozbivaye i vektor sposterezhennya spivnapravleni to frontalne pidderevo znahoditsya vid sposterigacha dali nizh zvorotne v inshomu vipadku oborotne pidderevo znahoditsya vid sposterigacha dali nizh frontalne Pri comu yaksho ploshina yaka rozbivaye znahoditsya pozadu sposterigacha to samu ploshinu a takozh frontalne abo oborotne pidderevo mozhe buti ne vidno povnistyu Rekursivnij algoritm sortuvannya poligoniv za dopomogoyu BSP dereva nastupnij Procedura ObijtiVuzol Vuzol Yaksho Vuzol lt gt PorozhnijVkazivnik Yaksho VektoriSpivnapravleni VektorSposterezhennya Vuzol NormalPloshiniYakaRozbivaye Yaksho SkalyarnijDobutok TochkaSposterezhennya Vuzol NormalPloshiniYakaRozbivaye gt 0 Ploshina znahoditsya pozadu sposterigacha sposterigach bachit tilki frontalne pidderevo ObijtiVuzol Vuzol FrontalnePidderevo Inakshe Ploshina znahoditsya speredu sposterigacha frontalne pidderevo znahoditsya dali oborotnogo ObijtiVuzol Vuzol FrontalnePidderevo DodatiPoligonDoSpiskuVidobrazhennya Vuzol Poligon ObijtiVuzol Vuzol OborotnePidderevo KinecYaksho Inakshe Yaksho SkalyarnijDobutok TochkaSposterezhennya Vuzol NormalPloshiniYakaRozbivaye gt 0 Ploshina znahoditsya speredu sposterigacha oborotne pidderevo znahoditsya dali frontalnogo ObijtiVuzol Vuzol OborotnePidderevo DodatiPoligonDoSpiskuVidobrazhennya Vuzol Poligon ObijtiVuzol Vuzol FrontalnePidderevo Inakshe Ploshina znahoditsya pozadu sposterigacha sposterigach bachit tilki oborotne pidderevo ObijtiVuzol Vuzol OborotnePidderevo KinecYaksho KinecYaksho KinecYaksho Kinec Cej algoritm mozhna optimizuvati yaksho vrahuvati sho dlya deyakogo naboru poligoniv derevo maye virodzhenu strukturu v tomu vipadku koli dlya kozhnogo poligonu z cogo naboru vsya reshta lezhit tilki z frontalnoyi abo tilki zi zvorotnoyi storoni Same tak zrobiv Dzhon Karmak v rushiyi DOOM Algoritm dlya priskorennya z rekursivnogo mozhe buti peretvorenij v iterativnij Vidsikannya nevidimih poverhon Vidsikannya nevidimih poverhon realizuyetsya shlyahom vvedennya dodatkovoyi informaciyi v BSP derevo takoyi yak ramki bounding boxes bounding spheres Ramki ce pryamokutniki abo paralelepipedi okruzhnosti abo sferi yaki obmezhuyut oblast roztashuvannya poligoniv deyakogo piddereva Takim chinom kozhen vuzol maye dvi ramki Pidderevo garantovano nevidimo yaksho zorova piramida ne peretinayetsya z obmezhuvalnim ob yektom Zvorotne nevirno Odnak pryamogo tverdzhennya dosit shob vidsikti obrobku suttyevoyi kilkosti ob yektiv Vibir geometrichnih ob yektiv yakimi predstavleni ramki vihodit z prostoti algoritmu perevirki peretinu zorovoyi piramidi z ramkoyu Poshuk zitknen Pri poshuku zitknen BSP derevo vikoristovuyetsya dlya poshuku ploshini roztashovanoyi najblizhche do ob yekta Najchastishe mezhi ob yekta zadayutsya obmezhuvalnoyu sferoyu abo kolom dlya sproshennya obchislen Vikonuyetsya obhid BSP dereva vid korenya do ploshini roztashovanoyi najblizhche do ob yekta Pri comu yaksho ne viyavleno peretiniv obmezhuvalnoyi sferi ni z odniyeyu ploshinoyu to zitknennya nemaye v inshomu vipadku ye Priklad Procedura PoshukZitknen Vuzol Ob yekt Yaksho Vuzol lt gt PorozhnijVkazivnik Yaksho Vidstan Vuzol Ploshina Ob yekt CentrObmezhuvalnoyiSferi gt Ob yekt RadiusObmezhuvalnoyiSferi Yaksho SkalyarnijDobutok Ob yekt CentrObmezhuvalnoyiSferi Vuzol NormalPloshiniYakaRozbivaye gt 0 Ob yekt znahoditsya z frontalnogo boku ploshini yaka rozbivaye obhodimo tilki frontalne pidderevo PoshukZitknen Vuzol FrontalnePidderevo Ob yekt Inakshe Ob yekt znahoditsya na zvorotnomu boci ploshini yaka rozbivaye obhodimo tilki oborotne pidderevo PoshukZitknen Vuzol OborotnePidderevo Ob yekt KinecYaksho Inakshe Povernuti YeZitknennya KinecYaksho Inakshe Povernuti NemayeZitknennya KinecYaksho Kinec Algoritm dlya priskorennya z rekursivnogo mozhe buti peretvorenij v iterativnij Hronologiya1969 Shumaker opublikuvav dopovid v yakij opisano yak retelno roztashovani litaki v virtualnomu seredovishi mozhut buti vikoristani dlya priskorennya vporyadkuvannya poligoniv Metodika vikoristovuvala glibini kogerentnosti v yakij jdetsya pro te sho poligon na dalnij storoni litaka ne mozhe yakimos chinom pereshkodzhati blizhchij poligon Ce bulo vikoristano v trenazherah zroblenih GE a takozh Evans i Sazerlend Prote stvorennya bagatokutnoyi organizaciyi danih bula vikonana vruchnu dizajnerom sceni 1980 en prodovzhiv ideyu Shumakera u spravi podannya 3D ob yektiv u virtualnomu seredovishi za dopomogoyu litakiv Ce zabezpechilo povnistyu avtomatizovanu i algoritmichnu generaciyu iyerarhichnoyi bagatokutnoyi strukturi danih vidomoyi yak Binary Space Partitioning Tree BSP derevo Cej proces prohodiv yak poperednya obrobka stadiyi off lajn yaka bula vikonana odin raz u navkolishnomu seredovishi ob yekti 1981 Kandidatska disertaciya Nejlora predstavila povnocinnij rozvitok BSP dereva i teoretiko grafovogo pidhodu sho peredbachaye vikoristannya silno zv yazkovih komponentiv dlya poperednogo obchislennya vidimosti a takozh zv yazok mizh cimi dvoma metodami U disertaciyi takozh vklyucheni pershi empirichni dani sho svidchat pro te sho rozmir dereva i kilkist novih poligoniv bula rozumnoyu z vikoristannyam modeli Space Shuttle 1983 en opisav realizaciyu mikrokodu algoritmu BSP dereva na bufernij sistemi kadru Ikonas Ce bula persha demonstraciya viznachennya vidimoyi poverhni v realnomu chasi z vikoristannyam BSP derev 1987 Tibo i Nejlor opisali yak dovilni bagatogranniki mozhut buti predstavleni za dopomogoyu BSP dereva na vidminu vid tradicijnih b Rep granichnogo uyavlennya Ce dalo tverde uyavlennya poverhni na osnovi reprezentaciyi Nabir operacij nad mnogogrannikami buv opisan z vikoristannyam instrumentu sho dozvolyaye konstruktivna blokova geometriya CSG v rezhimi realnogo chasu 1990 Nejlor Amanatides i Tibo zaproponuvali algoritm dlya ob yednannya dvoh BSP derev shob sformuvati nove BSP derevo z dvoh vihidnih derev Ce daye bezlich perevag sered yakih ob yednannya ruhomih ob yektiv yaki predstavleni yak BSP dereva zi statichnim seredovishem takozh predstavlene BSP derevom tochne viyavlennya zitknen v O log n log n displaystyle O log n log n nalezhne uporyadkuvannya prozorih poverhon sho mistyatsya v dvoh vzayemopronikayuchih ob yektiv vikoristovuyetsya dlya efektu rentgenivskogo zoru 1990 en zaproponuvav avtonomnu generaciyu potencijno vidimih naboriv dlya priskorennya vidimogo viznachennya poverhni v ortogonalnih 2D seredovishah 1991 Gordon i Chen opisali efektivnij sposib provedennya peredno zadnogo perekladu z BSP dereva a ne tradicijnij zzadu vpered pidhid Cej algoritm razom z opisom BSP dereva v standartnij komp yuternij grafici po pidruchniku dnya en bula vikoristana Dzhonom Karmakom v stvorenni Doom videoigri 1992 kandidatska disertaciya Tellera opisuvala efektivnu generaciyu potencijno vidimih naboriv yak krok poperednoyi obrobki dlya priskorennya v rezhimi realnogo chasu viznachennya vidimoyi poverhni v dovilnih 3D poligonalnih seredovishah Ce bulo vikoristano v Quake videoigri i robit znachnij vnesok u rezultativnist ciyeyi gri Nejlor vidpoviv na pitannya pro te sho harakterizuye horoshe BSP derevo Vin vikoristovuvav ochikuvani modeli vipadku a ne analizuvav najbilsh nespriyatlivi vipadki dlya matematichnogo vimiru ochikuvanoyi vartosti poshuku dereva i vikoristovuvav cej zahid shob pobuduvati horoshi BSP dereva Intuyitivno zrozumilo sho derevo predstavlyaye ob yekt v dekilkoh rezolyuciyah modi bilsh tochno yak derevo nablizhen PrimitkiSchumacker Robert A Brand Brigitta Gilliland Maurice G Sharp Werner H 1969 Study for Applying Computer Generated Images to Visual Simulation Report U S Air Force Human Resources Laboratory p 142 AFHRL TR 69 14 Fuchs Henry Kedem Zvi M Naylor Bruce F 1980 On Visible Surface Generation by A Priori Tree Structures SIGGRAPH 80 Proceedings of the 7th annual conference on Computer graphics and interactive techniques ACM New York pp 124 133 doi 10 1145 965105 807481 Thibault William C Naylor Bruce F 1987 Set operations on polyhedra using binary space partitioning trees SIGGRAPH 87 Proceedings of the 14th annual conference on Computer graphics and interactive techniques ACM New York s 153 162 doi 10 1145 37402 37421 LiteraturaMark de Berg Computational Geometry Algorithms and Applications Springer Science amp Business Media 2008 P 259 ISBN 978 3 540 77973 5 PosilannyaBSP trees presentation 18 serpnya 2005 u Wayback Machine angl angl A Java applet that demonstrates the process of tree generation 8 sichnya 2007 u Wayback Machine angl A Master Thesis about BSP generating 3 kvitnya 2015 u Wayback Machine angl angl BSP in 3D space 31 lipnya 2016 u Wayback Machine angl ros