Vlad Ivanov

Плавная и реалистичная анимация Ботов
На данной странице я расскажу о создании анимации Ботов, максимально оптимизированной и создающей иллюзию реального движения
Итак: Когда в игре вы встречаетесь с другим актором (именно актором, а не актёром), не важно бот это или живой игрок, то как он себя ведет и как двигается его модель - это один из важных факторов, который формирует у вас полное погружение в атмосферу игры. Реалистичные движения во время ходьбы или других действий очаровывают и напротив, кривые анимации отрезвляют вас, выбрасывают вас из виртуального мира в понимание того, что перед вами просто компьютерные балванчики.

Как же заставить бота вести себя и двигаться как живой человек, не нагружая процессор просчетом ментальных и физических механик?

В данном разделе я покажу свое видение создания нового типа поведения и анимаций. И давайте это сделаем на примере модели, управляемой Искусственным Интеллектом.
Подобно тому, как в театре "Вводят" нового актёра в пьессу, так и мы Вводим нового актора на наш игровой уровень, предварительно подготовив для него все инструменты и механики, помогающие ему адаптироваться.

При попадании в наш Игровой Мир актор обзаводится несколькими ключевыми костями и невидимыми сферами, центром которых он является. Две главные кости отвечают за то, куда он смотрит и куда он идет. А сферы отвечают например: есть ли в определенном радиусе враг или свободный транспорт, какая точка захвата ближайшая и т.д.
Главный вектор направления каретки (то, куда идут ноги) назовем “Киль”.
Главный вектор направления ракетки (то, куда смотрит бот) назовем “Нос”.
Каретка и ракетка живут в разных вселенных и за их поведение отвечают данные, находящиеся в разных динамических таблицах базы данных.
Каретка делает то, что ей велит навигационная задача, то есть пройти из точки А в точку В
Итак: нашу “Ромашку” - круг вращения бота, состоящий из 360 градусов делим на 8 секторов “Вперед”, “Вперед-Вправо”, “Вправо” и т.д. Таким образом каждый сектор составляет 45 градуса (360/8=45).
В движке все анимации хранятся в базе данных, в соответствующих таблицах. Движок каждый тик проверяет каков градус разведения у носа и киля и в соответствии с этим делает запрос в таблицу направоений какую анимацию проигрывать.

А именно, каждый тик (единицу времени данную на отрисовку одного кадра) движок узнает каков градус разведения у носа и киля у данного бота и делает запрос в Таблицу №1 (Ходьба) в какую строчку в Столбце 2 подходит наш градус разведения киля и носа, например 103,2 градуса подходит для Строки 4, следовательно мы проигрываем анимацию с именем из Строки 4 и Столбца 5 (Шаг левой ногой Вправо).
На рисунке ниже показана анимация передвижение бота в режиме “Ходьба”, а конкретно - один подцикл левой ногой влево и один подцикл правой ногой влево, а вместе - полный цикл обеими ногами влево.
Также показаны позиции стоп: четкие - стоят на поверхности, чем больше размытие, тем выше над поверхностью.
Зачастую встречается нелепая ситуация, когда бот явно бежит вправо, а проигрывается анимация бега вперед (возможно движок не успевает обрабатывать). Такие артифактные ситуации отрезвляют игрока, погруженного в атмосферу реализма и возвращают ему понимание, что он всего лишь играет с компьютерными болванчиками.

Переходы между анимацими (например: Ходьба вперед и Ходьба вправо) должны быти плавными и незаметными. Это достигается путем остановки и обрезания одной анимации и плавный перевод ключевых вертексов в положение, с которого начинается другая анимация. Но как быть с шагом враво, если в этот момент бот стоит на этой ноге?
Итак: бот идет вперед, проигрывается анимация “Шаг правой ногой вперед”. Тенью показано какая нога стоит на поверхности, а какая зависла в воздухе. Полуцикл закончен, бот стоит на правой ноге и преподнял левую для следующего получикла “Шаг левой ногой вперед”. Но в этот момент движок проверил градус разведения у носа и киля и дал приказ проигрывания “Ходьба вправо”. Логично, если она начнется с шага правой ноги вправо, но бот на ней стоит.
Здесь приходит на помощь Вспомогательный полуцикл, который плавно переведет нас в анимацию “Ходьба вправо”.
Левая нога весящая в воздухе должна заступить за правую, обойде ее спереди или сзади.
Левая нога обошла правую спереди и коснулась земли, тут же началась анимация “Ходьба вправо”.
ВАЖНО!
Таким образом мы не нагружаем двидок физическими просчетами того где находятся кости левой ноги в пространстве, а просто останавливаем анимацию “Ходьба вперед” на 30-м кадре, где правая нога коснулась земли и начинаем Вспомогательный полуцикл “Заступ левой ноги за правую”.

В процессе разработки мы боремся за максимальную оптимизацию, минимальную нагрузку на железо, при максимальной реалистичности. Поэтому в базу данных анимаций можно добавить не одну анимацию, например “Шаг правой нагой вперед” и поместить их в таблицу как показано ниже и проигрывать рандомно. Это добавит реалистичности в походку бегущего за счет разнообразия движений.
Главный вектор направления каретки (то, куда идут ноги) назовем “Киль”.
Главный вектор направления ракетки (то, куда смотрит бот) назовем “Нос”.
Каретка и ракетка живут в разных вселенных и за их поведение отвечают данные, находящиеся в разных динамических таблицах базы данных.
Каретка делает то, что ей велит навигационная задача, то есть пройти из точки А в точку В

На этом я заканчиваю рассказ об анимации.

Чтобы перейти на Главную страницу нажмите кнопку ниже.

This site was made on Tilda — a website builder that helps to create a website without any code
Create a website