Теги
Как работают анимации в движке планетарных битв.
В отличии от современных игр, в которых за движения моделей отвечают скелет и привязки, движок планетарных битв использует покадровые вершинные (вертексные) анимации, примерно как в Quake 2.
Для тех лет это стандарт, база и основа. Скелетные анимации были дорогими по вычислительным ресурсам по сравнению с практически бесплатными вершинными. Платить, однако, приходится местом на диске – в отличие от той же Quake 2, где в файлах
MD2хранилась дельта (разница) положения вершин (и, насколько помню, вообще использовалось много разных оптимизаций, включая индексированные значения, почти как вGIF), в моделях форматаVOпокадрово запекаются вертексы целиком.Компенсируется такая растрата сжатием
zlibи малым количеством анимированных моделек.Воспроизведение таких анимаций абсолютно примитивно. Каждый кадр грузится целиком в видеопамять, без какой-либо обработки. Моделька обновляется полностью, как будто мы меняем одну карточку диафильма на другую.
Контроллера анимаций в привичном виде в движке нет. Из доступных модификаторов есть только управление скоростью воспроизведения, что используется в модельках шасси. Тем не менее, в движке есть машина состояний для управления переключениями анимаций шасси – эти состояния как раз и перечислены в посте про демонстрацию их переключения.
Как было упомянуто ранее, для анимированной модели каждый кадр сохраняется как полноценная копия всех её вершин, только в изменённом положении. Как же поступать с моделями, в которых нужно анимировать только отдельный кусочек, как, например, радар у главной базы? Ради этих нескольких вертексов пересохранять и перерисовывать всю геометрию целиком? Нет, как раз для решения этой проблемы и ввели композитные модели с разделением на части, тестирование работы которых демонстрировалось в предыдущем посте. Анимированный кусочек выделяется в отдельный файл
VOи цельная модель собирается из таких кусочков по конфигуCVO.Также в моделях запекаются положения точек соединения (матриц), которые синхронизируются с геометрией. Таким образом место сочленения шасси и корпуса, например, никуда не «съезжает» при воспроизведении анимации.
Про интересный факт относительно этих самых матриц и конфигов
CVOбудет отдельный пост.Так что же, собственно, не так с анимациями в MatrixGame? Всё так, для уровня начала XXI века. Но на текущий момент они довольно сильно технологически устарели. Будет ли что-то с этим сделано в нашем проекте? Посмотрим. Планы есть, но не хочу ничего загадывать наперёд. Следите за развитием.
Поддержать проекты
Возможность тестового приложения движка: переключение анимаций.
У модели пневматического шасси есть 7 анимаций:
- Идём вперёд («Move»)
- Останавливаемся («EndMove»)
- Стоим (да, это тоже анимация) («Stay»)
- Начинаем движение («BeginMove»)
- Начинаем движение назад («BeginMoveBack»)
- Идём назад («MoveBack»)
- Останавливаемся при движении назад («EndMoveBack»)
Всё настолько сложно. Если кто-то думал, что пневматика – это развернулся и алга, то нет, это далеко не так. Также этот список многое говорит о примитивности системы анимации ПБ, но об этом в другом посте.
Поддержать проекты