Введення в рігг

772

Jahirul Amin, CG-дженералист, лектор в NCCA, розповість про засади рігга в Maya

Перед тим, як почати вставляти кістки направо і наліво, повернемося трохи назад і розглянемо основні інструменти і прийоми, що використовуються для створення рігга.

Введення в рігг

У цій серії уроків ми досить глибоко поринемо в рігг, що використовується в комп’ютерній графіці. Цей урок вступний, ми будемо розглядати, які інструменти використовуються в Maya для створення рігга, однак, сам принцип працює і в будь-яких інших пакетах. Ми створимо рігг для моделі чоловіка, який дозволить аніматор легко з ним працювати. Перед тим, як почати працювати над риггом, давайте визначимо роль риггера, і познайомимося з основними інструментами для створення рігга, якими користуються риггери, і потренуємося у створенні гарних риггов, які зведуть аніматора з розуму.

httpv://vimeo.com/84495748

Меш, над риггом якого ми будемо працювати

Так що ж таке рігг?

CG-персонажі можуть рухатися тільки завдяки риггу. Рігг – це процес створення цифрового скелета всередині статичною геометрії, персонажа, налагодження зв’язків між геометрією і скелетом (так званий skinning, enveloping або binding), а також додавання контролерів, за які аніматор буде смикати персонажа, дію при цьому як ляльковод. Можна сказати, що ригер – це сучасний Джепетто.

Оскільки ригер – це сполучна ланка між моделлер і аніматором, було б непогано, якби він розумів, що отримав від моделлера для рігга, і що він повинен в результаті віддати аніматор. Таким чином, риггеру потрібно розуміти, хороша топологія моделі і як вона буде деформуватися, достатньо щільна сітка в місцях деформації моделі. Ригер повинен чітко розуміти принципи анімації, і які техніки використовувати аніматор. Крім всього цього він повинен добре знати анатомію людини і тварин, а також кінезіологію. І це тільки те, що стосується персонажному анімації. Для анімації автомобілів, поїздів та ін. використовується механічний рігг. Все це я розповідаю вам не для того, щоб ви злякалися і вирішили, що ну його до біса, цей рігг, а щоб зрозуміли яку біса важливу роль відіграє ригер. Поки ригер не почне працювати над моделлю, це всього лише шматок геометрії, а коли закінчить, створивши надійний і зручний рігг, і передасть його аніматор, персонаж вже буде танцювати чечітку або змушувати нас ридати від щастя.

Однак перед тим як відтворити реальність з допомогою CG, потрібно ретельно вивчити, як вона виглядає, ця сама реальність. Якщо, припустимо, ви створюєте скелет людини, то для початку вивчіть, як рухається людський скелет, грають м’язи і працюють суглоби. Якщо ж ви працюєте над риггом автомобіля, обов’язково подивіться, як їздить машина. В обох випадках, приклади того, як об’єкти рухаються, знаходяться навколо вас, дивіться на них, а, якщо це легально, то їх і помацати можна.

Основна мета цього уроку – розглянути основні інструменти, що використовуються для створення рігга в Maya. Ми розглянемо відносини між батьківськими і дочірніми об’єктами, а також констрейны. Ми познайомимося з джоинтами, тим, як їх створювати і редагувати. Не залишимо без уваги порядок обертання джоинтов і gimbal lock, перед тим, як, нарешті, навчимося створювати акуратні ригги, придатні для анімації.

Батьки і діти, ієрархії

Коли справа доходить до анімації, дуже важливо розуміти взаємозв’язки між об’єктами. Якщо ви зламаєте рігг, все, з чим ви залишитеся, буде кілька взаємозв’язків та зв’язків, зовсім як в генеалогічному дереві. Головне в генеалогічному дереві – розуміти яка атмосфера панує в сім’ї і, що ваш дядько хоч втомився, але все ще терпить вашу двоюрідну сестру-клептоманку, а ваша мачуха як не дивно дружить з вашим двоюрідним братом-наркоманом. Без розуміння того, що відбувається, навіть якщо вам і вдасться створити непоганий на перший погляд рігг, він неминуче «розвалитися» пізніше.

Самі основні взаємозв’язки між об’єктами, які можна створювати в Maya, це батьківські і дочірні взаємозв’язку. Зараз поясню що це. Створіть сферу куб. назвіть Сферу “parent”, куб – “child”. Відкрийте Outliner (Window -> Outliner), щоб можна було бачити, що відбувається на сцені. Тепер відсуньте куб і сферу подалі один одного. Припарентим їх один до одного. Для початку виберіть child-об’єкт, потім, з shift’ом, його батька, потім зайдіть в Edit-> Parent або просто натисніть P. В Outliner’е видно, що припаренченный куб тепер знаходиться під своїм батьком, сферою. Якщо ви перемістіть «батька» у сцені, його дочірній об’єкт піде за ним. Це стосується і скейла, і ротейта. А відбувається з-за того, що child-об’єкт прив’язаний до положення parent-об’єкта у сцені, оскільки тепер він є світ ом для child-об’єкта. Якщо ви повернете в нуль значення транслейта для parent-об’єкта, він повернеться в нуль, по відношенню до world в Maya, оскільки батько, в свою чергу, припаренчен до world в Maya. Перевагою припаренчивания є те, що child-об’єкт сам по собі, як і раніше має свободу переміщень, на відміну від Parent Constraint’а, про який ми ще поговоримо.

Отже, ми маємо один об’єкт, припаренченный до іншого. Створіть ще кілька об’єктів і припарентите один до іншого, так, щоб вийшла невелика ієрархія. Ви помітите, що об’єкт, який знаходиться в самому верху ієрархії, впливає на всі інші об’єкти, наступний за ним об’єкт на всі нижні і т. д. Це як якщо б ваша прабабуся говорила вашої бабусі що робити, бабуся мамі, мама вам і т. д. А потім ви виросли і перестали триматися за мамину руку. Щоб витягнути об’єкт з ієрархії, потрібно його вибрати, перейти в Edit-> Unparent або просто натиснути Shift+P.

Введення в рігг

Проста ієрархія parent-child

Констрейны

При паренте ми беремо якийсь об’єкт або ноду і поміщаємо його під іншим об’єктом, встановлюючи між ними пряму залежність. Констрейны дозволяють створювати такі ж зв’язку, не змінюючи при цьому ієрархічну структуру об’єктів. Крім того, припаренчивание в один момент впливає на всі інформаційні канали об’єктів, констрейны дозволяють створювати більш вузькоспрямовані зв’язку між об’єктами. Наприклад, ви можете зробити один об’єкт залежних тільки від переміщень іншого, використовуючи Point Constraint. При цьому ви не можете якось впливати на атрибути, які «законстрейнены». «Законстрейненный» об’єкт просто повернеться назад до об’єкта, до якого він прив’язаний. Але вихід з цього є. Можна поставити ключики на «законстрейненный» об’єкт, створиться pairBlend-нода, яка дозволить вибирати, що повинно бути активним, сам констрейн або ключовий кадр. Ніколи не була особливим фанатом pairBlend-ноди, тому що в кінцевому підсумку вона здатна звести мене з розуму. Якщо мені потрібно, щоб об’єкт контролювався великим числом вихідних зв’язків, я просто додаю ще констрейнов, це, на мій погляд, вигідно відрізняє констрейны від простого припаренчивания. При використанні констрейнов, ви отримуєте один об’єкт, що залежить від декількох, при цьому вибрати головний об’єкт можна простим зміною ваг впливу констрейнов. Зараз спробуємо це зробити.

Створіть нову сцену в Maya з кубиком і сферою, які перемістіть подалі один від одного. Перейменуйте сферу в “leader”, а куб “follower”. При паренте ми вибираємо батьківський, потім дочірній об’єкт, і виконуємо команду. Тут все навпаки. Спочатку вибираємо “leader”, потім “follower”, переходимо в розділ Анімації і йдемо в меню Constraint->Point (Options). Перевіряємо, щоб галочка Maintain Offset була відключена, налаштування встановлені за замовчуванням і сміливо натискаємо Apply. Ведений об’єкт займе місце ведучого. При цьому ви помітите, що атрибути Channel Box будуть виділені синім. Це означає, що констрейн активний. Загляньте в Outliner і переконайтеся, що ієрархічні зв’язки між об’єктами залишилися недоторканими, нода pointConstrain1 знаходиться нижче follower або веденого об’єкта. Залишимо поки констрейны в спокої, оскільки ми будемо ще неодноразово до них повертатись. З іншими видами констрейнов спробуйте самі, щоб мати уявлення про те, як вони працюють.

Введення в рігг

Використання 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 і скриптами, якщо нам потрібно створити щось специфічне чи прискорити процес створення скелета. Особливо подобається набір скриптів Майкла Комета.Введення в рігг

Два основних параметри джоинтов: 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 – це дуже погано, однак, в деяких ситуаціях уникнути його неможливо. І як же це пофіксити, запитаєте ви? Потрібно дуже швидко вирішити, які осі в поточному ризі найбільш важливі для нас і змінити для них порядок обертання. Оскільки ми тестуємо рігг у міру його створення, і спілкуємося з аніматором на тему того, як згодом буде використовуватися рігг, ми можемо передбачити, що саме аніматор буде робити з ним і пофіксити можливі баги.

Введення в рігг

Зміна напрямок осі обертання на 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”. Це створить форвардну кінематику, схожу на взаємозв’язок джоинтов, вуаля, наш рігг готовий.

Наступного разу створимо рігг спини. Щасливих вам риггов!

Введення в рігг

Використання констрейнов, щоб змусити контролери впливати на джоинты

httpv://vimeo.com/85723721

Журналіст: Альона