Вы находитесь на странице: 1из 50

Профессиональный курс 3D-графики, анимации и VFX Autodesk® Maya®

Практическое занятие №11

RIGGING

Autodesk® Maya® 2014


Rigging AUTODESK® MAYA® 2014

Для начала уточним что такое риг. Риг – это настройка персонажа для
последующей анимации. Настройка включает в себя построение скелета и
создание удобной системы управления этим скелетом. Настройка включает в
себе создание для скелета адекватных контрольных элементов, которые
посредством создания ИК хэндлов, навешивания констрейнов, Driven Key и
экспрешенов управляют скелетом. Сюда же относится привязка к скелету
(скиннинг), а также редактирование скиннинга, создание мышц и прочих
деформирующих элементов. Если есть необходимость – создание UI
(пользовательского интерфейса или просто селектора).
Теперь уточним, что такое персонаж. Персонаж – это группа объектов, которая в
итоге должна убедительно прикидываться живым, еле живым или неживым
объектом. Персонажем может быть, естественно, человек, кошка, собака,
любимый плюшевый мишка, машина, фонарь и вообще что угодно. Даже кубик.
Если это все-таки biped , двуногое, соответственно, quadraped – четырехногое,
он должен стоять в Т-позе (ноги чуть расставлены, руки параллельно полу) – так
удобнее делать риг.
Открываем сцену malcolm_for_rig .ma. В ней мы должны обнаружить
следующего персонажа:

Его зовут Малкольм и мы построим для него риг.


Начнем со скелета. Скелет строится с помощью Skeleton>Joint Tool. Поскольку
это инструмент, при его выборе курсор сменит иконку на крестик. Идем в
ортогональную камеру и клацаем левой кнопкой в окне – появится первый
джоинт, клацаем еще – к нему присоединится еще один. По умолчанию Joint
Rigging AUTODESK® MAYA® 2014

Tool рисует кости на сетке. Однако есть весьма удобная привязка к центру
геометрии, которая помогает рисовать скелет прямо в окне перспективы:

В скелете есть два основных элемента: это сустав (joint – пивот вращения кости)
и сама кость (bone, указывает на направление иерархии):

В процессе построения скелета можно двигать средней кнопкой мыши


последний созданный джоинт (или зажать Insert). Клавишами «вверх» - «вниз»
на клавиатуре можно перемещаться по иерархии вверх-вниз. Для завершения
построения нажимаем Enter.
Rigging AUTODESK® MAYA® 2014

Скелет – это иерархия. Как и в любой иерархии есть родительский объект,


родительскую кость называют Root Joint, в одном скелете может быть только
один рут. После построения скелета любую из костей можно сделать рутом
(выбрать кость и выполнить команду Skeleton>Reroot Skeleton). Соединяется и
разъединяется скелет командами Parent и Unparent (p и Shifh+p). Также можно
использовать команды Connect и Disconnect Joint из меню Skeleton. Connect
Joint может работать в двух режимах: Connect Joint дублирует джоинт, к
которому мы пытаемся приконнектить другой джоинт:

Parent Joint работает как обычный парент. Disconnect joint также не просто рвет
связь, а дублирует джоинт, помещая его в то же место. Удалить джоинт, не
удаляя ниже лежащей цепочки можно командой Skeleton>Remove Joint.
Строить скелет начинаем с таза (как правило, но можно хоть с мизинца), и
поднимаемся вверх по спине (не стоит делать столько же джоинтов, сколько
позвонков в позвоночнике человека – управление такой спиной сложнее
настроить, да и необходимости нет, для мультяшного персонажа – 4-6
джоинтов):
Rigging AUTODESK® MAYA® 2014

Затем нога (пока только одна):


Rigging AUTODESK® MAYA® 2014

Для того, чтобы продолжить построение цепочки джоинтов, берем Joint Tool,
клацаем в последний джоинт и продолжаем построение шеи с головой:

Теперь рука:

Кисть. На пальца ставим первый и последний джоинт, и затем Insert Joint tool
добавляем костяшки (старайтесь, чтобы джоинты ног, рук и пальцев лежали на
прямой, это поможет в последствии избежать некоторых проблем). Вставляем
по дополнительному джоинту в пястные кости:
Rigging AUTODESK® MAYA® 2014

Теперь самое время позаботится об ориентации джоинтов. Joint Tool направляет


кость осью х в следующий джоинт:

При изменении положения джоинта направление осей не меняется, и вращение


вокруг кости становится невозможным:
Rigging AUTODESK® MAYA® 2014

Поэтому после создания половины скелета нужно ориентировать оси


правильно. Оси джоинтов одной ветки (например, спины и шеи, руки, ноги)
должны смотреть в одну сторону. В местах, где из джоинта выходит больше
одной кости (например, плечи или таз) Майка может призадуматься в какой
именно джоинт направить ось х, поэтому нужно отпарентить кости, в которые
смотреть не нужно и выполнить команду Orient Joint. Настройки:

Primary Axis – какой осью джоинт будет смотреть в следующий джоинт,


Secondary Axis – какая ось будет второй, Secondary Axis World Orientation – куда
будет смотреть вторая ось. Осью у направить вверх мы не можем, потому что все
оси х и так будут смотреть вверх, подойдет вторая ось x или z и направить ее в
Rigging AUTODESK® MAYA® 2014

мировые х или z (я выбрала осью z смотреть в минус z, чтобы при сгибании


спины атрибуты rotate изменялись не в отрицательном направлении). Что будет,
если оси не будут правильно ориентированы? Например, если мы согнем спину
сразу за все джоинты, будет так:
Rigging AUTODESK® MAYA® 2014

На кисти, если джоинт запястья не сгибает руку, можно отфризить его вместе с
ориентацией:

Затем правим ориентацию джоинтов ноги и руки, парентим плечо и ногу


обратно:
Rigging AUTODESK® MAYA® 2014

Теперь называем джоинты. Референс можно посмотреть в Maya Help в разделе


Joint Labeling:

Можно переназвать джоинты ручками, а можно воспользоваться меню Joint


Labelling:

Не забывайте добавлять уточнение «левый» или «правый»:


Rigging AUTODESK® MAYA® 2014

Миррорим скелет на правую сторону командой Skeleton>Mirror Joint:

Mirror across – относительно какой плоскости будем миррорить.


Mirror function – направление осей:
 Behavior – в противоположную сторону
 Orientation – в ту же сторону.
Replacement names – к правым джоинтам вместо уточнение «левый» добавлять
«правый» (Search for/Replace with).
Rigging AUTODESK® MAYA® 2014

Скелет готов. Теперь переходим к созданию управляющих элементов.

В управлении скелетом есть два вида кинематики: форвардная и инверсная.


Форвардная кинематика – это управление вращением осей с помощью
последовательного ВРАЩЕНИЯ контрольных элементов:

Инверсная кинематика – это управление вращениями костей с помощью


перемещения ИК хэндла. Алгоритм ИК вычисляет все необходимые вращения
джоинтов в цепочке исходя из положения эффектора, чтобы вся конструкция
заняла нужное положение:
Rigging AUTODESK® MAYA® 2014

Сделаем прокси. Предусмотрительно сдублируем геометрию, сгруппируем, а


группу спрячем. Режем геометрию Cut Faces Tool по джоинтам, экстрактим и
парентим к соответствующим джоинтам:
Rigging AUTODESK® MAYA® 2014

Приступим. Начинаем с левой ноги. Будем использоать систему Reverse Lock или
Reverse foot, в разных источниках она называется по-разному, но суть
одинакова: заставить вращаться джоинты стопы в обратном порядке. Создаем
три ИК хэндла SC-Solver:

Сразу называем ИК хэндлы своими именами. Теперь настроим систему


управления стопой. Идем в верхнюю камеру и рисуем контроллер стопы,
называем Left_foot_CTRL, пивот отправляем в foot Joint:

Парентим к нему все ИК хэндлы:


Rigging AUTODESK® MAYA® 2014

Заставим стопу поднимать пятку. Создаем контроллер Left_ball_CTRL, помещаем


его в ball joint, парентим к Left_foot_CTRL, фризим!!! и парентим к нему
left_foot_ik:

Теперь заставим стопу подниматься на носочек. Создаем контроллер и


помещаем его в toe joint, называем Left_toe_CTRL, парентим его к
Left_foot_CTRL, а Left_ball_CTRL и оставшиеся ИК хэндлы парентим к
Left_toe_CTRL:
Rigging AUTODESK® MAYA® 2014

Теперь добавим пивот вращения для пятки. Создаем контроллер возле пятки,
называем его Left_heel_CTRL, пивот отправляем в крайний задний вертекс
стопы, парентим к нему Left_toe_CTRL, а сам контроллер парентим к
Left_foot_CTRL:
Rigging AUTODESK® MAYA® 2014

Добавим возможность становиться на внутренний и внешний край стопы.


Создаем контроллер и помещаем его в крайний вертекс на внутренней части
стопы:

Дублируем контроллер, скейлим по х в -1, помещаем в крайний внешний


вертекс. Внутренний называем Left_inside_CTRL, внешний – Left_outside_CTRL,
парентим Left_inside_CTRL к Left_outside_CTRL. Затем парентим Left_toe_CTRL к
Left_inside_CTRL, а Left_outside_CTRL к Left_heel_CTRL:

Работать должно следующим образом:


Rigging AUTODESK® MAYA® 2014

Приводим контроллеры в порядок: для всех контроллеров, кроме Left_foot_CTRL


лочим и хайдим транслейты и скейлы:

С Left_foot_CTRL убираем только скейлы – за этот контроллер скейлить нельзя:


Rigging AUTODESK® MAYA® 2014

Затем ставим лимиты, чтобы контроллеры вращались только в положенные им


стороны:
Rigging AUTODESK® MAYA® 2014

Также прячем ротейты тех осей, за которые вращать не нужно:

Добавим независимое вращение носка. Создаем локатор, помещаем его в ball


joint, называем как-нибудь типа «left_toe_wiggle_loc», парентим его к
Left_toe_CTRL, а к нему парентим left_toe_ik:
Rigging AUTODESK® MAYA® 2014

Добавим атрибут toe_wiggle на Left_ball_CTRL и напрямую свяжем вращения


локатора с атрибутом:

Локатор скрываем. Идем в шейп ноды контроллеров и подцвечиваем их


синеньким цветом (традиционно синим, можно любым, это отделит
контроллеры левой стопы от остальных контроллеров):
Rigging AUTODESK® MAYA® 2014

Осталось добавить Pole Vector контроллер к left_foot_ik, чтобы контролировать в


какую сторону будет сгибаться колено. Идем в ноду хэндла и меняем тип
солвера на Rotate-Plane Solver:

Создаем контроллер и располагаем его строго напротив колена, называем


Left_knee_CTRL, фризим:
Rigging AUTODESK® MAYA® 2014

Вешаем на left_foot_ik Pole Vector констрейн. Выбираем контроллер, затем ИК


хэндл и идем в Constrains>Pole Vector:

Если контроллер был в плоскости сгиба ноги – ничего не флипнет, если нога
чуть-чуть повернулась – проверяем, на одной ли прямой находятся джоинты.
Если нет - исправляем положение джоинтов, при переключении ИК-ФК в Т-позе
никаких подвижек быть не должно. Риг ноги закончен.
Некоторые аниматоры предпочитают несколько контроллеров вокруг стопы, а
некоторые – один контроллер с вынесенными атрибутами. Можно вместо
Rigging AUTODESK® MAYA® 2014

котроллеров (кроме основного фут контроллера) использовать локаторы,


вращения которых связать с добавленными на фут контроллер
пользовательскими атрибутами:

Тоже самое касается и пол вектор контроллера. Авто пол-вектор: снапим


контроллер в foot joint и отводим его немного в сторону:
Rigging AUTODESK® MAYA® 2014

Группируем с самим собой, пивот группы отправляем в foot joint, саму группу
парентим к Left_ball_CTRL. Колено повернется в сторону. Находим ИК хэндл и
меняем Twist на 90 (на правой ноге будет -90 или наоборот):

На Left_foot-CTRL добавляем атрибут twist и связываем его напрямую с rotate y


группы контроллера пол вектора. Сам контроллер спрятать:

Повторение – мать контроллеров правой ноги 


Добавим растягивающиеся ноги – stretchy IK. Для этого нам понадобится
линейка (Create>Measure Tools>Distance Tool), локаторы снапим к джоинтам:
Rigging AUTODESK® MAYA® 2014

Парентим нижний локатор к Left_foot_CTRL. При поднимании и опускании ноги


расстояние, которое меряет Distance Tool, будет меняться. Открываем Node
Editor, средней кнопкой перетаскиваем туда из Outliner ноду Distance, джоинты
thigh и shin:
Rigging AUTODESK® MAYA® 2014

Нам понадобится пара нод MultiplyDivide, нода Condition. Будем делить


реальную длину на начальную длину и передавать результат на scale x
джоинтов:

Работать должно так:


Rigging AUTODESK® MAYA® 2014

Но тогда колено не согнуть. Для того, чтобы задать условие «растягивать ногу
только тогда, когда расстояние больше начального, а когда меньше - не делать
ничего», нам нужна нода Condition. На First Term подключаем Distance, в поле
Second Term копируем значение расстояния. В Operation выбираем Greater Than
(больше чем). В Color if trueR подключаем значение скейла из ноды
MultiplyDivide, в Color if false оставляем единицу. Out Color R из ноды Condition
подключаем на scale x джоинтов:

Работать должно так:


Rigging AUTODESK® MAYA® 2014

Аналогично подключаем инвертированный скейл на джоинты, чтобы ноги при


растяжении сужалась (сохраняла объем). Можно использовать ту же ноду
MultiplyDivide, на Input2Y подключаем Distance из линейки и отправляем OutputY
на Color if true G. Output G из ноды Condition подключаем на scale Y и scale Z
джоинтов:

Делаем тоже самое для правой ноги. Линейки и локаторы прячем. Небольшой
Tip: чтобы иметь возможность вернуться к созданной конструкции, не
разыскивая ноды, можно создать закладку и потом возвращаться к ней:
Rigging AUTODESK® MAYA® 2014

Чтобы в будущем не столкнуться с Gimbal Lock, меняем порядок вращения осей


для контроллера стопы:

Теперь спина. Сделаем ФК управление спиной. Будем использовать Orient


Constraint. Создаем контроллеры для каждого джоинта спины, пивоты
контроллеров должны быть в джоинтах, сами контроллеры фризим:
Rigging AUTODESK® MAYA® 2014

Сейчас локальные оси контроллеров и джоинтов не совпадают и при


назначении Orient Constrain без оффсета джоинты повернет в разные стороны.
Используем проверенный способ. Снимаем выделение со всего (просто ничего
не выделяем) и нажимаем Ctrl+g – создаем пустую группу null. Парент
констрейним ее БЕЗ оффсета к джоинту. Теперь локальные оси пустой группы и
джоинта совпадают:

Парент констрейн удаляем. Контроллер для этого джоинта парентим к пустой


группе и фризим – теперь его локальные оси будут совпадать с родительскими, а
значит, и с осями джоинта. Группу переназываем:
Rigging AUTODESK® MAYA® 2014

Теперь можем спокойно назначить Orient Constrain без оффсета и ничего никуда
не дернется. Делаем тоже самое для оставшихся джоинтов, долно быть 5 групп с
контроллерами внутри 

Если сейчас согнуть спину за все контроллеры – она согнется не правильно:


Rigging AUTODESK® MAYA® 2014

Это происходит потому, что контроллеры не сложены в иерархию. Парентим


группу контроллера к нижнему контроллеру (иерархия «контроллер-группа-
контроллер-группа и т.д.»):

Если сейчас покрутить за нижний контроллер, Малкольм весь нагнется:

А хотелось бы иметь возможность вращать таз отдельно. Можно разорвать


иерархию – отпарентить группу второго снизу контроллера:
Rigging AUTODESK® MAYA® 2014

Но теперь заметны сразу две проблемы:


1) Контроллеры не следуют за джоинтами;
2) Плечи смещаются.
Поинт констрейним контроллеры к джоинтам:

Вставим над hips джоинтом еще один:


Rigging AUTODESK® MAYA® 2014

Ориентриуем:

И припарентим к нему джоинт hips и spine_1 (таким образом он станет рутом):


Rigging AUTODESK® MAYA® 2014

Теперь таз может вращаться отдельно и плечи стоят на месте:

Mission Complete! Осталось сделать контроллер для root joint, придумываем


что-то сложнее кружочка:

И назначаем Point и Orient Constrain на рут джоинт, парентим группы


контроллеров спины:
Rigging AUTODESK® MAYA® 2014

Чтобы таз можно было немного сдвинуть – снимаем с контроллера spine_1_CTRL


поинт констрейн и назначаем его наоборот – от контроллера к джоинту:

Парентим left/right_start_loc к spine_1_CTRL, чтобы Distance tool правильно


мерял длину ног:
Rigging AUTODESK® MAYA® 2014

Подкрасим контроллеры любимым цветом:

Забыли про шею и голову!


Аналогичным образом делаем ФК контроллеры для шеи, парентим к
контроллерам спины:
Rigging AUTODESK® MAYA® 2014

Риг спины готов.


Теперь руки – для них настроим два вида кинематики – и форвардную, и
инверсную. Для начала разорвем иерархию на плече:

И теперь приконстрейним Point Constrain джоинт плеча к концу ключицы


(назовем получившися джоинт clavicle_end_jnt), это позволит нам поднимать
плечо:
Rigging AUTODESK® MAYA® 2014

Затем вешаем ИК хэндл на руку:

Делаем контроллер (можно сдублировать с колена) за локтем и назначаем Pole


Vector Constrain:
Rigging AUTODESK® MAYA® 2014

Удаляем ИК хэндл.
Если джоинты создавались на прямой - строгой прямой – то Майка не знает в
какую сторону сгибать цепь (поэтому джоинты для ног, например, создаем
немного согнутыми вперед). У джоинта есть такой атрибут – Preffered Angle –
угол, который джоинт будет стремиться сохранить при работе ИК, у созданного
джоинта – в сторону сгиба. Зададим Preffered Angle для локтя. Немного согнем
локоть вперед и выполним команду Set Preffered Angle:

Затем вернем руку в начальное состояние. Теперь командой Assume Preferred


Angle руку всегда можно вернуть в ее предпочтительное положение. Снова
вешаем ИК хэндл и назначаем Pole Vector Constrain:
Rigging AUTODESK® MAYA® 2014

Создаем ИК контроллер и помещаем его на запястье. Создаем пустую группу,


парент констрейним ее без оффсета к запястью, снимаем констрейн, парентим к
ней контроллер и фризим. Поинт констрейним ИК хэндл к контроллеру. Ориент
констрейним без оффсета джоинт запястья к контроллеру (для этого и группа):

Аналогично ногам создаем stretchy ik:

Создаем контроллер над плечом для Orient Constrain и ориент констрейним к


нему джоинт clavicle:
Rigging AUTODESK® MAYA® 2014

Создадим ФК контроллеры для руки. Есть еще один подход к ФК ригу. Вместо
использования контроллеров и множества констрейнов (которые тормозят
сцену) просто парентить шейп ноду кривой к джоинту и вращать за сам джоинт.
Реализуем это. Создаем ФК контроллера и размещаем их по местам, фризим:

Отображаем шейп ноды в Outliner и парентим шейп ноды кривых к джоинтам


командой parent –add –s (выбираем шейп ноду, затем джоинт и выполняем
команду):
Rigging AUTODESK® MAYA® 2014

Дело осталось за малым – настроить переключение. Повесим маленький


контроллер переключалку на запястье, поинт констрейним его к джоинту
запястья:

Лочим и хайдим все атрибуты, создаем свой атрибут FK_IK с минимум-максимум


0-1, где FK =0, IK = 1. Им будем пользоваться для переключения кинематики.
Через Connection Editor подключаем FK_IK атрибут на ikBlend left_hand_ik:
Rigging AUTODESK® MAYA® 2014

Соответственно, когда атрибут FK_IK = 0, ИК хэндл не работает и включается


форвардная кинематика. Чтобы не путаться в контроллерах, настроим
выключение контроллеров ФК когда работает ИК, и наоборот. Для включения ИК
контроллера используем прямую связь атрибута FK_IK и Visibility контроллеров:

А вот для ФК используем Driven Key. Драйвером будет тот же атрибут, а в дривен
нужно подключить шейп ноду (кривые контроллеров) джоинта и ставить ключи
на Visibility. Иначе джоинты кисти, находящиеся ниже по иерархии тоже
скроются:
Rigging AUTODESK® MAYA® 2014

С пальцами не будем мудрить – создаем по ФК контроллеру на каждый джоинт


и парентим шейп ноды кривых к джоинтам аналогично руке. Чтобы не чокнуться
при парентах 40 шейп нод на обеих руках к джоинтам, есть волшебный скрипт:

string $objs[0];
$objs = `ls -sl`;
$shape = `listRelatives -f -s $objs[0]`;
select $shape $objs[1];
parent -add -shape;

Правда кривую потом надо ставить на место за сивишки 


Rigging AUTODESK® MAYA® 2014

Самостоятельно повторяем тоже самое для правой руки. МУА-ХА-ХА! 


Заглядываем в Outliner: там скорее всего беспорядок:

Немного приберемся. Группируем все линейки в группу dist_grp. Оставшихся два


ИК хэндла группируем в группу ik_grp. Все джоинты, включая плечи, группируем
в jnt_grp. Для геометрии, которую будем скинить создаем geo_grp. Выделяем в
Outliner все группы контроллеров и группируем их в ctrls_grp.
Не хватает главного контроллера – MAIN контроллера, за который можно будет
таскать персонажа по сцене. Создаем в ориджине контроллер, парентим его к
Rigging AUTODESK® MAYA® 2014

группе ctrls_grp, а все остальные контроллеры парентим к нему. Все группы


группируем вместе в группу character_grp:

Затем убираем с контроллеров атрибуты, за которые дергать не нужно


(например, скейлы), дабы шаловливые ручки аниматора не сломали риг: на ФК
контроллерах убрать translate и scale атрибуты – их нужно только вращать, на
Pole Vector контроллерах оставить только атрибуты translate, их нужно только
двигать и так далее. Теперь позаботимся о предупреждении Gimbal Lock. Руки :
Rigging AUTODESK® MAYA® 2014

Спина-шея-голова (все контроллеры):

Сверить свой риг можно со сценой Malcolm_RIG.ma в архиве с ПЗ 

Оценить