Уроки: Maya

Качественный риггинг руки

Меня зовут Загоруйко Александр. Мне 22 года, я работаю в области 3D-графики в течение 5 лет. Сейчас я главный сетапер и разработчик скриптов в студии Artoon в Воронеже. Студия занимается созданием полнометражных мультфильмов. Риггингом я занимаюсь на протяжении последних 3-ех лет и нахожу это занятие весьма интересным и увлекательным. Собственно в этой области я и хочу расти дальше.
Помимо сетапа мне очень нравится программирование в разном виде:
C/C++,Assembler, Pascal, Python, веб-программирование (php, html, js, css ),Java ME, Lisp.
Другие мои интересы: путешествия,психология и музыка ( играю на скрипке, флейте и на гитаре )

В данный момент работаю над собственным проектом: скриптовой риг человекоподобных персонажей. Проект практически доделан и я скоро буду заниматься его распространением :-)

Основное внимание в этом уроке будет уделено таким темам:
1. Три режима работы руки: IK,FK, ElbowFix
2. Стретч для каждого режима
3. Общее скалирование всей системы
4. Безшвовое переключение режимов IK-FK

Итак, в данном уроке нам предстоит разобрать в деталях как именно делается грамотный риг руки (плеча, предплечья) с необходимым набором возможностей и функций.

Урок рассчитан на достаточно опытных пользователей системы Autodesk Maya , впрочем, все детально объяснено и практически любой начинающий пользователь сможет повторить описанную ниже процедуру.

Начнем по-порядку. Делаем систему из трех костей в начале координат по оси X ( для наглядности мы пока опустим кисть )

Так как кости мы построили строго по оси X, для корректной работы IK-решателя нам необходимо задать "угол-предпочтения" (Preferred angle).
Повернем joint2 по оси Y на -45 градусов и жмем Ctrl+правая-кнопка-мыши. В меню выбираем "Set preferred angle"

Угол предпочтения необходим для того, чтобы IK-решатель знал как именно поворачивать цепочку костей при позиционировании IK-Handle.

Далее, на данном этапе нам нужно сделать 3 копии получившейся системы.
Первая - для FK, вторая - для IK, третья - для ElbowFix ( фиксация локтя )

Выделяем joint1 и жмем Ctrl+d 3 раза. Итого у нас получается 4 системы костей.
А теперь самое время навести марафет. По секрету вам скажу, что порядок в сцене - это 80% хорошего, грамотно-сделанного
сетапа. Такой риг легко отлаживать, заскриптовывать и поддерживать на протяжении всего проекта.

Первую систему ( joint1 ) именуем соответственно arm1_joint, arm2_joint, arm3_joint
Вторую ( joint4 ): armFK1_joint, armFK2_joint, armFK3_joint
Третью ( joint 5 ): armIK1_joint, armIK2_joint, armIK3_joint
Четвертую ( joint 6 ): armElbowFix1_joint, armElbowFix2_joint, armElbowFix3_joint

Создадим несколько "папочек" для организации сетапа в сцене.
Делаем главную родительскую группу arm и помещаем в нее еще одну группу skeleton ( в этой группе мы будем хранить все что связано
с цепочками костей и кинематиками ). Перемещаем в группу skeleton созданные цепочки костей (arm1_joint, armFK1_joint, armIK1_joint, armElbowFix1_joint)

Итого у нас должно получится вот что:

Наведем еще кое-какой порядок в сцене: скроем все атрибуты для группы arm. Запомните, всегда оставляйте в сцене только то, что реально нужно аниматору.
В противном случае вам придется расплачиваться "глюками" под конец проекта :-)

Следующий наш шаг - это настроить каждую систему в отдельности. Начнем с FK.
Давайте скроем все, кроме системы armFK1_joint. Сделаем элементы управления системой FK в виде NURBS-кружков.
Убедитесь, что кружки сориентированы верно, имеют 0 в каналах translate и rotate и 1 в канале scale, а также в истории отсутствует какая-либо информация.
Называем данные контролы соответственно armFK1, armFK2

Помещаем armFK2 в armFK1, тем самым создав FK иерархию для элементов управления.
Далее, соединим контролы и кости: выделяем armFK1_joint и armFK1 и выбираем Constrain->Point->[] ( опции ). Жмем Edit->Reset, а затем Apply.
Также назначим pointConstraint для armFK2_joint и armFK2. В результате у нас каждая кость системы FK управляет по translate соответствующим
элементом управления.

Теперь свяжем вращение контролов и костей. Для этого выделяем последовательно armFK1, armFK1_joint и
выбираем Constrain->Orient->[] ( опции ). Жмем Edit->Reset, ставим галочку Maintain offset, щелкаем Apply.
Аналогично для armFK2, armFK2_joint.
На данном этапе мы имеем кости, управляющие элементами управления по translate, и элементы управления, управляющие костями по rotate.

Наводим порядок: помещаем созданные элементы управления в новую "папку" armFK_controls, которая в свою очередь находится в новой группе arm|controls.
Скрываем лишние атрибуты: у armFK1 оставляем только каналы rotate, у armFK2 только rotateY.

Базовую настройку системы FK мы завершили.

Приступим к IK-системе.
Как и в предыдущий раз скройте все лишнее, оставив только цепочку костей armIK1_joint.
Назначим IK-решатель системе, выбрав Skeleton -> IK Handle Tool -> []. Нажмите Reset. В списке Current solver у вас должно стоять ikRPsolver.
Щелкаем по первой кости (armIK1_joint) в окне проекции,а затем по последней (armIK3_joint).
В результате будет создан решатель инверсной кинематики для цепочек armIK1_joint,armIK2_joint и armIK3_joint.
Назовите полученный ikHandle1 как armIK_IKHandle и поместите его в группу arm|skeleton.

Давайте создадим элементы управления для IK-системы. Сделаем их также из NURBS-кривых.
Создайте кружок и поместите его в район последнего сустава (armIK3_joint). Назовите данный объект armIK.

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

Далее выделите полученные кривые и запустите следующий скрипт:

{ // Данный скрипт переносит шейпы выделенных объектов под трансформ последнего выделенного объекта
string $ls[] = `ls -sl`; // получить список выделенных объектов
if (`size $ls`<2) error "Select at least 2 object to make parenting"; // сообщить об ошибке, если их меньше двух

$parent = $ls[`size $ls`-1]; // последний выделенный объект - родитель для остальных
for ($obj in $ls){ // пройтись по объектам
if ($obj == $parent) continue; // пропустить, если текущий объект - родитель

parent $obj $parent; // иначе припарентить к родителю текущий объект

string $objShape[] = `listRelatives -f -s $obj`; // получить список шейпов для текущего объекта
makeIdentity -apply true -t 1 -r 1 -s 1 -n 0 $obj; // зафризить их

for ($s in $objShape) parent -r -shape $s $parent; // и припарентить к новому трансформу
delete $obj; // удалить трансформ
}
select -r $parent;
}

После выполнения скрипта у вас останется всего один объект, но с тремя шейпами.
Переименуйте полученный объект в elbowIK.
Поместите эти два объекта в группу arm|controls|armIK_controls.
Скройте лишние атрибуты: у elbowIK оставьте только translate, а у armIK оставьте translate и rotate (для ориентации кисти).

Не назначая констрейнтов, перейдем к системе "фиксированного локтя".
Оставьте в сцене только armElbowFix1_joint. Назначьте инверсную кинематику с решателем ikSCsolver от кости armElbowFix1_joint к кости
armElbowFix2_joint. (Skeleton -> IK Handle Tool ->[], Current Solver = ikSCsolver )
И еще один такой же IK-решатель назначьте от кости armElbowFix2_joint к кости armElbowFix3_joint.
Переименуйте IKHandle1 и IKHandle2 соответственно в armElbowFix1_IKHandle и armElbowFix2_IKHandle и поместите эти объекты в arm|skeleton.

Теперь пришла пора связей.
Выделите elbowIK и armElbowFix1_IKHandle и выберите Constrain->Point ( с базовыми параметрами ).
По аналогии armIK и armElbowFix2_IKHandle.
Свяжите локоть и "хэндл руки" полевекторным ограничителем, выделив elbowIK и armIK_IKHandle и выбрав Constrain->Pole Vector.
Выделите последнюю кость системы ElbowFix ( armElbowFix3_joint ) и armIK, затем выделив armIK_IKHandle и выбрав Constrain->Point ( с базовыми параметрами ).
В последнем случае у нас два объекта управляют одним по translate. Рассчет итоговой трансформации определяется по весам в атрибутах pointConstraint ноды.

Давайте добавим атрибут, управляющий режимом "фиксированный локоть".
Запустите следующую команду:

// добавить атрибут "elbowFix" типа double, изменяющийся в пределах от 0 до 1 с начальным значением 0
addAttr -ln "elbowFix" -at double -min 0 -max 1 -dv 0 -k true armIK;

Если значение этого атрибута равно 0,то используется обычный режим IK, если же 1 - используется ElbowFix.
Сделаем это через управляемые ключи ( Driven keys ). Найдите ноду (узел) armIK_IKHandle_pointConstraint1 ( с двумя управляющими объектами ).
Откройте окошко Set Driven Key, нажав Animate -> Set Driven Key -> Set ...
C помощью Load Driver, Load Driven добейтесь соответствия с изображением. Нам необходимо, чтобы атрибут elbowFix управлял двумя атрибутами у pointConstraint.

Нажимаем Key при таких значениях атрибутов: elbowFix = 0, armElbowFix3_jointW0 = 0, armIKW1 = 1
И еще раз при таких: elbowFix = 1, armElbowFix3_jointW0 = 1, armIKW1 = 0

Настройка режима IK завершена.

Далее у нас по плану связать системы FK и IK с основной, но прежде нужно сделать еще один элемент управления.
Данный контрол нужен для управления рукой в целом (скажем, для переключения кинематик, для принудительного скалирования отдельных суставов и т.д.).
Сделаем флажок, назовем его arm_control и поместим его в arm|controls
Добавим атрибут для переключения кинематики и скроем все лишнее:

// добавить атрибут
addAttr -ln "kinematic" -at double -min 0 -max 1 -dv 0 -k true arm_control;

Свяжем системы IK и FK, запустив скрипт:

{
int $num = 2; // число костей

string $basic = "arm"; // название базовой системы
string $basicFK = "armFK"; // FK система
string $basicIK = "armIK"; // IK система

string $end = "_joint"; // оставшаяся часть в названии без цифр

$attr = "arm_control.kinematic"; // атрибут, управляющий переключением кинематики
for ($i=1;$i<=$num;$i++){
select -r ($basicFK+$i+$end); // сперва выделяем FK кость
select -add ($basicIK+$i+$end); // потом IK
select -add ($basic+$i+$end); // а затем основную

string $oc[] = `orientConstraint`; // в итоге у нас две кости будут влиять на последнюю по rotate

setAttr ($oc[0]+".interpType") 2; // shortness

setDrivenKeyframe -at ($basicFK+$i+$end+"W0") -v 1 -dv 0 -cd $attr $oc[0]; // установка управляющих ключей
setDrivenKeyframe -at ($basicFK+$i+$end+"W0") -v 0 -dv 1 -cd $attr $oc[0];

setDrivenKeyframe -at ($basicIK+$i+$end+"W1") -v 0 -dv 0 -cd $attr $oc[0];
setDrivenKeyframe -at ($basicIK+$i+$end+"W1") -v 1 -dv 1 -cd $attr $oc[0]; }
}

После выполнения скрипта атрибут arm_control.kinematic управляет какая именно система влияет на основные кости (0 - FK, 1 - IK)
Скрипт аналогичен серии команд Set Driven Keys с нужными параметрами.

Скройте все, оставив только систему arm1_joint и arm_control.
Теперь свяжем видимость нужных элементов управления, чтобы,скажем, в режиме FK аниматору были доступны только элементы FK.
Выделите armFK_controls и arm1_joint_orientConstraint1 ( нод, который появился после выполнения скрипта выше ) и
откройте Connection Editor (Windows->General->Connection Editor)

Соедините arm1_joint_orientConstraint1.armFK1_jointW0 с armFK_controls.visibility.
Аналогично соедините arm1_joint_orientConstraint1.armIK1_jointW1 с armIK_controls.visibility.

Теперь у нас отображаются только те элементы, которые нужны для данной кинематики.

Все готово, но у нас еще нет кисти. Давайте создадим ее.
Постройте 3 системы как показано на рисунке, переименуйте их соответствующим образом и поместите в arm|skeleton.

Система handFK1_joint предназначения для управления кистью в режиме FK, а handIK1_joint - для IK.

Выделите armFK3_joint и handFK1_joint и выберите Constrain->Point ( с базовыми параметрами ).
Аналогично armIK3_joint и handIK1_joint и arm3_joint и hand1_joint.

Для режима FK нам понадобиться создать контрол на кисть ( NURBS-круг ). Назовите этот элемент armFK3 и припарентите к armFK2
Сделайте, чтобы кость armFK3_joint управляла armFK3 по translate ( через pointConstraint )

Выделите armFK3 и handFK1_joint и выберите Constrain->Orient ( с Maintain offset ).
Аналогично armIK и handIK1_joint.

У armFK3 оставьте только каналы rotate.

Далее с помощью вышенаписанного скрипта настройте переключение IK-FK для кисти.

{ // Этот код настраивает работу кисти для разных кинематик
int $num = 1; // число костей

string $basic = "hand"; // название базовой системы
string $basicFK = "handFK"; // FK система
string $basicIK = "handIK"; // IK система

string $end = "_joint"; // оставшаяся часть в названии без цифр

$attr = "arm_control.kinematic"; // атрибут, управляющий переключением кинематики
for ($i=1;$i<=$num;$i++){
select -r ($basicFK+$i+$end);
select -add ($basicIK+$i+$end);
select -add ($basic+$i+$end);

string $oc[] = `orientConstraint`;

setAttr ($oc[0]+".interpType") 2; // shortness

setDrivenKeyframe -at ($basicFK+$i+$end+"W0") -v 1 -dv 0 -cd $attr $oc[0];
setDrivenKeyframe -at ($basicFK+$i+$end+"W0") -v 0 -dv 1 -cd $attr $oc[0];

setDrivenKeyframe -at ($basicIK+$i+$end+"W1") -v 0 -dv 0 -cd $attr $oc[0];
setDrivenKeyframe -at ($basicIK+$i+$end+"W1") -v 1 -dv 1 -cd $attr $oc[0];
}
}

2 | След.
32574 Автор:
Актуальность: 675
Качество: 674
Суммарный балл: 1349
Выбор Публики
Голосов: 72 оценки

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

2 | След.
аватар
 
minstrel 26 1
Цитирую m.r.k.:
По моему проще все руками сделать, чем вникать во все премудрости данного скрипта.
Хотя тому, кто умеет видимо просто.
Очень много времени нужно на понимание написанного!

Описывать сложные технические вещи так,чтобы было понятно даже самому начинающему сетаперу - целое искусство. Попробуйте объяснить начинающему музыканту как сыграть Чакону Баха. Тут примерно также.
Если не понятно - не заморачивайтесь, придет время - разберетесь.
ПС: По-моему, описывать все действия словами намного более заморочно и непонятно. Умение программировать и понимать код - неотъемлемая часть разработки сетапов.
аватар
 
M.R.K.(MindThrow... 380 0
Модератор форума
По моему проще все руками сделать, чем вникать во все премудрости данного скрипта.
Хотя тому, кто умеет видимо просто.
Очень много времени нужно на понимание написанного!
аватар
 
ыых 2 0
ладно, не буду спорить, каждый сам решает, я так понял тяжестью рига вы не заморачиваетесь, у Виктора в риге не стандартые возможности, а максимально оптимизированные , есть все что нужно и нечего лишнего, ну кроме скейла костей , хотя я думаю он мог бы еще кучи фигни прилепить, типа шоб круто было... я видел перевешанные риги где реально использовалось 2/3 возможностей а оставшаяся треть просто ела фпс ... + кажый аниматор знает , что будет фазовка, и чем меньше атрибутов он заанимирует тем больше счастья ему будет
аватар
 
minstrel 26 0
Цитирую:по 1. все просто до безобразия- начиная вроде с 2008 маи в икхендле есть атрибут ikBlend

Мы данный режим еще давно забраковали - оказалось неудобно и не особенно функционально.
Если есть файл с хорошим ригом руки по этой технологии - пришли, пожалуйста. Интересно посмотреть на некоторые моменты. Описать их просто трудно.

Цитирую:3. переключатель ИК -ФК на кисти нафиг не нужен, это просто не удобно- чтобы поставить кисть в позу тебе надо будет ее повернуть в одной плоскости твистом, а чтоб наклонять в другой плоскости за ик контрол тягать... нафига?? все отлично крутится в ФК

Ну переключатель кинематик можно вынести куда-то еще. Это не так принципиально.
В наших сетапах, скажем, общие атрибуты для всех кинематик весят на дополнительном контроле-флажке: переключение кинематик, принудительное скалирование и т.д. У каждого контрола есть менюшка и через нее очень даже удобно переключать паренты или кинематики - работай хоть в ИК, хоть в ФК.

Цитирую:7. добрые аниматоры у вас, но я какбы просто делаю замечания как сделать лучше, дальше уже дело риггера, между локтем и полвектор контролом всегда должно быть свободное пространство тк при сдвиге локтя назад он просто флипится и аниматору надо его постоянно оттягивать в то время как анимировать он должен его по назначению те для поднятия и опускания локтя , а не для убирания глюков... но тут конечно твой снап ИК к ФК не сработает... хотя он не сработает и из-за системы в одну цепочку, но в таком варианте снап легко реализуется ) оставляю на самостоятельный R&D, там ничего космического нет)

Свободное пространство между локтем и контролом добавляется просто - это уже дополнение. В уроке не получилось рассказать обо всех прям тонкостях - некоторые вещи я упустил, некоторые я только позже узнал как делать.
Главное тут - технология. Вот, к примеру, на нашем рабочем сетапе все это сделано и работает без глюков.

Цитирую:Ты наверняка видел риг Victora Vinyals - с точки зрения аниматора это эталонный картунный риг, разве что нет скейла отдельно по костям, на него и ровняйся, у него кстати на 1 цепочке конечности

Прямо так и скажу, что наш сетап отнюдь не хуже сетапа Витьки. Да и у него там в общем-то стандартные возможности.

Цитирую:Ыых, ElbowFix нужен, как я понимаю, когда локоть стоит на столе, а двигается не только предплечье, но и тело. С FK тело не подвигаешь - локоть сдвинется.

Правильное уточнение. Локоть фиксируется независимо от положения тела.
аватар
 
ыых 2 0
Klich согласен, такой экзотический вариант может произойти, типа перс раскачивает тело и одновременно обмахивает себя газетой и это при упертом локте, НО скорее всего в седующую секунду потребуется IK чтобы встать а переключалка без снапа, чтобы сделать снап нужно будет учитывать , что плечевая кость скорее всего будет застретчена тк отслеживать это трудно... вобщем конечно имеет право быть фишка для этого редкого случая, но это надо доводить до ума без снапа это нерабочий вариант тк прийдется подгонять при переключении, а это практически тоже самое , что на 3 взмаха аккуратно поправить ИК чтоб локоть оставался на месте ...
аватар
 
Klich 19 0
Ыых, ElbowFix нужен, как я понимаю, когда локоть стоит на столе, а двигается не только предплечье, но и тело. С FK тело не подвигаешь - локоть сдвинется.
аватар
 
ыых 2 0
Цитирую:Я бы добавил еще один режим. IK c динамической кривой. Режим "безвольно болтающейся руки". Часто в таком режиме двигаются руки, если перс оглядывается назад.
аниматоры такое очень не любят, теже плечи, которые всегда поднимаются с руками нельзя автоматизировать, будут ругать))
аватар
 
ыых 2 0
2 случай когда ИК удобней ФК - свободные руки в походке или замах рукой - тут наоборот ФК удобней ИК
аватар
 
ыых 2 0
ко мне можно и на ты, я не так стар и уважаем)
по 1. все просто до безобразия- начиная вроде с 2008 маи в икхендле есть атрибут ikBlend
2. чтобы делать юзерфрендли риги нужно начать самому анимировать
Цитирую: Как вы будете фиксировать локоть в режиме ФК, если, скажем, персонаж поставил его на стол?
не совсем понял в чем проблема, именно в случае когда персонаж поставил локоть на стол используется FK, локоть недвигается пока не начшешь двигать плечевую кость, а предплечьем можно махать свободно, 2 случай когда ИК удобней ФК - свободные руки в походке или замах рукой, а любые опирания на кисть или попыики попасть кудато кистью- ИК... с ногами ФК нужен наверное только при позе нога на ногу, ну и не говорю уже что нет снапа из этого ElbowFix в IK, вобщем как по совместительству аниматор я не вижу применения этой фищки
3. переключатель ИК -ФК на кисти нафиг не нужен, это просто не удобно- чтобы поставить кисть в позу тебе надо будет ее повернуть в одной плоскости твистом, а чтоб наклонять в другой плоскости за ик контрол тягать... нафига?? все отлично крутится в ФК
5. по поводу того что делать вместо экспрешенов нодами это круто и быстро считается , не спорю, но если собирать что-то большое и навороченое - это нереально тк всегда есть процесс отладки и испытания идей и последующих изменений, в гуде да -замечательный граф для нод , но в мае это ад, поэтому чтобы совместить плюсы кода и скорость скомпиленых нод - лучше делать свои ноды на питоне, на питоне это уже не так геморно как на С++

7. добрые аниматоры у вас, но я какбы просто делаю замечания как сделать лучше, дальше уже дело риггера, между локтем и полвектор контролом всегда должно быть свободное пространство тк при сдвиге локтя назад он просто флипится и аниматору надо его постоянно оттягивать в то время как анимировать он должен его по назначению те для поднятия и опускания локтя , а не для убирания глюков... но тут конечно твой снап ИК к ФК не сработает... хотя он не сработает и из-за системы в одну цепочку, но в таком варианте снап легко реализуется ) оставляю на самостоятельный R&D, там ничего космического нет)

Ты наверняка видел риг Victora Vinyals - с точки зрения аниматора это эталонный картунный риг, разве что нет скейла отдельно по костям, на него и ровняйся, у него кстати на 1 цепочке конечности
аватар
 
Klich 19 0
Тоже с запозданием немного. 5/5... И тоже чуток замечаний. На мой естественно взгляд.
"Скрываем лишние атрибуты: у armFK1 оставляем только каналы rotate, у armFK2 только rotateY...."

- Лишние атрибуты в контролах я не только скрываю, но и лочу. А то манипулятором даже скрытые атрибуты можно случайно подергать.


IK/FK я по крайней мере предпочитаю на одной цепочке. Все же проще и не менее функционально.


Режим ElbowFix - интересно ( как раз сейчас делаю один сетап, попробую).


Я бы добавил еще один режим. IK c динамической кривой. Режим "безвольно болтающейся руки". Часто в таком режиме двигаются руки, если перс оглядывается назад.
аватар
 
minstrel 26 0
Цитирую ыых:
1. делать такой сетап с 3 цепочками костей это древний олдскул, так щя никто не делает, все можно сделать с одной и риг будет быстрее

Ежели можно было бы быстрее сделать - отлично. Можете подсказать решение с одной цепочкой?

Цитирую ыых:
2. что за ElbowFix , зачем она нужна? все ее возможности в анимации с лихвой реализует FK, только утяжеляешь риг, а риг должен быть легкий по максимуму, без ненужных фишек

Лично мне не очень понятно каким образом ФК реализует возможности ElbowFIX. Как вы будете фиксировать локоть в режиме ФК, если, скажем, персонаж поставил его на стол?

Цитирую ыых:
3. IK для кисти это даже хуже ElbowFix) совершенно ненужная вещь опять добавляющая путаницы аниматору и бесполезная

Что вы имеете в виду?

Цитирую ыых:
4. вот что стоит добавить это скейл костей по отдельности, это незаменимая вещь при создании силуэта

В общем да, такую штуку забыл добавить в урок. Принудительное скалирование на каждый сустав.

Цитирую ыых:
5. создание стретча на нодах дивайд и нодах условий это write only метод, тоесть если кто-то будет дорабатывать за тобой риг - он тебя проклянет тк в мае ужасный гиперграф и фиг поймешь что ты там насоединял, чтобы было быстро, читабельно и исправимо - загнать все на питоне в одну ноду

Мой взгляд на этот вопрос:
1. На базовых нодах FPS вполне хороший.
2. В студии мы программируем наши сетапы и нам нет необходимости разбираться в уже сгенерированном риге - вместо этого мы смотрим код.
3. Не в моем стиле делать собственные ноды для тех случаев, когда можно обойтись стандартными возможностями.

Цитирую ыых:
7. Мне он очень нравится, наверное потому что я его сам и придумал ( вроде бы не встречал аналогий, хотя способ гениален ) ... ну какбе плохо искал ты в инете)) но велосипеды тоже поощряются... у тебя упрощенная версия нормального способа, который ну совсем не секрет и юзется оч давно, да и другого я не встречал, на нормальном риге с нормальным оттянутым от сустава локтевым контролом твой укороченый способ не сработает... за такой контрол в локте аниматоры могут наложить проклятье)

Мы используем данный способ и проблем с переключением нет. Аниматоры не ругаются.

Цитирую ыых:
8. "Для чего данная группа? А вот для чего: выделите armFK3 и эту группу и выберите Constrain->Point ( без Maintain offset ) и Constrain->Orient ( C Maintain offset! ) " - тут совершенно пофигу с Maintain offset или без или перент ваще сделать

Без Maintain Offset можно было бы делать, если бы вы были точно уверены, что у вас одинаковая ориентация у FK и IK контрола.
В общем случае Maintain Offset нужен.

аватар
 
ыых 2 0
хороший урок, с припозданием поставил 5/5 несмотря на все неровности... ну и немного критики, странно что никто не высказался... но думаю автору будет полезно

1. делать такой сетап с 3 цепочками костей это древний олдскул, так щя никто не делает, все можно сделать с одной и риг будет быстрее
2. что за ElbowFix , зачем она нужна? все ее возможности в анимации с лихвой реализует FK, только утяжеляешь риг, а риг должен быть легкий по максимуму, без ненужных фишек
3. IK для кисти это даже хуже ElbowFix) совершенно ненужная вещь опять добавляющая путаницы аниматору и бесполезная
4. вот что стоит добавить это скейл костей по отдельности, это незаменимая вещь при создании силуэта
5. создание стретча на нодах дивайд и нодах условий это write only метод, тоесть если кто-то будет дорабатывать за тобой риг - он тебя проклянет тк в мае ужасный гиперграф и фиг поймешь что ты там насоединял, чтобы было быстро, читабельно и исправимо - загнать все на питоне в одну ноду
6. тут все так только с точностью до наоборот
"На обычном языке это звучит так:
если Скалирование-по-оси-Х будет меньше,чем minSquash, то вернуть минимальное скалирование ( minSquash, 1/minSquash ), иначе вернуть реальный скейл ( нод multiplyDivide )"

7. Мне он очень нравится, наверное потому что я его сам и придумал ( вроде бы не встречал аналогий, хотя способ гениален ) ... ну какбе плохо искал ты в инете)) но велосипеды тоже поощряются... у тебя упрощенная версия нормального способа, который ну совсем не секрет и юзется оч давно, да и другого я не встречал, на нормальном риге с нормальным оттянутым от сустава локтевым контролом твой укороченый способ не сработает... за такой контрол в локте аниматоры могут наложить проклятье)

8. "Для чего данная группа? А вот для чего: выделите armFK3 и эту группу и выберите Constrain->Point ( без Maintain offset ) и Constrain->Orient ( C Maintain offset! ) " - тут совершенно пофигу с Maintain offset или без или перент ваще сделать

а так молодца канешно!)
аватар
 
minstrel 26 0
Цитирую Shaibanihan:
Какими фильмами может похвастаться ваша студия?

У нас пока только один законченный проект и он скоро должен выйти в прокат. На данный момент делаем второй мультфильм.
аватар
 
Shaibanihan 5 0
Какими фильмами может похвастаться ваша студия?
аватар
 
minstrel 26 0
Цитирую ClinicalFilm:
привет земляку!!!)) спасибо за урок, все достаточно просто и гениально ... есть один вопросик ... когда вставляется оснастченный персонаж в сцену инстансом, все имена объектов переписываются ... что делать со скриптом, преписывать в ручную имена, или есть лекарство? подскажи пожалуйста, а то у меня стопор ... как-то не мобильно со скриптом получается.... в выражениях куда ни шло ... там все автоматом меняется ...

Привет! я ответил по этой теме тебе в топик )
"Это называется пространством имен или неймспейсом.
А решается это просто: сам скрипт должен уметь обрабатывать неймспейсы,
Скажем:
1. У тебя есть контрол leg
2. Ты импортнул перса в сцену
3. Теперь у тебя имя объекта my_pers:leg

Реально в сцене может быть сколько угодно таких персонажей и твоя панелька должна работать с каждым из них. Единственное,что меняется у таких персонажей - неймспейс.
Возьмем такую процедуру (она определяет выделена ли нога персонажа):

proc isLegSelected(){
string $ls = `ls -sl`; // список выделенных объектов

string $buffer;
int $size = `tokenize $ls ":" $buffer`; // разбить строку на части

if ($buffer=="leg") print "Leg is selected";
}

Суть такова - берешь имя объекта, вычленяешь неймспейс и работаешь с конкретным именем.
"
аватар
 
volodyaRenderber... 14 0
привет земляку!!!)) спасибо за урок, все достаточно просто и гениально ... есть один вопросик ... когда вставляется оснастченный персонаж в сцену инстансом, все имена объектов переписываются ... что делать со скриптом, преписывать в ручную имена, или есть лекарство? подскажи пожалуйста, а то у меня стопор ... как-то не мобильно со скриптом получается.... в выражениях куда ни шло ... там все автоматом меняется ...
аватар
 
minstrel 26 0
Цитирую gecka:
я думал это без скриптов делается

Скрипт - это всего лишь способ автоматизации ручных действий. Все перечисленное можно было бы сделать и вручную, только какой толк писать об этом в таком виде: "соединям атрибут blendTwoAttr2.output с атрибутом condition1.colorIfTrueR". Это не очень наглядно и к тому же можно легко ошибиться.
Лучше написать скрипт, который не ошибается и четко показывает нам схему работы.
аватар
 
gecka 69 0
я думал это без скриптов делается
аватар
 
Вадим Евлахов 1 0
Так... Санёк фишки выкладывает... Видимо проект закончен?)
аватар
 
Aleksandr Anisimov 1 0
очень интересно :)
2 | След.
Зарегистрируйтесь, чтобы добавить комментарий.
Эту страницу просмотрели: 615 уникальных посетителей