Создание процедурной анимации всего из 13 кейфреймов — опыт разработчика Overgrowth
Внимание к мелочам и поэтапное формирование движений героя.
Аниматор Дэвид Розен из Wolfire Games на GDC 2014 выступил с докладом о создании анимации для игры Overgrowth. Спикер рассказал о каждом этапе анимирования персонажей и показал финальный результат своей работы. Мы выбрали из доклада главное.
Сама Overgrowth была анонсирована ещё в 2008 году, но вышла только в 2017-м. Игра представляет собой экшен от третьего лица, в котором антропоморфные звери участвуют в кровавых битвах друг с другом.
По словам спикера, при создании анимации всегда возникает вопрос того, насколько отзывчивой она должна быть. Например, с одной стороны есть Super Mario Bros., в которой герой мгновенно выполняет все команды игрока. При этом для анимирования его движений используется всего несколько кадров.
На другой стороне находится Prince of Persia, в которой применяется ротоскопия, а все движения героя выглядят очень плавными. Из-за этого во время перехода от одной анимации к другой пользователь не может управлять героем. К тому же появляется задержка при передаче команд.
Чтобы адекватно анимировать персонажа, важно уметь анализировать движения обычных людей. Например, если посмотреть на фигуриста, то можно увидеть, что его центр масс редко совершает резкие переходы от одного состояния к другому — траектория движения больше похожа на простую кривую преимущественно в горизонтальной плоскости.
Но фигурист должен следовать некоторым правилам. Например, ему нужно держать центр масс над коньками, чтобы не упасть. Также он должен наклоняться в сторону, в которую будет ускоряться. А при вращении ему нужно контролировать скорость с помощью разведения рук.
При создании анимации в Overgrowth Дэвид решил начать с базовых движений. Зелёная сфера соприкасается с объектами на высоте туловища героя, а белая реагирует на мелкие препятствия на земле. Главный принцип, который лежит в основе движений в Overgrowth — это отзывчивость управления и предсказуемость: если герой падает с утёса, то геймер понимает, что это его вина, а не игры.
Такой подход означает, что именно движения имеют главный приоритет, а анимация должна накладываться на них, но не перекрывать.
Первый шаг — подставить вместо сферы персонажа, который находится в idle-позе. При этом игрок может управлять лишь скоростью героя и направлением движения. А следующий шаг, это добавление наклона при ускорении. Поворот при этом происходит относительно центра масс.
Чтобы сымитировать бег, разработчик добавил две ключевые позы героя — переходную и конечную. Эти кейфреймы сменяются, когда персонаж делает шаг, а скорость смены зависит от скорости передвижения. На гифке можно увидеть, как колесо отсчитывает расстояние, которое проходит персонаж, а также отражает его скорость.
Тем не менее это подходит для бега, но не для передвижения шагом. Поэтому Дэвид добавил ещё один набор анимации для низкой скорости. Здесь работает тот же принцип, но расстояние между шагами значительно меньше по сравнению с бегом.
Чтобы смена анимаций не была рваной, автор смешал их, благодаря чему появились правдоподобные переходы между состояниями при изменении скорости.
Также Дэвид добавил эффект незначительного подпрыгивания во время передвижения героя. Чем меньше скорость, тем больше дуга.
Два кейфрейма — это слишком мало для полноценной анимации, поэтому разработчик добавил переходные состояния, которые нашёл с помощью вычисления среднего значения между ближайшими друг к другу кадрами.
На анимации ниже можно увидеть, что при использовании линейной интерполяции переходы между действиями всё ещё достаточно резкие. Дэвид исправил это с помощью бикубической интерполяции, которая позволила сымитировать инерцию и сделать движения более плавными и естественными.
Подобные манипуляции разработчик совершил и с анимацией приседания. Сперва у него было только две позы — в полный рост и пригнувшись. Он использовал линейную интерполяцию, чтобы сделать переходы между позами, а затем добавил небольшой эффект покачивания, чтобы движения выглядели правдоподобными.
Следующий шаг — совмещение анимации бега и приседания.
При создании анимации приземления Дэвиду не пришлось придумывать что-то новое — он просто использовал эффект подавления инерции при приседании.
В игре есть возможность делать сальто во время прыжка, чтобы изменить направление героя. Если персонаж моментально совершает действие, то это выглядит неестественно. Поэтому Дэвид сделал так, чтобы герой прямо перед совершением сальто немного отклонялся в сторону и сохранял момент импульса.
Перекат очень похож по анимации на сальто, но главное отличие заключается в том, что на земле герой делает кувырок через плечо.
Вот так в движении выглядит персонаж, у которого готовы все основные анимации. Для получения этого результата Дэвид использовал всего 13 кейфреймов. Преимущество этого подхода заключается в том, что разработчик может без проблем добавлять новые элементы. Например, он может дать герою в руки копьё, и разработчику не придётся заново создавать все анимации.
Несмотря на то, что основные анимации готовы, есть ещё множество деталей, которые требуют доработки. Например, Дэвид использовал инверсную кинематику, чтобы герой ставил ногу на камни под правильным углом. По словам разработчика, чтобы высчитать этот угол, достаточно простой тригонометрии.
Такое же решение разработчик использовал и для анимации карабканья, которая состоит всего из одного кейфрейма.
Разработчик также использовал инверсную кинематику, чтобы герой следил за противником. Это помогает сделать персонажа более живым.
Ещё одна деталь, которая требовала доработки — это колебания частей тела героя при движении. Каждая анимация имеет свой параметр мягкости для каждой «кости». Например, ниже можно увидеть, что уши и руки персонажа колеблются при его движениях.
Ближе к концу создания анимации разработчик занялся поиском ситуаций, в которых движения героя выглядят странно или глупо. Например, Дэвид заметил, что во время прыжка рядом со стеной персонаж просто утыкается в неё, но никак не реагирует на это препятствие. Поэтому автор добавил анимацию простого бега по стене, из-за чего одна из глупейших ситуаций в игре превратилась в одну из крутейших.
При падениях персонажа используется ragdoll-физика — разработчик постарался сделать так, чтобы в такие моменты герой выглядел не как безжизненная кукла, а сохранял элементы обычного поведения.
Чтобы сделать поведение героя более правдоподобным, разработчик сделал так, чтобы персонаж пытался защищать свою голову и тело при падении. На заключительных кадрах анимации видно, что у него это получается не всегда хорошо.
В заключение Дэвид рассказал о своих надеждах на будущее анимации. Его главным желанием было, чтобы со временем появилось больше инструментов, которые позволяют облегчить задачу аниматоров. Например, чтобы им не приходилось создавать множество переходных состояний.
Комментарий недоступен
same thing
То же дерьмо. Поиграл в лугару и потом прочитал в игромании что вот делают продолжение. Как же я надеялся в неё поиграть скоро.
Люблю игру, и ценю труд разработчика(хотя по-моему код там был ужасен), но статья такая, как будто автор эти 10 лет не смотрел, что в мире происходит. На таких серьезных щах рассказывать о интерполяции, ik...
Я понимаю еще cascadeur, euphoria..
Такие презентации не всегда о чем-то новом или уникальном. Разраб просто рассказывает как он это сделал. Ну и , если я правильно понял, необычность заключается в том, что тут процедурки больше, чем полагается. Мало кто станет запариваться над тем, чтоб сделать полностью процедурный бег или ходьбу из 2-х ключей.
Так докладу 5 лет ;)
Вот не надо, это же ПРОЦЕДУРНОСТЬ.