Физический движок


Физический движок (англ. physics engine) — компьютерная программа, которая производит компьютерное моделирование физических законов реального мира в виртуальном мире, с той или иной степенью аппроксимации. Чаще всего физические движки для физического моделирования используются не как отдельные самостоятельные программные продукты, а как составные компоненты (подпрограммы) других программ.

Современные физические движки симулируют не все физические законы реального мира, а лишь некоторые, причём с течением времени и прогресса в области информационных технологий и вычислительной техники список «поддерживаемых» законов увеличивается. На начало 2010 года физические движки могут симулировать следующие физические явления и состояния:

В августе 2009 года англоязычный журнал Game Developer[англ.], посвящённый разработке компьютерных игр, опубликовал статью о современных игровых движках и их использовании. Согласно данным журнала, наиболее популярным среди разработчиков является движок nVidia PhysX, который занимает 26,8% рынка. На втором месте находится Havok, который занимает 22,7% рынка. Третье место принадлежит движку Bullet Physics Library (10,3%), а четвёртое — Open Dynamics Engine (4,1%).[1]

Физический движок позволяет создать некое виртуальное пространство, которое можно наполнить телами (виртуальными статическими и динамическими объектами), и указать для него некие общие законы взаимодействия тел и среды, в той или иной мере приближённые к физическим, задавая при этом характер и степень взаимодействий (импульсы, силы и т. д). Собственно расчёт взаимодействия тел движок и берёт на себя. Когда простого набора объектов, взаимодействующих по определённым законам в виртуальном пространстве, недостаточно в силу неполного приближения физической модели к реальной, возможно добавлять (к телам) связи. Рассчитывая взаимодействие тел между собой и со средой, физический движок приближает физическую модель получаемой системы к реальной, передавая уточнённые геометрические данные средству отображения (рендереру).

Связь (соединение; англ. joint) — ограничения объектов игровой физики, каждое из которых может накладываться на одно или два тела.

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