Алгоритми виявлення вузькофазних зіткнень


10

Існує три фази виявлення зіткнення.

  1. Широкофазна : це петля між усіма об'єктами, які можуть взаємодіяти, помилкові позитиви дозволені, якщо це прискорить цикл.

  2. Вузька фаза : визначає, чи стикаються вони, а іноді, як, немає помилкових позитивних результатів

  3. Роздільна здатність : Вирішує зіткнення.

Питання, яке я задаю, стосується вузької фази. Існує кілька алгоритмів, що відрізняються складністю та точністю.

  1. Перетин Hitbox : Це алгоритм a posteriori, який має найменшу складність, але також не надто точний,

  2. Колірний перетин : перетин Hitbox для кожного пікселя, a-posteriori, ідеальний для пікселів, не точний щодо часу, більша складність

  3. Теорема роздільної осі : Це використовується частіше, точне для трикутників, однак, a-posteriori, оскільки він не може знайти краю, коли брати до уваги останній кадр, він стабільніший

  4. Лінійне випромінювання : апріорі-алгоритм, корисний для напівреалістичної фізики, знаходить точку перетину, навіть точнішу, ніж SAT, але з більшою складністю

  5. Інтерполяція сплайну : Апріорі, навіть точніша за лінійні промені, ще більша складність.

Напевно, ще багато про що я забув. Питання в тому, коли краще використовувати SAT, коли промені, коли сплайни і чи є щось краще.

Відповіді:


6

Два, які вам не вистачає, які мені відразу виділяються, - це GJK та MPR

GJK - алгоритм пошуку найближчої точки двох опуклих багатокутників. Маючи додаткову роботу, ви можете використовувати її для пошуку точок падання для пересічних об'єктів, а отже, обчислити колектор зіткнення. Це робиться за допомогою відсікання багатокутника так само, як і при використанні SAT, але GJK заощаджує вам кілька кроків (оскільки у вас вже будуть найближчі точки).

MPR (Minfinski Portal Refinement) - ще один алгоритм, схожий на GJK (вони обидва використовують проміжки Minkowski). Він не може знайти найближчу точку між непересічними об'єктами, такими як GJK, але у нього є маса інших приємних властивостей для ігор, і це спосіб використовувати для отримання контактного колектора.

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

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

Подивитися:


3

Я хотів сказати, його Тест роздільної осі , а не теорема.

Ви б використовували SAT на нерухливих полігонах (2D), хоча ви можете розширити його, щоб справлятися з відносним лінійним рухом.

http://elancev.name/oliver/2D%20polygon.htm#tut3

Не використовуйте GJK в 2D, я виявив, що це насправді повільніше, ніж просто грубе примушування SAT.

Ще одна методика, яку ви можете використовувати, - це різниця Міньковського, яка стискає один предмет до точки і «виростає» іншого за формою першого. Потім ви протестуєте об'єднаний об'єкт проти точки, що набагато простіше - це дає відстань проникнення і нормально. Я вважаю цей інструмент концептуально дуже корисним для вирішення нових проблем виявлення зіткнень; легше візуалізувати, ніж SAT.

Для переміщення та обертання багатокутників (і багатогранників) ви можете скористатися консервативним просуванням, щоб знайти точний час та точку контакту.

http://www.continuousphysics.com/BulletContinuousCollisionDetection.pdf

Більше про ці методи ви можете прочитати в цій публікації в блозі, про яку я писав деякий час назад:

http://www.wildbunny.co.uk/blog/2011/04/20/collision-detection-for-dummies/

Сподіваюся, що це допомагає!

Ура, Пол.


2
Теорема осі, що відокремлює: існує вісь, уздовж якої проекції двох опуклих об'єктів роз'єднуються, якщо об'єкти роз'єднуються. Тест, що відокремлює вісь: я маю на увазі впровадження згаданої теореми на практиці.
Ерік

0

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

Однак, SAT є досить стандартним для мого досвіду для загальних фізичних бібліотек, напр. Box2D широко використовує його (Angry Birds, і багато інших ігор використовують Box2D).

Варіанти перетину кольорів, змішані з перетином SAT або Hitbox, використовуються в таких іграх, як Sonic, Megaman з хорошими результатами.

Я не знаю багато про №4 та №5, хоча.

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