Анимация

В общем случае, к анимации относятся изменения параметров объектов во времени. Движком поддерживаются следующие типы анимации:

  • Объектная анимация. Заключается в трансформации объекта в пространстве как единого целого.

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

  • Вертексная анимация. Заключается в покадровой записи деформаций объекта с их последующим воспроизведением.

  • Параметризация источников звука. Изменяемые параметры: громкость (Volume) и высота звука (Pitch).

  • Анимация выходного значения ноды Value в нодовом материале.

  • Процедурная анимация в виде колебаний объекта под действием ветра. Описано отдельно.

  • Эмиссия частиц из источника. Описано в соответствующем разделе.

Управление анимацией

Управление анимацией в движке осуществляется одним из двух способов:

  1. Автоматически, с помощью активации панели Animation и указания поведения анимации Behavior в свойствах объекта. В данном случае будет осуществлён поиск доступного метода и в случае положительного результата, объект анимируется с момента загрузки сцены. В случае скелетной анимации, по умолчанию воспроизводится актор, назначенный на объекте в окне Action Editor.

  2. Программно, используя функции модуля движка animation.

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

Объектная анимация

Изменяемые параметры: координаты центра (Location), поворот (Rotation) и масштабирование (Scale).

_images/wind_generator.png

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

Поддерживаются следующие типы ключей:

  • Location
  • Rotation – необходимо осуществлять в режиме Quaternion(WXYZ) либо XYZ Euler.

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

  • LocRot – комбинация Location и Rotation.

  • LocScale – комбинация Location и Scale.

  • LocRotScale – комбинация Location, Rotation и Scale.

  • RotScale – комбинация Rotation и Scale.

В случае анимации объекта-меша, необходимо включение опции Force Dynamic Object панели Rendering Properties на вкладке свойств объекта.

Скиннинг и скелетная анимация

_images/rig.png

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

  1. Создание скелета объекта в арматурном объекте.

  2. Назначение вертексных групп в объекте-меше и их привязка к костям. Может быть осуществлено, например, методом “раскраски” весов (weight painting).

  3. Анимация костей в арматурном объекте. Используются те же ключи, что и в случае объектной анимации.

  4. В случае нетривиальных видов скелетной анимации, включающих инверсную кинематику, требуется стадия запекания анимационных акторов (блок Action в Blender). Запекание производится с помощью интерфейса Bake Skeletal Animation, расположенного на панели инструментов Blend4Web:

_images/skeletal_anim_baker.png

Параметры запекания

Запекание производится при выделенном арматурном объекте.

В окне со списком запекаемых акторов приводятся те акторы, которые следует запечь. Если список пуст, запекаются все возможные акторы.

Name

Имя текущего актора из списка запекаемых акторов.

Optimize Keyframes

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

Use Blender’s Native Baker

Использовать для запекания анимации средства самого Blender (возможность Bake Action), а не Blend4Web. Настройки средства запекания Blender отличаются от настроек Blend4Web.

Bake

Произвести запекание. После успешного окончания процесса на сцене появляются акторы с именами вида B4W_BAKED_ИМЯ_АКТОРА. Данные акторы будут автоматически назначены на арматурном объекте и воспроизведены в движке. Стоит отметить, что работа подобных акторов в Blender не гарантируется.

Примечание

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

Для удаления вертексных групп, которые не используются арматурой, можно воспользоваться кнопкой Clean Unused Vertex Groups в одноименной панели.

_images/vgroups_cleaner.png

В Blend4Web присутствует начальная поддержка ограничителей для костей. На сегодняшний день поддерживается несколько типов ограничителей, в том числе Copy Transforms, который позволяет привязывать арматуру к различным объектам, в том числе физическим (эффект ragdoll). Поддержка других ограничителей ожидается в будущих версиях.

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

Смешивание анимации

Движок также поддерживает смешивание анимации. Для использования этой возможности должна быть включена опция Animation Blending (находится на панели Animation вкладки Object).

Предупреждение

Одновременно могут быть смешаны не более двух анимаций.

Для того, чтобы смешать анимации, необходимо сперва разрешить смешивание двум анимационным слотам:

var m_animation = require("animation");

var m_scenes = require("scenes");

...

var armobj = m_scenes.get_object_by_name("My_Armature");

...

m_animation.set_skeletal_slots(armobj, slot_1, slot_2, 0.5);

Вертексная анимация

_images/flag.png

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

Для запекания вертексной анимации предусмотрен инструмент Bake Vertex Animation, расположенный на панели инструментов Blend4Web.

_images/animation_vertex_baker.png

Параметры запекания

Name

Имя, которое будет присвоено запеченной анимации.

Start

Кадр, с которого начнётся запекание анимации.

End

Кадр, которым закончится запекание анимации.

Allow NLA

Позволяет управлять запечённой анимацией при помощи NLA.

Status

В этой строке приводится количество кадров, из которых состоит запечённая анимация. Если запекание ещё не было произведено, вместо количества кадров приводится слово Empty.

Bake

Запекание анимации производится при нажатии на эту кнопку.

Примечание

Для корректной работы вершинной анимации следует активировать опцию Export Vertex Animation (раздел Export Options панели Object) у соответствующего объекта.

Анимация по умолчанию

В Blend4Web присутствует возможность автоматически проигрывать анимацию объекта. Для этого нужно активировать параметр Apply Default Animation на вкладке Animation панели Object того объекта, анимацию которого требуется включить. Поддерживается скелетная и объектная анимация.

_images/animation_apply_default_animation.png

Проигрывание анимации начинается сразу после запуска приложения и осуществляется аналогично ноде Play Timeline, но без возможности задать начальный и конечный кадр (в качестве таковых всегда выступают первый и последний кадры таймлайна). Также присутствует возможность задать поведение анимации, аналогично ноде Play Animation.

Animation Blending

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

Смешивание анимаций описывается в соответстующем разделе.

Нелинейная анимация

Редактор NLA

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

_images/simple_machinima.png

Движком поддерживается управление следующими сущностями:

  • Любая анимация, параметры которой могут быть представлены с помощью действий (Action)

  • Воспроизведение звуков

  • Эмиссия частиц (в виде привязки к глобальной шкале времени)

_images/nla_editor.png

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

  1. Во вкладке Scene активировать панель NLA.

  2. В редакторе NLA Editor задать необходимую конфигурацию поведения сцены.

  3. На панели Timeline выбрать интервал времени анимации.

Дополнительные настройки

Настройка сцены NLA > Cyclic NLA позволяет активировать режим циклической NLA-анимации.

Примечание

Для использования вертексной анимации необходимо выставить опцию “Allow NLA” на панели запекания вертексной анимации.

Ограничения

  • Одновременное проигрывание различных видов анимации для одного объекта не поддерживается.

Управление через API

Для управления нелинейной анимацией через API существует модуль nla.js.

// ...
var m_nla = require("nla");
// ...
m_nla.set_frame(150);
// ...
var frame = m_nla.get_frame();
// ...
m_nla.play();
// ...
m_nla.stop();
// ...

При использовании Logic Editor функции set_frame, play, stop недоступны.

Параметризация источников звука

На объектах-спикерах дополнительно поддерживаются следующие типы анимационных ключей:

  • Volume – громкость звука источника.

  • Pitch – высота звука источника.

Параметризация источников звука по своей сути повторяет объектную анимацию.

Анимация нод Value и RGB

В нодовых материалах поддерживается воспроизведение анимационных ключей, проставленных на нодах Value и RGB.

_images/node_value_anim.png

_images/node_RGB_anim.png

Примечание

Анимация числовых и цветовых значений в других нодах не поддерживается.

Может быть также использована для создания треков в редакторе нелинейной анимации. Поддерживается несколько анимированных нод Value и RGB в одном материале. Значения нод могут быть также установлены программно с помощью методов set_nodemat_value и set_nodemat_rgb модуля objects.

См.также

Time (B4W_TIME)