Более десятка статей о анимации, в настоящий момент находящихся на канале, моя рука настучала по клавишам. Время останавливаться? Нет.
Рассказав о куче занятных мыслей и сотворив несколько демок, я все вскользь упоминал фундаментальные технические особенности этой области геймдева.
Время вернуться к истокам. Что содержит в себе файл с анимацией?
Как их воспринимает движок и что способен с ними делать?
В этой статье.
Данные, что несет файл
Допустим, сотворив персонажа со скелетом и анимацией, сохраняем его в стандартный fbx формат, что в нем содержится?
- Модель. Иногда. Ну это можно пропустить, ибо не касается анимации.
- Косточки. А именно координаты, поворот и возможно длина.
Длина может быть полезна для визуализации последней косточки в скелете, длина же остальных рассчитывается от начала предыдущей - до начала следующей. Так же длина полезна для автоматической настройки весов.
Варианты визуализации прыгают от пакета к пакету, но движок как правило видит кости пустыми игровыми объектами со спектром настроек.
- Весы. Подразумевается степень влияния косточки на вершину/вершины. Допустим у косточки плеча под командованием кусок геометрии модели, что визуально идентичен плечу. Вершины замертво прибиты к кости и двигаются за ней.
Да, ничто не мешает заставить пятку двигаться за косточкой плеча, но надо ли оно? Раскидав косточки по модели, можно настроить автоматические весы. Ближайшие к косточке вершины окажутся в рабстве со степенью влияния 1, а спорные территории с соседними косточками, поделит справедливая математика.
- Координаты, повороты и масштабирование косточек на покадровом таймлайне. Это и есть анимация.
Что видит движок?
Забыл уточнить, что кроме анимации существует стандартная позиция. Например T-образная, в которой очень удобно было расставлять косточки. Они же поворачиваются в нужные позиции когда никакой анимации не проигрывается.
Сама же анимация является последовательностью поворотов, передвижений и масштабирований костей, но не совсем.
Последовательность зафиксирована в ключевых кадрах, в них лежит информация о изменении положений кости, это голые цифры, меж которых алгоритм создает промежуточные положения.
Да, алгоритм в 3D пакете и алгоритм в движке идентичны, ибо это всего лишь математическая формула линейной интерполяции и нагруженность системы зависит от обилия расчетов, например :
Первый ключевой кадр содержит повороты (0,0,0), но рука решила подняться и на шестидесятом кадре повороты (0,60,0). За 60 кадров рука плавно изменит свой поворот и не нагрузит систему, но что если...
Первый ключевой кадр - (0,0,0), второй ключевой кадр (15 кадр) - (0,15,0), третий (30) - (0,30,0), четвертый (45) - (0,45,0) и наконец пятый (60)-(0,60,0)
Анимации получатся абсолютно одинаковыми, однако вычислительная нагрузка будет серьезно отличаться и не в пользу последнего.
И это все дает понимание того, что движок приспособлен работать с голыми цифрами и вполне способен их менять под свои нужды.
Оффтоп
Наконец сделал группу ВКонтакте. Самые интересные и полезные статьи с канала будут и там, а еще там там будут мэмы, анонсы, голосовалки и обсуждения. Почему их пока нет? Потому что я там один :)))
Важным поводом туда подписаться вижу суперпозицию "под рукой" и посты в фидленте, уведомляющие о выходе новых статей.
Дзену до такого далеко. Собстна группа.
Еще о анимации :
Основы кинематики (обычная записанная анимация)
Основы инверсной кинематики (анимация, созданная движком)
Как движок смешивает анимации (много гифок)