Анимационная система «Вердж3Д»

Обзор

Анимационная система «Вердж3Д» позволяет анимировать различные сущности: кости ригов, ключи морфинга, свойства материалов (цвет, прозрачность, бинарные операции), видимость и трансформацию объектов. Анимированные свойства могут быть затухающими, перекрестными или искажёнными. Вес и временные шкалы различных анимаций могут быть изменены независимо друг от друга. Различные анимации на одном и том же или на разных объектах могут быть синхронизированы между собой.

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

Анимационные клипы

Если вы успешно загрузили анимированный 3Д-объект, в частности, экспортированный из «Блендера», «3дс Макса» или «Майи» с помощью GLTFLoader, одним из полей загруженного объекта будет "animations", содержащий массив AnimationClip-ов для данного ассета.

Каждый AnimationClip обычно содержит данные для определенного действия объекта. Например, если меш является персонажем, AnimationClip может содержать анимацию ходьбы. Если же меш является конфигурируемым объектом, в нём может содержатся анимация цвета материала.

«Вердж3Д» не поддерживает несколько анимаций одного типа для одних и тех же объектов. Например, если у персонажа имеются анимации для ходьбы, ожидания и бега, все они должны располагаться на одной временной шкале.

Треки ключевых кадров

Внутри AnimationClip-ов данные для каждого анимированного свойства хранятся в отдельном KeyframeTrack-е. Предположим, что объект персонажа имеет связанный с ним скелет. В таком случае, одна дорожка ключевых кадров может хранить данные об изменении положения кости нижней части руки со временем, другая дорожка - данные об изменении вращения той же кости, третья — данные о положении, вращении или масштабировании другой кости, и так далее. Следует понимать, что AnimationClip может состоять из множества таких дорожек.

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

Микшер анимации

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

Анимационные действия

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

Анимация группы объектов

Если вы хотите, чтобы группа объектов имела общую анимацию, вы можете использовать объект класса AnimationObjectGroup.

Пример

let mesh; // создаём AnimationMixer и получаем инстансы на AnimationClip-ы const mixer = new v3d.AnimationMixer(mesh); const clips = mesh.animations; // обновляем микшер каждый кадр function update() { mixer.update(deltaSeconds); } // запускаем конкретную анимацию const clip = v3d.AnimationClip.findByName(clips, 'dance'); const action = mixer.clipAction(clip); action.play(); // запускаем все анимации clips.forEach(function(clip) { mixer.clipAction(clip).play(); });

Пазлы

«Вердж3Д» содержит несколько анимационных пазлов, которые скрывают сложность системы анимации. В этих пазлах используется простая концепция «анимационных объектов», которые можно выбрать из списка или назвать по имени. Добавляя визуальные блоки, можно воспроизводить/приостанавливать/остановить/клонировать/разделять/подключать эти объекты без написания кода.