Что нужно знать
Основные понятия игровой анимации
Каждый игровой аниматор должен знать об основах создания и внедрения персонажа в игру и о том, как приступать к созданию таких анимаций для видеоигр, от которых игроки будут получать удовольствие, управляя персонажами.
Распространенные виды игровой анимации
Чтобы понять, как разные виды игровой анимации сочетаются в целом, нужно для начала разобраться, для чего нужен каждый вид и как он помогает передавать движения персонажа. Плавность персонажу придают три основных вида анимации, которые определяются не только тем, как они начинаются и заканчиваются, но и тем, что в них происходит.
Циклы
Чаще всего, пожалуй, используются циклы, названные так потому, что их начальный и конечный кадры совпадают при сохранении скорости, благодаря чему создается впечатление бесконечно повторяющегося движения, которое воспроизводится, пока его не прервет другая анимация. Самые распространенные примеры – это состояние покоя (когда, например, персонаж стоит и относительно «ничего» не делает) или ходьба/бег (когда игрок дает персонажу команду передвигаться и персонаж передвигается по игровому миру с определенной скоростью).
В хорошо созданном цикле движение плавно возвращается к своей начальной точке так, что зритель не знает, где точно этот цикл начинается и заканчивается. Для этого не только должны совпадать конечная и начальная позы, но и не должно присутствовать никаких резких рывков и скачков. Кривые анимации не должны содержать резких ступеней (перепадов вверх или вниз), а касательные кривых должны совпадать в начале и конце.
Точно так же все движения разных элементов не должны заканчиваться в одном и том же кадре, как бы плавно они ни изображались, потому что в целом это нарушает плавность всего цикла. Чем больше будет перекрытий движений различных частей тела или деталей одежды, тем лучше замаскируется экспортируемый конечный кадр.
Наконец, нужно проследить за тем, чтобы ни одна часть цикла не выделялась на фоне остальных, иначе игрок невольно будет распознавать повторы в цикле – например, если какой-то жест воспроизводится ярче остальных. Однородность важнее отличий, и многое зависит от стиля проекта и конкретного персонажа, для которого создается анимация.
Линейные действия
Линейное действие – это однократная анимация, имеющая четкое начало и конец и обычно переходящая в позу покоя или начинающаяся с нее; при этом в силу своей однократности она не требует особой плавности. Самые частые и востребованные примеры – анимации движений по нажатию клавиши или кнопки контроллера, такие как прыжки, удары или взмахи мечом. Они прерывают текущее состояние персонажа и по завершении возвращают его в предыдущее состояние.
Особое внимание следует уделить резкому переходу от той позы цикла, в которой линейное действие прерывает цикл, и возвращению к этой позе сразу же после того, как игрок перестает подавать команду действия.
Важно отметить, что у игрока часто не бывает возможности прервать действие на середине, после того как команда уже подана, поэтому это обстоятельство также следует учитывать при разработке любого линейного движения.
У атаки мечом с размахом есть определенные начало и конец
Переходы
Этот вид анимации часто считается второстепенным, но придает плавность движениям персонажа и помогает художественно оформить переход от одного действия к другому. Переходы обычно бывают короткими и показывают правильное смещение веса между движениями с сохранением положения ног.
В самых простых играх, например при поступлении команды от игрока, цикл покоя просто прерывается циклом ходьбы/бега с небольшим смешиванием кадров, но гораздо лучше будет создать анимацию перехода к первому кадру цикла ходьбы/бега – например, показать, как персонаж сначала наклоняется в нужном направлении.
Еще более высокой точности можно добиться, создав несколько анимаций перехода к движению в разных направлениях, в каких только может двигаться персонаж; при этом аниматор может проконтролировать необходимый угол разворота и изменение импульса во время перехода. Как видно, количество переходов, необходимых для придачи персонажу плавности, может быстро увеличиться многократно, поэтому повышенное внимание им уделяют только в играх с большим бюджетом.
Скелеты, риги и экспорт в игру
Подобно тому как в традиционной кукольной анимации используются модели с жесткими скелетами, позволяющими придавать персонажам различные позы, многие программы 3D-анимации (а в последнее время и многие пакеты для 2D-анимации) предусматривают привязку отдельных элементов персонажа к внутреннему скелету. В самом простом виде углы разворота и координаты этих элементов экспортируются покадрово в игровой движок, который воспроизводит заранее позы и тем самым создает анимацию персонажа.
Игровые движки часто читают лишь экспортируемый скелет
3D-анимация по своей сути – это набор значений для поворотов и передвижений «суставов» скелета, от которых, в свою очередь, зависит перемещение вершин в трехмерном пространстве, создающее иллюзию движения персонажа. Если заниматься анимацией достаточно долго, то рано или поздно можно прийти к мнению, что все движения в окружающем мире можно описать с помощью чисел, и это открывает большие возможности. Как только будет приоткрыта завеса, скрывающая внутренний механизм движений, то с этими числами можно сделать гораздо больше, чем допускают простые манипуляции 3D-пакета.
• Сглаживание чисел при переходе от одной анимации к другой позволяет создавать эффект «сглаживания», то есть более плавного перехода между последовательными действиями.
• Складывание чисел, или так называемая аддитивная анимация, позволяет воспроизводить одно и то же движение (например, дыхание) поверх других. Этот прием должен уже быть знаком всем, кто занимается анимацией при помощи слоев DCC, так как принцип у них один и тот же.
• Вычитание чисел позволяет удалять позы, что также используется в аддитивной технике при объединении нескольких сложных анимаций.
• Экспорт или воспроизведение только нескольких отдельных значений позволяет анимировать отдельные элементы, такие как верхняя часть тела или руки. Так можно заставлять персонажей стрелять из оружия и перезаряжать его на бегу с использованием общей анимации бега.
• Варьирование числовых показателей в процентном отношении позволяет регулировать движение отдельных элементов: например, отображать мелкие движения рук или наклоны позвоночника.
Конечно, все математические вычисления выполняет игровой движок, но общее представление о принципах этих вычислений и о том, как меняются значения во время анимаций и между ними, позволяет глубже осознать основные принципы анимирования. Увлекающиеся своим делом аниматоры находят новые интересные способы делать много высококачественных анимаций через разумное сочетание и переиспользование анимаций.
Независимо от того, сколько ключевых кадров используется в каждом конкретном файле анимированной сцены, вся анимация экспортируется в игру с частотой кадров, установленной для всего проекта, – чаще всего 30 кадров в секунду, хотя в последнее время становится нормой частота 60 кадров в секунду. Затем движок игры в реальном времени осуществляет линейную интерполяцию между этими кадрами. Наилучшие результаты дает воспроизведение анимации на полной частоте кадров, но для экономии памяти анимацию часто сжимают (хотя сейчас по мере увеличения доступной памяти сжатие не такое уж радикальное), сохраняя только каждый второй кадр или меньше – в зависимости от алгоритма сжатия. Слишком сильное сжатие может заметно уменьшить плавность по сравнению с исходной анимацией, созданной в специальной программе, поэтому с ним лучше не переусердствовать.
Несмотря на то, что сами аниматоры при создании трехмерной анимации ориентируются на вращения в трехмерной системе координат по осям X, Y и Z (так называемые углы Эйлера или значения Эйлера, названные в честь описавшего их математика), игровой движок оперирует «кватернионами». Математические операции при этом требуют четырех значений, и каждое вращение описывается поворотом относительно каждой оси (для летательных аппаратов они, например, называются «рысканье», «тангаж» и «крен»), но для аниматора это слишком заумно, и ключевые показатели описываются углами Эйлера.
Серьезный недостаток такого переноса – так называемое складывание рамок, когда объект, например кость скелета, разворачивается по одной оси так, что две другие оси совпадают и делают объект нерегулируемым.
Анимационный риг, наложенный поверх скелета
При экспорте значений скелетов важно помнить, что аниматоры обычно не манипулируют напрямую скелетом, а используют накладываемый поверх него риг. Благодаря этому удается использовать все трюки и инструменты программ наподобие Maya – например, переключаться между локальным и глобальным вращением, – а также работать со сложными инструментами, такими как «инверсная кинематика» (Inverse Kinematics, IK).
Эти аспекты подробно рассматриваются в главе 8, «Ваш проект: техническая анимация», но будет полезно знать ограничения конкретного игрового движка и его особенности считывания скелетной анимации при экспорте в игру. Эти знания помогут вам настроить любую анимационную сцену или персонажа, над которым вы работаете, так, чтобы получить наилучшие результаты в зависимости от сложности работы.
Как работают сплайновые кривые
Во времена традиционной 2D-анимации аниматор рисовал важные ключевые позы точно так же, как сейчас мы задаем первоначальный вариант движения объекта. После удовлетворительного результата аниматор (или один из помощников, в зависимости от размеров команды) рисовал (фазовал) промежуточные кадры, а главный аниматор, не теряя времени, как можно быстрее переходил к следующему фрагменту.
Аниматор настраивает движение между ключевыми кадрами с помощью редактора кривых
С появлением 3D-анимации все промежуточные кадры между ключевыми позами начали рассчитывать компьютеры, иногда вставляя дополнительные ключевые кадры и, что очень важно, изменяя кривые для реализации классического принципа «ускорения и замедления» (иногда в применении к кривым это называется «разгоном» и «затуханием» или «замедлением на входе и на выходе»).
Как известно, для любого движения скорость – это расстояние, пройденное за какое-то время. Независимо от программного обеспечения график скорости можно представить в виде линии в системе координат, где по одной оси измеряется расстояние (часто в сантиметрах или метрах), а по другой – время (в секундах или кадрах). Если в первом ключевом кадре объект расположен на нулевой отметке, а в тридцатом кадре – на расстоянии одного метра от нулевой отметки (при условии скорости анимации 30 кадров в секунду), то за тридцать кадров объект пройдет расстояние в 1 метр. В данном примере линия графика прямая, поэтому можно утверждать, что объект двигался с постоянной скоростью 1 метр в секунду.
График скорости в виде прямой
Однако чаще всего скорость анимации не бывает постоянной. Даже если объект и будет двигаться с общей скоростью 1 метр в секунду, то, скорее всего, в начале он будет разгоняться, а в конце замедляться. При этом график принимает форму кривой, выходящей из начальной точки и входящей в конечную точку по горизонтальной касательной. Чем больше угол кривой, тем быстрее движется объект, и наоборот.
Кривая с разгоном и замедлением
Для любого объекта, перемещающегося в трехмерном пространстве, можно задать три графика скорости для каждой из осей X, Y и Z. (В Maya ось X красного цвета, Y – желтого, а Z – синего.) Регулируя каждую из кривой, можно подчеркнуть индивидуальные особенности движения того или иного объекта, вместо того чтобы просто заставлять его двигаться со строго линейной скоростью.
Варианты кривых. Быстрый разгон с постепенным замедлением и постепенный разгон с резкой остановкой
Важно отметить, что аниматор может подгонять кривые по своему усмотрению, делая вставки дополнительных ключевых кадров между основными позами. Традиционно для этого вставлялись целые новые позы (так называемые breakdowns, или «вставки», буквально «разбивки»), помогавшие настроить степень разгона или замедления; то же можно проделать и в 3D-анимации – вставить целые дополнительные позы.
Ключевые кадры для всего тела с отдельными вставками для конечностей
Вместе с тем одно из преимуществ трехмерной анимации заключается в том, что можно добавлять ключевые кадры только для отдельных элементов объекта. Например, можно замедлить только одну руку, пока все остальное тело будет раскручиваться для нанесения удара.
Благодаря этому вы не захламляете редактор кривых и повышаете их читаемость; к тому же так легче манипулировать отдельными элементами персонажа и рассчитывать их перемещение. Тем не менее на ранней стадии разработки анимации лучше пользоваться ключевыми позами для всего персонажа, чтобы при необходимости можно было легко изменить скорость его движения. Только потом, после синхронизации всех поз, переходить к более детальной настройке движений конечностей, головы и т. д. Так аниматору будет легче применять смещения и перекрывать отдельные движения, но редактировать общее действие станет уже труднее, так как ключевые кадры окажутся смещены и будут хуже читаться.
Отдельные кривые для частей тела, смещенные относительно всего объекта
Важно помнить, что при создании анимации нужно в первую очередь ориентироваться на 3D-отображение, а не на кривые. Некоторые аниматоры стараются сделать как можно более аккуратные кривые, невыразительные по сравнению с более резкими и запутанными. Поэтому к редактору кривых лучше всего обращаться на этапе отладки или чтобы понять, почему объект неправильно ведет себя в промежуточных кадрах.
Ускорить процесс ретайминга (распределения ключевых кадров по временной шкале) анимации можно с помощью редактора временной шкалы, позволяющего быстро манипулировать только временем (но не значениями) ключевых кадров, без необходимости работы в редакторе кривых. В редакторе Maya отдельный ключевой кадр или группу кадров можно выбрать и переместить с помощью удерживания клавиши SHIFT и нажатия средней кнопки мыши. Кроме того, можно задать горячие клавиши для быстрого копирования, вырезания и вставки. Горячие клавиши сильно помогают в работе, и их можно настроить по вкусу, обратившись к руководству пользователя («помощи»).
Временная шкала в Maya, позволяющая легко менять тайминг кадров
Движение коллижн-моделей
Для того чтобы игра знала, где точно в игровом пространстве находится персонаж в каждом конкретном кадре, аниматор обычно прибегает к анимации коллижн-модели (модели столкновения). Обычно коллижн-модель представляет собой экспортируемую «кость» верхнего уровня иерархии скелета или вообще отдельный объект, сообщающий о местоположении персонажа.
Обычно коллижн-модель имеет форму цилиндра или «пилюли», окружающих собственно модель персонажа. Она помогает фиксировать попадание оружия или снарядов и, что важнее всего, не дает персонажу проходить сквозь стены или проваливаться сквозь землю. Структура коллижн-моделей бывает и более сложной в зависимости от характера игры (например, шутеры требуют большей детализации, потому что пули должны попадать в разные части тела с четко обозначенной формой), но для передвижения в игровой среде лучше всего ощущается форма цилиндра, не дающая модели застревать в узких местах.
Невидимая цилиндрическая коллижн-модель передвигается вместе с персонажем
Некоторые движки при экспорте анимаций требуют и экспорта анимации коллижн-моделей – это необходимо, чтобы они отображали в игре движение персонажа вперед. Траектория движения вперед (или в любом другом направлении в зависимости от анимации) считывается из самой анимации. Другие движки экспортируют только анимацию персонажа и рассчитывают его движение в мире сами. Такой подход затрудняет точную привязку анимации к положению в мире игры и иногда производит «эффект скольжения», но может иметь какое-то свое значение в рамках проекта. В целом наилучшие результаты дает гибридный подход, при котором анимация коллижн-моделей применяется только для точного перемещения, чаще всего при необходимости контакта с объектами игрового мира.
«Эффект скольжения» обычно возникает, когда скорость перемещения персонажа по игровому миру не совпадает со скоростью анимации. Такое наблюдается, когда требования к скорости передвижения персонажа меняются без обновления анимации или когда скорость повышается настолько, что анимация перестает соответствовать ей без полной переделки. Однако не стоит падать духом – этот эффект заметен, только если смотреть на вражеских NPC из статичного положения. Не столь заметно скольжение игровых персонажей, которые передвигаются по миру вместе с камерой – в таких случаях игрок может и не обратить внимания на несоответствие, когда под ногами плывет земля. Вместе с тем, во избежание этой проблемы стоит как можно чаще создавать геймплейные прототипы анимаций и помнить о том, что дизайнеры в геймплейных целях чаще заставляют ускорять персонажей, а не замедлять.
В некоторых играх коллижн-модель по умолчанию привязывается к базе персонажа, но часто аниматорам бывает важно контролировать действия, связанные со сложным передвижением, таким как подъемы, прыжки или использование укрытий, когда персонаж взаимодействует с различными объектами игрового мира. Никогда не стоит отключать коллижн-модель для решения какой-либо проблемы (она может снова включиться, когда персонаж окажется внутри объекта), поэтому положение коллижн-модели всегда нужно тщательно контролировать, например при столкновении персонажа со стенами или укрытиями.
Обращать особое внимание на коллижн-модели также нужно при переходе от одной анимации к другой. То, что позы ожидания разных анимаций совпадают, еще ничего не значит, потому что коллижн-модель при этом может находиться в другом положении или в другой ориентации, и в результате при переходе между анимациями персонаж станет скользить или вращаться. Игра всегда считывает позу относительно коллижн-модели, поэтому если анимация заканчивается поворотом на 180°, нужно проследить за тем, чтобы коллижн-модель также развернулась на 180° и заняла противоположное положение по соответствующим осям.
Коллижн-модель можно анимировать независимо от самого персонажа
Итак, очень важно иметь представление о том, как ведет себя коллижн-модель в конкретном проекте и в конкретном игровом движке, потому что неправильная анимация коллижн-моделей лежит в основе огромного количества ошибок, багов и погрешностей анимации. Команда аниматоров должна уметь как минимум копировать и вставлять позы относительно нового положения персонажа в мире. Самые распространенные инструменты, позволяющие поставить игровую анимацию на поток, подробно описаны в главе 8 «Ваш проект: техническая анимация».
При виде от третьего лица камера обычно следует за коллижн-моделью с некоторым смещением, от которого зависит разворот камеры во время вращения персонажа. Для того чтобы камера не дергалась, важно, чтобы коллижн-модель в целом двигалась плавно; в этом ее движение отличается от движения самого персонажа, который может перемещаться рывками или какими-то характерными особенностями. Если прикрепить камеру непосредственно к самому персонажу, то та часть тела, к которой прикреплена камера, будет казаться на экране неподвижной, потому что они движутся в такт друг другу.
Для цикла бега, например, коллижн-модель должна двигаться равномерно, а не следовать за центром масс или базовой кости персонажа в каждом кадре. Для этого стоит задать конечную и начальную точку для коллижн-модели, после чего она будет перемещаться равномерно и линейно на протяжении всего цикла. Если цикл бега включает в себя несколько пар шагов, задавайте положение коллижн-модели в конце каждой пары, а не только в крайних точках; так можно будет избежать слишком большого смещения персонажа за пределы коллижн-модели в том случае, если скорость бега не совсем постоянна.
Расположение ключевых кадров коллижн-модели для каждой пары шагов
Прямая и инверсная кинематика
Трехмерная анимация, или, точнее, создание ряда поз, которые друг за другом создают впечатление движения, представляет собой процесс перемещения и вращения костей, которым придают нужное положение для той или иной позы. При этом существует иерархия костей и сочленений, и находящиеся выше в иерархической цепочке влияют на расположенные ниже. Например, от вращения плечевого сустава зависит расположение локтя и кисти. Согласно принципу прямой кинематики воздействие передается по иерархической цепочке сверху вниз, и им пользуются при передаче, например, взмахов руки во время ходьбы или бега, при движении конечностей во время плавания или в прыжке – но не в тех случаях, когда ступни касаются земли.
Прямая и инверсная кинематика
В большинстве случаев ступни персонажа крепко опираются на землю и остаются на месте, пока аниматор не захочет их переместить, поэтому здесь требуется другой подход. На помощь приходит так называемая инверсная кинематика (ИК). Аниматор задает нужное конечное положение ступни, а компьютер сам производит расчеты для перемещения и вращения коленей и бедер. Из-за дополнительных расчетов инверсная кинематика оказывается более дорогостоящей по сравнению с прямой. На создание предэкспортной анимации в 3D-редакторе это влияет редко, но если инверсная кинематика используется в движке игры, особенно для нескольких персонажей, то разница в бюджета ощутима. (Анимации почти всегда экспортируются как прямая кинематика, неважно, как они создавались в редакторе.)
Поэтому инверсную кинематику в реальном времени лучше использовать только в случае крайней необходимости или только для важных объектов, таких как игровой персонаж в двух случаях.
1. В качестве модификатора для расчетов в реальном времени, то есть в качестве настройки соответствия движений ног и неровностей рельефа в игровом мире; это придает реалистичности движениям персонажа – несмотря на то, что анимация передвижения создавалась для плоской поверхности, ступни будут опускаться на нужную высоту.
2. Для сохранения визуальной достоверности при смешивании анимаций, которые в случае прямой кинематики привели бы к нежелательным эффектам. Так инверсная кинематика позволяет сохранить руки водителя на руле или другом подобном приспособлении.