Ригг в Maya: Введение в ригг человеческого торса

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

Во второй части урока по риггу мега-талантливый Джахрул Амин расскажет, как создавать ригг человеческого торса в Maya 2014. Maya rigging_Introduction to rigging a human torso_01

Maya rigging_Introduction to rigging a human torso_02

В папке 3dt_rigging можно найти все материалы по риггу, которые используются в данном уроке. Я продолжаю серию уроков по созданию ригга. В этой ее части мы научимся создавать гибкий ригг человеческого торса. На мой взгляд, центром движения является торс. Именно он управляет движением рук, ног и головы, поэтому так важно настроить его правильно. Наша спина состоит из 24 позвонков: 7 шейных, 12 грудных, 5 поясничных (не считая копчика и крестца). В CG всегда нужно упрощать реальность, не усложнять без необходимости ригг и не повредить психику аниматора, которого могут свести с ума 24 контроллера спины. Я не говорю, что не нужно пытаться достичь фотореалистичности в CG, нужно создать ее видимость, обманув зрителя. В этом уроке мы не будем воссоздавать S-образную форму спины или расставлять джоинты, поскольку аккуратного скручивания можно добиться с помощью одной оси, не используя сочетание из двух других. Также возможность использования этого принципа зависит от позы меша. Если вы делаете ригг такому сгорбленному персонажу, как, например, Квазимодо, придется следовать форме спины. Не стоит расставлять джоинты близко к задней части спины, поскольку джоинты, расположенные в середине меша, лучше деформируют геометрию. Ничто из этого не является неписанным правилом, поэтому не бойтесь экспериментировать. Лучшие приемы всегда вырабатываются путем проб и ошибок. Мы создадим позвоночник, который позволит нам пользоваться как преимуществами форвардной кинематики FK, так и инверсной IK. Этот сетап основан на серии уроков по риггу и анимации от Jason Schleifer. Если вы раньше не смотрели серию этих уроков, настоятельно рекомендую просмотреть ее, поскольку это настоящая находка для риггера. Перед тем, как перейти к риггу, еще раз напомню, что крайне важно присвоить всем объектам в сцене уникальные имена. Ригг может начинаться очень просто, но очень быстро станет довольно сложным, а сцена захламленной. Поэтому очень важно поддерживать сцену и объекты в ней в идеальном порядке с самого начала работы. Поэтому для начала присвоим всем объектам правильные индексы, например, джоинтам _jnt, контроллерам _ctrl и пр. То же самое касается и префиксов. Джоинты правой части скелета должны начинаться с префикса r_, левые с l_. Это сделает ваш ригг более понятным, в том числе и для других риггеров, которым возможно придется с ним работать. Далее наступает черед консистентности. Нужно помнить о следующих моментах, чтобы сделать ригг как можно более эффективным для аниматора. Сначала нам нужно решить, какие оси вращения какое движение будут создавать в ригге. Например, я буду использовать ось вращения Х для всех сгибов и растяжений. Таким образом, аниматор, работая в Graph Editor, будет понимать, что с изменением значений оси вращения Х, рука, нога или спина персонажа будут сгибаться. Звучит это, конечно, запутанно, но немного организованности поможет сразу же отличить продуманный ригг от плохого. Приступим к созданию ригга торса. Создание IK-джоинтов позвоночника В боковой проекции камеры выберите Skeleton > Joint Tool. С помощью LMB создайте первый джоинт под животом по центру геометрии. Зажмите Shift (это создаст прямую цепочку джоинтов) и продолжайте создавать позвоночник персонажа, сделать еще шесть кликов. После того, как цепочка джоинтов позвоночника готова, нажмите Enter, чтобы выйти из инструмента. Откройте Outliner и выберите все джоинты цепи, за исключением root-джоинта. Вбейте значение 8 в канал Translate X в окне Channel Box (в будущем придется поэкспериментировать со значениями, чтобы добиться наилучшего результата), чтобы сделать длину всей цепочки джоинтов одинаковой. Выберите root-джоинт и перемещайте его до тех пор, пока вас не устроит положение позвоночника. Теперь очередь нудного, но очень ВАЖНОГО этапа: переименование всех джоинтов. Переименуйте все джоинты начиная с root следующим образом: spineA_IK_jnt, spineB_IK_jnt, spineC_IK_jnt, spineD_IK_jnt, spineE_IK_jnt, spineF_IK_jnt и spineEnd_IK_jnt. Теперь выберите spineEnd_IK_jnt и нажмите Ctrl+D, чтобы сдублировать его, а затем Shift+P, чтобы отпарентить из текущей иерархии джоинтов. Переименуйте его в  chest_IK_jnt. Нажмите Ctrl+D, чтобы сдублировать его и переименуйте в midSpine_IK_jnt. Зажмите V, чтобы активировать привязку к точке Point Snap и привяжите новый джоинт к джоинту spineD_IK_jnt. Сдублируйте этот новый джоинт, переименуйте его в hip_IK_jnt, а затем привяжите к джоинту spineA_IK_jnt. Увеличьте размер трех новый джоинтов в Channel Box, чтобы их легче было выбирать.

Maya rigging_Introduction to rigging a human torso_03

IK-джоинты позвоночника расставлены по местам, изменен размер некоторых джоинтов, чтобы их было проще выбирать

Создание низкополигонального меша Неплохо было бы тестировать ригг по мере его создания. Так мы сможем фиксить его по мере необходимости. Быстрый взгляд на джоинты не спасет от перекручивания здесь, или от выпячивания там, что может очень даже случиться. Чтобы протестировать ригг, попросту «нарежем» геометрию и припарентим ее к джоинтам. В результате получим быстрый низкополигональный ригг, который аниматор сможет быстро протестировать и сделать по нему замечания, вместо того, чтобы полагаться на плейбласт. Есть множество способов сделать это, я выбираю больше подходящий мне по настроению. Я покажу вам пример в этом уроке, но можете спокойно экспериментировать. И, поскольку, результат один и тот же, нет необходимости особо заморачиваться. Итак, сдублируем существующую геометрию и спрячем оригинал, нажав Ctrl+Н. Поскольку нас интересует только торс, перейдем во фронтальную проекцию и удалим ненужные нам сейчас руки, ноги, голову, шею, ключицу оставим. Стараемся все делать симметрично. Выберите все фейсы между spineA_IK_jnt и spineB_IK_jnt и в меню моделирования (F3) выберите Mesh > Extract. Затем выделите фейсы между spineB_IK_jnt и spineC_IK_jnt и повторите предыдущий шаг. Продолжайте так до тех пор, пока не получите 7 отдельных мешей. По окончании удалите историю трансформаций Edit > Delete By Type > History. Затем переименуйте части геометрии, начиная с root:  hip_proxy_geo, spineA_proxy_geo, spineB_proxy_geo, spineC_proxy_geo, spineD_proxy_geo, spineE_proxy_geo и spineF_proxy_geo. Далее просто выбираете часть геометрии и парентите его к соответствующему джоинту. Вращение джоинтов не должно влиять на геометрию. При необходимости можете также понизить плотность сетки прокси-меша, чтобы создать быстрый ригг. Теперь вы готовы приступить к риггу.

Maya rigging_Introduction to rigging a human torso_04

Припаренчивание геометрии к скелету, чтобы иметь четкое представление о том, как будет деформироваться финальная геометрия

Добавление Spline IK Выберите Skeleton > IK Spline Handle Tool (Options) и измените число спанов Number of Spans, увеличив его до двух. Во вьюпорте кликните на spineA_IK_jnt, затем на spineEnd_IK_jnt. Если вы работаете в Outliner, сначала активируйте инструмент, выберите spineA_IK_jnt, а затем с Ctrl spineEnd_IK_jnt. Переименуйте ikHandle1 в  spine_IK and curve1 to spine_CRV. Spline IK работает не так, как обычное IK, а, фактически, является кривой, которая деформирует джоинты. Для деформирования кривой нужно перейти в режим компонентов и перемещать CV, что не очень-то удобно аниматору. Мы можем создать кластеры Cluster для каждой CV и таким образом деформировать скелет. Я не собираюсь показывать этот метод в уроке, но вы можете поэкспериментировать сами: выберите CV на кривой (нажмите F8, чтобы перейти в режим редактирования компонентов), а затем выберите Create Deformes> Cluster. Теперь вы можете припарентить кластер к контроллеру, которым аниматор сможет легко манипулировать. В этом уроке я собираюсь воспользоваться способом, показанным Jason Schleifer в его серии уроков по анимации и риггу. В этом способе кривая скинится к непосредственно к джоинтам. Для этого выделите chest_IK_jnt, midSpine_IK_jnt, hip_IK_jnt и spine_CRV, выберите Skin > Bind Skin > Smooth Bind (Options) и используйте следующие настройки Bind to: Selected joints, Bind Method: Closest Distance, Skinning Method: Classic Linear and Normalize Weights: Interactive. Все остальное можно оставить как есть. Теперь приступим к финальному скинингу торса, рассмотрим его более детально. Нажмите Apply. Теперь вы можете управлять торсом, используя 3 джоинта.

Maya rigging_Introduction to rigging a human torso_05

Создание Spline IK для управления цепочкой джоинтов

Использование скриптов на Python для быстрого создания контроллеров Нам необходимо создать контроллеры для управления джоинтами. Воспользуемся тем же методом, что и в предыдущем моем уроке, автоматизировав процесс с помощью скрипта на Python. И, хотя, ригг можно создавать и без навыков в скриптинге, я считаю, что оные помогут сделать процесс более продуктивным. Мне пришло в голову воспользоваться скриптом, после того как я увидел множество команд по копипасту в истории Script Editor. Script Editor может отображать все использованные команды, для этого выберите History > Echo All Commands. И, хотя, в Script Editor команды отображаются на MEL, вы можете их легко переписать на Python, используя официальный майский хелп, или таки воспользоваться командами на MEL. Причина, по которой я выбрал Python, заключается в том, что его можно легко использовать в других пакетах. Вот скрипт на Python, который мы будем использовать, и его краткое объяснение: #create controls script Как использовать: 1. Выбрать джоинты, для которых вы хотите создать контроллеры, и применить скрипт. import maya.cmds as cmds sl = cmds.ls(sl=1) for s in sl: ctrlName = s.replace(«_jnt», «_ctrl») ctrl = cmds.circle( nr=(0, 1, 0), r=1, n=ctrlName)[0] group = cmds.group(ctrl, n=ctrl + «_auto») offset = cmds.group(group, n=ctrl + «_offset») cmds.parentConstraint(s, offset, mo=0) cmds.delete(cmds.parentConstraint(s, offset)) cmds.parentConstraint(ctrl, s, mo=0) А вот как это работает: выберите все джоинты, для которых хотите создать ригг (они должны иметь индекс _jnt). Скрипт создаст окружности, скопирует для них названия джоинтов, заменив при этом индекс _jnt на индекс _ctrl. Затем окружности будут дважды сгруппированы, чтобы создать иерархию нод _auto и the _offset, это объяснялось в предыдущем уроке. Затем нода _offset будет приконстрейнена к соответствующему джоинту с помощью Parent Constaraint (с выключенной галочкой Maintain Offset), чтобы занять соответствующее место, а констрейн будет удален. И, наконец, джоинт будет приконстрейнен к контроллеру. Можете спокойно изменять скрипт, как вам будет удобно. Например, я могу изменить строчку: ctrl = cmds.circle( nr=(0, 1, 0), r=1, n=ctrlName)[0] на строчку ctrl = cmds.circle( nr=(0, 1, 0), r=10, n=ctrlName)[0] Это увеличит радиус контроллера с 1 до 10. Или я могу изменить последнюю строчку: cmds.parentConstraint(ctrl, s, mo=0) на cmds.orientConstraint(ctrl, s, mo=0) cmds.pointConstraint(ctrl, s, mo=0) Это приконстрейнит джоинт к контроллеру с помощью Orient и Point Constraint, вместо использования только одного констрейна. FK-джоинты нужно приконстрейнить к соответствующему контроллеру только с помощью Orient Constraint, поэтому мы снова изменим скрипт, чтобы он лучше соответствовал нашим нуждам. Потестим его перед использованием.

Maya rigging_Introduction to rigging a human torso_06

Простой скрипт на Python для повышения продуктивности при создании контроллеров

Создание контроллеров для IK-джоинтов позвоночника Чтож, применим скрипт для контроллеров IK-джоинтов позвоночника. Откройте Script Editor (Window > General Editors) и создайте новую вкладку для Python, нажав Ctrl+T или зажав RMB в Input Window и выбрав New Tab. Когда окно Source Type всплывет, выберите Python. Перетащите скрипт createControls.py в раздел Input Script Editor или выберите File > Load Script (Ctrl+O). Скрипт можно найти в папке проекта 3dt_rigging project folder этого урока. Теперь выберите hip_IK_jnt, midSpine_IK_jnt, chest_IK_jnt и примените скрипт, выбрав Command > Execute (Ctrl+E). Активировать скрипт можно, также выделив его и нажать Enter на цифровой клавиатуре (Numpad). После этого должны были создаться 3 контроллера, а джоинты приконстрейниться к ним с помощью Parent Constraint. Изменить положение или форму контроллеров очень просто, для этого их нужно выделить и провести с ними все необходимые манипуляции в режиме работы с компонентами (F8). Не масштабируйте, не вращайте и не перемещайте контроллеры в режиме Object mode, поскольку любые изменение, произведенные с атрибутами контроллеров этом режиме, помешают потом вернуть контроллеры на соответствующие позиции.

Maya rigging_Introduction to rigging a human torso_07

Создание IK-контроллеров с помощью скрипта на Python

Добавление IK twist На данном этапе мы не можем скручивать наш позвоночник. Пофиксим это. Выберите spine_IK и откройте Attribute Editor (Ctrl+A). Откройте вкладку IK Solver Attributes и Advanced Twist Controls. Чтобы производить скручивание с помощью hip_IK_ctrl и the chest_IK_ctrl, необходимо изменить World Up Type на Object Rotation Up (Start/End). Установите Up Axis отрицательную Z, поскольку задняя часть торса расположена именно в этой части пространства Maya. Затем, выбрав любой spine_IK joints, вы увидите, что он смотрит вперед, поэтому нам необходимо настроить Up Vector, а Up Vector 2 установить как 0, 0, -1, поскольку верх позвоночника находится в противоположном направлении. Затем вбейте hip_IK_ctrl в World Up Object box и chest_IK_ctrl в World Up Object 2. И, наконец, нужно задать Twist Value Type для Start/End. Теперь вы можете скручивать позвоночник, используя контроллеры hip_IK_ctrl и the chest_IK_ctrl, получая на спине очень милое затухание.

Maya rigging_Introduction to rigging a human torso_08

Использование Advanced Twist Controls для настройки скручивания

Добавление растяжений Контроллеры для растяжений еще больше развяжут аниматору руки, что позволит ему еще легче ставить персонажа в позу. Поделим длину spine_CRV на нее саму же (что даст нам исходное значение 1) с помощью ноды умножения-деления Multiply Divide, результат используем для атрибута Scale X джоинтов spine_IK (исходное значение также 1). Поэтому каждый раз, когда длина spine_CRV будет изменяться, новая длина поделится на старую, значение офсетов Offsets создаст эффект растяжения, так называемый, squash and stretch, для позвоночника. Итак, сначала необходимо найти длину spine_CRV. Для этого выберите кривую и в окне Mel введите: arclen –ch 1; Это активирует ноду curveInfo1, которая управляет Arc Length. Откройте Attribute Editor и вы найдете ее в крайней справа вкладке. Также можете выбрать Hypershade (Window > Rendering Editors) с выделенной spine_CRV и перейдите во входящие исходящие связи Graph > Input Output Connections. Переименуйте ноду curveInfo1 в spineInfo1, затем, в окне Hypershade с зажатой RMB на стрелке Output ноды spineInfo1 выберите из выпадающего меню arcLength. Теперь зажмите LMB на стрелке Input ноды Multiply Divide и выберите  input1 > input1X. Теперь, как только длина кривой изменится, она сразу же разделится на ее старую длину. Необходимо ввести это значение для атрибутов масштабирования наших джоинтов. Выберите spineA_IK_jnt и выберите в Hypergraph Graph > Add Selected to Graph. Затем зажмите RMB на стрелке Output ноды Multiply Divide и выберите output > output. Зажмите LMB на стрелке Input spineA_IK_jnt и выберите Scale > ScaleX. Необходимо также связать остаток с spine_IK joints (минус spineEnd_IK_jnt). Найдите в Script Editor и скопируйте следующую строку, чтобы сделать это быстро: connectAttr – force multiplyDivide1.outputX spineA_IK_jnt.scaleX; Откройте строку MEL и скопипастьте эту строку 5 раз в Input window (по строке на каждый дополнительный джоинт). Затем замените имена джоинтов, чтобы они соответствовали оставшимся джоинтам. Должно получиться следующее: connectAttr – force multiplyDivide1.outputX spineB_IK_jnt.scaleX; connectAttr – force multiplyDivide1.outputX spineC_IK_jnt.scaleX; connectAttr – force multiplyDivide1.outputX spineD_IK_jnt.scaleX; connectAttr – force multiplyDivide1.outputX spineE_IK_jnt.scaleX; connectAttr – force multiplyDivide1.outputX spineF_IK_jnt.scaleX; Выберите Command > Execute и, вуаля, готово. Осталось переименовать ноду Multiply Divide на spine_md. При желании, можете, конечно, добавить риггу персонажа сохранение объема, но лично я думаю, что это уже чересчур.

Maya rigging_Introduction to rigging a human torso_09

Добавление squash-and-stretch для создания динамичных поз

Создание FK-джоинтов позвоночника FK-цепочка джоинтов будет управлять IK-джоинтами. Давайте создадим FK-контроллеры. Включите привязку по точкам или просто зажмите V, перейдите в боковую проекцию и создайте цепочку из 4 джоинтов, используя инструмент Skeleton > Joint Tool. С помощью привязки к точке расположите FK-джоинты точно поверх IK-джоинтов, начав с root (проверьте, чтобы цепочка джоинтов создавалась заново, а не продолжалось создание IK- цепочки джоинтов, для этого кликайте рядом с IK-джоинтами). Затем переименуйте джоинты, начиная с root следующим образом: spineA_FK_jnt, spineB_FK_jnt, spineC_FK_jnt и spineEnd_FK_jnt. Далее нам необходимо создать изгиб с помощью положительного значения атрибута вращения по X, вместо существующего отрицательного Y. Для этого выберете spineA_FK_jnt и выполните Skeleton > Orient Joint Tool (Options). Мы будем возвращаться к этому довольно часто, чтобы настроить ориентацию джоинтов. Для цепочки FK мы можем просто выбрать World в настройках Orient Joint и нажать Apply. При попытке вращения джоинтов положительная ось Х создаст необходимый изгиб. Добавим контроллеров. Исправьте последнюю строчку в скрипте createControls.py на следующую: cmds.orientConstraint(ctrl, s, mo=0) Это будет наилучшим констрейном в данном случае, поскольку контроллеры отвечают только за вращение. Затем выберите FK-джоинты (за исключением spineEnd_FK_jnt) и примените скрипт. После создания контроллеров можно изменить их форму в режиме работы с компонентами. Еще раз напоминаю: не редактируйте контроллеры в режиме Object Mode. Далее необходимо создать иерархию FK контроллеров, которые будут управлять поведением джоинтов. Сделаем это с помощью парента. Сначала припарентите spineC_FK_ctrl_offset к spineB_FK_ctrl, а контроллер spineB_FK_ctrl к  spineA_FK_ctrl. Затем мы можем присоединить FK-ригг к IK-риггу. Для этого припарентите chest_IK_ctrl_offset к spineC_FK_ctrl, а midSpine_IK_ctrl_offset к spineB_FK_ctrl.

Maya rigging_Introduction to rigging a human torso_10

Окончательный сетап FK-джоинтов и контроллеров

Добавление дополнительного hip-контроллера В данный момент hip-контроллер влияет на меньшую часть спины, пофиксим это. Для этого добавим дополнительный контроллер, который будем влиять только на hip. Сдублируйте  hip_IK_jnt, переименуйте его как hip_FK_jnt и удалите parentConstraint, который находится ниже его в Outliner. Сдублируйте новый джоинт, переименуйте в hipEnd_FK_jnt и припарентите к hip_FK_jnt. Этот джоинт необязателен, поскольку инициатором всех вращений служит hip_FK_jnt, контроллер же нужен скорее для визуального удобства. Припарентите hip_fk_jnt к hip_IK_jnt. Выберите hip_fk_jnt и запустите скрипт createControls.py, чтобы создать Orient Constraint между контроллером и джоинтом. Отредактируйте для удобства форму контроллера и припарентите hip_FK_ctrl_offset к hip_IK_ctrl. Теперь мы можем использовать hip_IK_ctrl в качестве основного контроллера, а небольшой офсет добавлять с помощью hip_FK_ctrl. Это делает ригг более гибким и дает аниматору еще больший контроль над ним.

Maya rigging_Introduction to rigging a human torso_11

Добавление дополнительного hip-контроллера

Создание COG-контроллера Необходимо добавить последний контроллер — COG-контроллер (Centre of Gravity или центр гравитации), который будет управлять всем торсом. В виде сверху выберите CV Curve Tool (Options) > и установите тип кривой 1 Linear. Теперь создайте любую фигуру на свой выбор  и нажмите Enter, чтобы выйти из инструмента. Можете воспользоваться привязкой к сетке (зажмите Х) или привязкой к точке (зажмите V), чтобы ускорить процесс и сделать контроллер более точным. Переименуйте его в COG_ctrl и дважды нажмите Ctrl+G, чтобы сгруппировать его с самим собой. Переименуйте самую верхнюю группу в COG_ctrl_offset, а следующую в COG_ctrl_auto. Теперь необходимо поместить контроллер на место. Для этого припарентите контроллер COG_ctrl_offset к hip_IK_ctrl и обнулите значения атрибутов перемещения и вращения в Channel Box. Теперь отпарентите COG_ctrl_offset, нажав Shift+P. Можете изменить форму контроллера в режиме работы с компонентами. Давайте соединим все это вместе. Сначала выберите spineA_FK_ctrl, затем, с Shift’ом spineA_FK_jnt и выполните Constrain > Point. Далее припарентите hip_IK_ctrl_offset и spineA_FK_jnt к контроллеру COG_ctrl. Выберите spineA_IK_jnt, hip_IK_jnt, midSpine_IK_jnt, chest_IK_jnt и spineA_FK_jnt и нажмите Ctrl+G. Переименуйте эту группу в spine_jnt_grp. Выберите spine_IK and spine_CRV и нажмите Ctrl+G. Переименуйте эту группу в  spine_doNotTouch_grp. Выберите spine_jnt_grp and spine_doNotTouch_grp и нажмите Ctrl+G Ctrl+G. Переименуйте эту группу в spine_rig_grp. Выберите spine_CRV, откройте Attribute Editor и отключите Inherits Transform. Понятным это станет позже, когда мы добавим контроллер globalSRT, главный контроллер, использующийся для масштабирования, перемещения и вращения персонажа в шоте. На сегодня закончим с риггом. В следующий раз мы создадим ригг для шеи и головы, а также globalSRT контроллер. Счастливых риггов!

Maya rigging_Introduction to rigging a human torso_12

Добавление COG-контроллера для контролирования всего торса и упорядочивание Outliner

Совет дня: Прячьте атрибуты и раскрасьте контроллеры Неплохо было бы cпрятать атрибуты, на которые аниматор не будет ставить ключи. Например, FK-контроллеры спины не будут масштабироваться или перемещаться, IK-контроллеры не будут масштабироваться и пр. Мы можем залочить и спрятать эти атрибуты, чтобы не вводить аниматора в искушение поставить на них ключи. Выделите в Channel Box атрибуты, которые вы хотите залочить и спрятать, зажмите RMB, в выпавшем меню выберите пункт Lock and Hide Selected. Чтобы вернуть атрибуты, выполните Edit > Channel Control в Channel Box или Window > Channel Control. Чтобы раскрасить контроллеры, выберите их и откройте Attribute Editor. Прокрутите ползунок до Display > Drawing Overrides, включите Enable Overrides, далее воспользуйтесь ползунком Color.

Maya rigging_Introduction to rigging a human torso_13

Совет дня: Прячьте атрибуты, на которые аниматор не будет ставить ключи, и маркируйте контроллеры цветом

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

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

Тэги: , , ,


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