Уроки: Maya

Сложный скиннинг

О себе: Кирилкин Валерий, val172@yandex.ru


3D увлекаюсь несколько лет. Сначала перебивался какими-то мелкими программами, потом узнал Макс, ещё позже - Маю. Как влюбился в неё с первого взгляда, так и не могу оторваться до сих пор... Больше графики люблю только свою жену и мотоциклы :)!

 


Для иллюстрации принципа возьмём простую модель руки:

Skin_01

Далее конвертируем наш поли-объект (Mesh) в сабдивы, не забыв оставить исходник:

Прибавим сабдиву разрешения до трёх и для удобства положим оба объекта в соответствующие слои:

Создаём три кости и цепляем IK:

Далее выделяем Mesh и корневую кость, потом smooth bind по умолчанию:

Skin_02

 Для начала создадим дубликат нашего поли-объекта:

Потом снимем блокировку трансформаций - для этого выделим все «серые»  атрибуты

и, нажав правую клавишу на любом из них, выбираем unlock selected.

Продублируем новый объект ещё раз, отодвинем оба дубля в сторонку и спрячем их в отдельный слой. Также я  для удобства спрятал в свой слой кости и IK.

Теперь нужно создать Blend Shape деформацию. Для этого выделим первый дубль, потом добавим к выделению второй, и только после них – оригинал полигональной руки. Дальше Deform => Create Blend Shape по умолчанию.

Теперь, выделив нашу руку, в редакторе атрибутов мы увидим ноду blendShape1 и два её главных параметра: веса обоих наших дублей.

С помощью этих параметров мы и будем контролировать форму руки при сгибе в локтевом суставе.

Теперь свяжем Mesh с polyToSubd1 посредством Wrap: выделяем сначала polyToSubd1, а потом Mesh. Далее -  Deform => Create Wrap:

Skin_03

Теперь, если мы скроем Mesh и потянем за ikHandle, то увидим, что и наш сглаженный сабдивижн-объект будет деформироваться.

Рука гнётся весьма нереалистично – здесь надо было бы подправить веса вершин, однако данный метод позволяет решить этот вопрос другим способом.

У нас осталась ещё одна нерешённая проблема: нужно переставить местами inputs у полигональной руки, так как на самом деле Blend Shape нужно прицеплять до скининга. Увидеть нашу проблему просто: не отменяя ранее сделанного перемещения ikHandle, надо скрыть polyToSubd1, а у Mesh перейти на закладку blendShape1 и подвигать ползунок Dubl_1. Рука будет возвращаться в начальное место. Нам же нужно добиться, чтобы она только деформировалась. Не забудем отменить перемещение ikHandle.

А исправляем так: на поли-объекте щёлкаем правой клавишей, выбираем Inputs – All Inputs. Потом подводим курсор к Blend Shape и средней клавишей (колесом) перетаскиваем её на Skin Cluster. Эти две ноды должны поменяться местами и Skin Cluster будет сверху:

Теперь, пожалуй, всё готово – перейдём к сути метода!

Открываем окно Set Driven Key:

Выделяем кость предплечья (joint2) и нажимаем Load Driver. В верхней части появится joint2, справа – набор её атрибутов, там мы выделяем rotateY. Далее выделяем нашу полигональную руку, открываем редактор атрибутов, переходим на закладку blendShape1 и нажимаем кнопку Select в нижней части редактора. И теперь нажимаем Load Driven.

Справа от появившегося там blendShape1 выделяем Dubl_1 и Dubl_2.

Проверяем, чтобы значения весов дублей были равны 0. Значение вращения кости тоже должно быть равно 0, если, конечно, вы не сдвинули  ikHandle.

Итак, теперь мы нажмём Key, и у нас создастся ключ, связывающий значения Driver и Driven.

Skin_04

Берём ikHandle (или просто joint2) и сгибаем руку примерно на 90 градусов. В закладке blendShape1 значение Dubl_1 меняем на единицу. Снова нажимаем Key, проверив, чтобы всё было выделено как раньше:

Скрываем Mesh и кости и показываем сабдив и дубликаты. Выделяем Dubl_1 и переходим к редактированию его вершин. Сдвигаем вершины (контролируя результат на сабдиве) с внутренней и внешней сторон локтевого сустава:

Здесь же можно создать и небольшую выпуклость для напряжённого бицепса. Когда результат нас удовлетворяет, можно сохраниться и посмотреть как работает наша система, двигая ikHandle или вращая joint2.

Не очень красиво получается при сгибе градусов на 60 – рука становится слишком толстая:

 

Это тоже достаточно просто исправить. Выделяем Mesh, и загружаем Graph Editor:

Там выбираем верхнюю joint2.Rotate Y (вверху появится blendShape1.Dubl_1) и нажимаем  f:

Выделяем точку, потом её танжент, зажимаем среднюю клавишу и тянем. Также поступаем с другой точкой, пока не получим что-то подобное:

Теперь уже рука выглядит лучше.

Skin_05

Осталось согнуть руку «до упора», в закладке blendShape1 поменять значение Dubl_1 на ноль, а Dubl_2 - на  единицу и поставить Key. Редактируем Dubl_2 и наблюдаем результат на сабдиве. Для достижения особо реалистичного результата придётся помучаться, но что-то приемлемое можно сделать достаточно быстро:

Skin_06 

Вот собственно и всё! С помощью данной технологии можно добиться весьма точного контроля над вашими моделями и автоматизировать движения мускулов.

Конечно, техника может показаться нелаконичной и запутанной - это из-за того, что урок я построил так, чтобы показать как можно больше сопутствующих нюансов. На самом деле всё, даже и не очень гениальное, просто! 

30481 Автор:
Актуальность: 151
Качество: 100
Суммарный балл: 251
Голосов: 28 оценки

Отзывы посетителей:

2 | След.
аватар
 
Skearip 1 0

Меня больше интересует скиннинг у тазе человека

аватар
 
Val Pelm 6 0
Спасибо, друг.
аватар
 
maxer 7 0
Не важно - попал на конкурс, не попал. Но людям помог. Спасибо.
аватар
 
scripterBB 11 0
В MAX это проще.
аватар
 
crest 7 0
Средненький урок.
аватар
 
OrcSWAT 6 0
аватар
 
real arhangel 46 0
в майке я недавно! я от всего балдею!!!
аватар
 
green day 1 0
дарова всем я новичок но помоему неплохо получилось у нево конечно не доконца здел но всеже повысти ему бал чтоб небыл в минус.
аватар
 
LittleTony 2 0
Ну и ЧТО?!
Давным давно извстный способ, далеко не самый эффективный. К тому же ты показываешь как правишь распрямлённую руку для коррекции деформаций, это сложно и не интерактивно, показал бы как делать на деформированой руке. Скачай bodyShape.mel , в нём всё в разы лучше реализовано.
К тому же, от хорошей привязки локтя (самый простой в плане деформаций сустав) до всего тела как от моей деревни до китайской границы. Рассказал бы как плечо хорошо ригить для всего спектра движений -- это было бы интересно.
аватар
 
Val Pelm 6 0
Да, я подтверждаю, что урок опубликован ещё в одном месте.
Но для того, чтобы очистить своё, так сказать, доброе имя, хочу сообщить, что произошло это по причине почти двухнедельной задержки не только в публикации на данном сайте, но даже ответа на не одно моё письмо.
аватар
 
Юлия Ефремова 77 0
К сожалению, урок был опубликован и на другом сайте, что не соответствует условиям конкурса, поэтому его участие прекращается.
аватар
 
Val Pelm 6 0
Благодарю за отзывы.
Согласен, некоторая сумбурность присутствует. Просто хотелось сделать урок достаточно сжатым.
аватар
  Онлайн
Миша Ершов 325 0
Модератор форума
И в начале урока нужно хотя бы осветить цели, задачи и возможно даже небольшой план.
аватар
 
Leshiy 152 0
всё это очень просто для такого сочленения, есть еще колено, пальцы
в сложных конструкциях гораздо сложнее
з.ы. Steven Stahlberg, лет 5 назад про этот метод писал в своём туторе
аватар
 
Михаил Куркубет 24 0
Тема для урока очень хорошая, но сам урок построен из рук вон плохо. Урок должен описывать не просто действие которое надо совершить, а еще и причину по которой мы должны это действие сделать. Делаешь какое то действие - опиши почему оно необходимо. Уроки написанные по такой методике намного лучше усваиваются и читающий их получает более развернутое представление о самой программе и о методах работы в ней.
При таком описании как сделали Вы, все сопутствующие ньюансы о которых вы говорите, сходят на нет.
аватар
 
newfych 5 0
А почему не смус поли - врапа то не нада будет?
аватар
  vip
Skif 2787 0
Администратор 3D галереи
сама идея хорошая, а вот и сполнение...
большой + это дивен кей и бленд шейп.
но большой - это то что не полностью раскрыл тему..
извини но баллы средние.
аватар
 
урок - хороший, полезный.
аватар
 
shidoxx 21 0
cgmuscle можно взять :) а урок хороший!
2 | След.
Зарегистрируйтесь, чтобы добавить комментарий.
Эту страницу просмотрели: * уникальных посетителей