Введение в ригг

Опубликовано by AJIEHA . Размещено в Maya, Анимация и VFX, Уроки

Jahirul Amin, CG-дженералист, лектор в NCCA, расскажет об основах ригга в Maya Maya rigging Introduction to rigging_01 Перед тем как, начать вставлять кости направо и налево, вернемся немного назад и рассмотрим основные инструменты и приемы, использующиеся для создания ригга. Maya rigging Introduction to rigging_02 В этой серии уроков мы достаточно глубоко погрузимся в ригг, использующийся в компьютерной графике. Этот урок – вводный, мы будем рассматривать, какие инструменты используются в Maya для создания ригга, однако, сам принцип работает и в любых других пакетах. Мы создадим ригг для модели мужчины, который позволит аниматору легко с ним работать. Перед тем, как начать работать над риггом, давайте определим роль риггера, и познакомимся с основными инструментами для создания ригга, которыми пользуются риггеры, и потренируемся в создании хороших риггов, которые сведут аниматора с ума.

Меш, над риггом которого мы будем работать

Так что же такое ригг?

CG-персонажи могут двигаться только благодаря риггу. Ригг – это процесс создания цифрового скелета внутри статичной геометрии, персонажа, настройка связей между геометрией и скелетом (так называемый skinning, enveloping или binding), а также добавление контроллеров, за которые аниматор будет дергать персонажа, действую при этом как кукловод. Можно сказать, что риггер – это современный Джепетто. Поскольку риггер – это связующее звено между моделлером и аниматором, было бы неплохо, если бы он понимал, что получил от моделлера для ригга, и что он должен в результате отдать аниматору. Таким образом, риггеру нужно понимать, хороша ли топология модели и как она будет деформироваться, достаточно ли плотная сетка в местах деформации модели. Риггер должен четко понимать принципы анимации, и какие техники будет использовать аниматор. Кроме всего этого он должен хорошо знать анатомию человека и животных, а также кинезиологию. И это только то, что касается персонажной анимации. Для анимации автомобилей, поездов и пр. используется механический ригг. Все это я рассказываю вам не для того, чтобы вы испугались и решили, что ну его к черту, этот ригг, а, чтобы поняли какую чертовски важную роль играет риггер. Пока риггер не начнет работать над моделью, это всего лишь кусок геометрии, а когда закончит, создав надежный и удобный ригг, и передаст его аниматору, персонаж уже будет танцевать чечетку или заставлять нас рыдать от счастья. Однако перед тем как воссоздать реальность с помощью CG, нужно тщательно изучить, как она выглядит, эта самая реальность. Если, допустим, вы создаете скелет человека, то для начала изучите, как двигается человеческий скелет, играют мышцы и работают суставы. Если же вы работаете над риггом автомобиля, обязательно посмотрите, как ездит машина. В обоих случаях, примеры того, как объекты двигаются, находятся вокруг вас, смотрите на них, а, если это легально, то их и потрогать можно. Основная цель этого урока – рассмотреть основные инструменты, использующиеся для создания ригга в Maya. Мы рассмотрим отношения между родительскими и дочерними объектами, а также констрейны. Мы познакомимся с джоинтами, тем, как их создавать и редактировать. Не оставим без внимания порядок вращения джоинтов и gimbal lock, перед тем, как, наконец, научимся создавать аккуратные ригги, пригодные для анимации.

Родители и дети, иерархии

Когда дело доходит до анимации, очень важно понимать взаимосвязи между объектами. Если вы сломаете ригг, все, с чем вы останетесь, будет несколько взаимосвязей и связей, совсем как в генеалогическом дереве. Главное в генеалогическом дереве – понимать какая атмосфера царит в семье и, что ваш дядя хоть устал, но все еще терпит вашу двоюродную сестру-клептоманку, а ваша мачеха как ни странно дружит с вашим двоюродным братом-наркоманом. Без понимания происходящего, даже если вам и удастся создать неплохой на первый взгляд ригг, он неизбежно «развалиться» позже. Самые основные взаимосвязи между объектами, которые можно создавать в Maya, это родительские и дочерние взаимосвязи. Сейчас поясню что это. Создайте сферу и куб. Сферу назовите “parent”, куб – “child”. Откройте Outliner (Window -> Outliner), чтобы можно было видеть, что происходит в сцене. Теперь отодвиньте куб и сферу подальше друг друга. Припарентим их друг к другу. Для начала выберите child-объект, затем, с Shift’ом, его родителя, потом зайдите в Edit-> Parent или просто нажмите P. В Outliner’е видно, что припаренченный куб теперь находится под своим родителем, сферой. Если вы переместите «родителя» в сцене, его дочерний объект последует за ним. Это касается и скейла, и ротейта. А происходит из-за того, что child-объект привязан к положению parent-объекта в сцене, поскольку теперь он является world’ом для child-объекта. Если вы вернете в ноль значения транслейта для parent-объекта, он вернется в ноль, по отношению к world в Maya, поскольку родитель, в свою очередь, припаренчен к world в Maya. Преимуществом припаренчивания является то, что child-объект сам по себе по-прежнему имеет свободу перемещений, в отличие от Parent Constraint’а, о котором мы еще поговорим. Итак, мы имеем один объект, припаренченный к другому. Создайте еще несколько объектов и припарентите один к другому, так, чтобы получилась небольшая иерархия. Вы заметите, что объект, находящийся в самом верху иерархии, влияет на все остальные объекты, следующий за ним объект на все нижележащие и т. д. Это как если бы ваша прабабушка говорила вашей бабушке что делать, бабушка маме, мама вам и т. д. А потом вы выросли и перестали держаться за мамину руку. Чтобы вытянуть объект из иерархии, нужно его выбрать, перейти в Edit-> Unparent или просто нажать Shift+P.

Maya rigging Introduction to rigging_04

Простая иерархия parent-child

 Констрейны

При паренте мы берем какой-то объект или ноду и помещаем его под другим объектом, устанавливая между ними прямую зависимость. Констрейны позволяют создавать такие же связи, не изменяя при этом иерархическую структуру объектов. Кроме того, припаренчивание в один момент влияет на все информационные каналы объектов, констрейны позволяют создавать более узконаправленные связи между объектами. Например, вы можете сделать один объект зависящим только от перемещений другого, используя Point Constraint. При этом вы не можете как-то влиять на атрибуты, которые «законстрейнены». «Законстрейненный» объект просто вернется обратно к объекту, к которому он привязан. Но выход из этого есть. Можно поставить ключики на «законстрейненный» объект, создастся pairBlend-нода, которая позволит выбирать, что должно быть активным, сам констрейн или ключевой кадр. Никогда не был особым фанатом pairBlend-ноды, потому что в конечном итоге она способна свести меня с ума. Если мне нужно, чтобы объект контролировался большим числом исходящих связей, я просто добавляю еще констрейнов, это, на мой взгляд, выгодно отличает констрейны от простого припаренчивания. При использовании констрейнов, вы получаете один объект, зависящий от нескольких, при этом выбрать главный объект можно простым изменением весов влияния констрейнов. Сейчас попробуем это проделать. Создайте новую сцену в Maya с кубиком и сферой, которые переместите подальше друг от друга. Переименуйте сферу в “leader”, а куб в “follower”. При паренте мы выбираем родительский, затем дочерний объект, и выполняем команду. Здесь все наоборот. Сначала выбираем “leader”, потом “follower”, переходим в раздел Анимации и идем в меню Constraint->Point (Options). Проверяем, чтоюы галочка Maintain Offset была отключена, настройки установлены по умолчанию и смело жмем Apply. Ведомый объект займет место ведущего. При этом вы заметите, что атрибуты в Channel Box будут выделены синим. Это означает, что констрейн активен. Загляните в Outliner и убедитесь, что иерархические связи между объектами остались нетронутыми, нода pointConstrain1 находится ниже follower или ведомого объекта. Оставим пока констрейны в покое, поскольку мы будем еще неоднократно к ним возвращаться. С остальными видами констрейнов поэкспериментируйте сами, чтобы иметь представление о том, как они работают.

Maya rigging Introduction to rigging_05

Использование point-констрейна для управления местоположением сферы

Джоинты

А теперь перейдем к основным инструментам создания ригга – джоинтам. Джоинты, как и все другие объекты в Maya, являются всего лишь трансформ нодой: их можно перемещать, вращать и масштабировать. Уникальными их делает ориентация, поскольку только у них она и имеется. Параметр orientJoint позволяет ориентировать джоинты относительно осей. Это можно заметить на примере цепочки джоинтов: каждый родительский джоинт должен быть ориентирован на дочерний. Давайте, протестируем, как это работаем, а заодно рассмотрим алгоритм создания джоинтов.Создайте в Maya новую сцену. Перейдите в Skeleton-> Joint Tool. Выбрав боковую или фронтальную камере, нажмите LMB, чтобы создать несколько джоинтов. После создания цепочки джоинтов нажмите Enter, чтобы выйти из инструмента. Открыв Outliner, вы поймете, что цепочка джоинтов – это иерархия из родительских и дочерних объектов. Если повращать root-джоинт, остальные последуют за ним. Это называется форвардной кинематикой – вращательное движение, которое влияет на всю цепочку, с первого по последний джоинт. Проверьте с помощью инструмента Rotate, чтобы джоинты вращались по Local-осям (Ctrl+Shift+RMB), выберите первый в цепочке джоинт. Вы заметите, что он смотрит в сторону дочернего джоинта, а значения атрибутов вращения нулевые. Перейдите в Attribute Editor и найдите параметр jointOrient под вкладкой Joint. Здесь вы увидите, что джоинт использует ориентацию, вместо обычных атрибутов вращения, чтобы всегда смотреть в сторону дочерних объектов. Выберите инструмент Translate, перейдите в Object, и вы заметите, что родительский джоинт ориентирован в сторону дочернего по оси Х. Это – основная или Aim ось джоинта. Атрибуты перемещения по X также устанавливают длину родительского джоинта, что позволяет добиться в ригге такого эффекта как squash and stretch. Теперь позицинируем джоинты внутри геометрии и настраиваем их ориентацию. В этом вопросе я очень привередлив: потому что самое важное в ригге – правильно и точно позиционировать джоинты. Позиция джоинтов, которые, фактически являются обычными пивотами, скажется на том, как будет двигаться геометрия. Неправильное позиционирование вызовет некорректную деформацию. При создании джоинтов я следую нескольким правилам. Во-первых, только root-джоинт может иметь перемещения по X, Y, Z. Во-вторых, все дочерние джоинты должны перемещаться только по X (создавая длину джоинтов), значения атрибутов вращения должны быть нулевыми. Фактически, при создании ригга, мы пользуемся несколькими дефолтными инструментами Maya и скриптами, если нам нужно создать нечто специфическое или ускорить процесс создания скелета. Особенно нравится набор скриптов Майкла Комета.Maya rigging Introduction to rigging_06

Два основных параметра джоинтов: jointOrient и translate X (длина джоинта)

Порядок вращения и Gimbal Lock

Порядок вращения относится к тем операциям, когда ориентация выбранного объекта будет оценена. Давайте разберем. В новой сцене создайте цепочку из трех джоинтов, которая будет имитировать руку во фронтальной камере. Назовем джоинты, начиная с root-джоинта как “shoulder_jnt”, “arm_jnt”, “wrist_jnt”. Добавим для большего понимания к джоинтам префикс jnt. Выберете shoulder и в Attribite Editor’е вы увидите, что порядок вращения или Rotation Order, который находится под вкладкой Transform Attributes, установлен как XYZ. Это означает что, ось Z будет влиять на X и Y. При этом ось У влияет на ось Х, ось Х же не влияет ни на что. Если читать справа налево, то это не покажется таким уж сумасшедшим. Вращать джоинты нужно в режиме Local, хотя и можно подумать, что это нелогично, повращав shoulder. Сейчас вы сами во всем убедитесь. Обнулите значения атрибутов вращения, а режим вращения смените на Gimbal. Покрутив руку, вы поймете, какую на самом деле роль играют оси вращения. Быстро повернув руку по оси Y на 90 °, вы увидите, как очень быстро и аккуратно одна ось ложится поверх второй, ось X поверх оси Z. Поздравляю, вы познакомились с таким явлением как Gimbal Lock, когда две оси начинают вращаться одинаково. Gimbal Lock – это очень плохо, однако, в некоторых ситуациях избежать его невозможно. И как же это пофиксить, спросите вы? Нужно очень быстро решить, какие оси в текущем риге наиболее важны для нас и изменить для них порядок вращения. Поскольку мы тестируем ригг по мере его создания, и общаемся с аниматором на тему того, как впоследствии будет использоваться ригг, мы можем предугадать, что именно аниматор будет делать с ним и пофиксить возможные баги.

Maya rigging Introduction to rigging_07

Изменение направление оси вращения на Gimbal. Видим, как должны быть позиционированы оси

Анимационные контроллеры

Напоследок рассмотрим анимационные контроллеры. В этом пункте нам придется вспомнить все, что мы уже узнали: парентинг, иерархии, констрейны, аккуратное позиционирование джоинтов и порядок вращения. Вы можете спросить, почему нельзя просто анимировать сами джоинты? Можно, но только для простых риггов. С правильно настроенными анимационными контроллерами можно творить чудеса. Помимо всего прочего, аниматоры просто обожают удалять вещи, которые не должны бы, на восстановление удаленного джоинта уйдет намного больше времени, чем на восстановление удаленного контроллера (в большинстве случаев). Обычно для создания анимационных контроллеров используются кривые. Это может быть специально созданная с помощью инструмента CV-curve кривая или самая обычная окружность NURBS Primitives-> Circle. Кривые не рендерятся, а их форму можно очень быстро отредактировать, перейдя в режим редактирования компонентов. Для каждого ригга я обычно создаю небольшую иерархию, используя группы. Это позволяет располагать контроллеры точно там же, где находится контролируемый ими джоинт. Также это дает аниматору возможность быстро вернуть контроллер на место, просто обнулив его значения вращения и перемещения. Опробуем это на цепочке из трех джоинтов. Создайте, как и в предыдущий раз, цепочку из трех джоинтов, и переименуйте ее, как и прежде. Теперь создадим контроллеры для первых двух джоинтов в цепочке. Создайте окружность Create-> NURBS Primitives-> Circle, сняв перед этим галочку Interactive Creation, чтобы объекты создавались сразу в центре мирового пространства сцены. Переименуйте контроллер в “shoulder_ctrl”. Используем для всех контроллеров префикс “_ctrl”. Выберите контроллер, который все еще находится в центре сцены и мирового пространства, сгруппируйте его дважды Edit-> Group или просто нажав дважды Ctrl+G. Верхнюю группу переименуйте в “shoulder_ctrl_offset”, нижнюю в “shoulder_ctrl_auto”. Нода “offset” будет использоваться для точного позиционирования контроллера, нода “auto” для создания дополнительных эффектов с помощью Driven Key или Expressions. Для позиционирования контроллера я использую два следующих способа. Оба дадут одинаковый результат, поэтому выбирайте тот, который вам больше по душе. Способ №1: выберите ноду “shoulder_ctrl_offset”, с Shift’ом выберите “shoulder_jnt” и нажмите Р. Это припарентит ноду “_offset” к джоинту, которым она будет управлять. Теперь обнулите значения перемещения и вращения для ноды “_offset”, чтобы она заняла то же место, что и джоинт. Теперь просто выберите ноду “shoulder_ctrl_offset” и нажмите Shift+P, чтобы отпарентить ее от джоинта. В результате получим координаты ноды “shoulder_ctrl_offset” относительно мировой системы координат. Выбрав “shoulder_ctrl_auto”, можно заметить, что значения вращения и перемещения обнулены, при этом контроллер ориентирован так же, как и джоинт. Этого мы и добивались. Второй способ опробуем на “elbow_jnt”. Создайте контроллер так же, как мы делали в предыдущий раз, группы для него и переименуйте их в “elbow_ctrl_offset”, “elbow_ctrl_auto” и “elbow_ctrl_jnt”. Выделите “elbow_ctrl_jnt” и с Shift’ом “elbow_ctrl_offset” и создайте для него констрейн Constraints-> Parent (Options). Снимите галочку Maintain Offset и нажмите Apply. Вся иерархия контроллеров займет свое место. Теперь просто удалите ноду parentConstraint, которая находится под в  Outliner под нодой “_offset”. И снова мы имеем контроллеры, которые находятся на нужных нам местах. Позже расскажу вам как написать скрипт, который будет делать это автоматически, поскольку создание и позиционирование контроллеров вручную – довольно трудоемкий процесс. Следующее, что мы сделаем, заставим контроллеры влиять на иерархию джоинтов. Для этого воспользуемся парочкой констрейнов. Выделите “shoulder_ctrl”, с Shift’ом “shoulder_jnt” и назначьте констрейн Constrain-> Orient (Options). Снимите галочку Maintain Offset и нажмите Apply. Проделайте то же самое и для локтя. Покрутив контроллеры, увидите, что они действительно управляют джоинтами, но иногда происходит нечто странное. Это все, потому что цепочка джоинтов работает по принципу форвардной кинематики, а контроллеры нет. Контроллеры никак не влияют и не зависят друг от друга. Пофиксим это, припарентив “elbow_ctrl_offset” к “shoulder_ctrl”. Это создаст форвардную кинематику, похожую на взаимосвязь джоинтов, вуаля, наш ригг готов. В следующий раз создадим ригг спины. Счастливых вам риггов!

Maya rigging Introduction to rigging_09

Использование констрейнов, чтобы заставить контроллеры влиять на джоинты

Журналист: Алена

Вас могут также заинтересовать:

Тэги: , , ,


Присоединяйтесь к нашему сообществу вКонтакте и читайте свежие новости и статьи о мире 3D