Анимационная система «Вердж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Д» содержит несколько анимационных пазлов, которые скрывают сложность системы анимации. В этих пазлах используется простая концепция «анимационных объектов», которые можно выбрать из списка или назвать по имени. Добавляя визуальные блоки, можно воспроизводить/приостанавливать/остановить/клонировать/разделять/подключать эти объекты без написания кода.