Как включить физику в blender
Перейти к содержимому

Как включить физику в blender

  • автор:

Введение в физику в Blender

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

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

Для моделирования физики реального мира Blender содержит физический движок и ряд других инструментов, которые существенно упрощают жизнь. При их использовании открывается доступ ко множеству настроек, с помощью которых можно получить желаемый эффект.

В Blender настройка частиц и остальная физика разделены по разным вкладкам редактора Properties | Свойства .

Вкладки Particles и Physics

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

В Blender частицы порождаются излучателем (источником, эмиттером – Emitter), которым может выступать любой mesh-объект. Часто выбирают плоскость.

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

Системы частиц добавляются в слоты подобно тому, как это делается при добавлении объекту нескольких материалов. Хотя обычно бывает достаточно одной системы частиц.

Добавление систем частиц

Кнопки Emitter | Источник и Hair | Волосы позволяют выбрать, будет ли объект испускать частицы или из него будут расти волосы.

Эмиттер и волосы

На изображении в случае Emitter это не первый кадр, а частично проигранная анимация.

Если выполнить рендер ( F12 ), то волосы мы увидим, а вот частицы – нет. Если посмотреть на панель Render | Рендеринг настроек частиц, то по-умолчанию заявлено, что частицы должны прорисовываться как Path | Путь или Halo | Гало . Чего мы не наблюдаем.

Панель рендеринга частиц

Однако если из списка Render As | Рендерить как выбрать вариант Object | Объект , то можно указать объект, который будет играть роль частиц. Понятно, что объект перед этим должен быть добавлен на сцену.

Объект-частица

В этом случае при рендере частицы видны.

Предварительно частицы надо сгенерировать, для этого следует запустить анимацию ( Пробел ). Частицы начнут сыпаться вниз из объекта-излучателя. После одного цикла анимации ее можно остановить, перейти к нужному кадру и выполнить рендер ( F12 ), чтобы увидеть, как выглядят частицы на картинке. Можно создать видеофайл с анимацией.

Если потом вы вносите какие-либо изменения, то анимацию лучше снова переиграть.

На панели Emission поле Number | Количество определяет число излучаемых частиц. Это влияет на их плотность на единицу пространства. Frame Start и End определяют промежуток шкалы времени, когда эмиттер излучает частицы. Lifetime – время жизни одной частицы. Так если конкретная частица появилась в 60-м кадре, а время ее жизни 50 кадров, то она исчезнет в 110-м кадре.

Настройка количества частиц

По умолчанию настройки таковы, что к 250-му кадру все частицы исчезают, так как последние были рождены в 200-м.

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

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

Коллизия

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

Для одного объекта может быть включено несколько «физик». При включении на соответствующей кнопке появляется крестик.

Рассмотрим моделирование ткани. Оставим куб стартового файла и добавим на сцену плоскость или сетку, которую увеличим и поднимем над кубом. Подразделим ее. После этого включим для плоскости кнопку Cloth | Ткань на вкладке Physics | Физика редактора свойств.

Моделирование ткани

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

Если для куба включить Collision | Столкновение , то плоскость столкнется с ним и обернет его подобно ткани. На рисунке ниже у плоскости также было включено сглаживание.

Столкновение ткани с объектом

Теперь представим, что ткань к чему-то прикреплена. Создадим группу вершин и назначим ей несколько вершин плоскости (см. практическую работу 10-го урока). Во вложенной панели Shape | Форма укажем группу вершин в качестве значения Pin Group | Закрепленная группа .

Pin Group

В результате ткань повиснет на вершинах.

Закрепление ткани с помощью группы вершин

Одним из типов «физик» Blender’а являются силовые поля (force fields) – ветер, вихрь, магнитное поле и др. Соответствующая кнопка включения и последующий выбор типа силового поля находятся на вкладке физики редактора свойств. При этом силовое поле добавляется выделенному объекту.

С другой стороны, силовые поля доступны через меню Add ( Shift + A ). На самом деле здесь происходит примерно то же самое, но автоматически: на сцену добавляется объект-пустышка и ему включается физика выбранного силового поля. Так что для последующей настройки надо перейти на вкладку Physics .

На рисунке ниже на сцену добавлен ветер (wind) через Add → Force Field | Добавить → Силовое поле . Стрелка указывает его направление, которое можно изменить, поворачивая объект. Сильно увеличена сила ветра – Strength | Интенсивность . В результате ткань не падает на куб, а поднимается вверх. Силовые поля также могут влиять на частицы.

Силовое поле Wind

Курс с инструкционными картами к части практических работ:
pdf-версия

X Скрыть Наверх

Введение в Blender. Курс

Метка: Физика

Слишком много внимания для новичков в последнее время, пора бы и бывалых блендеристов уважить 😉 В этом ролике мы будем создавать интерактивную свечку с помощью, практически, всего арсенала Blender. Будет задействовано все, кроме Grease Pencil и драйверов.

21 декабря 2018
Артем Слаква

Надуваем шарик в Blender

В этом уроке: симуляция тканей, динамическое рисование весов, смешивание групп вершин, ключевые формы, анимация, кривые и прочие модификаторы… И это все, чтобы надуть шарик 🙂

10 января 2017
Артем Слаква

Создание портала в Blender

В этом уроке мы создадим портал с помощью силового поля и системы частиц. Урок очень простой и не должен вызвать трудности у новичков.

22 апреля 2016
Артем Слаква

Эффект падения чернил в Cycles

Для данного урока желательно использовать Blender версии не ниже 2.77. Начиная с этой версии появилась поддержка рендеринга объема на GPU и возможность кэширования в формате OpenVDB. Данный эффект очень часто используется в компьютерной графике. В этом уроке Вы узнаете, как создать его с помощью Blender.

25 февраля 2016
Артем Слаква

Шоколадные сердечки в Blender

Из данного урока Вы узнаете как:

  • Моделировать шоколадное сердечко
  • Насыпать созданный Вами объекты куда-либо
  • Настроить простой материал шоколада в Cycles

12 января 2016
Артем Слаква

Анимация столкновения планет в Blender

Создавать анимацию столкновения планет мы будем при помощи анимации (логично), физической симуляции, настройки материалов в Cycles и с использованием системы частиц. Новичкам рекомендуется проходить видеоверсию урока во избежание трудностей при его выполнении.

28 августа 2015
Артем Слаква

Анимация с помощью Cell Fracture и Rigid Body

Из данного урока вы узнаете, как создать интересную анимацию с помощью аддона Cell Fracture и физической симуляции Rigid Body.

31 июля 2015
Артем Слаква

Расположение объектов при помощи Rigid Body

В этом уроке мы будет засыпать в бутылку корковые пробки с помощью симуляции физики. Используя данную технику вы можете заполнять любые сосуды любыми предметами.

24 марта 2015
Артем Слаква

Дисперсия света в Cycles

В данном уроке Вы узнаете, как создать дисперсию света в Cycles. Для примера мы создадим шейдер алмаза.

Авторизация

blender course

cycles-book

eevee-book

Рубрики

  • Анимация и риггинг
  • Загрузки
  • Материалы и текстуры
  • Моделирование и скульптинг
  • Новости и обзоры
  • Основы Blender
  • Рендеринг и освещение
  • Симуляция и частицы
  • Скриптинг на Python
  • Создание игр в Blender

mod-book

freestyle-book

3d-printing-with-blender

О сайте

На данном сайте Вы сможете найти множество уроков и материалов по графическому
редактору Blender.

Контакты

Для связи с администрацией сайта Вы можете воспользоваться следующими контактами:

Следите за нами

Подписывайтесь на наши страницы в социальных сетях.

На сайте Blender3D собрано огромное количество уроков по программе трехмерного моделирования Blender. Обучающие материалы представлены как в формате видеоуроков, так и в текстовом виде. Здесь затронуты все аспекты, связанные с Blender, начиная от моделирования и заканчивая созданием игр с применением языка программирования Python.

Помимо уроков по Blender, Вы сможете найти готовые 3D-модели, материалы и архивы высококачественных текстур. Сайт регулярно пополняется новым контентом и следит за развитием Blender.

Как включить физику в blender

В этом уроке вы узнаете:

  • Азы симуляции физики твердых тел
  • Как сделать цепь с реалистичной физикой
  • Как разбить кучу кубов шаром на цепи

Эта статья является переводом

Видео Урок:

Создание цепи

Удалите в сцене все, а затем добавьте кольцо (Add>Mesh>Torus). В режиме редактирования выберите верхнюю половину

Передвиньте вершины вверх, так чтобы объект выглядел как звено в цепи

Скопируйте звено (Shift+D) и разместите выше как на скриншоте

1

32

Поверните второе звено по оси Z на 90 градусов (R>Z>90)

Скопируйте оба звена и расположите как на скриншоте

Нажмите Shift+R несколько раз для повторения последней операции, чтобы создать остальную цепь

6
45

Включение физики твердых тел

Выберите любое звено. Затем переходите в панель Physics а там Rigid Body. Измените Collision shape на Mesh (потому что наши звенья пересекаются)

Теперь выберите все звенья, но последнем выберите то на которого уже есть Rigid Body. Откройте Т-панель (T) и найдите панель Rigid Body Tools. Нажмите Copy from Active чтобы скопировать настройки для остальных выделенных объектов.

7

8

Симуляция твердых тел использует исходную точку как центр массы объекта. Так что очень важно сбросить ее положение в центр каждого объекта (Shift+Ctrl+Alt+C)

Теперь добавим плоскость и расположим ее ниже цепи. Включим ей Rigid Body в меню физики и тип выставим Passive. Таким образом она не будет двигаться, но сталкиваться с активными объектами

9 11

Если нажать Alt+A вы увидите, как цепь падает на пол. Это значит, что вы все сделали правильно.

Мы хотим чтобы цепь раскачивалась. Значит нам нужно чтобы верхнее звено было неподвижным. Выделите его а затем в панели физики Rigid body снимете флаг с параметра Dynamic. Нельзя использовать

Пассивный тип, как в случае с полом, потому что у нас пересекающиеся объекты.

Если нажать Alt+A сейчас, цепь будет свисать на верхнем звене.

13 1113

Создание разрушающего шара и раскручивание его

Выделите нижнее звено и добавьте обычную UV Sphere в режиме редактирования. Таким образом они будут единым объектом.

Выделите верхнее звено и перенесите туда 3д курсор (Shift+S). Затем смените pivot point на 3D cursor

Выделите всю цепь вместе с шаром и поверните ее примерно на 75 градусов

14 16 15

Если нажмете Alt+A то увидите как шар раскачивается вперед и назад

Чтобы увеличить ударную силу шара увеличим его массу до 30кг

18 19

Это скорее всего разорвет цепь в процессе анимации

Чтобы усилить цепь, назначьте звеньям вес в районе 3-5кг (чем меньше тем лучше – экспериментируйте). Не забывайте нажимать Copy to Active в Т-панели (T), чтобы применить изменения ко всем звеньям

19 2120

Добавление предметов для разрушения

Что за разрушение без чего то что можно разнести? В этом дружелюбном уроке мы будем разносить кубики, но вы можете сделать это с чем угодно. =)

Добавьте куб и расположите его на поверхности плоскости

Перейдите в меню физики и включите Rigid Body, назначьте ему вес 0,1кг (100гр)

2122

Добавьте Array модификатор и создайте 8 дублей. Сделайте небольшой зазор между копиями (1.020) чтобы избежать проблем с симуляцией

Добавьте еще два модификатора Array используя те-же настройки, но для осей Y и Z

Примените все модификаторы. Это сделает все кубы реальными мешами

232524

Нажмите P и выберите пункт Loose Parts чтобы сделать каждый отдельный куб отдельным объектом

Сбросьте все исходные точки в центры кубов

Если запустите анимацию, то увидите это

26 27

Отлично! Добавьте текстуры, свет, motion blur и получите такую картину. Теперь идите и разнесите что-нибудь!

Что вы думаете о новом формате уроков? Нравятся ли вам субтитры? Делать свои видео-уроки очень трудно, так что в дальнейшем я собираюсь заниматься только переводами.

Физика¶

Для задействования физики на сцене необходимо установить флаг 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 .

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

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

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

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

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

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

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

Снижает вращающий момент от колес, уменьшая вероятность переворота транспортного средства (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 .

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

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

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

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

Water Linear Damping

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

Water Rotation Damping

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

Персонажи¶

_images/physics_character_object_example.png

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

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

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

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

_images/physics_character_settings.png

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. Выберите объект, который вы хотите использовать в качестве персонажа.
  2. Включите физику для выбранного объекта и установите тип физики на Dynamic или Rigid Body .
  3. Включите для объекта опцию Character.
  4. Создайте новую камеру или выберите уже имеющуюся, и установите тип камеры Eye .

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

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

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

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

Управление персонажем с помощью API¶

Базовые персонажи обладают только стандартным набором возможностей. Если вам требуется более тонкая настройка поведения персонажа, следует использовать методы модуля fps.

Наиболее важный из них — метод enable_fps_controls(), который, как понятно из его названия, используется для инициализации персонажей в сцене. Он может быть использован следующим образом:

var m_fps = require("fps"); m_fps.enable_fps_controls(); 

Для включения управления персонажем этот метод следует вызывать при запуске приложения (из функции load_cb).

Метод может конфликтовать с методом enable_camera_controls(), который используется для активации базового персонажа, описанного в предыдущем разделе. Эти два метода не следует использовать одновременно.

Опциональные параметры метода:

character — задаёт объект-персонаж. Ссылку на объект можно получить при помощи метода get_first_character(). Следует использовать, если в сцене присутствует более одного персонажа.

element — определяет HTML-элемент, к которому метод добавляет сенсоры.

motion_cb задаёт callback-функцию, которая вызывается, когда персонаж меняет направление движения.

gamepad_id — задаёт ID геймпада, подключённого к системе.

forward_sens , backward_sens , right_sens , left_sens , jump_sens , fly_sens — эти параметры используются для задания массивов типов сенсоров для различных действий персонажа (например, ходьбы в разных направлениях, прыжков и т.п.).

rotation_cb задаёт callback-функцию, которая вызывается при повороте камеры.

lock_camera — если этот параметр имеет значение true , камера будет прикреплена к персонажу.

Другие важные методы: set_cam_sensitivity() и set_cam_smooth_factor(). Первый из них управляет чувствительностью камеры (измеряемой значением от 0 до 100), а второй — определяет, насколько плавно камера движется (плавность движения изменяется от 0 до 1.0).

Состояния персонажей¶

Состояние персонажа — это постоянная величина, обозначающая действие, которое персонаж совершает в данный момент (т.е. идёт ли персонаж, или летит, или совершает какое-то другое действие). Каждый персонаж, присутствующий в сцене, всегда имеет одно и только одно состояние.

CS_CLIMB — персонаж лезет по лестнице.

CS_FLY — персонаж летит.

CS_RUN — персонаж бежит.

CS_STAY — персонаж не двигается.

CS_WALK — персонаж идёт.

Текущее состояние персонажа можно получить при помощи метода get_character_state(). С помощью метода switch_state() персонажу может быть присвоено то или иное состояние. Пример ниже демонстрирует использование этих двух методов:

var m_fps = require("fps"); var current_state = m_fps.get_character_state(); if (current_state == m_fps.CS_FLY) m_fps.switch_state(m_fps.CS_WALK); 
Привязка действий¶

В модуле fps также есть средства для привязки различных действий к событиям персонажа. Для этого используется метод bind_action():

var m_fps = require("fps"); var m_ctl = require("controls"); var action_cb = function(value)  console.log("Q key pressed."); > m_fps.bind_action(m_fps.AT_PRESSED, [m_ctl.KEY_Q], action_cb); 

Метод обладает следующими параметрами:

  • первый параметр задаёт тип действия: AT_CONTINUOUS регистрирует текущее действие пользователя, например, перемещение мыши, продолжительное нажатие кнопки на клавиатуре, отклонение стика геймпада и т.п. AT_PRESSED — однократное действие, например, нажатие кнопки. AT_RELEASED — событие, возникающее, когда пользователь отпускает кнопку.
  • второй параметр — массив типов сенсоров (клавиши, кнопки геймпада и мыши).
  • action_cb — callback-функция, которая вызывается каждый раз, когда пользователь совершает действие, определённое первым параметром.

Навигационные меши¶

Навигационные меши (навмеши) — трёхмерные объекты, используемые для упрощения построения траекторий, в частности, за счёт ликвидации дополнительных вычислений, таких как расчёт столкновений.

_images/physics_pathfinding_example.png

В этом примере (взятом из Code Snippets) навигационный меш используется для построения пути через лабиринт.

Создание навигационных мешей¶

Чтобы использовать объект в качестве навмеша, активируйте параметр Object Physics на панели Physics и выберите Navigation Mesh из списка Physics Type .

_images/physics_navmesh.png

Навигационные меши могут создаваться вручную или генерироваться с помощью специального инструмента.

_images/physics_navmesh_generator.png

Этот инструмент изначально присутствует в Blender и не является частью движка Blend4Web.

Интерфейс создания навигационных мешей находится на соответствующей панели вкладки Scene , но так как он предназначен только для использования в интерактивных приложениях, панель доступна только в том случае, если выбран тип движка Blend4Web или Blender Game (не Blender Internal, Cycles или любая другая система рендеринга).

Главный инструмент, находящийся на этой панели — кнопка Build Navigation Mesh . Как и предполагает её название, она используется для генерации навигационных мешей, основанных на выбранном объекте. Навмеш создаётся как отдельный объект, располагающийся над оригинальным объектом, который никак не изменяется при генерации.

Помимо этой кнопки, на панели Navigation Mesh также находится несколько групп параметров для тонкой настройки создаваемых навмешей.

Группа параметров Rasterization :

Растеризованный размер клетки. Повышение значения увеличивает размер полигонов навмеша. Максимальное значение — 1.0. Значение по умолчанию — 0.3.

Растеризованная высота клетки (расстояние между навмешем, и объектом, на котором он основан). Значение по умолчанию — 0.2.

Группа параметров Agent :

Минимальная высота, необходимая агенту для перемещения. Значение по умолчанию — 2.0.

Радиус агента. Значение по умолчанию — 0.6.

Максимальный проходимый угол наклона. Измеряется в градусах, значение по умолчанию — 45.

Максимальная высота между клетками сетки, на которую может взобраться агент. Значение по умолчанию — 0.9.

Группа параметров Region :

Min Region Size

Минимальный размер региона (регионы меньшего размера удаляются). Значение по умолчанию — 8.0.

Merged Region Size

Минимальный размер региона для объединения (регионы меньшего размера объединяются). Значение по умолчанию — 20.0.

Метод разбиения навигационного меша. Поддерживаемые методы:

Monotone — наиболее быстрый метод. Может генерировать длинные узкие полигоны.

Layers — более сложный, но достаточно быстрый метод, генерирующий более оптимальные сетки треугольников, чем метод Monotone.

Watershed — классический Recast-алгоритм, создающий наилучшие разбиения. Этот вариант выбран по умолчанию.

Группа параметров Polygonization :

Max Edge Length

Максимальная длинна ребра контура. Значение по умолчанию — 12.0.

Максимальное отклонение от контуров клеток. Значение по умолчанию — 1.3.

Максимальное количество вершин на полигон. Значение по умолчанию — 6.

Группа параметров Detail Mesh :

Интервал сэмплирования детализированной полисетки. Значение по умолчанию — 6.0.

Max Sample Error

Максимальное отклонение сэмплирования при упрощении детализированной полисетки. Значение по умолчанию — 1.0.

Использование навигационных мешей¶

После создания навмеша его можно использовать для расчёта траекторий между двумя точками. Для этого используются два метода из модуля physics: navmesh_get_island() и navmesh_find_path(). Первый из них применяется для получения ссылки на текущий остров (ближайший независимый сегмент навмеша), а второй — для получения самой траектории (в виде массива координат).

С примером использования навигационного меша для построения траекторий можно ознакомиться в приложении Code Snippets (образец Pathfinding ).

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

Физическая подсистема реализована в модуле 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); 

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

В Blend4Web физический движок существует в 2 вариантах: по умолчанию используется версия, скомпилированная для использования с WebAssembly — файлы uranium_wasm.js и uranium_wasm.wasm , а в качестве резерва, скомпилированная в asm.js — файлы uranium.js и uranium.js.mem . WebAssembly-версия имеет меньший размер, быстрее инициализируется, а также может повысить стабильность и FPS приложения. Однако WebAssembly на текущий момент поддерживается не всеми браузерами, поэтому там, где эта технология недоступна, используется asm.js-версия физического движка в качестве резерва.

По умолчанию физический движок подключается, если в сцене присутствуют объекты, на которых настроена физика. Принудительно отключить физику можно, выставив опцию Enable Physics на панели Scene -> Physics в положение OFF . Также в настройках конфигурации проекта в Менеджере проектов можно отключить флаг Use Physics , чтобы исключить файлы физического движка из build-версии проекта.

Физика не поддерживается при HTML-экспорте и в проектах типа WebPlayer HTML.

При инициализации приложения методом init() можно указать несколько флагов конфигурации физического движка:

physics_enabled — использовать ли физику в приложении, подгружая физический движок, по умолчанию true .

physics_uranium_path — путь к директории с файлами физического движка относительно главного HTML-файла приложения; стоит указывать, если требуется их нестандартное расположение, по данному пути должны быть доступны файлы uranium_wasm.js , uranium_wasm.wasm , uranium.js и uranium.js.mem .

physics_use_wasm — использовать WebAssembly-версию ( true ) или версию, скомпилированную в asm.js ( false ). Значение по умолчанию — true .

physics_use_workers — обсчитывать физику в отдельном потоке с использованием Worker’а ( true ) или в одном совместно с рендерингом графики ( false ). Значение по умолчанию — true .

© Copyright 2014-2017, Триумф. Обновлено: 2019-04-16.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *