Сила (force) и физические объекты в Blender Game Engine. Урок 3

1. Физика в Blender

Когда к объекту в Blender применяется тип Dynamic, Rigid или Soft body, то в режиме игры их поведение становится похожим на поведение реальных объектов в области притяжения Земли (эти настройки можно изменить: например, эмулировать невесомость). В реальном мире плотные объекты не висят в воздухе, а падают на поверхности; при столкновении объекты могут отскакивать; для перемещения объекта с большей массой требуется приложить больше силы и т.д.

2. Активатор Motion

Для физических объектов у активатора Motion появляются дополнительные строки настроек (помимо Loc и Rot, которые также есть у статических объектов и отвечают за перемещение и поворот объекта).

Сравнение активатора Motion для статических и динамических объектов

Force (сила). Воздействие на объект с заданной силой и направлением. В отличие от Loc, объект не перемещается самостоятельно, а на него как бы действует сторонняя сила.
Torque (вращающий момент). Сила действует таким образом, что заставляет объект вращаться, а не перемещаться.

3.Force

Разместим на сцене плоскость и куб на ней. Добавив сенсор, контроллер и активатор и связав их между собой, увеличим значение Force по оси Х или Y.

Активатор Motion, изменение Force

В режиме игры объект будет двигаться, как и при влиянии Loc, однако он будет двигаться с ускорением, т.к. сила действует постоянно и постепенно разгоняет объект. После прекращения воздействия, объект останавливается не сразу, а постепенно (в отличие от Loc).

4. Local transformation и Rigid body

На объекты Rigid body сильное влияние оказывает привязка осей (X, Y, Z) к самому объекту или к 3D-миру. Если не выключить кнопку L, то объект не будет двигаться по направлениям пространства, а будет покачиваться на одном месте. Это связано с тем, что ось объекта при его повороте меняет свое направление, и тогда сила действует с другой стороны с точки зрения 3D-мира.

5. Влияние массы объекта

Обратите внимание на значение в строке Force. Заметные влияния на объект здесь возникают при изменении значения на единицы, а не на дробные значения как в случае Loc. Применение одной и той же силы к объектам разной массы оказывает различное влияние на них. Так если объект Dynamic с установленной виртуальной массой в 2 единицы попытаться сдвинуть с помощью 2 «виртуальных ньютонов», то ничего не получится. Объект же массой в 0.5 единиц будет передвигаться. Примечание: объекты Rigid body и Soft body ведут себя немного по-другому.

Различное значение mass при одинаковом force в BGE

6. Ось Z

Для того, чтобы придать объекту движение с помощью Force по осям X и Y достаточно значения сопоставимого с массой объекта или немного больше ее. Однако движение по оси Z в положительном направлении (вверх) требует применения силы большего значения. Вспомним, что находясь в поле Земли объекты притягиваются к ней с ускорением свободного падения равным примерно 9.8 м/с2. Чтобы преодолеть силу притяжения Земли и подбросить объект вверх, требуется сообщить ему большее ускорение, чем 9.8. Примечание: значение Force по оси Z не обязательно должно быть больше 9.8; объекты массой меньше единицы поднимаются вверх и при меньших значениях силы.

7. Роль центра объекта при движении

У любого меш-объекта в Blender есть центральная точка (в BGE она играет роль центра тяжести объекта). Объект всегда вращается вокруг нее и именно на нее действует сила. Для того, чтобы увидеть как от смены центра тяжести изменяется поведение объекта можно проделать следующий опыт. Расположим на сцене два одинаковых сплюснутых цилиндра. Оба – Dynamic, при нажатии на клавишу Space (пробел) на них воздействует Torque (вращающий момент по оси Z) в 2-3 единицы. Центральная точка одного из цилиндров смещена к его границе.

Влияние расположения центра объекта на его движение в Blender

В режиме игры при нажатии на клавишу Пробел один цилиндр будет крутиться на месте, а второй совершать круговые движения, описывая окружность.

8. Практическая работа

  1. Расположите на сцене три объекта Dynamic или Rigid body (для Rigid обязательно отключите L), установите им различную между собой массу на панели Logic. Добавьте сенсор, контроллер и активатор каждому объекту. В качестве сенсора установите Keyboard (в качестве Key пусть будет клавиша Пробел). Для всех объектов примените одинаковую силу по оси X или Y. Найдите такое значение силы, при которой объект, обладающий большей массой, почти не перемещается при воздействии силы, остальные – двигаются. Оцените взаимосвязь массы и силы.
  2. Расположите два Dynamic-шара. Одному из них задайте постоянную силу воздействия вниз. Падает ли он быстрее, чем другой шар? Расположите шар виртуальной массой в 5 единиц на плоскости. Найдите значение минимальной силы способной при постоянном воздействии оторвать шар от плоскости.
  3. Добавьте на сцену два вытянутых по оси Z Rigid-цилиндра. Сместите одному центральную точку к верхней части, а другому – к нижней. Задав силу воздействия по оси X или Y, оцените поведение объектов. Примечание: для цилиндров измените границу с Box на Convex Hull (выпуклая оболочка); для этого предварительно следует нажать кнопку Bounds (границы).
Настройка границ объекта в Blender Game Engine