Алгоритмы обнаружения узкофазных столкновений

10

Есть три фазы обнаружения столкновений.

  1. Broadphase : он проходит между всеми объектами, которые могут взаимодействовать, допускаются ложные срабатывания, если это ускорит цикл.

  2. Узкая фаза : определяет, сталкиваются ли они, а иногда, как нет, ложных срабатываний

  3. Разрешение : Разрешает столкновение.

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

  1. Пересечение Hitbox : это a-posteriori алгоритм, который имеет наименьшую сложность, но также не слишком точен,

  2. Пересечение цвета : пересечение Hitbox для каждого пикселя, a-posteriori, идеально для пикселя, не точное с точки зрения времени, более высокая сложность

  3. Теорема о разделяющей оси : используется чаще, точнее для треугольников, однако, a-posteriori, так как не может найти границу, при учете последнего кадра она более устойчива

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

  5. Сплайн-интерполяция : A-priori, даже более точная, чем линейные лучи, еще большая коплетность.

Наверное, я еще много чего забыл. Вопрос в том, когда лучше использовать SAT, когда лучи, когда сплайны, и есть ли что-нибудь лучше.

Мариан Иванов
источник

Ответы:

6

Два, которые вам не хватает, которые сразу выделяются из меня - это GJK и MPR.

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

MPR (Minkowski Portal Refinement) - это другой алгоритм, похожий на GJK (они оба используют пространства Минковского). Он не может найти ближайшую точку между непересекающимися объектами, такими как 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/

Надеюсь, это поможет!

Ура, Пол.

wildbunny
источник
2
Теорема о разделяющей оси: существует ось, вдоль которой проекции двух выпуклых объектов не пересекаются, если они не пересекаются. Тест на разделительную ось: я полагаю, применяя вышеупомянутую теорему на практике.
Эрик
0

Это действительно зависит от типа вашей игры. У каждого метода выше есть свои собственные компромиссы.

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

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

Я не знаю много о № 4 и № 5, хотя.

XiaoChuan Yu
источник