Лицевой риггинг для профессиональной анимации. Часть 2

3. Язык и зубы

Создадим два joint и контроллеры к ним, как показано ниже. Переименуем их тоже.



Сделаем Parent teethUp к кости head, а teethDown к кости jaw. Их соответствующие контроллеры тоже парентим. Потом прискинним Upperteeth mesh к кости teethUp, а lowerteeth mesh к кости teethDown. Каждую кость для зубов сделаем Parent Constrain к соответствующим контроллерам. (15.mb)
Создадим кости для языка и переименуем их как показано ниже. Потом сделаем их Parent к кости jaw и начнем делать скин.



После скина создадим контроллеры для каждой кости языка. Каждой кости сделаем Parent Constrain к соответствующему контроллеру. Каждой нулевой группе делаем Parent Constrain к предыдущему контроллеру. Группу контроллеров сделаем Parent к контроллеру ctrl_jaw. И заканчиваем риг языка и зубов. (16.mb) (16.mov)



4. Глаза и веки.

В центре глаза создадим локаторы. Узнаем центр глаза с помощью edge глаза. Смотрите рисунок ниже. В месте локатора создадим joint. Потом прискинним кости глаза к мешу глаза.



Теперь создадим контроллеры для глаз. Один из них локальный, он поворачивает глаза на месте. А другой контроллер тот, на который глаза смотрят. (17.mb)



Теперь сделаем Constrain всех контроллеров на основе следующей таблицы.





Теперь добавим атрибут Lock к контроллеру ctrl_eye_aim. Этот атрибут контролирует, привязан ли контроллер глаза к голове или нет. Соединим этот атрибут с констрейном группы контроллера. (18.mb) (18.mov)



Теперь сделаем скин волос. Для этого выделим neck, head и hair и Skin>Bind. Потом копируем весы скина головы в скин волосы. Выделив heaD и hair нажмем на Skin>Copy Skin Weights. Переместим Hair в группу mesh. (19.mb) (19.mov)
Пришла очередь сделать риг глаза. Сначала создадим joint под названием Eye_l_socket. Дублируем его. Парентим эти кости к кости головы. Потом добавим их к скину головы.



Теперь создадим кости управляющие веками. Они должны быть вот на этих местах.



Каждый из этих костей состоит из двух частей. Все они начинаются от центра глаза. Потом поправим ориентацию и имена. Обратите внимание на рисунок.



Добавим в скин только кости, которые ближе к векам. Кости, которые начинаются в центре глаза только для поворота костей а не для скина. Скинним кости век как показано ниже. (20.mb) (20.mov)


Теперь создадим контроллеры век. Их поставим на места как показано на рисунке. Иерархию контроллеров тоже сделаем таким образом.



Пивоты контроллеров должны быть в центре глаза. Смотрите рисунок. (21.mb)



Потом констрейним кости к контроллерам как показано на таблице.



Теперь будем делать закрывание верхних век глаз. Для этого откроем Set Driven Key. Выделим ctrl_eye_r_lidUp и ctrl_eye_l_lidUp, нажимаем на Load Driver. Следующие SDK группы загрузим как Set Driven.



Сначала поставим ключ на нулевой позе. Потом переместим ctrl_eye_r_lidUp и ctrl_eye_l_lidUp на -2.5 по translateY. SDK группы поставим на следующие позы.



Теперь на атрибутах translateY контроллеров ctrl_eye_r_lidUp и ctrl_eye_l_lidUp поставим 1. А SDK группы будут как показано ниже.



Сделаем по направлению TranslateX. Сначала поставим ключ на нулевой позе, когда все атрибуты стоят на 0. Потом поставим 1 на атрибутах translateX контроллеров ctrl_eye_r_lidUp и ctrl_eye_l_lidUp. Веки сделаем в следующей позе, поставим ключ.



Потом поставим -1 на атрибут translateX. Щеки сделаем в следующей позе. Когда контроллер перемещается внутрь, щеки тоже перемещаются внутрь и вверх.



Остальные часть контроллеров тоже сделаем таким образом. Выделив группы Grp_l_lids_all и grp_r_lids_all создадим группу под названием grp_lids. Её сделаем Parent к контроллеру ctrl_head. (22.mb) (22.mov)
Теперь сделаем скин ресниц. Для этого выделим кости верхнего века и глазное яблоко и сделаем скин ресниц. Потом копируем вес скина с головы на ресницы. Если нужно поправляем их. Переместим eyeLashes в группу mesh. (23.mb)



Теперь сделаем линии век. Эти линии играют большую роль в анимации.



Создадим кости и контроллеры. Переименуем следующим образом.



Каждой кости делаем Parent Constrain к соответствующему контроллеру. Потом делаем скин. Здесь нужно помнить основной закон. Если в какой-то кости изменится вес скина, в другой кости тоже изменится. Чтобы случайно не изменить вес костей, делаем lock тех костей, которые мы не используем в данной операции. Это предотвратит случайные ошибки. Если соблюдать это правило, то можно сделать скин любой сложности быстро и легко.



Закончив скин сделаем Parent группы grp_eye_l_upperLids и grp_eye_r_upperLids к контроллеру ctrl_head. (24.mb)

5. Брови

Брови считаются одним из важных частей лица, т.к. с помощью бровей мы показываем процесс мышления. Эмоции также проявляются сперва на бровях. Поэтому риг бровей определяет на сколько хорошо получился наш риг. Теперь начнем работу с создания костей брови. Создадим кости и контроллеры в тех местах, как показано ниже.




Кости брови припарентим к кости головы. Три маленькие контроллеры брови при парентим к контроллеру ctrl_brow_l_main. Сделаем Parent Constrain каждый кости к соответствующему контроллеру. Потом дублируем кости и контроллеры брови для правой стороны. Прискинним кости к мешу брови eyeBrow. (25.mb)
Теперь добавим кости брови, в меш лица с помощью Skin>Edit Influences>Add Influences. Начнем поправлять веса. В процессе скина стало ясно, что нужно еще одну кость между бровями. Создадим одну кость и контроллер в центре, между бровями.

Сделаем Parent этой кости к кости головы. Констрейним эту кость к контроллеру ctrl_brow_center с помощью Parent Constrain. Потом добавим в скин головы. Закончив скин припарентим группу grp_brows к контроллеру головы. По частям не показал как сделал скин, думаю, вам будет нетрудно скиннить брови. (26.mb) (26.mov)
Как видим влияние наших контроллеров не оправдывает наши ожидания. Не чувствуется гладкость, упругость кожи и мышцы. Сейчас видно, как будто они прискиннены к костям и контроллерам. Здесь не ощущается, что мышцы контролируют брови. В общем, не похоже на хорошие брови. Для этого поправим перемещение контроллеров, чтобы сделать так, будто мышцы шевелят бровями. Вопрос как будем это делать? Первый и самый обычный способ, это увеличить влияние одного контроллера на окружающие контроллеры. Это трудно сделать с помощью скина. Почти невозможно. Мы сделаем это с помощью Set Driven Key. Ниже будут несколько таблиц для него. Они помогут соединить контроллеры для конкретных поз бровей. Чтобы было легче понять, каждый контроллер назвал обычными буквами.

Когда A двигается по вертикали В тоже должен двигаться на 20% по вертикали. Тогда появиться ощущение что у А есть мускулы под кожи. А соединим с парент группой B. Это является SDK (Set Driven Key) группа. Для этой цели была создана такая группа в иерархии.

Driver Attribute Pose Driven Attribute Pose

ctrl_brow_r_outer TranslateY 0 ctrl_brow_r_mid_SDK TranslateY 0

ctrl_brow_r_outer TranslateY 1 ctrl_brow_r_mid_SDK TranslateY 0.2

ctrl_brow_r_outer TranslateY -1 ctrl_brow_r_mid_SDK TranslateY -0.5



После этого соединим А и В по горизонтали.



Driver Attribute Pose Driven Attribute Pose

ctrl_brow_r_outer TranslateX 0 ctrl_brow_r_mid_SDK TranslateX 0

ctrl_brow_r_outer TranslateX 0.5 ctrl_brow_r_mid_SDK TranslateX 0.2

ctrl_brow_r_outer TranslateX -0.5 ctrl_brow_r_mid_SDK TranslateX -0.2



Когда переместим А вниз, тогда он входят в череп. Для того чтобы исправить соединим эту движению с TranslateZ его SDK группу на 20%.



Driver Attribute Pose Driven Attribute Pose

ctrl_brow_r_outer TranslateY 0 ctrl_brow_r_outer_SDK TranslateZ 0

ctrl_brow_r_outer TranslateY -1 ctrl_brow_r_outer_SDK TranslateZ 0.2



Если добавим 20% поворот по RotateY то у нас получится хороший результат.



Driver Attribute Pose Driven Attribute Pose

ctrl_brow_r_outer TranslateY -1 ctrl_brow_r_outer_SDK RotateY 10

ctrl_brow_r_outer TranslateY 0 ctrl_brow_r_outer_SDK RotateY 0



Если А перемещается вниз тогда E тоже перемещается на 20%.

Driver Attribute Pose Driven Attribute Pose

ctrl_brow_r_outer TranslateY 0 ctrl_eye_r_upperLidD_SDK TranslateY 0

ctrl_brow_r_outer TranslateY -1 ctrl_eye_r_upperLidD_SDK TranslateY 0.2



Когда В перемещается по вертикали нужно подумать как исправить. Потому что сейчас лоб очень деформируется. Если соединим по ниже следующей таблице, тогда у нас будет ощущение что контроллер В перемещается по поверхности лба.

Driver Attribute Pose Driven Attribute Pose

ctrl_brow_r_mid TranslateY 0 ctrl_brow_r_mid_SDK TranslateZ 0

ctrl_brow_r_mid TranslateY -1 ctrl_brow_r_mid_SDK TranslateZ 0.3

ctrl_brow_r_mid TranslateY -1 ctrl_brow_r_mid_SDK RotateX 6

ctrl_brow_r_mid TranslateY 1 ctrl_brow_r_mid_SDK RotateX -13



Вертикальное движение В влияет на А и С 20%. Горизонтальное движение В тоже влияет на A и C 20%.

Driver Attribute Pose Driven Attribute Pose

ctrl_brow_r_mid TranslateX 0 ctrl_brow_r_outer_SDK TranslateX 0

ctrl_brow_r_mid TranslateX 0.5 ctrl_brow_r_outer_SDK TranslateX 0.1

ctrl_brow_r_mid TranslateX -0.5 ctrl_brow_r_outer_SDK TranslateX -0.1

ctrl_brow_r_mid TranslateX 0 ctrl_brow_r_inner_SDK TranslateX 0

ctrl_brow_r_mid TranslateX 0.5 ctrl_brow_r_inner_SDK TranslateX 0.1

ctrl_brow_r_mid TranslateX -0.5 ctrl_brow_r_inner_SDK TranslateX -0.1

ctrl_brow_r_mid TranslateY 0 ctrl_brow_r_outer_SDK TranslateY 0

ctrl_brow_r_mid TranslateY 0.5 ctrl_brow_r_outer_SDK TranslateY 0.1

ctrl_brow_r_mid TranslateY -0.5 ctrl_brow_r_outer_SDK TranslateY -0.1

ctrl_brow_r_mid TranslateY 0 ctrl_brow_r_inner_SDK TranslateY 0

ctrl_brow_r_mid TranslateY 0.5 ctrl_brow_r_inner_SDK TranslateY 0.1

ctrl_brow_r_mid TranslateY -0.5 ctrl_brow_r_inner_SDK TranslateY -0.1



Движение B вниз перемещает F на 20% вниз.

Driver Attribute Pose Driven Attribute Pose

ctrl_brow_r_mid TranslateY 0 ctrl_eye_r_upperLidC_SDK TranslateY 0

ctrl_brow_r_mid TranslateY 1 ctrl_eye_r_upperLidC_SDK TranslateY 0.2

ctrl_brow_r_mid TranslateY -1 ctrl_eye_r_upperLidC_SDK TranslateY -0.2



Чтобы В двигался по горизонтальной поверхности кости под него добавим соединение на поворот SDK группы. Тогда у нас будет очень хороший результат.

Driver Attribute Pose Driven Attribute Pose

ctrl_brow_r_mid TranslateX 0 ctrl_brow_r_mid_SDK RotateY 0

ctrl_brow_r_mid TranslateX 1 ctrl_brow_r_mid_SDK RotateY 14

ctrl_brow_r_mid TranslateX -1 ctrl_brow_r_mid_SDK RotateY -10



Движение С по вертикали влияет на В на 20%, а на I влияет на 10%. Потому что она расположена чуть дальше. Также соеденим горизонтальные перемещения на 20% и 10%.

Driver Attribute Pose Driven Attribute Pose

ctrl_brow_r_inner TranslateY 0 ctrl_brow_r_mid_SDK TranslateY 0

ctrl_brow_r_inner TranslateY 1 ctrl_brow_r_mid_SDK TranslateY 0.2

ctrl_brow_r_inner TranslateY -1 ctrl_brow_r_mid_SDK TranslateY -0.2

ctrl_brow_r_inner TranslateX 0 ctrl_brow_r_mid_SDK TranslateX 0

ctrl_brow_r_inner TranslateX -1 ctrl_brow_r_mid_SDK TranslateX -0.2

ctrl_brow_r_inner TranslateX 1 ctrl_brow_r_mid_SDK TranslateX 0.2

ctrl_brow_r_inner TranslateY 0 ctrl_brow_l_inner_SDK TranslateY 0

ctrl_brow_r_inner TranslateY 1 ctrl_brow_l_inner_SDK TranslateY 0.1

ctrl_brow_r_inner TranslateY -1 ctrl_brow_l_inner_SDK TranslateY -0.1

ctrl_brow_r_inner TranslateX 0 ctrl_brow_l_inner_SDK TranslateX 0

ctrl_brow_r_inner TranslateX 1 ctrl_brow_l_inner_SDK TranslateX -0.1

ctrl_brow_r_inner TranslateX -1 ctrl_brow_l_inner_SDK TranslateX 0.1



Влияние на H соединим с помощью Point Constrain. Для этого создадим локатор под названием loc_brow_center на месте Н. Выделим локатор, потом C, I, группу контроллера H (ctrl_brow_center_0) и сделаем Point Constrain. Тогда эти три объекта влияет на H по 33%.



Вертикальное движение C влияет на G 20%.

Driver Attribute Pose Driven Attribute Pose

ctrl_brow_r_inner TranslateY 0 ctrl_eye_r_upperLidB_SDK TranslateY 0

ctrl_brow_r_inner TranslateY 1 ctrl_eye_r_upperLidB_SDK TranslateY 0.2

ctrl_brow_r_inner TranslateY -1 ctrl_eye_r_upperLidB_SDK TranslateY -0.2



Вертикальное движение очень деформирует лоб. Как будто нет черепа. Для того чтобы сделать как будто сверх черепа есть мышцы, соединим С и SDK группа С в RotateX. Добавим TranslateZ ради красоты. Теперь контроллер скользит по черепу.



Driver Attribute Pose Driven Attribute Pose

ctrl_brow_r_inner TranslateY 0 ctrl_brow_r_inner_SDK RotateX 0

ctrl_brow_r_inner TranslateY 1 ctrl_brow_r_inner_SDK RotateX -10

Вторую часть брови делаем точно так же. После этого сделаем Parent loc_brow_center к grp_brows. А grp_brows к ctrl_head.





500 0 850 7
1
2016-11-12
Очень круто. Спасибо!  Ждём новые уроки.
RENDER.RU