Изучаем систему анимации CAT (продолжение)
Изучаем систему анимации CAT (продолжение)
Всем привет!
Этот урок предназначен для тех, кто хочет научиться использовать систему анимации CAT. Он является продолжением урока «Создание походки персонажа с помощью системы анимации CAT». Поэтому обязательно вначале изучите его. В нём мы создали походку двуногого персонажа, а самое главное – узнали как создавать различные походки. Походка персонажа - очень важная вещь для создания его характера и общей концепции анимации. Уменьшение времени создания анимации - несомненный плюс в вашей работе. Но… походка в чистом виде - это чаще всего лишь «полуфабрикат», который нужно уметь использовать для получения конечного продукта. Конечно, её можно в некоторых эпизодах использовать «как есть». Или делать раскадровку сценария таким образом, чтобы скрывать места перехода одной анимации в другую. Но в общем случае использование «чистой» походки малоприменимо. Это многие понимают, поэтому в комментариях к первому уроку было много предложений с просьбой продолжить описание возможностей системы анимации CAT. Что я и делаю. Сразу хочу предупредить вас, что этот урок не посвящен созданию анимации. Это урок об использовании CAT для создания анимации. Поэтому, если у вас проблемы в создании художественной части анимации, то обращайтесь за помощью к другим урокам. Здесь я буду рассказывать только о техническом решении следующих задач:
1) сохранение и загрузка походки персонажа;
2) создание и редактирование пути следования персонажа;
3) редактирование следов в зависимости от рельефа поверхности;
4) добавление и редактирование «абсолютного» слоя анимации;
5) добавление и редактирование «локального» слоя анимации;
6) переход от одной походки к другой.
Предлагаю следующий сценарий для анимации.
Персонаж крадётся у стены. На уровне головы что-то торчит из стены. Чтобы не удариться, он немного наклоняется в сторону, подходит к углу здания, останавливается, рукой опирается на какой-то предмет, оглядывается по сторонам, понимает, что предполагаемая опасность миновала, поворачивает за угол и постепенно переходит на бег.
Также, как и в первом уроке, идём от общего к частному. Сначала создаём общую анимацию и постепенно добавляем детали. Конечно, для создания этой анимации без обычных ключей анимации не обойтись, но в большой степени конечная анимация останется ПАРАМЕТРИЧЕСКОЙ! Т.е. даже когда всё будет готово, вы без особых усилий сможете редактировать очень многие параметры – модифицировать походку, усиливать, ослаблять или сдвигать во времени корректирующие анимации.
Для решения первого вопроса откройте файл, который был создан в первом уроке.
Выбираем персонаж. Переходим на закладку Motion. Открываем окно редактирования походки.
Всё это описано в первом уроке.
Выбираем CATMotion Presets. Эта закладка предназначена специально для сохранения и загрузки готовых походок. Нажимаем кнопку сохранения в правом нижнем углу и указываем путь для сохранения файла.
Походка сохранена в файле .cmp (character motion preset).
На этом работа с нашим старым max-файлом окончена.
Открываем новый файл.
Меняем Time Configuration
Создаём новый персонаж (как в первом уроке SheK). Переходим на закладку Modify.
Указываем высоту = 0,5
Создаём слой анимации для походки (см. первый урок)
И загружаем сохранённый cmp-файл.
Не нужно создавать новый слой, загружаем походку в текущий.
В результате этих манипуляций сохранённая походка загружена в текущий слой.
Включите анимацию. Персонаж движется, используя походку, созданную в первом уроке.
На этом первая задача, поставленная в этом уроке, решена.
Переходим ко второй задаче урока - создание и редактирование пути следования персонажа.
Оказывается для того, чтобы заставить персонаж двигаться, нужно прикрепить его к объекту (например, Point) и двигать этот объект. Для удобства можно создать сплайн и применить к Point ограничение по пути (Path Constraint). Он будет двигаться по сплайну. В результате редактирования вершин сплайна можно визуально наблюдать за созданием пути персонажа. Используя небольшое количество вершин и маркеры Безье можно создавать довольно сложные по форме, но простые по управлению сплайны. Сразу вспомним CharacterStudio – созданный путь всегда прямой. Только после создания вы имеете возможность редактировать следы. И для того, чтобы создать сложную траекторию, придётся повозиться.
Перейдём к практике.
Создаём сплайн. Создаём Point. Применяем ограничение по пути Path Constraint.
И указываем, что Point должен менять ориентацию в зависимости от направления сплайна. Параметр Follow.
Это сделано для того, чтобы Point, а с ним и персонаж поворачивались в зависимости от направления движения.
Теперь нужно «прикрепить» персонаж к Point. Для этого перейдите на закладку Globals и в разделе Walk Mode укажите Point01.
В результате персонаж движется за объектом Point.
Но как-то странно движется – лёжа. Он ориентирован по Point. Поэтому просто поверните Point.
Загрузите мой файл и посмотрите, как получилось.
Для более резкого поворота персонажа предлагаю излом сплайна сделать более острым. Нет ничего проще. Редактируем центральную вершину и её маркеры.
И персонаж поворачивает на углу более резко.
Не забудьте о физиологии: человек, который при повороте направо опирается на левую ногу, и правую ставит в новом направлении. В этом случае поворот получается естественным. Поэтому перемещайте центральную вершину и следите за перемещением следов. Выберите подходящее место для поворота. Это нетрудно сделать, т.к. перемещение следов происходит интерактивно.
На этом решение второй задачи («создание и редактирование пути следования персонажа») нашего урока закончено. По-моему, понятный и простой способ. Для его усвоения поэкспериментируйте со своим персонажем.
Переходим к третьей задаче урока - «редактирование следов в зависимости от рельефа поверхности».
Вполне возможно, что персонажу необходимо перемещаться по пересечённой местности. Поэтому предлагаю решить этот насущный вопрос. Для этого создадим искривлённую поверхность земли.
Переходим на закладку LimbPheses, нажимаем кнопку Pick Ground и указываем поверхность земли.
Просто и эффективно. Следы в результате расположены непосредственно на поверхности.
Но давайте усложним ситуацию. Я хочу положить под ноги персонажу предметы, которые не являются частью поверхности земли.
Тут нам понадобится ручное редактирование. Выделяем след, требующий редактирования и стандартными инструментами (перемещение, вращение) помещаем его в нужную позицию.
В результате несложных манипуляций следы расположены как требуется.
Но и это ещё не всё!
Предположим, что камень на который персонаж наступает - скользкий. Стопа будет скользить во время опоры на него. Просто поставим стандартные ключи анимации для нужного следа и … нога поехала.
Конечно, для того чтобы скольжение выглядело реалистично, нужно правильно подобрать скорость скольжения, реакцию персонажа и т.д. Этот урок, как я и говорил, посвящён изучению использования CAT, а не созданию реалистичной анимации.
На этом решение третьей задачи урока: «редактирование следов в зависимости от рельефа поверхности» окончено.
Теперь вы имеете возможность редактировать следы для решения самых сложных поставленных задач. Без ручного редактирования было бы сложно заставить персонаж пройти, например, по камням через лужу. Давайте вспомним CharacterStudio. Да, там тоже есть возможность перемещать следы. Но им нельзя указать кривую поверхность, на которой они должны располагаться. Или попробуйте вот так просто анимировать положение следа. Для меня вердикт очевиден – CAT удобней.
Перед тем как перейти к решению 4 и 5 задач урока:
«добавление и редактирование «абсолютного» слоя анимации»,
«добавление и редактирование «локального» слоя анимации»
я хочу пояснить некоторые термины и параметры CAT.
До сих пор мы создали только один анимационный слой – слой походки.
Но надпись Available подсказывает, что это не предел. Так и есть - мы имеем возможность создавать множество слоёв анимации. Они будут располагаться в окне Layer Manager друг под другом. А выполняться сверху вниз.
Посмотрите следующий пример.
Сначала выполняется слой походки. На эту анимацию накладывается анимация из «зелёного» слоя. Потом ниже и ниже. Для того чтобы редактировать определённый слой, нужно его выделить. В данном случае будет редактироваться «зелёный» слой. Для перемещения слоёв вверх-вниз по стеку предназначены кнопки с зелёными стрелками. Если хотите временно выключить определённый слой, воспользуйтесь значком Ignore. А если выберете Solo – обратный результат: будет выполняться только этот слой.
Давайте разберём отличия между «локальным» и «абсолютным» слоем.
«Локальный» слой добавляет свою анимацию к уже существующей анимации. Поэтому его используют для правки готовой анимации. В дальнейшем мы воспользуемся «локальным» слоем для того, чтобы заставить персонаж уклониться от препятствия во время ходьбы. На готовую анимацию мы «наденем» изменения.
«Абсолютный» слой создаёт совершенно новую анимацию. Этой возможностью мы воспользуемся, например, когда он остановится на повороте. В это время нам не нужна анимация походки. Он не должен махать руками и т.д. Он должен стоять и смотреть по сторонам.
Посмотрите на названия слоёв по-умолчанию. «Абсолютный» слой называется Animation Layer (слой анимации), а «локальный» - Adjustment Layer (поправочный слой).
Параметр Global Weight (глобальный вес) указывает, насколько сильно влияет этот слой на предыдущие (вышележащие). Если Global Weight = 0 то слой не действует на анимацию. Если Global Weight = 100, то действует максимально. Например, «абсолютный» слой полностью перекроет все вышележащие слои. Анимация параметра Global Weight даёт возможность плавного входа в слой и выхода из него.
Для перехода к редактированию кривой пользуйтесь кнопкой справа от параметра.
Для визуального контроля за весом слоя выберите кнопку с изображением разноцветных ромбов (вверху свитка Layer Manager см. рис.) В результате персонаж будет менять свой цвет на цвет «абсолютного» слоя. А при переходе и цвет будет постепенно меняться.
А зачем же нужен Local Weight?
Он подобен глобальному весу, но действует только на определённую часть тела персонажа. Т.е. Global Weight действует на весь персонаж целиком, а Local Weight на часть тела.
Рассмотрим такой пример:
Есть слой анимации походки и «абсолютный» слой, в котором персонаж стоит и машет рукой. Нужно заставить персонаж махать этой рукой во время ходьбы. Для «абсолютного» слоя указываем Global Weight = 100. Он перекрывает слой походки и персонаж не движется, но рукой машет. Параметр Local Weight даёт возможность указывать, на какие части тела будет действовать анимация. Поэтому для решения поставленной задачи нужно выделить кость правой ноги и изменить значение Local Weight = 0. В результате «абсолютный» слой не будет действовать на всю правую ногу. Точно также поступаем и с другими частями тела, кроме машущей руки. Вот и всё. Персонаж идёт (слой походки) и машет рукой (слой анимации).
И не забудем о цветовом контроле. В результате проведённого опыта только машущая рука поменяет цвет.
После этого теоретического отступления возвращаемся к решению 4-й задачи урока «добавление и редактирование «абсолютного» слоя анимации».
Персонаж по сценарию должен остановиться на углу, посмотреть по сторонам и после этого продолжить движение. Здесь необходимо использовать «абсолютный» слой анимации. Мы создадим позу, в которой персонаж будет находиться, постепенно в неё войдём и выйдем с помощью параметра Global Weight этого слоя.
Когда мы создаём «абсолютный» слой, то персонаж занимает положение, полученное из вышележащих слоёв. Поэтому имеет смысл создавать «абсолютный» слой в определённом кадре.
Выбираем кадр, в котором персонаж имеет позу, в которой может остановиться.
Например, 170-й.
Выбираем свободный слой.
И создаём «абсолютный» слой
В результате добавился слой зелёного цвета
И если выбрана кнопка с цветами слоёв (на рис.), то персонаж окрашивается в зелёный цвет, т.к. глобальный вес нового слоя равен 100%.
Попробуйте менять вес и увидите как меняется цвет. Это помогает визуально контролировать не только глобальный вес слоя, но и локальный вес частей тела.
Поставим следующие ключи для глобального веса
160 кадр – 0%
170 кадр – 100%
Для этого нажимаем кнопку
И переходим к стандартной процедуре добавления и редактирования ключей.
В результате глобальный вес зелёного «абсолютного» слоя анимации будет меняться с 160 по 170 кадры. И в 170 кадре персонаж замрёт, т.к. этот слой не имеет ключей анимации.
Ещё раз обратите внимание, как меняется цвет персонажа.
Он постоит 50 кадров.
И снова поставим ключи для глобального веса слоя.
220 кадр – 100%
230 кадр – 0%
Но… мы забыли, что персонаж привязан к объекту Point.
И когда «абсолютный» слой начинает «уменьшаться в весе» – персонаж начинает скользить, чтобы догнать объект Point. Решение напрашивается само собой – с 170 по 220 кадры остановить Point. Ставим ключи. Не забудьте последний ключ в 500 кадре тоже сдвинуть на 50 кадров для того, чтобы скорость движения после остановки не изменилась.
В результате персонаж останавливается на 50 кадров, а затем продолжает движение. Что и требовалось.
Теперь наш персонаж должен положить руку на неподвижный предмет и оглядеться.
И снова небольшое отступление для тех, кто слабо знаком с терминами и методами анимации персонажей.
Кости скелета можно представить себе как объекты, прилинкованные друг к другу. В результате, если вы двигаете объект, то все прилинкованные к нему дочерние объекты наследуют это движение. Если я поворачиваю кость плеча, то ладонь тоже поворачивается. Это называется «прямая» кинематика (FK).
Но если персонаж берется ладонью за неподвижный объект, а торс движется из стороны в сторону – то выполнить анимацию плеча и предплечья так, чтобы ладонь не двигалась, очень сложно. Поэтому в таком случае необходимо пользоваться возможностями «инверсной» кинематики (IK). В этом случае уже «дочерний» объект управляет «родительскими» объектами. Если потянуть персонаж за ладонь, то плечо и предплечье сами примут нужное положение.
Вид кинематики нужно менять в зависимости от поставленной задачи. В CAT для этого есть все необходимые возможности.
До сих пор на ладони действовала «прямая» кинематика FK, но когда персонаж возьмётся за неподвижный предмет, нужно будет перейти к «инверсной» кинематике IK. Для того, чтобы движения торса не сказывались на положении ладони.
Для анимации ладони будем использовать новый «абсолютный» слой. Я думаю, что вы понимаете, почему «абсолютный». Но возникает вопрос, а почему бы не воспользоваться тем слоем, который уже есть – зелёным?
В принципе можно. Но тут возникает сразу несколько проблем. Во-первых, вы рискуете случайно что-то изменить в этом слое, во-вторых, возможно время входа и выхода анимации ладони не будет совпадать со временем входа и выхода в анимацию остановки персонажа, в-третьих, удобнее редактировать впоследствии, в четвёртых, вы сможете визуально (по цвету) контролировать действие слоя на ладонь. По-моему, достаточно причин.
Поэтому создаём внизу стека новый (красный) «абсолютный» слой анимации
Назовём его LadonIK.
Он имеет Global Weight = 100% и полностью перекрывает все вышестоящие слои. А ведь нужно, чтобы он действовал только на правую руку. И тут приходит на помощь Local Weight (локальный вес). Выделяем любую кость правой ноги и устанавливает для неё Local Local Weight = 0%. И нога снова стала зелёной, потому что на неё новый слой уже не действует. Повторяем эту операцию со всеми частями тела, кроме правой руки.
Выделяем правую ладонь.
А вот и параметр, отвечающий за переход от FK к IK и обратно. Сейчас он настроен на FK.
Устанавливаем IK.
В режиме IK для того, чтобы управлять рукой, необходимо иметь IK-цель (IK Target).
Это объект, за которым будет следовать ладонь. Для его создания нажимаем кнопку:
«Create IK Target»
Нажимаем кнопку для выбора созданной IK-цели: «Select IK Target»
Цель выбрана.
Нажимает кнопку: «Move IK Target to Palm»
для перемещения созданной цели к ладони.
Попробуйте перемещать цель – рука движется за ней насколько это возможно (если включён режим IK)
Помещаем цель в нужное положение. Как будто персонаж положил руку на какой-то предмет. Теперь нужно поставить ключи для глобального веса красного слоя. Когда вес возрастёт, рука потянется к своей цели, а когда персонаж продолжит движение, нужно убавлять вес и управлять рукой снова будет слой походки.
Я поставил такие значения для глобального веса красного слоя.
163 кадр = 0%
170 кадр = 100%
220 кадр = 100%
225 кадр = 0%
В данном варианте ещё не очень заметно, как действует «инверсная» кинематика, потому что торс совершенно неподвижен. Нужно придать ему некоторое движение.
Переходим на зелёный слой. Пусть он занимается анимацией персонажа во время остановки. Ставим ключи для перемещения и вращения таза. Пусть персонаж обопрётся на правую руку.
И нужно ещё опустить левую руку. Она ведь замерла в неестественном положении.
И самая заметная деталь – нужно посмотреть по сторонам. Сделаем это так: создаём Dummy, анимируем её направо-налево. Голове персонажа присваиваем контроллер LookAt (смотреть на). Указываем ему на Dummy. И настраиваем.
И готово (не забудьте все это делать, находясь на зелёном слое анимации).
На этом решение 4-й задачи урока «добавление и редактирование «абсолютного» слоя анимации» закончено.
Переходим к решению 5-й задачи урока «добавление и редактирование «локального» слоя анимации»;
Я уже писал, что «локальный» слой предназначен для изменения готовой анимации. В нашем сценарии предусмотрено для этого место. Персонаж по пути следования должен уклониться от препятствия. Т.е. он должен продолжать свою обычную ходьбу, но немного изменить её.
Давайте сделаем препятствие.
Заставим персонаж уклониться от выступа, который мешает пройти.
Некоторые изменения в анимации нужно сделать в слое походки. Персонаж должен левой ногой наступить чуть левее. Для этого выбираем нужный след, который находится напротив выступа и передвигаем его левее. Не забудьте сначала перейти на слой походки.
Можно чуть-чуть подвинуть и два ближайших правых следа для мягкого перехода.
А вот теперь настало время использовать «локальный» слой анимации. С помощью него мы подвинем таз персонажа левее. И немного поправим положение рук. Давайте по-порядку.
Создаём внизу стека «локальный» слой анимации.
Здесь мы используем другую тактику применения слоя. Не будем анимировать вес слоя!
Ведь это – «локальный» слой. Он не «затирает» предыдущую анимацию, а только исправляет её. Поэтому, если ключи анимации в нём стоят «на нуле» - никаких изменений нет! Сделаем так:
переходим в кадр, в котором нужно начать изменение. Выделяем нужную кость. Ничего не меняем и ставим ключи перемещения и поворота.
Переходим в кадр где необходимо максимальное изменение. Вносим эти изменения и ставим ключи.
Переходим в кадр, где изменения должны закончится и копируем сюда первые «нулевые» ключи.
После них «локальный» слой не будет вносить свои изменения, хотя и имеет вес 100%.
Сейчас мы сделаем именно так. А какой способ вы выберите в своей работе зависит от вас.
Итак, я поставил 3 ключа для таза: 81, 101, 120 кадры. Два крайних ключа, как я и говорил, «нулевые». Т.е. они не вносят изменений. В результате таз в момент уклонения от преграды сместился к левой ноге и чуть повернулся.
Я поставил 3 ключа для левого плеча. 81, 101, 120 кадры. Я прижал руку ближе к торсу для того, чтобы персонаж не падал налево.
Я поставил 3 ключа для правого плеча: 101, 113, 123 кадры. Я передвинул его, чтобы рука цеплялась за препятствие.
Попробуйте сделать сами и посмотрите, что получилось у меня.
На этом решение 5-й задачи урока «добавление и редактирование «локального» слоя анимации» закончено, но к решению следующей задачи пока не будем приступать.
Потому что я понимаю, что мой персонаж во время ходьбы слишком сильно поворачивает голову в правую сторону. Ведь там стена. Он не должен этого делать. Мы не могли этого знать на стадии создания походки. Ничего страшного! Ведь слой походки остался параметрическим, как и был! Выбираем слой ходьбы. И редактируем параметр Twist (см. первый урок). Редактируем точки кривой таким образом, чтобы при повороте направо персонаж смотрел прямо перед собой.
Получилось вот так.
А вот теперь приступим к решению последней задачи урока: «переход от одной походки к другой».
Судя по сценарию, наш персонаж огляделся, понял, что никого нет и пора «делать ноги». Ясно, что придётся заставить его перейти на бег. Для этого нам не придётся создавать новый слой походки, как могло бы показаться. Дело в том, что в самом слое походки есть возможность смешивать несколько разных походок. Для анимации бега возьмём готовый пресет из тех, что прилагается к CAT.
Переходим к слою походки. Открываем окно редактирования походки.
Сейчас в правой части только один слой «Shek_Wall02»
Давайте добавим новый из папки «2legs»
Загрузите GameCharRun. На этот раз в новый слой.
Теперь у нас 2 слоя походки.
И точно также, как и с обычными слоями - нижний слой перекрывает всю анимацию походки, т.к. имеет Weight = 100.
Осталось сделать анимацию этого параметра в нужном месте.
Для редактирования кривой веса нажмите кнопку в правом нижнем углу. Попадаем в редактор кривых.
Сделаем переход от одного слоя походки к другому (бег).
Для этого ставим ключи для веса слоя бега.
270 кадр – 0%
320 кадр – 100%
За 50 кадров происходит переход.
И тут возникает такая проблема – скорость передвижения персонажа осталась та же. А ведь он теперь бежит. Значит нужно увеличить скорость движения Point. В 270 кадре для Point.Percent ставим ключ, а последний сдвигаем влево (на 354 кадр) Естественно, следы раздвигаются, т.к. теперь персонажу приходится двигаться быстрее
Вот так.
Если хотите, можете поправить некоторые следы вручную.
На этом решение последней поставленной в этом уроке задачи завершено. В результате получена искомая анимация. Конечно, она далека от идеала. В уроке и не ставилась такая задача. Как я и говорил, урок посвящён изучению системы анимации CAT.
Я использую для 3d только MAX. CAT сделан компанией SoftImage. Их программный пакет XSI не пробовал, но если он сделан на таком же высоком уровне, что и CAT, то я завидую их пользователям. Параметрический способ управления и в тоже время лёгкость ручной анимации, использование в работе стандартных средств редактирования кривых делают этот инструмент очень эффективным в работе. Надеюсь, что этот урок уже убедил вас в этом.
Конечно, это далеко не все возможности CAT. Для этого мало и двух уроков, но, думаю, вы получили достаточно большую порцию полезной информации.