Настройка скелета модели человека в Maya.
Автор: Алексей Борзых
Данное повествование довольно долгое и занудное, но если прочитать его внимательно и вдумчиво, то вполне можно научиться создавать и настраивать скелеты персонажей. Наличие опыта работы с программой обязательно, так как многие очевидные вещи не объясняются подробно. Старайтесь не делать лишних кликов и нажатий клавиш. Если ситуация вышла из-под контроля — не пугайтесь. Вы всегда можете откатиться назад с помощью команды Undo (кнопка «z»). Для более глубокого понимания предмета не лишним будет периодически обращаться к соответствующим разделам Help.
Basic human skeleton setup
Advanced human skeleton setup
Basic human skeleton setup
Архив с проектами для этой части: part1.zip.
Встречающиеся в тексте сокращения:
LMB – левая кнопка мыши
MMB – средняя кнопка мыши
RMB – правая кнопка мыши
Допустим, есть такая модель двуногого существа. Выглядит она не очень привлекательно, но это сделано специально, для наглядности.
Рассмотрим модель по частям.
Общее количество отдельных частей персонажа насчитывает 17. Именно столько костей нам и понадобится, чтобы создать для неё управляющий скелет.
Загрузите файл Dummy_mesh.mb. Если после загрузки модель не стоит ногами на полу, а лежит горизонтально раскинув руки — откройте окно Preferences и поменяйте вертикальную ось мировых координат с “Z” на “Y”.
Откройте файл ещё раз.
Joints (кости)
Команда создания костей (Joint Tool) находится в меню модуля Animation, для перехода в который нажмите F2. С начала проверим правильность опций создания костей, выбрав Option Box команды Joint Tool.
Выставляем опции, как на картинке, и закрываем окно (Close).
Если по каким–либо причинам ваш курсор не в виде крестика (обозначающий режим создания костей) — не пугайтесь. Просто активируйте команду Joint Tool из меню команд:
Таким образом, мы убрали все объекты, мешающие выбору управляющих локаторов.
опции создания костей:
- нажатие LMB создаёт новую кость в позиции клика,
- последующее нажатие LMB создаёт следующую кость иерархии в позиции клика.
изменение позиции костей при создании:
- нажмите и удерживайте LMB, перемещая курсор определите позицию новой кости, отпустите LMB для создания кости.
- нажмите и удерживайте MMB, перемещая курсор измените позицию последней кости иерархии.
Переключившись на вид side создадим кости позвоночника шестью последовательными нажатиями LMB: Hip –>Spine –> Chest –> Neck –> Head –> Head end Joint. Если кости получились слишком большие, то изменить их размер можно с помощью установок в окне Joint Display Scale..
Кость головы нужно выравнивать чётко по горизонтали (так надо для последующей настройки IK(инверсной кинематики)) Просто переместите конечную кость скелета с командой snap to vertex по оси Y.
Также, если вас не устраивают положения остальных костей, можно легко их передвинуть:
- выберите нужную кость
- включите режим перемещения (кнопка “w”)
- активируйте режим редактирования Pivot Point (нажмите “insert”)
- переместите кость в нужное положение
- выберите другие кости и переместите их
- нажмите “insert” снова, чтобы выйти из режима редактирования Pivot Point.
Кости можно двигать и без активации режима редактирования Pivot Point, но тогда будет перемещаться вся выше имеющаяся иерархия от перемещаемой кости. (Попробуйте просто подвигать кости, без активации режима Pivot Point)
Не вращайте кости при редактировании их позиции! Значения Rotate X, Y, Z каждой кости должны быть “0”.
Теперь создадим отдельно кости ног (используйте вид сбоку — side) и рук (вид сверху — top). Тут есть один нюанс – нужно выдержать между костями бедра и голени достаточный угол для сгиба коленей (то же самое правило для предплечья и плечевой кости). Угол необходим для того, чтобы определить для IK направление сгиба сустава. Придётся также немного повернуть геометрию — параллельно костям.
Переместите кости рук и ног в центр их геометрии.
Теперь нужно их сдублировать, потому как рук и ног у персонажа – по две штуки.
Ноги дублируются предельно просто:
- выберите бедренную кость,
- проверив опции дублирования жмём Duplicate,
- перемещаем вновь созданную кость простым добавлением знака «–» в её значение Translate X в окне Channel Box.
С руками немного сложнее, будьте внимательны, не делайте лишних «телодвижений»:
- выберите плечевую кость руки,
- создаём её дубликат (горячая клавиша дублирования Ctrl+d),
- группируем дубликат (Ctrl+g),
- изменяем атрибут группы Scale X «1» на Scale X «–1».
Получили зеркальный дубликат руки, по которому мы создадим новые (свежие) кости. Дубликат не годится, потому как имеет отрицательные значения локальных осей Scale и Rotate, что в дальнейшем будет мешать настройке IK и управляющих локаторов.
— Используя snap to vertex (нажмите и удерживайте “V”) создаём кости правой руки.
Кликайте не точно во «вспомогательные» кости, а рядом, на некотором расстоянии. Snap сам совместит позиции костей. Иначе новые кости будут создаваться как иерархическое продолжение той кости, в которую вы кликните.
— Удалите группу с дубликатом костей — они нам больше не понадобятся.
Теперь нужно присоединить руки/ноги к туловищу. Для этого используем команду Parent (горячая клавиша — "p")
— выбираем обе ноги (бедренные кости) + тазовую кость, жмём “p”,
— выбираем обе руки (плечевые кости) + кость грудной клетки и снова “p”.
Вот мы и получили, наконец, иерархическое собрание костей под названием скелет. Не поленитесь, и переименуйте все кости в соответствии с их названиями — это сильно облегчит вам настройку в дальнейшем.
Скелет готов, пришло время прицепить «мясо» к костям. Используем для этого команду Parent. Прикрепите каждую часть модели к соответствующей кости (сначала выбираем объект Mesh , затем соответствующую кость и жмём «p»). Если вы по ошибке прикрепили Mesh к другой кости – выберите Mesh объект и нажмите SHIFT + «p» (Unparent) — это отсоединит его от кости, затем прикрепите к нужной. Повращав кости (hot-key «e»), проверьте правильность привязки объектов к костям.
На этом работы с Mesh закончены, и чтобы сетка нам не мешала, назначим её в Layer, которому выставим тип отображения Reference. Это сделает Mesh «невидимым» для курсора, что позволит избежать ненужного выделения сетки при дальнейшей работе.
— создайте новый слой (Layer) кликнув по кнопке,
— двойным кликом на появившемся леере открываем окно Edit Layer
— меняем имя слоя
— цвет (помогает быстрее ориентироваться, когда слоёв много)
— тип отображения (Reference)
— нажимаем Save
— выбираем все Mesh объекты модели
Просто «рамочкой» выбрать все объекты не получится, потому как приоритет выделения у костей выше, чем у Mesh объектов. Поэтому последовательно, используя Shift «накликайте» все объекты один за другим. Другой (и более простой) метод решения данной проблемы — отключить на время отображение костей из меню Show –> Joints, и после этого спокойно воспользоваться «рамкой».
— Назначаем выбранные Mesh объекты в наш Layer с помощью команды из, либо из меню по нажатию RMB на слое.
Режимы отображения слоя (Template, Reference, Normal) можно поменять в любой момент кликнув в квадратик рядом с цветом. При каждом клике один режим будет сменять другой (R — reference, T — template, blank — normal). Также легко можно включить/выключить видимость (Visibility) слоя (и соответственно всех объектов в нём находящихся) кликнув в квадратик с буквой V.
IK (инверсная кинематика)
Добавим в скелет немного инверсной кинематики для управления ногами и рукам,.но для начала убедимся что:
— режим “IKFK control” выключен, (галочка отсутствует),
— режим отображения точек Pivots включён (галочка присутствует).
Откройте окно опций создания инверсной кинематики, нажмите Reset Tool, Close.
Начнём с IK для ног: курсором-крестиком кликните в бедренную кость левой ноги, затем в кость ступни. Появившаяся зелёная линия с «усами» в области ступни, проходящая через кости ноги, и есть IK handle. Сразу переименуем его в L_Leg_ikHandle.
Розовый цвет сетки означает, что объект находится в непрямой зависимости от выбранного объекта. Так и есть – IK handle влияет на кости, а кости в свою очередь определяют положение Mesh объектов. Получается что между IK и Mesh не прямая зависимость, а через кости.
Самостоятельно создайте IK для остальных конечностей: правой ноги, обеих рук и для головы. Не забудьте правильно переименовать все IK.
Locators (локаторы)
Для управления скелетом (и персонажем в конечном итоге) мы будем использовать локаторы. В принципе, можно использовать и другие объекты (mesh, curves, selection handles и так далее), но после нескольких экспериментов, локаторы были признаны аниматорами как наиболее удобные.
— Создаём локатор командой Create -> Locator,
— уменьшаем его огромные размеры до приемлемых (Scale - «r») и перемещаем в кость Hip (используйте snap to vertex для точного позиционирования, отключите отображение слоя с геометрией, чтобы не попадать в вершины mesh объектов).
— Дублированием нашего локатора создаём остальные локаторы для всех ключевых костей.
Локатор головы расположите немного впереди скелета, но точно напротив кости головы (смотрите рисунок внимательно).
— Добавим ещё 4 вспомогательных локатора, которые будут определять направление коленей и локтей (по сути, продольное вращение рук и ног). И ещё один – для макушки головы. Используя snap to vertex поместите их напротив коленей, локтей и точно над костью головы.
— Аккуратненько переименовываем локаторы.
Выбрав все локаторы, делаем им Freeze Transform, исключая Scale. В дальнейшем это поможет быстро восстанавливать начальную позу скелета простым обнулением всех атрибутов управляющих локаторов.
Constraints (привязка)
Для того, чтобы локаторы приобрели силу управления, соединим их с костями и IK посредством констрейнов:
Point (hot-key Alt + p) — привязка по перемещению (Translate),
Orient (hot-key Alt + o) — привязка вращения (Rotate),
Pole Vector (hot-key Ctrl + p) — направление вектора инверсной кинематики.
Небольшое отступление:
Каждый тип объекта в сцене имеет своё значение приоритета выделения (Selection Priority). Например, IK имеет приоритет 4, а локаторы 3. Поэтому, если два объекта визуально перекрывают друг друга то при клике (или селекции рамкой) будет выбран тот (те), у кого приоритет больше. Будьте внимательны, пользуйтесь окном Outliner. Изменить настройку приоритетов можно в окне Preferences.
Итак, приступим. Точно соблюдайте порядок выделения объектов:
HIP (таз)
выбираем Hip_locator + Hip (joint).
не снимая выделения, последовательно назначаем Point constrain и Orient constrain.
Получили зависимость позиции и вращения тазовой кости от локатора "Hip_locator". Попробуйте подвигать и повращать его, чтобы посмотреть результат: вместе с локатором вращается и перемещается весь скелет. Это нормально, потому как IK рук и ног пока не прикреплены к своим локаторам. Идём дальше, скоро всё будет в ажуре!
SPINE (позвоночник)
Spine_locator + Spine (joint) >> Orient constrain.
Установили зависимость вращения кости спины от локатора Spine_locator. Теперь повращайте Hip_locator — кость спины смещается, а её локатор остаётся на месте, что не совсем удобно. Исправим это, добавив зависимость перемещения локатора спины от положения кости спины:
Spine joint + Spine_locator >> Point Constrain.
Повращайте Hip_locator снова. Теперь всё правильно — Spine_locator движется вместе с костью спины. Также настроим локатор грудной кости:
CHEST (грудная клетка)
Chest_locator + Chest (joint) >> Orient constrain — зависимость вращения грудной кости от её локатора.
Chest (joint) + Chest_locator >> Point constrain — привязка позиции локатора к грудной кости.
Ноги, руки и голова потребуют немного больше внимания, потому как для их управления используется по два локатора.
LEGS (ноги)
L_Leg_locator + L_Leg_ikHnadle >> Point Constraint – привязка позиции IK к локатору ноги.
L_Leg_locator + L_Foot joint >> Orient Constraint – зависимость вращения кости ступни от вращения локатора.
L_Knee_locator + L_Leg_ikHnadle >> Pole Vector Constraint – теперь коленный локатор определяет вращение ноги.
Те же настройки для правой ноги сделайте самостоятельно.
HANDS (руки)
L_Hand_locator + L_Hand_ikHnadle >> Point Constraint — привязка позиции IK к локатору руки.
L_Hand_locator + L_Hand joint >> Orient Constraint — зависимость вращения кости руки от вращения локатора.
L_Elbow_locator + L_Hand_ikHnadle >> Pole Vector Constraint — вращение руки при перемещении локтевого локатора.
То же самое — для правой руки.
HEAD (голова)
Head_locator + Head_ikHnadle >> Point Constraint — направление головы.
Head_Top_locator + Head_ikHnadle >> Pole Vector Constraint — наклон головы в стороны.
Если теперь включить отображение Mesh, то можно наблюдать неестественно свёрнутую на бок голову. Исправить это очень просто: выберите IK головы (Head_ikHandle) и измените значение атрибута Twist с нуля на 90.
Эту проблему можно было бы совсем избежать, если прикреплять Mesh к костям после всех настроек скелета.
NECK (шея)
Последняя не задействованная кость в скелете – шейная. Для её управления добавим локатору макушки головы два дополнительных атрибута, которые будут наклонять шею вперёд/назад и вправо/лево.
- Выберите Head_Top_locator, открываем окно редактора дополнительных атрибутов из меню Modify > Add Attribute...
- Добавляем два атрибута Neck RX (наклон шеи вперёд/назад) и Neck RZ (наклон шеи в стороны).
Теперь нужно связать эти атрибуты с вращением шейной кости по соответствующим осям X и Z.
Для этого:
— из меню открываем Connection Editor,
— выбрав Head_Top_locator, загружаем его атрибуты в левую часть окна (кнопка Reload Left),
— выбираем шейную кость Neck (joint) и загружаем в правую часть (кнопка Reload Right),
— находим в левом столбце наши дополнительные атрибуты (в самом низу), а в правом разворачиваем атрибут Rotate нажав на плюсик напротив,
— соединяем соответствующие атрибуты — сначала выбирается атрибут в левом окне, затем атрибут в правом окне.
Не пугайтесь, если вы случайно соединили не те атрибуты. Повторное нажатие на атрибут в правом окне отсоединит атрибуты.
Проверим настройку на деле — выберите локатор макушки головы, левым кликом выберите атрибут Neck RX, и средним кликом подвигайте в окне проекции. Также проверьте работу второго атрибута — Neck RZ.
Ну вот, теперь можно подёргать за различные локаторы Вашего скелета.
С настройкой покончено, осталась парочка косметических моментов для удобства работы — и всё!
Hide IK handles.
В окне Outliner выбираем все объекты инверсной кинематики (ikHandles), и делаем их невидимыми с помощью команды Hide Selection (hot-key Ctrl + h)
Hide all Joints
Из меню Show снимите галочку напротив объекта joints. Это выключит отображение костей скелета в текущем окне проекции. Скрыть кости командой Hide Selection нельзя, потому как вместе с ними пропадёт отображение Mesh объектов модели.
Таким образом, мы убрали все объекты, мешающие выбору управляющих локаторов.
Lock unused locator’s attributes.
«Залочим» лишние атрибуты локаторов, которые не используются в управлении скелетом. Lock означает запрет на изменение значений атрибута.
Scale — абсолютно бесполезный атрибут для всех локаторов. Выбираем все локаторы в окне Outliner и «лочим» атрибут Scale X, Y, Z. Для этого проведите LMB по атрибутам Scale в Channel box, и в меню команд выберите Lock Selected.
Rotate – этот атрибут не понадобится локаторам коленей, локтей, макушки головы, и направления головы. Также «лочим» атрибуты вращения этих локаторов с непринуждённой лёгкостью.
Translate – чтобы случайно не сдвинуть локаторы спины и грудной клетки — «залочим» у них атрибуты перемещения по всем трём осям. Не переживайте — это не повлияет на Point constrain этих локаторов и их костей. Просто «ручками» подвинуть эти локаторы больше нельзя.
Make Unused Attributes Non Keyable.
Теперь уберём все залоченные атрибуты локаторов из отображения в Channel Box, сделав их Non Keyable.
— Выберите все локаторы,
— откройте окно редактора Channel Control.
Убедитесь, что присутствует галочка в опции “Change all selected objects of the same type” (это позволит изменять атрибуты сразу у всех выбранных локаторов).
— Выбираем атрибуты Scale и Visibility,
— «перекидываем» выбранные атрибуты в раздел Non Keyable нажатием кнопки «Move >>».
Не снимая выбора с локатором, смотрим на Channel Box — атрибуты Scale и Visibility пропали из Channel Box.
Тут может возникнуть вопрос — почему мы не «залочили» атрибут Visibility также как остальные? А потому, что тогда мы не смогли бы выключать/включать отображение локаторов в окне проекции. А убрали из Chanel Box, потому что данный атрибут никак не используется в управлении скелетом.
Выберите только локаторы коленей, локтей, макушки головы, и направления головы, и уберём у них атрибут Rotate.
И последнее, у локаторов Spine и Chest сделайте Non Keyable атрибуты Translate.
Ну вот, если вы сделали всё правильно, то можно проверить удобство работы с моделью на деле – например, попробуйте выставить одну из поз на картинке.
Если же вы дочитали всё до конца, но сами ничего не делали — загрузите проект Dummy_skeleton.mb.
Архив с проектами для этой части: part1.zip.
#Maya, #персонажи, #скелетная анимация
12 марта 2005 (Обновление: 3 дек 2017)