Как работает и зачем нужна процедурная анимация

15.11.2021 14:40
Юрий Кулагин

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

Сегодня разбираемся, как устроена процедурная анимация, есть ли у неё минусы и как она может помочь разработчикам на Unreal Engine. Но сперва лучше вспомнить, с чего вообще началась эта технология.

1-min.gif


Анимация, куклы и эйфория

Большинство движений в играх — это статичные анимации по ключевым кадрам. Для их создания аниматор вручную двигает модель персонажа, состоящую из костей (bones) и их соединений — пар (например, кисть и локоть руки) и цепей (вся рука целиком, от пальцев до плеча). Когда все кости оказываются в нужном положении, аниматор сохраняет их в виде тех самых ключевых кадров (keyframes). Во время воспроизведения анимации персонаж начинает двигаться согласно этим кадрам, постепенно переходя от одного к другому.

2-min.gif

Статичные анимации неудобны тем, что они, собственно, статичные. Для любой вариации одного и того же движения разработчикам нужно создавать новую анимацию, а это отнимает и рабочее время, и место на жёстком диске. При этом для некоторых движений таких вариантов понадобились бы сотни — например, для анимации прицеливания противника в игрока, который может находиться выше, ниже, левее, правее. Тем не менее, наравне с захватом движений (motion capture), статичные анимации долго оставались самым популярным способом заставить игровых персонажей двигаться.

3-min.gif

Другой хорошо знакомый игрокам тип движений — основанная на физике и анатомии персонажа ragdoll-анимация, которая впервые появилась ещё в Jurassic Park: Trespasser 1997 года. Физика рэгдоллов основана на разветвлённой цепочке «костей» и соединений, то есть частей тела и суставов между ними. А управляет этими элементами ряд правил и ограничений, с помощью которого аниматор описывает игровому движку строение человеческого тела: например, колено может загибаться только вовнутрь, голова не должна поворачиваться на 180 градусов.

4-min.gif

Главная беда рэгдоллов в том, что даже со всеми заданными правилами физические движения сложно предсказать, и суставы рэгдолл-персонажей иногда закручиваются очень лихо. Поэтому чаще всего рэгдоллы используют для анимации смерти: персонаж получает ранение, отыгрывает короткую статичную анимацию, а потом превращается в «куклу», которая остаётся на локации.

5-min.gif

Некоторые игры используют рэгдолл-физику непосредственно в геймплее. Например,  Tom Clancy’s Splinter Cell: Chaos Theory использовала модифицированную версию Unreal Engine 2.5, чтобы традиционные для серии прятки с телами стали реалистичнее. А в Dark Messiah of Might & Magic рэгдоллы регулярно включались, чтобы отработать реалистичное столкновение ещё живого персонажа с окружением — например, противник подскальзывался, включал физику и проваливался в яму. А в аркадном файтинге Gang Beasts «кукольная» физика включена вообще всегда — выглядит комично, но игра на то и рассчитана.

6-min.gif

Следующим шагом в развитии анимации стала технология Euphoria, которую в 2006 году разработала компания NaturalMotion. В основе «Эйфории» тоже лежали рэгдоллы, но более комплексные — помимо скелета, у них была виртуальная мускулатура и физическая оболочка, отвечавшая за столкновения с другими объектами. Правила и ограничения тоже стали сложнее: не просто описывали, как могут гнуться руки, но и как должен стоять персонаж или насколько широко ему нужно переставлять ноги во время ходьбы.

7-min.gif

Такой подход позволил частично отказаться от ключевых кадров. Симуляция мышц и правила состояний не могли заменить традиционную анимацию и захват движений целиком, но реалистично обрабатывали внешние условия: пулю, которая попала в героя, или модельку несущегося по улице и сбивающего прохожих игрока. Словом, Euphoria включалась вместо других типов движений, как только на персонажа начинали действовать законы физики 

8-min.gif

Euphoria успела появиться в нескольких играх, самыми заметными из которых стали две части Star Wars: The Force Unleashed, после чего стала частью движка RAGE от Rockstar Games — на нём работают все игры студии, начиная с Grand Theft Auto IV. Формально, этот подход отчасти может считаться процедурной анимацией, но ему ещё не хватало одного — инверсной кинематики.

9-min.gif


Что такое инверсная кинематика

Когда аниматор создаёт движение вручную, он использует иерархию сегментов, которой подчиняются все элементы модели, и прямую кинематику: когда в скелете персонажа родительская кость управляет дочерней. Если подвинуть плечо модели, вместе с ним переместится локоть и кисть. В обратную сторону, то есть от дочернего к родительскому, элементы не двигаются: повернув кисть модели, разработчик не изменит положение всей руки.

10-min.gif

Процедурная анимация тоже основана на «скелетной» системе из костей и сочленений, но использует инверсную (обратную) кинематику — зависимость родительского элемента от дочернего. Так, переместив ту же кисть руки в системе с инверсной кинематикой, аниматор заставит двигаться персонажа целиком: за кистью потянется локоть, потом плечо, а после повернётся туловище.

11-min.gif

Чтобы вся эта цепочка двигалась правдоподобно, аниматоры накладывают на каждую кость ограничения, имитирующие работу реальных законов физики и строение человеческого тела. Во многом они похожи на физические правила рэгдоллов и технологии Euphoria — устанавливают, как и в какую сторону могут поворачиваться и гнуться конкретные кости модели. Опираясь на эти правила, алгоритмы инверсной кинематики определяют, как именно должен двигаться весь скелет вслед за эффектором — то есть костью, которая начинает действие.

12-min.gif

Во время игрового процесса процедурная анимация обычно не целиком управляет персонажем, а частично заменяет движения, созданный с помощью ключевых кадров или захвата движения. Например, во время движения персонажа по сложной местности процедурная анимация возьмёт на себя только нижнюю половину тела — так работает анимация Сэма в Death Stranding. Или только одну конечность, когда на анимацию с захватом движения наложится процедурное движение руки — с этой технологией экспериментировали разработчики Hellblade: Senua’s Sacrifice, когда модифицировали под свои нужды движок Unreal Engine 4.

13-min.gif

В эти же моменты на движение начинают влиять прописанные в движке физические законы. Так, у бегущего персонажа должна появиться инерция: она не всегда совпадает с направлением, которое указывает игрок, поэтому наклоняет модель вбок во время резкого поворота или вперёд — после резкой остановки. А когда инерция перестаёт влиять на персонажа (например, тот останавливается или врезается в препятствие), модель возвращается в референс-позу — стандартное положение скелета.

14-min.gif

В теории, возможности процедурной анимации безграничны и когда-нибудь она сможет управлять персонажем целиком, без подключения «статичных» движений. Но пока что такие технологии остаются на уровне технических презентаций.

Например, Александр Березняк, технический арт-директор Ubisoft, представил на GDC инструмент IK Rig со своим системным подходом к анимации. Алгоритмы IK Rig собирают все анимации похожих по строению скелетов персонажей в общую форму, оптимизируют их и позволяют свободно смешивать. Скажем, герою можно назначить три анимации, изначально записанные для трёх других моделей, — перемещение крадучись, прицеливание и падение. IK Rig смог бы адаптировать эти движения под новую модель и плавно соединить — причём так, чтобы анимация подстраивалась под команды игрока и физическое воздействие.

15-min.gif


Плюсы и минусы

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

Как следствие, вся разработка в целом становится более гибкой. Художники могут при необходимости изменять модели персонажей и не бояться, что из-за них кто-то будет перерисовывать анимации. Левел-артистам становится проще рисовать геометрию на локации (даже если появится лишний камень, NPC всё равно сможет правильно на него наступить), а программистам — работать с физикой движка.

16.png

С точки зрения игрока, правильно настроенная процедурная анимация делает игру визуально более реалистичной и разнообразной: создаёт плавные переходы между движениями, не даёт конечностям проходить сквозь друг друга, правдоподобно заставляет персонажа гнуться, тянуться и шагать в разные стороны. А ещё зачастую помогает сэкономить ресурсы системы — «статичные анимации» обычно занимают больше места.

17-min.gif

Но пока что у процедурной анимации хватает и проблем — связанных, в основном, с её кодом. Все физические законы и правила процедурных алгоритмов — это чистая математика, которая не терпит ошибок. Так, недостаточно отполированный код может привести к слишком жёстким, словно у робота, движениям. А неправильно указанный параметр — к курьёзам и багам, вроде неправильно изгибающегося персонажа. 

18-min.gif

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

Наконец, из-за повсеместного использования процедурной анимации может пострадать индивидуальность персонажей. Отчасти это можно исправить, если для каждого важного героя настроить правила алгоритмов по-разному — чтобы один слегка прихрамывал, а другой, наоборот, размашисто шагал. Но на это уйдёт гораздо больше времени, так что некоторые студии предпочтут обойтись одним шаблоном или вовсе отказаться от процедурных инструментов.

19-min.gif


Где применять

Для процедурной анимации можно придумать сотни разных применений, и первые из них появились в играх больше двадцати лет назад. Например, персонажи в Quake III Arena 1999 года уже умели подключать одновременно три анимации — бежали, держали в руках оружие и вертели головой, повторяя движение камеры. Правда, 22 года назад такое сочетание ещё выглядело достаточно топорно.

20-min.gif

Более реалистичных результатов удалось добиться в 2008 году разработчикам Spore. У аниматоров Maxis не было другого выхода, кроме как вложиться в полировку процедурной анимации, — ведь вся игра построена на создании уникальных существ с самым непредсказуемым набором конечностей или даже полным их отсутствием. Как позже вспоминал главный технический аниматор игры Крис Хекер, студия сразу поняла, что от привычных методов анимации им придётся отказаться.

21.png

В годы создания Spore мало кто ещё экспериментировал с процедурной анимацией, поэтому разработчики придумывали всё с нуля. Они начинали с создания простейшего движения для простейшего существа — например, с ходьбы двуногого создания, — но описывали это движение универсальными понятиями. Грубо говоря, у действия «поднять фрукт» не было ключевых кадров, но были условные значения: есть объект «рука», есть объект «фрукт», есть задача — чтобы «рука» дотянулась до «фрукта» и вернулась в исходное положение.

22-min.gif

Далее программисты студии присваивали этим значениям и понятиям более строгие определения. Так, на роль тех же «рук» движок Spore назначал только конечности, которые находились на персонаже выше остальных. Потом эти движения тестировались на разных типах существ, формах и их сочетаниях, а аниматоры их правили и дополняли под надзором бывшего художника Disney, который показывал, как сделать движения стилизованных персонажей более естественными.

23-min.gif

Другой интересный пример — платформер Grow Home 2015 года, в котором почти не используются традиционные методы анимации. Вместо них в игре есть робот Бад — своего рода ragdoll-марионетка с тремя активными точками: ногами, левой и правой рукой. Когда игрок вручную переставляет ноги и руки персонажа, остальное тело подстраивается под конечности: свободно поворачивается, распределяет вес и учитывает инерцию при движении.

24-min.gif

Но процедурная анимация в игре оказалась настолько свободной, что разработчикам пришлось её местами ограничивать: завязанный на передвижении игровой процесс Grow Home должен был в первую очередь оставаться комфортным. Например, физика Бада настроена так, чтобы он всегда приземлялся на ноги, а его прыжки слегка ускорены — иначе игроку было бы неудобно скакать по платформам. Кстати, подробнее о поиске баланса между геймплеем и процедурной анимацией старший программист Grow Home Энди Бак рассказывал в этом интервью.

25-min.gif

Инди-разработчикам процедурная анимация тоже может пригодится, особенно когда нужно небольшой командой нарисовать много движений. Так поступили авторы кроличьего боевика Overgrowth — все анимации в игре созданы с помощью процедурных алгоритмов, опирающихся на ключевые кадры. Например, для перемещения с прыжками и пригибанием разработчики Overgrowth задали всего 13 поз, а оптимальные движения между ними движок игры нашёл сам.

26-min.gif

Интересно, что инверсной кинематикой студия Wolfire Games почти не пользовалась. Вместо неё разработчики использовали разные типы интерполяции — математические процессы, которые находят неизвестные значения между двумя заданными точками. В анимациях Overgrowth этими точками стали ключевые кадры, а значения между ними — само движение, которое выполняет персонаж. Такой подход помог быстрее создавать новые анимации: если разработчики добавляли новый вид оружия, то аниматор просто рисовал 13 новых кадров, а интерполяция заново рассчитывала движения между ними.

27-min.gif

Ubisoft в последних трёх Assassin’s Creed активно использовала процедурную анимацию в диалогах. Разговоров в новых играх серии очень много, почти все они сопровождаются кинематографичной камерой, и на их проработку вручную ушло слишком много времени и денег.

28.jpg

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

29-min.gif

Также разные виды процедурной анимации можно использовать для реалистичной отрисовки частиц (дыма, огня), мягких материалов вроде ткани и волос, а также воды. Правда, с инверсной кинематикой эти подходы уже имеют мало общего. Так, в стратегии From Dust процедурная анимация воды построена на шейдерах и динамических текстурах, а правдоподобно сгибающаяся ткань в боевике The Order: 1886 — на физике и технологии Position Based Dynamics.

30-min.gif


Как применять

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

31-min.gif

Но постепенно появляются технологии, которые хотя бы отчасти, но упрощают работу с процедурной анимацией. Ubisoft, помимо упомянутого выше IK Rig, одной из первых начала использовать алгоритм Motion Matching, который автоматически создаёт бесшовные склейки и переходы между движениями, записанными с помощью motion capture. Компания Nekki выпустила раннюю версию программы Cascadeur, с помощью которой можно быстро сгенерировать физически корректную анимацию на основе заданного скелета.

32-min.gif

Тем временем программисты Даниэль Холден, Джун Сайто и Таку Комура уже несколько лет работают над нейросетью Phase-Functioned Neural Networks for Character Control. Этот алгоритм быстро учится и может создать из несколько сессий захвата движений сотни анимаций, которые в реальном времени адаптируются под рельеф, скорость и контроль со стороны игрока.

33-min.gif

Наконец, игровые движки предлагают свои инструменты для процедурной анимации. Например, в Unreal Engine движения персонажей можно автоматизировать с помощью блюпринтов, а в UE Marketplace есть уже готовые плагины. Альтернативный вариант — создать процедурную анимацию с помощью Control Rig — инструмента, о котором в нашем блоге уже выходил отдельный материал.

34-min.gif


* * *

Процедурная анимация может очень по-разному работать, решать разные задачи, и вряд ли игровая индустрия в ближайшем будущем исчерпает все её возможности. Развитие технологии поддерживает и Epic Games — программисты компании сделали работу с процедурными системами в Unreal Engine 5 заметно удобнее, ну а дальше всё зависит уже от пользователей.

В комментариях расскажите, верите ли в потенциал процедурной анимации и в то, что когда-нибудь она сможет заменить все типы анимирования вручную. А если вам уже приходилось работать с процедурными алгоритмами — поделитесь опытом, позитивным и не очень.

35-min.gif