Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Термины / Физический движок (Physics Engine)

Физический движок (Physics Engine)

Физический движок (Physics Engine) — программа (или подпрограмма), моделирующая тот или иной физический процесс.

Рассмотрим понятие физический движок на классическом примере движка, моделирующего физику твердых тел на основе импульсов (впрочем, большая часть сказанного относится и к другим методам). Фактически, все, что требуется от такого движка — уметь выполнять запросы вида «добавить тело», «симулировать шаг времени», «взять позицию/ориентацию данного тела» и другие. Рассмотрим подробнее основную его функцию «симулировать шаг времени», выполняемую каждый кадр в реалтайм приложении, например, в игре. В каждом кадре мы прежде всего обязательно должны найти все потенциально взаимодействующие пары тел. Этот шаг называется Broadphase. Чтобы сузить количество пар для проверок, применяются алгоритмы:

  • Sweep And Prune — один из самых легко реализуемых, но в то же время достаточно эффективных алгоритмов.
  • QuadTree / Octree и их расширения, такие, как loose tree — алгоримы по разбиению пространства (Spacial Hashing). Основываются на сужении круга поиска контактирующих тел в рамках суженной области пространства, например, нет смысла пытаться искать контакт чайника, стоящего на столе с автомобилем, стоящим под окном.
  • Множество алгоритмов, основывающихся на так называемом эффекте Temporal coherence, который можно толковать как «временная когерентность». Суть состоит в том, что тела от кадра к кадру обычно сдвигаются на малое расстояние, и тела, которые на данной итерации находятся далеко друг от друга, на следующей наверняка будут находиться незначительно ближе.

Далее, найдя пары потенциально пересекающихся тел, вступает в силу Narrowphase — стадия, на которой движок должен находить точные данные о контакте тел — находить точки контакта, нормали и глубины проникновения. Основные алгоритмы указаны по ссылке.

Следующая стадия — разрешение найденных контактов и других типов связей, которым занимается Solver

Завершающая стадия — интегрирование позиции. То есть, собственно, смещение всех тел сцены. Стадия не очень сложная, выбор алгоритмов её реализации невелик, но зато они отлично работают — интеграторы по Эйлеру, Ньютону и Рунге-Кутта.

Также сквозь все стадии «просачиваются» такие функции, как коллбэки (callbacks) на события, например, вызов некоторой функции, при каждом касания чайника со столом. И фризинг (freezing) или, как его ещё называют, sleeping тел — алгоритмы, «выкидывающие» из просчета слишком долго находящиеся в покое или, например, невидимые игроку тела.

Что такое Физический движок (Physics Engine)?

9 февраля 2008

#движок


Обновление: 9 октября 2012

2001—2018 © GameDev.ru — Разработка игр