Физика

Подготовка к использованию

Для задействования физики на сцене необходимо установить флаг Enable Physics в панели Physics на сцене.

_images/scene_interface_phys_enable.png

Статический тип физики

Может использоваться как ограничитель движения других объектов, например, для определения столкновений с ландшафтом, стенами и т.д. В настройках физики такого объекта для опции Physics Type должно быть выбрано значение Static (значение по умолчанию).

_images/physics_panel_static.png

Меш может быть покрыт одним или несколькими физическими материалами. Во вкладке Material должна быть активирована панель Special: Collision.

_images/material_panel_physics.png

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

_images/water_tower.png

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

Поле Margin позволяет настроить ширину зоны, в которой происходит соударения с сеткой данного объекта. Данная настройка позволяет улучшить стабильность симуляций столкновений объектов.

Также в этой панели располагаются физические настройки материала. Поддерживаются следующие настройки: трение (Friction), упругость (Elasticity).

Поле Collision Group отвечает за физическую группу, к которой относится материал. Поле Collision Mask определяет все физические группы, с которыми будет взаимодействовать данный материал.

Динамический тип физики

Предназначен для симуляции движения жесткого тела.

_images/physics_dynamic.png

В настройках панели Physics такого объекта должен быть установлен флаг Object Physics. Поле Collision ID предназначено для определения столкновения со специфическим объектом (например, прикрепленный к камере объект для определения близости FPS персонажа к предметам), и может быть оставлено пустым.

Опция Physics Type может иметь значения: Rigid Body (с вращениями) или Dynamic (без вращений). В настройках Collision Bounds может быть выбран тип коллайдера. Поддерживаются: Box, Capsule, Sphere, Cylinder, Cone. Так же можно настроить: массy (Mass), демпфирование (Damping) - для перемещения (Translation) и вращения (Rotation).

Поле Collision Group отвечает за физическую группу, к которой относится объект.

Поле Collision Mask определяет все физические группы, с которыми будет взаимодействовать данный объект.

_images/physics_panel_dynamic.png

Для материала такого объекта поддерживаются: трение (Friction), упругость (Elasticity). В случае использования на одном меше нескольких материалов физические настройки считываются с первого из них.

Для объекта-камеры должна использоваться настройка Physics Type = Dynamic, должен быть установлен флаг Object Physics.

Ограничители (Constraints)

Физические ограничители используются для уменьшения числа степеней свободы объектов.

_images/physics_constraints.png

Установка физического ограничителя (Rigid Body Joint) на объект происходит в панели Object Constraints. Поддерживаемые типы (Pivot Type): Ball, Hinge, Cone Twist, Generic 6 DoF. Физический ограничитель можно установить на один из двух взаимодействующих объектов, при этом другой выступает в качестве цели (Target). Оба объекта могут быть со статическим и/или динамическим типом физики. В ограничителях (кроме Ball) могут настраиваться пределы перемещения и вращения.

_images/physics_constraints_panel.png

Колесные транспортные средства

Модель транспортного средства (ТС) должна состоять из 6 отдельных объектов - шасси, 4 колеса, рулевое колесо. Центр меша шасси должен соответствовать центру масс. Центры мешей колес и рулевого колеса должны располагаться на осях вращения. Рулевое колесо должно быть ориентировано в локальной системе координат: X - ось вращения, Y - вправо, Z - вверх. Объекты могут иметь любые названия.

_images/physics_vehicle_wheeled.png

На всех 6 объектах нужно выставить Part, указать один и тот же идентификатор в поле Vehicle Name, выбрать соответствующий тип объекта - Chassis, Steering Wheel, Back Right Wheel и т.д. Для колес имеется также настройка компенсирующего хода подвески Suspension Rest Length.

Для шасси необходимо указать реалистичную массу (т.к. значение по умолчанию 1 кг). Для этого перейти в настройки физики, для опции Physics Type выбрать значение Rigid Body, и выставить нужное значение (например, 1000 кг) в поле Mass.

Параметры настройки для шасси

Force Max

Максимальная движущая сила транспортного средства.

Brake Max

Максимальный коэффициент торможения.

Suspension Compression

Коэффициент демпфирования при растяжении подвески.

Suspension Stiffness

Коэффициент жесткости подвески.

Suspension Damping

Коэффициент амортизации подвески.

Wheel Friction

Константа трения колес о поверхность. Для реалистичных Т.С. должен быть в районе 0.8. Но может быть значительно увеличен, для улучшения управляемости (1000 и более)

Roll Influence

Снижает вращающий момент от колес, уменьшая вероятность переворота транспортного средства (0 - нет вращающего момента, 1 - реальное физическое поведение).

Max Suspension Travel Cm

Максимальный ход подвески в сантиметрах.

Для рулевого колеса(Steering Wheel) необходимо указать максимальный угол поворота(Steering Max) и передаточное отношение угла поворота руля к передним колесам (Steering Ratio). Максимальное значение угла поворота указывается в оборотах. Один оборот равен 360 градусам. Таким образом, поставив Steering Max равным единице, а Steering Ratio равным 10, максимальный поворот руля получится равным 360 градусам, а максимальный поворот передних колес 36 градусов.

На этом этапе можно произвести экспорт и загрузить сцену в движок. Рекомендуется создать дорожную поверхность с физическим материалом. В просмотрщике нажать клавишу Q для выбора контролируемого объекта, и выбрать шасси. Использовать W, A, S, D для управления.

Дополнительно можно настроить демпфирование Damping перемещения (Translation) и вращения (Rotation). Свойство влияет на скорость перемещения и инерционность ТС.

Настройка трения и эластичности физического материала дорожного покрытия не влияют на поведение ТС.

Плавающие объекты

_images/physics_floater.png

Для того, чтобы объект мог плавать на поверхности воды (объекта с материалом Water), необходимо активировать панель Floater. Существует два типа частей плавающего объекта: Main Body - непосредственно сам плавающий объект и Bob - вспомогательный объект-поплавок, на который будет действовать выталкивающая из воды сила. Плавающий объект может иметь неограниченное количество объектов типа Bob. В качестве поплавков могут использоваться как меши, так и объекты типа Empty.

Всем объектам, входящим в состав одного плавающего объекта необходимо выставить одинаковое имя в поле Floater Name

Параметры настройки плавающего объекта

Floating Factor

Коэффициент выталкивания объекта из воды.

Water Linear Damping

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

Water Rotation Damping

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

Плавающие транспортные средства

_images/physics_boat.png

Плавающие транспортные средства используют часть параметров из настроек колесных транспортных средств Vehicle и все настройки как у объектов типа Floater. На основном объекте необходимо выставить Part`, типа Hull. Так же как и плавающий объект плавающее транспортное средство требует наличия вспомогательных объектов типа Bob.

Параметры настройки плавающего транспортного средства

Force Max

Максимальная движущая сила транспортного средства.

Brake Max

Максимальный коэффициент торможения.

Floating Factor

Коэффициент выталкивания объекта из воды.

Water Linear Damping

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

Water Rotation Damping

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

Персонажи

_images/physics_character_object_example.png

Эта возможность включается с помощью флажка Character в заголовке одноимённой вкладки на панели Physics.

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

Для управления объектом персонажем предусмотрено несколько методов API, содержащих слово character в названии. Эти методы находятся в модуле API physics.

Параметры настройки объекта-персонажа

_images/physics_character_settings.png

Все настройки, перечисленные в этом разделе, становятся доступны при включении панели Character

Walk Speed

Задаёт скорость ходьбы персонажа (измеряется в метрах в секунду). Минимальное возможное значение параметра - 0, максимальное - 10.

Значение по умолчанию - 4.

Run Speed

Скорость бега персонажа (измеряется в метрах в секунду). Значение может изменяться от нуля до 20.

По умолчанию равна 8.

Step Height

Максимальная высота (в метрах) препятствия, которое может преодолеть персонаж. Значение этого параметра может изменяться от 0 до 1.

Значение по умолчанию - 0.250.

Jump Strength

Сила прыжка персонажа. Минимальное значение - 0, максимальное - 50.

По умолчанию равна 5.

Waterline

Этот параметр устанавливает ватерлинию для объекта-персонажа. Расстояние до ватерлинии отсчитывается от центра физического примитива объекта (не от центра меша). Если объект погружён в воду ниже ватерлинии, он будет плавать. Значение параметра может изменяться от -2 до 2.

Значение по умолчанию равно нулю.

Базовый персонаж

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

Для создания базового персонажа следуйте инструкции:

  1. Выберите объект, который вы хотите использовать в качестве персонажа.

  2. Включите физику для выбранного объекта и установите тип физики на Dynamic или Rigid Body.

  3. Включите для объекта опцию Character.

  4. Создайте новую камеру или выберите уже имеющуюся, и установите тип камеры Eye.

Теперь в сцене будет присутствовать базовый персонаж с прикреплённой камерой.

Такой персонаж управляется практически так же, как обычная камера типа Eye:

  • Клавиши WASD перемещают персонажа.

  • Направление взгляда управляется с помощью клавиш-стрелок или перемещения мыши с зажатой левой кнопкой.

  • Нажатие клавиши C включает и выключает режим полёта (включён по умолчанию).

Примечание

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

Особенности использования в приложениях

Физическая подсистема реализована в модуле uranium.js и загружается отдельно от основного кода движка. Модуль uranium.js представляет собой модификацию физического движка Bullet, портированную для работы в браузерах. Быстрое подключение физической подсистемы можно осуществить, разместив файлы uranium.js и uranium.js.mem в той же директории, где расположен исходный код движка, используемого в приложении.

В противном случае необходимо указать путь к модулю, используя конструкцию вида:

m_config.set("physics_uranium_path", ".../uranium.js");

Примечание

При разработке приложения в составе SDK путь к физическому движку определяется автоматически.

Если использование физики не требуется, рекомендуется отключить флаг Enable Physics в панели Physics на вкладкe сцены в Blender’е. Также можно принудительно отключить загрузку модуля uranium.js, если до начала инициализации движка вызывать следующий метод:

m_config.set("physics_enabled", false);