Rigged 3d models что это
Риггинг для профессиональной анимации
Всем привет!
Зовут меня Жасурбек Бутаев. Живу в городе Ташкент. Имею 3-летний опыт деятельности как 3d аниматор и риггер. Наша маленькая компания занимается разработкой видео игр.
Введение
Вначале о том, почему я решил написать такой большой учебный урок. Год назад я взял работу на свободную тему от замечательного 3д артиста Сардора Жумаева. Хотел делать риг для анимации. Но я не смог закончить работы, поскольку риг не получился таким, каким я его задумывал. Кроме того, я испытал настоящие трудности, когда хотел найти хороший учебный материал по полной настройки персонажа, который бы помог его использовать в продакшн. Пришлось собирать по кускам разрозненную информацию. Теперь, когда я получил определенный опыт в этом направлении, думаю могу поделиться им с теми, кто интересуется риггингом и знаком с Maya2011. Из-за большого объема информации, урок получился достаточно объемным.
Многие уроки по риггинг начинается с подготовки ног, потом подготовки рук и т.д. В нашем уроке мы будем делать все части тела подряд. Для этого мы используем много скриптов. Практически все из них напишем с нуля. Это поможет нам закончить риг быстро и без ошибок. По ходу урока, будут приведены некоторые советы, облегчающие работу. Если Вы проявите достаточно терпения в изучении урока, то, думаю, в дальнейшем сможете с определенной легкостью сделать риг для профессиональной анимации.
Поехали! Урок состоит из 3 частей.
Первая часть
Вторая часть
Третья часть
Первая часть
Открываем файл здесь 01. Как видим, персонаж состоит из несколько объектов. Это очень удобно для создания ригга.
Переименуем объекты в зависимости от того, какая это часть. Выделим их и Edit> Delete by Type> History. Думаю, не возникнет трудностей, с очисткой истории объекта (А точнее, история Input в Channel Box). Этот прием придется использовать часто. Поэтому, мы должны добавить в Custom Shelf. Открываем меню Edit> Delete by Type> History. УдерживаяCtrl + Shift, нажмем на History. Выделим все объекты. Edit> Group или Ctrl + G. Эта команда поможет сгруппировать их. Переименуем созданную группу в meshMidPoly.
Вначале, мы должны проверить их на симметрию. Для этого открываем abSymMesh, вставляем его в Script Editor (Window>General Editors>Script Editor). Запускаем скриптCommand>Execute. На командной строке (Window>General Editors>Command Shell) пишем abSymMesh (Потом Enter). После запуска скрипта, выделяем объект и нажимаем на кнопку Check Symmetry. Если персонаж симметричен, нам об этом сообщат. Если нет, покажут, какие вертексы не симметричны.
Совет №1. Если при работе сцена зависает, отключите Lighting> Two Sided Lighting. Если продолжает зависать, тогда выделите meshMidPoly и нажмете 1.
Теперь решаем где и как поставить кости. Поскольку персонаж мускулистый, сделаем следующим образом.
Многие начнут со вставки костей. Мы же поступим иначе. Сначала вставим CV Curve. Если где то не соответствие, то поправляем его. Затем по вертексом будем вставлять кости. Это помогает сохранить чистоту в Channel Box.
Чтобы изменить настройки CV Curve Tool, нажмем на Option Box (квадратик) меню Create> CV Curve Tool. На Curve Degree поставим 1. После этого кривая станет острой.
Для ног сделаем следующее. Чтобы показать CV (точки), Display> Nurbs> CVs. Две выше использованные команды добавим в Shelf. Что бы видеть CV внутри объекта, включаемX—ray.
Кости позвоночника вставим по его линии. Сделаем грудную кость больше. Поставим по одной кости для шеи и головы.
Кости для пальцев надо начинать с внутренней ладони. Как на скелете человека.
Для ладони добавляем дополнительно одну кость. Перед тем как начинать, перейдем на front панель. Нарисуем палец из 2 костей. Группируем его ( Edit>Group или Ctrl + G), вставим его пивот в начало Curve. Теперь выделим группу и разместим ее на первый палец. Выделим Curve, нажмем F8, поставим точки по локальным осям на нужные места. ИзменимMove Tool на Local следующим образом.
Для создания другого пальца, выделяем group01, нажмем на Ctrl + D (для дублирования) и изменим их точки.
Кости для шланга поставим по середине. Вначале, выделив шланг, нажмем F10 и перейдем в режим Edge. Выделим Edge Loop (нажмем два раза на Edge). Нажав Select> Convert Selection> To Vertices выделим Vertex на Edge Loop. С помощью меню Create Deformers> Cluster, между этими вертексами создаем кластер.
После создания всех кластеров, создадим кривые по кластерам. Для этого включим Vertex Snap, нажав клавишу V.
Открыть сцену можно здесь. 02.
Начнем создавать кости по кривым. Вначале, активируем инструмент создания кости (Skeleton> Joint Tool). Нажав клавишу V создадим кости по вертексом кривых.
Теперь займемся ориентацией кости. Ориентацию кости можно увидеть нижеследующем образом.
Выделяем бедренную кость. Нажав правой кнопкой мыши, запускаем команду Select Hierarchy. Это выделит все кости ног. Мы часто используем этот инструмент. Поэтому добавим его в Shelf. Открываем Script Editor и пишем.
select —hi;
Выделяем надпись и средней кнопкой мыши бросаем его в Shelf. Именуем команду в Shelf.
Совет №2
Если необходимо выделить иерархию нескольких отдельных групп костевой системы, используйте скрипт. Функция Select Hierarchy из контекстного меню выделяет иерархию только одну костевой системы.
Ориентация костей ног будет выглядеть в нижеследующем виде.
Для изменения ориентации открываем Skeleton> Orient Joints. Поставим XYZ на Orientation. Это означает, что ось X будет по направлению кости. Поставим —X на Second axis world orientation. Если внимательно посмотрим на полученное, то увидим, что ориентация последней кости выглядит не правильно. Для исправления этого, выделим эту кость, и откроемSkeleton> Orient Joints. Поставим None на Orientation. Потом OK.
Теперь выделим кости позвоночника. Запускаем скрипт.
Исправим ориентацию остальных костей.
Файл с исправленными ориентациями вы можете взять здесь. 03.
Теперь именуем кости. Есть несколько причины для правильного наименования. Во-первых, при использовании скриптов не будет ошибок в ригге. Во-вторых, процесс движется быстрее. Каждый объект именуем по следующему.
Файл с исправленными именами вы можете взять здесь. 04.
Для копирования кости из левой части в правую, выделяем кость jb_l_clavA.
Таким же способом копируем jb_l_leg, jb_l_carbonA, jb_l_oxyA. Сделаем jb_r_qurolRoot потомком jb_r_shoulder. Для этого, вначале выделим jb_r_qurolRoot, затем jb_r_shoulder и нажмем клавишу P (или Edit> Parent). Сделаем jb_l_qurolZaryadA потомком jb_l_qurolRoot. Сделаем jb_l_qurolRoot потомком jb_l_elbow.
Теперь для размещения всех костей, контроллеров и всех объектов создадим пустые группы. Не выделив ничего, нажмем CTRL+G. Повторим этот процесс 14 раз. Именуем эти группы как: Polvon, moveRotate, scale, extra, ik, controllers, joints, bind, ik, fk, control, blendshape, other, meshLowPoly. Составим из них иерархию следующим образом. В окнеOutliner, со средней кнопки мыши перетащим одну группу в другую. Это необходимо для правильной работы нашего ригга. Например, только в группе moveRotate будет атрибутыtranslate и rotate. В остальных группах их не будет. Только в группе scale будет атрибуты scale. В остальных группах их не будет. Выделим атрибуты scale группы moveRotate вChannel Box. Channels>Lock and Hide Selected (это можно сделать в контекстном меню). Атрибуты translate и rotate в группе scale уберем таким же способом. Выделим все остальные группы, нажав на Ctrl, уберем атрибуты translate, rotate и scale и в этих группах.
Кости перетащим из группы joints в категорию bind. Начнем процесс skin персонажа. Для этого выделим все кости начинающиеся с jb.
Скрываем все объекты кроме m_c_badan. (Выделив объекты CRTL + H). Будем исправлять влияние костей. Сначала поставим ключ на 1 кадре на атрибут rotateY кости jb_l_pinky. На 10 кадре поставим 30 на атрибут rotate. На 20 кадре 0.
По деформации тела изменяем капсулу. В этом нам помогут боковые линии.
Файл с исправленными капсулами можно взять здесь. 05. Выделим персонаж. Меню Skin>Edit Smooth Skin>Enable Weight включает режим нормализации. Меню Skin>Edit Smooth Skin>Normalize Weights нормализует вес костей.
Если нормализация включена, то увеличение веса одной кости в vertex приведёт к уменьшению веса другой кости и наоборот. Сумма веса не измениться 1. Если нормализация выключена, увеличение веса одной кости в vertex не изменит веса другой кости. Сумма веса останется постоянной.
Совет №3
Оставляйте нормализацию включенной при скиннинге тела. Это позволит процессу осуществлять точный расчет. При скиннинге лица выключайте нормализацию. Потому что, лицо трудно скиннить и это требует определенного художественного подхода.
Выделим тело, для чего открываем меню Skin>Edit Smooth Skin>Paint Skin Weights Tool. По очередности будем корректировать веса костей.
Для этого нам понадобятся следующие инструменты.
— поставит в Value выделенный вес
Flood – принимает данную операцию ко всем частям объекта. Не требуется вручную рисовать все весы
Рисование общего тела не так уж сложно. Но надо обращать внимание на следующие части тела.
Закончив левые части тела копируем весы в правую часть.
Таким образом, скинним все объекты и скорректируем нужные места.
Для исправления вышеуказанный ошибки в инструментах Paint Skin Weights Tool нажмем несколько раз кнопку Smooth.
Для исправления головы отключаем нормализацию. Это делается потому, что для объектов с тесным расположением точек сложно рисовать весы. При отключении нормализации, изменение одного веса не влияет на другой. Только лишь изменяет общую сумму весов.
Теперь исправим позвоночник. Нам нужно выделить отдельные его компоненты. Для этого переходим в режим Vertex с помощью F8 и выделяем одну Vertex. Нажав несколько разShift + >, увеличим выделение. Откроем табло Smooth Skins в окне Window>General Editors>Component Editor. В этой таблице находятся все весы и кости влияющие на выделенные компоненты. Выделим весы одной кости и сделаем их одинаковыми. Повторим этот процесс для остальных костей. Если изменение веса одной кости влияет на изменение веса другой (а так и должно произойти), поставим ON внизу названия кости. Это заморозит вес этого кости.
Оружия не деформируется. Поэтому их надо скиннить следующим образом.
m_r_qurolYurgich – jb_r_shoulder
m_r_qurolTutqich – jb_r_shoulder
m_r_qurolAylana – jb_r_qurolRoot
m_r_qurolAylanaTemir – jb_r_qurolRoot
m_r_qurolAylanaStvolTemir – jb_r_qurolRoot
m_r_qurolStvol – jb_r_qurolStvolA
m_r_qurolUsti – jb_r_qurolStvolB
m_l_qurolzaryad – jb_l_qurolBosim
m_l_qurolbrono – jb_l_qurolRoot
m_l_qurolstvol – jb_l_qurolStvolA
m_l_qurolstvolKatta – jb_l_qurolStvolB
m_l_qurolTagi – jb_l_elbow
Шланги также необходимо сделать по вышеуказанному принципу. Закончив скиннинг всех объектов, выделим все кости и запускаем команду Edit>Delete By Type>Channels. Это удаляет все ключи. Для того, чтобы позировать персонаж в нулевую позу, поставим 0 на атрибутах rotate всех костей для страховки. Это можно сделать также с помощью менюSkin>Go To Bind Pose. Но эта команда часто выдает ошибку, при прикреплении нескольких объектов в одну кость. Потому что для одной кости имеется несколько нулевых поз и команда не может определить какую из них надо запускать.
Файл с готовыми весами Skin всех объектов можно взять здесь. 07.
Теперь начнем создавать Corrective Shapes. Вначале как это работает. Создается дополнительная форма (Blendshape) объекта, которая преобразует вид объекта в определенную позу. Это форма (Blendshape) активируется в определенную позу. Например, в фильме Властелин Колец использовали 800 Corrective Shapes только для одного персонажа Голлум.
Очистим историю нажав на ( ). Переименуем объект на baseMesh и расположим кости как на рисунке.
Прикрепим baseMesh этим костям. Если будем поворачивать одну из костей, то результат нас не обрадует. Мы не будем иметь возможности решить возникающие проблемы в скиннинге. Потому что вес кости в одном позе может быть отличным, но в другом совершенно неприемлемым. Поэтому делаются корректирующие формы.
Поставим baseMesh в нулевую позу и продублируем его. Переименуем его на LeftKneeCorrectiveShape. Выделим baseMesh и LeftKneeCorrectiveShape по очередности. Откроем параметры меню Create Deformers>Blendshape. Напишем correctiveShapes на BlendshapeNode и перейдём в раздел Advanced. Выбираем Front of Chain в Deformation order. Это поставит порядок деформации правильно: вначале тайный tweak1, потом blendshapeNode (correctiveShapes) и skinCluster1. Выделим нод correctiveShapes в Inputs нашего объекта (BaseMesh) и поставим 1 на атрибут LeftKneeCorrectiveShape. Вид самого объекта LeftKneeCorrectiveShape изменим нижеследующим образом.
baseMesh теперь смотрится вот в такой позе.
Но если перейдем в нулевую позу, blendshape не изменяется и объект выглядит странным. Нам нужно, чтобы в нулевой позе blendshape был отключен, а при приближении к нашей позе blendshape должен активизироваться. Для исправления откроем окно Animate>Set Driven Key>Set. Выделим колени и нажмем Load Driver. Теперь эта кость становится управляемой. Выделим нод correctiveShapes из baseMesh и нажмем на Load Driven. Поставим 0 на атрибут rotateZ в окне Driver. Поставим 0 на атрибут LeftKneeCorrectiveShape в окне Driven. Нажмем на кнопку Key для создания нулевой позы. Теперь повернем кость на 80 градус по rotateZ, Поставим 1 на атрибут LeftKneeCorrectiveShape. Нажмем на кнопкуKey для создания основной позы. Если повернем кость, то увидим, что деформация стала намного лучше и реалистичнее.
Но этот способ является не самым лучшим в продакшене и в нашем персонаже. Во первых, корректировка blendshape в позе очень сложна. Во вторых, копирование готовогоblendshape в обратной стороне еще труднее. Теперь сделаем ту же работу с помощью скрипта cgTkShapeBuilder от www.cgtoolkit.com.
Подготовим такую же сцену с baseMesh и костью. Дублируем baseMesh и переименуем на normalShape. Выделив normalShape и baseMesh один за другим создаем blendshape(Create Deformers>Blendshape). cgTkShapeBuilder требует пустой blendshape нод. Загружаем его в Script Editor. Запускаем скрипт. В командной строке выполняем процедуруcgTkShapeBuilder.
Загружаем основной деформирующий объект. Выделим baseMesh Edit>Load Base Mesh в окне cgTkShapeBuilder. Выделим correctiveShapes нод Edit>Load Active Blendshape Nodeдля загрузки blendshape нод в cgTkShapeBuilder. Потом переходим в табло Create Shapes. Позиционируем кость (rotate Z = 80). Выбираем последовательно baseMesh и кость и нажимаем на Sculpt Changes on Dublicate. Скрипт создает дубликат основного объекта, и теперь мы можем его деформировать как угодно.
Выбираем деформированный объект и нажимаем на кнопку Generate Blendshape. Переходим на табло Setup Shapes и обновим лист blendshape нода (Refresh Blendshape List). Появляется новый атрибут. Выделим его. Выделив кости нажмем на Load Driver Joint. Сделаем Z в параметре Joint Axis. В Joint Angle 0, shape % 0 нажмем на Set Key. В Joint Angle80, shape % 100 нажмем на Set Key. Corrective shape готов. Теперь нам надо сделать другую сторону. Этот скрипт не позволяет копировать готовый blendshape в другую сторону. Но мы можем создать его для правой стороны заново. Для создания этой формы используем другой способ. Для этого откроем скрипт abSymMesh, которого использовали в начале урока. Выделим baseMesh и нажмем на Select Base Geometry. Внизу появится сообщения ”Base geometry is symmetrical”. Дублируем новый blendshape (baseMesh1blendShape11) переименуем на baseMesh1blendShapeRight. Выделив его, нажмем на Flip Selected и появиться зеркальная форма. Привязываем его к кости с помощью окна Set Driven Key. После этого наше тестовое задание готово.
Для нашего персонажа я создал корректирующие формы для следующих мест. Всех их переместил в группу blendshape.
Файл с готовыми корректирующими формами можно взять здесь. 08.
Вторая часть
Персонаж состоит из 38761 полигонов. Использовать этот риг будет очень сложно для аниматора. Поэтому, создадим легкую прокси модель персонажа.
Совет №4
Включайте прокси модель в риг. По возможности, сделайте число полигонов как можно меньше, а форму, по возможности, как можно более похожую. Сделайте прокси из отдельных частей тела.
Персонаж из м/ф «Цыган» студии Simpals с выстроенным ригом. По клику открывается тематический блог Simpals.
Поскольку между ними устанавливается иерархическая зависимость, то смещение в пространстве каждой кости, находящейся в зависимости от другой, будет представлять собой совокупность её собственных трансформаций и трансформаций, которым подвергается «материнская» кость. Другими словами, за смещением кости бедра должно следовать смещение костей всей ноги. Грамотная настройка зависимостей позволяет аниматорам значительно экономить усилия, указывая, например, траектории смещения только для небольшого количества отдельных костей, которые потянут за собой другие, находящиеся в иерархическом подчинении.
Собственно, структура сочленений виртуального скелета даже внешне очень похожа на сочленения скелета у позвоночных. От сложности этой структуры напрямую зависит, насколько она будет гибкой, и насколько реалистичной получится анимация. С другой стороны, чем больше костей в структуре рига, тем сложнее будет с ним работать.
3D модель с несколькими добавленными «костями». Всё остальное ещё предстоит сделать.
У этого процесса немало своих подводных камней. Например, необходимо точное определение, какая группа вершин (vertices) подвергается воздействию трансформаций отдельных костей, чтобы не зацепить ненароком другие; на какие группы вершин подвергаются воздействиям более чем одной кости и так далее.
Оптимальным вариантом для анимации фигуры «двуногого без перьев» является скелет, упрощённо повторяющий структуру «обычного» человеческого скелета. На него и следует ориентироваться, создавая «кости»; расположение их сочленений должно совпадать с гнущимися участками фигуры (колени, логти и другие суставы).
Далее для костей (отдельных или целых групп, благо в некоторых редакторах предусматриваются специальные управляющие элементы, которые позволяют регулировать характеристики целых групп костей) необходимо задать значения трансформации, в том числе возможных углов поворота и вращения (например, чтобы пальцы не гнулись куда им не положено).
При анимации зоо- или антропоморфных фигур очень полезно иметь хотя бы примерные познания в анатомии и иметь под рукой фотографии натуральных скелетов, чтобы понимать, в частности, как располагаются кости внутри конечностей и корпуса, так, чтобы позвоночник, например, не оказался ближе к животу, чем к спине; куда могут гнуться конечности, а куда нет, чтобы не происходило каких-нибудь совсем уж противоестественных деформаций.
В свою очередь, если речь идёт о риге для анимации какой-то техники, то нужно представлять себе, как двигаются её составные части, и опять-таки, что с ними может происходить, и чего не может.