Я знаю про дерева BSP, Octrees і Portal, які там використовували давно. Але сучасні ігри все ще використовують цю систему чи вони використовують нові речі?
Якщо це можливо із плюсами та мінусами, врахуйте візуалізацію та виявлення зіткнень.
Я знаю про дерева BSP, Octrees і Portal, які там використовували давно. Але сучасні ігри все ще використовують цю систему чи вони використовують нові речі?
Якщо це можливо із плюсами та мінусами, врахуйте візуалізацію та виявлення зіткнень.
Відповіді:
Так, наприклад, двигун Unreal 3 все ще використовує BSP - головним чином тому, що він використовується під час процесу CSG. Doom3 / id tech 4 використовує портали, і я думаю, що я прочитав щось, що id Tech 5 повертається до дерев BSP. Є деякі ігри, в яких також використовуються октриси. У грі я розумію, що UE3 перейшов до більш динамічного підходу із запитами оклюзії, але я був би здивований, якщо вони не використовують BSP, щоб принаймні визначити, які статичні сітки видно. Інші ігри можуть просто використовувати вигляд-фруст-кулінг (Цивілізація, наприклад.) Це дійсно залежить від того, який тип гри ви виглядаєте.
Причина того, що BSP та інше все ще існує, тому що ви не можете зробити набагато кращого. Якщо у вас статична геометрія, BSP чудово підходить, якщо ви правильно побудуєте. Це вимагає, щоб ви створили BSP builder, що є складним (але це може трапитися безкоштовно, якщо ваше рішення CSG використовує одне!). Октре і більш динамічні рішення (як, наприклад, посилання на запити оклюзії для всього) простіші у впровадженні, мають більший час виконання вартість, але не вимагає (дорогої) попередньої обробки рівнів. Це компроміс, який готові зробити деякі ігри (наприклад, Crytek хоче, щоб все працювало в режимі реального часу, тому вони не витрачають часу на обробку для створення структури статичного прискорення.) Інші підходи до виконання, наприклад, растеризація програмного забезпечення на процесор і виконання запитів оклюзії на процесорі (це використовується двигуном Frostbite.)
Для дійсно сучасного підходу подивіться на Umbra , який є проміжним програмним забезпеченням для запитів на видимість. Якщо трохи пошукати в Інтернеті, ви повинні знайти деякі основні тези, які описують перші початки Umbra.
Підсумок: Ви хочете використовувати BSP / Octree / no AS, сильно залежатиме від типу гри, яку ви хочете створити. Якщо ваші рівні здебільшого статичні, вам слід скористатися цим і побудувати структуру статичного прискорення. Якщо все динамічно, потрібен звичайно інший підхід.
Для виявлення зіткнень я би поглянув на Bullet та PhysX та їх алгоритми виявлення зіткнень. Але я відчуваю, що фізичні рішення менш прив’язані до видимості, ніж раніше - фізичне рішення може захотіти використовувати BVH на базі GPU, і в цьому випадку немає особливого сенсу намагатися використовувати це для запитів про видимість.
Я, чесно кажучи, не знаю, які двигуни наступного покоління використовують сьогодні, але я розповім, що я знаю. Легко плутати між оптимізацією та структурою даних, яка використовується для сприяння оптимізації. Усі речі, про які йдеться нижче, є оптимізаціями, але я зазначу, які саме структури даних є.
BSP : Структура даних - для виявлення перетину між динамічними рухомими об'єктами та статичною геометрією світу. Використовується як для виявлення зіткнень, так і для надання геометрії правильно без zbuffer, але вона більше не використовується для візуалізації, оскільки у нас є достатньо пам’яті для буфера az зараз. Вони технічно генеруються дещо інакше, але все ж вважаються тими ж деревами. Потрібна попередня обробка.
Octree або Kd-Tree : Структура даних - використовується для визначення того, які об’єкти знаходяться в одній "комірці" або області, щоб уникнути перевірки n ^ 2 на всіх динамічних об'єктах.
Вони не єдині, але, мабуть, найбільш поширені. Також існує велика кількість оптимізацій, які дозволяють двигуну взагалі не уникати геометрії. Але наступне лише викреслює геометрію, і це, як правило, все, для чого вона використовується:
Портали : технічно не є структурою даних, але вимагає спеціального для відсіку. Застосовується для наочності виведення світової геометрії та динамічної геометрії об'єкта з виду. Потрібна попередня обробка, щоб поділити світ на ті сфери, які я думаю. Але я насправді цього не реалізував, тому не знаю.
Відключення прикусу : Оптимізація - використовується для відстеження видимості для будь-яких потрібних вам, ймовірно, динамічних об'єктів.
Регулярне відстеження Viewport : оптимізація - знімає об'єкти, які не переглядаються камерою.
Більше відстеження огляду : Оптимізація - Регулярне відстеження вікон перегляду можна ще більше оптимізувати, використовуючи октрис. Ви можете викреслити цілі клітини октрису, які знаходяться позаду камери або не є її зором. Сюди входять ділянки місцевості (якщо ви знаходитесь зовні). Що б не було порушено октом, ви б виконували "регулярне відсікання огляду". Тоді, що б не залишилося, ви зробите це.
Відсікання задньої поверхні : Оптимізація - геометрія повернута в сторону від камери для запобігання растеризації. Зазвичай робиться апаратно, якщо стан візуалізації встановлено правильно.
Структури даних спеціальних випадків:
Дерева AABB або дерева сфери : Це різновиди спеціальних структур даних. Вони перетворюють увігнуту форму в опуклу. Наприклад, персонаж з кістками технічно увігнутий. Він розбиває його на більш дрібні опуклі шматочки. Може використовуватися як оптимізація для виявлення зіткнень, відстеження видимості динамічних об'єктів (як правило) та полегшує проведення випробувань на перетинах, оскільки він опуклий. Вони входять би мовити, октри, оскільки вони, як правило, динамічні об'єкти. Вони також можуть бути використані для сприяння оптимізації відключення оклюзії.
Немає жодної причини, що вам потрібно використовувати одну структуру, щоб представити все (наприклад, графік сцени). На мою думку, вам було б краще використовувати різні структури даних для різних завдань, а не намагатися використовувати одне дерево загального призначення якогось типу. Наприклад, двигун, над яким я працюю в даний час, я планую реалізувати комбінацію BSP / Octree / AABB Tree з такими оптимізаціями: відключення оклюзії, вікно перегляду та, звичайно, відсікання задньої поверхні. Це означає, що у мене буде одне дерево BSP, одне octree і, ймовірно, кілька дерев aabb в межах цієї octree.
Вибір найкращих структур даних та алгоритмів / оптимізацій - це, мабуть, найбільша та найвигідніша річ, яку ви можете зробити для свого двигуна.