Gamedev Владимир Семыкин
6 900

Простота движений: принципы создания игровой анимации

Особенности CGI и порядок создания правдоподобной анимации.

В закладки
Аудио

Джейми Лозада, студент старших курсов в Ринглингскиом колледже изобразительных искусств и дизайна, а также один из разработчиков игры Oasis, в интервью порталу 80.lv рассказал о главных принципах игровой анимации, которые должны усвоить все начинающие художники. В особенности он уделил внимание аспектам, которые делают анимацию реалистичной, а также объяснил отличия CGI-анимации от игровой. Мы выбрали из текста главное.

Главное отличие CGI-анимации от игровой заключается в том, что она создана заранее, поэтому вся композиционная работа изначально спланирована.

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

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

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

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

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

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

  • закольцованную idle-анимацию;
  • анимацию перехода в бег;
  • поворот вправо на 90 градусов;
  • поворот влево на 90 градусов;
  • поворот вправо на 180 градусов;
  • поворот влево на 180 градусов;
  • закольцованную анимацию передвижения шагом;
  • анимацию остановки.

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

Также автор хотел сделать так, чтобы прыжки и приземления всегда выглядели по-разному и зависели от двух переменных: как долго персонаж находится в воздухе (AirTime) и передвигается ли он. Решением стали следующие анимации:

  • закольцованный бег и шаг;
  • переходная стартовая анимация от шага к прыжку;
  • переходная стартовая анимация от бега к прыжку;
  • закольцованное падение;
  • переходная анимация приземления и спотыкания;
  • переходная анимация приземления и переката;
  • переходная анимация супергеройского приземления.

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

Остальное — настройка анимации в соответствии с опредёленными событиями, происходящими во время игры.

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

На первом этапе анимация очень грубая, но она даёт представление о том, на что будет похоже движение. Далее нужно перенести её в движок Unreal Engine и протестировать, чтобы узнать, как она выглядит с точки зрения игрока. После этого можно переходить к следующему этапу: фазовкам (inbetweens). Смысл этого этапа заключается в том, чтобы настроить движения между базовыми позами, которые были сделаны ранее — они начинают формировать дуги и помогают уточнить тайминг движения.

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

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

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

Чтобы поза была читабельна, необходимо учесть несколько вещей. Для примера можно взять персонажа Лучника — он ловкий и привлекает внимание. Это означает, что во многих его движениях он должен плавно изгибаться, как будто он выступает с отрепетированным номером.

Для создания нужной позы важно использовать примеры, которые помогут уловить важные дополнительные детали. Хорошая поза имеет очень чёткую линию действий. Лучник действительно пытается уничтожить это бревно, поэтому нужна поза, которая покажет, что он накапливает много энергии для этого.

Большие линии, проходящие через его тело, указывают на то, что персонаж движется назад, а его прямая левая нога используется, чтобы дать этому движению толчок. Это похоже на классическую рогатку: рука обеспечивает относительно прямое направление энергии, в то время как резинка довольно сильно изгибается.

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

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

Зелёная линия показывает последовательность действий

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

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

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

После создания фазовок наступает этап разбивки, на котором продолжается процесс улучшения анимации. Здесь применяются те же концепции, что и раньше, но теперь можно приступать к сглаживанию дуг движения. Этот процесс продолжается, пока анимация не будет завершена.

#анимация #основы

{ "author_name": "Владимир Семыкин", "author_type": "editor", "tags": ["\u043e\u0441\u043d\u043e\u0432\u044b","\u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f"], "comments": 18, "likes": 120, "favorites": 400, "is_advertisement": false, "subsite_label": "gamedev", "id": 50227, "is_wide": false, "is_ugc": false, "date": "Wed, 22 May 2019 11:14:01 +0300" }
Подкаст «Жиза ГД»:
Press X to win
Слушать фоном🎧
{ "id": 50227, "author_id": 94357, "diff_limit": 1000, "urls": {"diff":"\/comments\/50227\/get","add":"\/comments\/50227\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/50227"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64954, "last_count_and_date": null }

18 комментариев 18 комм.

Популярные

По порядку

Написать комментарий...
5

Опять общие слова и минимум конкретики.

Ответить
1

Спасибо за перевод, как раз отложил статейку на 80лв, что бы почитать на досуге)

Ответить
0

Это стандартный инструмент unreal engine?

Ответить
2

Да, это машина состояний для анимаций

Ответить
3

Целая статья про анимацию, но ни слова про машину состояний. Это как?

Ответить
0

Чуть-чуть есть.
"На основе этого автор создал BlendSpace, представляющий собой график, который указывает персонажу, какие анимации он должен исполнять в зависимости от значений определённых переменных. Этот тип графиков является специфической особенностью Unreal Engine, но концепция применима к различным игровым движкам."

Ответить
0

Неа, это смешение анимаций, вроде перехода от idle-walk-run через переменную speed, например. А вот переключение между состояниями так и называется в UE4 - State Machine.

Ответить
0

Понял, спасибо.

Ответить
0

ну, не я писал :) мне, кажется, статья не про техническую часть, а про художественную. какие анимации нужны. более абстрактная короче.

Ответить
1

Блюпринты, вроде как

Ответить
0

Спасибо, очень полезно

Ответить
0

скажите, знающие люди, дилетанту. а действительно ли проще (но дороже) записать движения с помощью motion capture, а затем их оцифровать и сделать плавные переходы, чем заниматься вот такой тяжелой работой? если, например, начинающий разработчик, не умеет в художниченье, то как ему быть?

Ответить
1

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

Ответить
1

Краткий ответ - нет, не проще. Дилетанту легче зайти на Mixamo и забрать, что ему надо.

Ответить
0

Если бюджет позволяет, можно и MC.

Ответить
0

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

Ответить
0

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

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } } ]
В Steam появилась функция продажи
подержанных цифровых копий игр
Подписаться на push-уведомления