Фиксированная частота кадров против варьируемой. Написание своего движка

В этой статье мы рассмотрим использование физики для имитации броска снарядов (да, прямо как в Angry Birds). Мы обратим внимание на основы использования 2D физики, а также на создание физических тел, импульсов и сил. Не забудем отметить и наиболее популярные игровые движки для симуляции физических 2D миров.

Обратите внимание, что для этой статьи уже доступно продолжение: и

Функции физического движка

Зачем нам использовать какой-то физический движок? И что это такое на самом деле?
Б
Вообще физический движок очень полезен. Он позволяет сделать за нас две важные вещи:

  • Обнаружение столкновений (коллизий) между нашими игровыми объектами;
  • Имитация силы и движений в результате столкновений.

Обнаружение столкновений

Игры были бы не очень интересными, если ваш персонаж провалился бы сквозь пол, не сделав ни одного шага или прыжка. Или если бы нога вашего персонажа прошла бы сквозь врага, которого вы хотели пнуть. Обнаружение столкновений позволяет очень точно определять взаимодействие двух тел.

Имитация силы

Что должно произойти после столкновения? Могут произойти различные явления: может прыгнуть персонаж, может прыгнуть какой-то другой игровой объект, а может вы просто будете двигаться в каком-то направлении. Все это выполняется движком за кадром. Но силы, которые может имитировать физический движок, не ограничены столкновениями. Существуют такие понятия, как гравитация и импульс. Они могут применяться к телам, даже если те не сталкивались. Также такие силы могут влиять на действия, которые происходят в игре, на движения героев и даже на сам мир.

Итак, давайте посмотрим вкратце на устройство физического движка, но сначала обратим свое внимание на их разновидности и определимся с выбором исходя из наших потребностей.

Выбор физического движка

На этом этапе у вас есть два варианта. Оба варианта имеют как достоинства, так и недостатки:

  1. Использовать существующий физический движок;
  2. Написать свою реализацию (с преферансом и куртизанками).

Использование существующего движка

Существуют несколько отличных готовых вариантов. Один из самых популярных движков для 2D игр это, безусловно, Box2D . Написан был изначально на C++, однако был портирован практически на все популярные языки программирования. Другим достаточно известным движком является Chipmink 2D , который используется как основной в таких фреймворках, как Cocos2D .

Написание своего движка

В некоторых играх использование существующего решения - излишняя роскошь. Дело в том, что физический движок использует немало драгоценной памяти, и в простеньких играх может вызвать излишнюю нагрузку, которой можно было бы избежать. Согласитесь, в простых платформерах или арканоидах нам не требуется вычислять место контакта с точностью до пикселя. Ресурсы, которые придется тратить на вычисление такой коллизии, мы можем потратить в другом месте, где это было бы уместнее.

Да, создание собственного физического движка даст вам больше гибкости, чем уже готовый продукт. Однако не забывайте и о том, что этот процесс достаточно скрупулезный, и вы, в конце концов, можете реализовать что-то более сложным способом, чем это же делается в готовом движке.

Цикл игры

Прежде чем рассматривать свойства и детали моделирования физики, давайте посмотрим на то, что происходит в каждом игровом кадре при подходе «в лоб»:


Типичный цикл игры для каждого кадра будет проходит четыре шага в следующем порядке:

  • Вход в кадр;
  • Обновление игровой логики;
  • Симуляция физики;
  • Отрисовка кадра.

Обратите внимание, что отрисовка кадра происходит после симуляции физики. Такой порядок, разумеется, не лишен смысла.

Также обратите внимание на то, что в нашем примере физика моделируется каждый кадр. Каждый! Это может привести к большим задержкам, если у вас очень много физических тел на экране. Всегда следите за этим показателем - не позволяйте вашей игре слишком долго имитировать физический мир. На самом деле обновлять физику не обязательно для каждого кадра, читайте далее.

Фиксированная частота кадров против варьируемой

Давайте поговорим о частоте кадров: фиксированной (fixed rate) и варьируемой (frame dependent rate). Метод update вызывается один раз за кадр игровой сцены. Если ваш метод симуляции физики вызывается из метода update, то ваш физический мир будет зависеть от частоты кадров. Это может привести к нереалистичному поведению физических тел. В iOS этот эффект решается за счет использования булевского свойства usesPreciseCollisionDetection . Но что насчет других операционных систем?

Рассмотрим отрывок кода:

CFTimeInterval timeSinceLast = currentTime - self.lastUpdateTimeInterval; self.lastUpdateTimeInterval = currentTime; if (timeSinceLast > 1) { timeSinceLast = 1.0/60.0; }

Этот код предназначен для компенсации проблем с дельта-значением времени. Актуально это будет в том случае, если во время игры вам позвонили. Тогда вы сможете при помощи такого алгоритма восстановить дельта-значение времени (для игры с 60 FPS).

Это на самом деле первый шаг в понятии работы физического движка. Да, предыдущий кусочек кода сделает нашу симуляцию более стабильной, но всех проблем он не решит. Для этого нам понадобится удалить вызов функции моделирования физики из цикла рендеринга игровой сцены, а затем создать фиксированный цикл. В течение этого цикла и будет работать симуляция физики. Например, если ваша игра рассчитана на работу в 60 кадров в секунду, то вы устанавливаете частоту моделирования физики в 60 раз в секунду. Такое разделение обязанностей позволит нам устранить множество проблем.

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

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

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

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

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

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

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

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

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

На сегодняшний день компьютерные игры развиваются невероятно быстрыми темпами - во многом это происходит благодаря тому, что процесс разработки стал гораздо более доступным. С появлением платформы «Стим» каждый человек получил возможность создать собственную игру и представить ее вниманию огромной общественности, а ведь раньше сделать это без помощи компании-издателя было попросту невозможно. Поэтому многие люди, у которых были идеи и способности для сотворения отличной игры, просто не имели возможности - теперь же все изменилось. И если вы хотите разработать собственный проект, для вас это не будет проблемой, но для начала вам нужно обратить внимание на физический движок. Конечно, никто не запрещает вам писать свою игру с нуля, программируя собственный уникальный движок. Но гораздо проще пользоваться уже готовым, так как он будет гарантированно отлажен и станет работать без проблем. Физический движок - это основа любой компьютерной игры, это базовый слой, на который вы будете наращивать контент своего проекта. Существует большое количество разнообразных движков, у каждого из которых имеются свои плюсы и минусы. В данной статье вы узнаете о нескольких лучших движках, существующих на сегодняшний день.

Cry Engine 3

В первую очередь обратите внимание на то, что далеко не каждый физический движок доступен всем пользователям. Некоторые разработчики игр создают собственный, для личного использования, после чего не дают к нему доступ никому другому. Такие движки рассматриваться не будут - здесь речь пойдет о том, что вы можете использовать для создания игры, будучи так называемой третьей стороной. Первый вариант, который будет у всех на слуху в первую очередь - это Cry Engine 3. Это очень мощный физический движок, который позволит вам создать невероятную игру, однако при этом существуют различные варианты использования. Если вы не хотите тратиться, то вы можете использовать бесплатную версию - в ней будут доступны все функции, однако при этом вы не сможете распространять или продавать свою игру, то есть такой вариант подходит для домашнего использования. Существует и два платных варианта - один подразумевает выдачу двадцати процентов прибыли с игр разработчикам движка, а второй - покупку лицензии. И именно поэтому данный вариант не так популярен, как многие другие - он очень дорогой.

Если же вам не хочется тратить большие деньги на предыдущий вариант, то вам стоит обратить внимание на этот. Unreal Engine 3 - это лучший на данный момент движок по соотношению цены и качества. Вы можете приобрести права на его использование относительно недорого, при этом с его помощью вы сможете создавать полномасштабные компьютерные игры, как это делают крупные компании-разработчики, известные во всем мире. У этого движка имеются самые различные достоинства, такие как мультиплатформенность, отличная поддержка, простота и понятность. Таким образом, каждый человек, который приобретает данный движок, сможет без проблем разработать прекрасную игру, если у него для этого есть способности. Великолепную базу для этого предоставит вам Unreal Engine 3.

Havok

Если говорить о крупных проектах, то обязательно стоит затронуть еще и Havok - движок, который своим появлением сильно изменил Сейчас на нем создано уже около 200 компьютерных игр крупных студий, а инди-разработок было еще больше. Данный движок чаще всего используется для шутеров от первого или третьего лица, но иногда можно встретить и крупные проекты других жанров, например, «Старкрафт 2» среди стратегий, Super Smash Bros. среди платформеров и так далее. Естественно, приобретение его будет стоить достаточно внушительной суммы, но возможности, которые он перед вами открывает, - просто огромны. Так что если вы не являетесь независимым разработчиком с низким бюджетом, то вы можете приобрести этот движок - он сделает вашу игру просто великолепной.

Unity 3D

Что ж, пришло время перейти от крупных движков к чему-то не такому масштабному. Существует большое количество недорогих решений для двухмерных игр, но вот третье измерение по приемлемой цене спешат добавить не все. Именно поэтому движок Unity 3D на сегодняшний день является крайне популярным, так как предлагает недорогой доступ к трехмерному миру. Уже с 2009 года этот проект является ведущим среди тех, которые были разработаны не крупнейшими корпорациями для таких же крупных проектов. Поэтому вам стоит обязательно обратить внимание на данный движок, если вы хотите разрабатывать именно трехмерный проект - покупка лицензии обойдется вам недорого, а за эти деньги вы получите просто огромный объем материалов, простой доступ к публикации готовых проектов и многое другое.

DMM

Современные движки очень часто уделяют серьезное внимание реалистичности повреждений, которые наносятся миру, персонажу, средству передвижения и так далее. Однако если вы ищете недорогое решение для игры, в которой основной составляющей будет именно динамика деформируемого тела, то вам стоит обратить внимание на данный движок. Он называется DMM, и с его помощью вы сможете воспроизводить крайне реалистичную модель повреждений, независимо от того, каким будет их характер. Полное название движка - Digital Molecular Matter, и из него люди, знающие английский язык, могут уже понять, что именно деформации и будут является его главной фишкой. Если у вас нет денег на крайне дорогой современный движок, который предложит вам деформацию как одну из многих составляющих, или же вы хотите создать проект, в котором основное внимание будет уделено именно повреждениям и их реалистичности, то этот движок идеально для вас подойдет.

GameMaker

Ну и в завершение стоит обратить внимание на движок, который сильно отличается от всех остальных Дело в том, что на нем вам вообще не нужно будет программировать, так как все основные команды здесь заменены конкретными заранее прописанными действиями. Естественно, этих действий имеется ограниченное количество, но их все же довольно много, так что вы сможете создавать игры, вообще не задумываясь о том, что вам стоило бы выучить язык программирования. Вы прекрасно справитесь и без него, а если приобретете лицензию, то сможете использовать больше возможностей, а также публиковать свои собственные игры независимо.

Physics Engine — является базовым объектом для создания физического мира. Он необходим, чтобы работали физико-ориентированные объекты. Этот объект должен присутствовать в кадре, если вы используете один из физических типов движений.
Physics Engine содержит ряд настроек мира и контролирует объекты в физическом мире.

Свойства движка Physics Engine

  • Gravity (Вес)
    • Gravity strength (Сила тяжести)
      Параметр силы тяжести в физическом мире. Значение земного тяготения составляет около 10 (точно 9,81), поэтому значение по умолчанию для этого свойства установлено 10.000000. Вы можете изменить это значение в соответствующем действии.
    • Gravity angle (Направление силы тяготения)
      На Земле гравитация направлена, как бы, вниз, но вы можете установить направление притяжение в любую сторону.
      Направление силы тяжести также может быть изменено с применением действия.
  • Backdrops (Декорации / фон / элементы препятствий)
  • Projectiles (Пули / Снаряды)
    • Create projectiles in the physical world (Создавать пули в физическом мире)
      Если установлен этот параметр, то в действии Launch an object будет создаваться пуля физического мира, но при условии, что объект, из которого пуля запущена имеет один из физических движений. Если одно из этих условий ложно, то будет создана обычная (не физическая) пуля.
    • Density (Плотность)
      Плотность пуль, созданных действием Launch an object . При плотности равной 100 пуля будет тяжелее, и, следовательно, труднее перемещать при столкновении с другими объектами, но другой стороны, пуля будет сильнее толкать статические объекты. Меняя значение плотности вы меняете массу пуль. Масса объекта вычисляется в физике из значений плотности и размеров объекта.
    • Friction (Трение)
      Это свойство определяет, как пули ведут себя, когда они сталкиваться с другим объектами. Значение трения от 0 до 100 определит насколько скользящими будут пули.
    • Elasticity (Упругость)
      В значении 0 пуля остановится, как только столкнется с другим объектом. В значении 100 пули будут отскакивать, сохраняя динамику их движения. Промежуточные значения изменяют этот импульс.
    • Gravity scale (Гравитация масштаб)
      Это процентное значение, указывающее, насколько сильно сила тяжести будет действовать на пулю. Значение 100 — нормальная гравитация, в соответствии с силой притяжения установленной в движке Physic Engine. Значение 0 позволит пули лететь по прямой линии. Значение 200 увеличит в 2 раза силу притяжения действующую на пулю, и, таким образом, пуля упадет быстрее.
  • Non-physical objects (Не физические объекты)
  • Advanced (Расширенные настройки)
    • Engine ID (ID движка)
      Это свойство следует изменять только если вы решите использовать более одного объекта физического движка в кадре (например для того что бы сделать разную силу тяжести). Это свойство содержит номер (он должен быть уникальным), затем этот номер прописывается в свойствах объектов, что бы указать какому движку он подчиняется.
    • Display factor (Фактор отображения)
      Box2D работает с единицами измерения в метрах и килограммах. В Clickteam Fusion 2.5 размеры кадра и объектов исчисляются в пикселях. Это свойство содержит коэффициент умножения и координирует размеры Clickteam Fusion 2.5 при передаче их в физический мир. Значение 32 означает, что объект 32 пикселей в ширину, будет иметь ширину 1 м в физическом мире.
      Значение 32 отлично работает для большинства игр. Но если ваша игра содержит очень большие объекты, движок не может справиться с ними. Поэтому вы должны, изменить это значение в зависимости от размера ваших объектов. Более высокое значение уменьшает размер объектов в физическом мире. Меньшее значение увеличивает их.
      Также стоит отметить, что как результат расчета, объекты двигаются быстрее с более низкими значениями этого свойства.
    • Velocity iterations (Скорость итераций)
      Это свойство используется, чтобы определить точность обработки физического мира. Движок работает, оценивая столкновения различных объектов, чем больше значение этого параметра, тем точнее результат вычислений, но и медленнее движок.
      Значение по умолчанию 6 должно быть достаточным для большинства игр. Но если в вашей игре какая-то сложная реализация, которая требует большой точности, то необходимо увеличить это значение. Пожалуйста, обратите внимание, что это будет экспоненциально тормозить движок.
      Можно, например, установить это свойство в более высокое значение, что бы точно произвести вычисления в начале кадра, а затем стабилизировать, установив его в меньшее значение во время игры, с помощью действия «Set iterations «.
    • Position iterations (Итерация позиции)
      Это свойство похоже на предыдущее, и влияет на вычисление положения объектов в физическом мире. Значение по умолчанию 2 должно быть достаточно для большинства игр, но вы также можете увеличить, если для вас движок не будет достаточно точным. Чем выше значение, тем медленнее будет движок, поэтому выбор правильной величины должен быть результатом практической оценки.

Действия движка Physics Engine

  • World
    • Add object to world Добавить объект в мир.
      Позволяет вставлять не физические объекты (например, активный объект с простым движением) в физическом мире.
      Эта функция позволяет использовать простой тип движения path в физическом мире. Например, когда вы делаете движущуюся платформу или врагов-охранников, которые движутся из стороны в сторону. Просто добавьте не физический тип движения по траектории в мир.
    • Remove object from world
      Это действие удалят объект, который был добавлен в физический мир. Он не разрушает объект, объект будет оставаться на сцене, но станет не физическим.
    • Set gravity force
      Это действие изменяет текущий коэффициент силы притяжения в мире. Значение 10 (точно 9,81) совпадает с земной гравитацией. Вес 0 создаст невесомость.
    • Set gravity angle
      Это действие изменяет направления силы притяжения. Угол в градусах (от 0 до 360). Все объекты мира будут мгновенно реагировать на изменение угла притяжения.
    • Set iterations
      Изменение точности вычислений движка путем установки количества итераций, выполняемых движком. Первым параметром является скорость итераций (значение по умолчанию 6), и второй параметр — это количество итераций (значение по умолчанию равно 2). Подробнее об это свойство еще будет описано ниже.
  • Objects
    В действиях движка можно менять физические параметры (плотность, трение, гравитационной масштаб и упругость) любого физического объекта.
  • Joints
    Clickteam Fusion 2.5 позволяет создавать различные типы соединений, поддерживаемых Box2D. Вы должны ввести имя, когда вы создаете соединение, так как это имя будет использоваться для обращение к суставу. Позволяя вам делать следующее:
    • Distance joints
      Расстояние между двумя соединенными объектами. Для того, что бы применять это действие два тела уже должны быть на соединены.

      • Joint two objects at hot spots
        Создает дистанцию сустава в месте расположения горячей точки (hot spot — точка привязки координат со значком глаза) двух объектов. После создания расстояние между двумя объектами будет оставаться постоянным (если только на объект не будет оказано действительно сильное воздействие).

      • Создает дистанцию сустава в месте расположения активных точек (action point — квадратная) связаных объектов.

      • Создает дистанцию соединения в заданных координатах внутри объектов. Вам нужно будет указать значения смещения от точки реальной координаты (hot spot) объектов.
      • Set joint elasticity
        Делает пружинное соединение между двумя объектами, как будто они соединены резинкой. Это действие принимает два параметра: первый — частота колебаний пружины/резинки, в герцах (Гц). Значение 10 заставит резинку сокращаться 10 раз в секунду. Вы не должны вводить значения выше 30 (для FPS приложений — 50). Второй параметр — коэффициент затухания, значение от 0 до 100: значение 0 приведет к тому, что резинка всегда будет колебаться, 100 будет останавливаться мгновенно.
    • Revolute joints
      Когда скреплены два объекта, где будет их ось вращения? Осью вращения может являться точка координат одного из объектов или точка соединения этих объектов.


      • Создает ось вращения на месте расположения точки координат (hot spot) первого объекта. Объекты будут вращаться вокруг своей оси, и также они не отделяются друг от друга.
      • Joint two objects at action point
        Создает ось вращения на месте расположения активной точки (action point) первого объекта. Объекты будут вращаться вокруг своей оси, и также они не отделяются друг от друга.
      • Joint two objects at position
        Создает ось вращения в заданных координатах первого объекта. Значение является смещением от горячей точки (hot-spot) объекта.
      • Set joint angle limits
        Действие позволяет ограничить вращение второго объекта в конкретной области угла. Он принимает два параметра, меньший предел угла (значение в градусах от 0 до 360), и верхний предел угла (выражается в градусах от 0 до 360). Если оба значения равны 0, предел будет удален (не будет предела вращения).
      • Set joint motor
        Заставляет принудительно вращаться второй объект. Действие создает «крутящий момент». Первый параметр — по часовой или против часовой, значение от -250 (вращение против часовой стрелки) до +250 (вращение по часовой стрелке), второй параметр — скорость вращения, значение от 0 до 100.
    • Prismatic joints
      Призматическое соединение придает относительное перемещение двух объектов вдоль указанной оси. Призматическое соединение предотвращает относительное вращение вокруг оси. Таким образом, призматическое соединение имеет одну степень свободы.

      • Joint two objects at hot spot
        Создает призматические соединения в месте расположения горячей точки (hot-spot) двух объектов. После того, как соединение создано, объекты будут оставаться в той же оси.
      • Joint two objects at action point
        Создает призматический сустав в месте расположения активной точки (action point) двух объектов.
      • Joint two objects at position
        Создает призматическое соединение в заданных координатах внутри объектов. Значения добавляет смещение от горячей точки (hot-spot) объектов.
      • Set joint translation limits
        Действие позволяет ограничить движение объектов до определенной части оси. Первый параметр является нижним пределом, задается в пикселях от позиции первого объекта, а второй параметр, верхний предел, также выражается в пикселях от первого объекта.
      • Set joint motor
        Действие приводит в движение второй объект от (или к) первого объекта. Первым параметром является направление движения, значение от -250 (сближает объекты) до 250 (объекты движутся друг от друга). Вторым параметром является скорость движения, значение от 0 до 250.
    • Pulley joints
      Шкив соединяет два объекта с планкой и друг с другом. Когда один объект поднимается вверх, другой опускается вниз.
      • Joint two objects at hot spot
        Создает соединение шкив на месте расположения горячей точки двух объектов. Вы должны указать длину (в пикселях) и угол (в градусах от 0 до 360) веревки, прикрепленной к двум объектам. После того, как объекты создаются, они будут связаны друг с другом невидимой веревкой. Последний параметр является передаточным отношением, значение от 0 до 100.
      • Joint two objects at action point
        Создает соединение шкива в месте расположения активной точки двух объектов. Как и в предыдущем действии, вы должны указать длину (в пикселях) и угол (в градусах от 0 до 360) веревок, прикрепленных к двум объектам. Последний параметр представляет собой передаточное отношение, значение от 0 до 100. Например, если использовать значение 50, второй объект будет двигаться в половину скорости первого объекта.
  • Destroy joint
    Действие уничтожает сустав. После этого объекты будут свободно перемещаться.

События движка Physics Engine

Сам объект движка Physics Engine не содержит никаких событий или условий.

Значения движка Physics Engine для различных выражений

  • Gravity
    • Angle
      Возвращает текущее направление гравитации, выраженная в градусах (от 0 до 360).
    • Strength
      Возвращает текущую силу тяжести, выраженная в метрах за секунду в квадрате.
  • Iterations
    • Velocity iterations
      Возвращает текущее число итераций скорости.
    • Position iterations
      Возвращает текущее количество итераций позиции.
  • Distance joints
    • Frequency
      Возвращает коэффициент упругости в суставах, измеряется в герцах, и является значением заданном в действии «Set elasticity».
    • Damping
      Возвращает коэффициент затухания в суставах, значение от 0 до 100, и является значением заданном в действии «Set elasticity».
  • Revolute joints
    • Lower angle limit
      Возвращает нижний предел угла сустава, значение, выраженное в градусах, которое определено в действии «Set angle limit».
    • Upper angle limit
      Возвращает верхний предел угла сустава, значение, выраженное в градусах, которое определено в действии «Set angle limit».
    • Motor strength
    • Motor speed
  • Prismatic joints
    • Lower translation limit
      Возвращает нижний предел ограничивающий движение объектов по оси, значение, выраженное в пикселях, и является значением заданном в действии «Set translation limit».
    • Upper translation limit
      Возвращает верхний предел ограничивающий движение объектов по оси, значение, выраженное в пикселях, и является значением заданном в действии «Set translation limit».
    • Motor strength
      Возвращает моторную силу в суставе (вращательный момент), значение от 0 до 100, которое определено в действии «Set motor».
    • Motor speed
      Возвращает скорость вращения в суставе, значение от 0 до 100, которое определено в действии «Set motor».

Это нужно знать о Physics Engine Object

Замечания, касающиеся физических движений в Clickteam Fusion 2.5, и так их обрабатывает движок физики.

Большие и плотные объекты
Движок не может справиться с объектами, которые являются слишком тяжелыми. Тяжелыми предметами являются крупные объекты с плотностью, близкой к 100. Если свалить такие объекты в кучу, то они будут вызывать ошибки расчетов движка и объекты будут мерцать на экране.
Можно решить эту проблему путем уменьшения плотности объектов.
Вы также можете решить эту проблему путем увеличения скорости и позиции итераций в движке Physics Engine Object, либо изменив масштаб.

Груды объектов не могут стабилизироваться
Если ваш кадр содержит кучу объектов, и если эта куча не останавливается в статическом положении через некоторое время, это может быть связано с неточностью расчетов в физическом движке. Параметры движка устанавливаются, чтобы был баланс между скоростью выполнения и точностю вычислений. Вы можете увеличить эту точность в течение определенного периода времени (в начале кадра в событии start of frame), а когда все объекты найдут свое место, вернуть ее к нормальному значению.
Чтобы сделать это, вы должны использовать действие «Set engine iterations» в движке Physics Engine object. Значение по умолчанию составляет 6 и 2. Вы можете увеличить, чтобы увидеть результат.

Движущиеся объекты, кажется, сталкиваются далеко от фоновых объектов
Эта проблема может возникнуть, если ваш объект имеет вогнутую форму. Box2D не принимает вогнутые формы. Вы должны сократить свой объект в несколько, выпуклых объектов.
Более подробная информация .

Народ, черкните в комментах был ли для вас полезен перевод и нужны ли другие переводы? Спасибо.

Physics Engine - является базовым объектом для создания физического мира. Он необходим, чтобы работали физико-ориентированные объекты. Этот объект должен присутствовать в кадре, если вы используете один из физических типов движений. Physics Engine содержит ряд настроек мира и контролирует объекты в физическом мире. Свойства движка Physics Engine Gravity (Вес) Gravity strength (Сила тяжести) Параметр силы тяжести в физическом мире. Значение земного тяготения составляет около 10 (точно 9,81), поэтому значение по умолчанию для этого свойства установлено 10.000000. Вы можете изменить это значение в соответствующем действии. Gravity angle (Направление силы тяготения) На Земле гравитация направлена, как бы, вниз, но вы можете установить направление…

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

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

Свойства

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

  • динамика абсолютно твёрдого тела ,
  • динамика деформируемого тела ,
  • динамика жидкостей,
  • динамика газов,
  • поведение тканей,
  • поведение верёвок (тросы, канаты и т. д.).

Класификация

Все физические движки условно делятся на два типа:

  • игровые,
  • научные.

Первый тип используется в компьютерных играх как компонент игрового движка. В этом случае он должен работать в режиме реального времени, то есть воспроизводить физические процессы в игре с той же самой скоростью, в которой они проходят в реальном мире. Вместе с тем от игрового физического движка не требуется точности вычислений. Главное требование - визуальная реалистичность, - и для его достижения не обязательно проводить точную симуляцию. Поэтому в играх используются очень сильные аппроксимации, приближенные модели и другие программные «трюки».

Научные физические движки используются в научно-исследовательских расчётах и симуляциях, где крайне важна именно физическая точность вычислений. Вместе с тем скорость вычислений не играет существенной роли.

Использование

Описание

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

Тело

Известные физические движки

Игровые проприетарные

Игровые свободные

Игровые аппаратные

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