четверг, 31 марта 2011 г.

Червяки, шкура и резиновые руки.

Итак, по порядку...
Карты, деньги, 2 ствола!

Ой... что-то не так.
А! Червяки, шкура и резиновые руки.
Вот теперь правильно! Так называлась 9-ая ПЗ-шка.

"Понеслась!" -- как говорит Саша. )))

Создаём риг для червячка по имени Гусица :)

Открыла сцену. Ути-пути, какое милое создание! :)))


Первый вопрос, -- как смоделирована? и сразу, почти уже механически нажала клавишу "1"

Ладно, создаём скелет :))

Root в районе шеи. Двигаемся к хвосту.
Как всегда создаю скелет в одном из проекционных окон. в данном случае -- Side view
Хотите создать ровненький по горизонтали скелет? Зажмите Shift и наслаждайтесь результатом! :)))


Скелет готов.
Прискиним скелет к геометрии гусеницы

Выделяю скелет и геометрию гусеницы и выполняю команду Skin=>Bind Skin=>Smooth Bind


Прискинили.


Теперь нужно создать гибкость нашему скелету.

Зайдём в настройки инструмента Skeleton=>IK Spline Handle Tool. Выделим Root кость гусеницы, затем последнюю кость. Теперь нашим скелетом управляет кривая созданная инструментом IK Spline Handle Tool. (обычный IK HandLe не даст возможности гибко управлять скелетом, так как у него нет кривой как в IK Spline Handle. Этот Tool как правило применяется для настройки гибких частей тела персонажа -- длинные хвосты, длинная шея, спина)


Заглянем в Outliner
Видим IK и видим кривую.

Выделим кривую (и скроем кости на некоторое время для работы с кривой)

Посмотрим сколько точек на нашей кривой? (CTRl+RMB)

4, а нам нужно 5 точек для управления скелетом.
Сделаем Rebuild Curve.

Выделим кривую, в настройках команды Rebuild Curve выставим Number of Spans = 2 и в итоге мы получим 5 точек на кривой





Теперь мы можем управлять нашей кривой, но работать с Control Vertex не очень удобно, выделяя их, поэтому создадим для Control Vertex контроллеры в виде кластеров (clusters).
Поочерёдно выделяя каждый Control vertex назначим ему кластер.

С последним Control Vertex-ом у меня возникла небольшая загвоздка.
Пыталась выделить 1 вертекс, но при этом выделялся IK.
Рекомендация Саши как всегда сделала меня счастливей! Скроем видимость IK на время.
И теперь у нас появилась прекрасная возможность выделить последний Control Vertex и назначить ему кластер.

Ура!

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

Тут у меня возник вопрос-- а нельзя было создать СРАЗУ контроллеры в виде nurbs кривых на Control Vertexes, минуя создание кластеров?
Оказалось, что нет такой возможности.
Кластер в нашем случае является посредником между Control vertexes кривой и управляющими кривыми, которые мы собираемся создать.

Создаём вдоль тела гусеницы 5 Nurbs окружностей (можно любое количество, оно определяется длиной вашего персонажа и число управляющих кривых определяете только вы сами) и расположим их пропорционально друг от друга вдоль туловища гусеницы.

Передвиньте каждый кластер к соответствующей окружности.


Отфризьте окружности и припарентите к этим окружностям кластеры. (выделяем кластер, кривую, команда Parent (P))

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

Переименуем кривые для удобства

Риг почти готов. Осталось создать контроллер для головы.
Создадим nurbs окружность и поместите ее над головой гусеницы.
Pivot этой окружности поместим в кость головы.


Отфризьте окружность, затем выделите окружность, кость головы и выполните команду Parent Constrain.



Включим отображение джоинтов (вы уже знаете, где это можно сделать)

Назовём в Outlinere управляющую кривую для головы как Hand_CTRL


А сам контроллер головы припарентим к первому контроллеру спины.

Глаза (в идеале предварительно их сгруппировав) припарентим к кости головы с помощью Parent Constrain (а не просто parent).

Саша: "Parent Constrain через группу дает больше гибкости, к примеру если просто припарентить глаза к голове, то скрыв кости ты скрываешь и глаза,
Через группу ты можешь поправить положения глаз, сделать им дополнительную анимацию"

Я:"Нужно развивать нутро, чтобы почувствовать что и как нужно настраивать."

Саша: "нутру опыт нужен, шишки и грабли"

Шишки и грабли нашла, а вот опыта -- нет! :(( ;-)


Мы почти настроили нашего червячка :)

Теперь придадим гусенице свойство растягиваться.

Для создания эффекта растяжения нам понадобится информация о длине кривой. Для этого выделим нашу IK Spline кривую и в Command Line впишим следующий текст:

arclen -ch on

Звучит как магическое заклинание, не правда ли? ) ))))


Нажмём Enter чтобы выполнить команду.

После этого у нашей кривой появится нода сurveInfo1, которая хранит в себе информацию о длине кривой.

Выделим кривую, зайдём в Window=>Hypergraph: Connections и найдём ноду curveInfo.


Кликните в гиперграфе на пустом месте RMB и в выпадающем окне зайдите Rendering=>Create Render Node…


В открывшемся меню найдите ноду Multiply/Divide и кликните по ней LMB.

В гиперграфе появится нода multiplyDivide1. Эта нода умножает либо делит входящие значения на определенное число.

Эти манипуляции с числами немного стрёмные для меня лично, но на самом деле, тут ничего страшного нет.

Теперь свяжем атрибут длинны ноды curveInfo1 (arcLength) с атрибутом input1X ноды multiplyDivide1.


Для этого в гиперграфе кликним и зажмём MMB на ноде curveInfo1, переместите курсор на ноду multiplyDivide1 и отпустите MMB. В выпадающем меню выберите тип связей other.


Откроется Connection Editor.

В меню Connection Editor поставьте галочку Left Display=>Show Non-Keyable.


Выделите слева атрибут arcLength, а справа атрибут input1X.


Теперь информация о длине кривой передается в ноду Multiple/Divide.

Выделим в гиперграфе ноду multiplyDivide1. Зайдём в ее атрибуты (вкладка Multiply-Divide Attributes):
поставим режим Divide во вкладке Operation.


Затем скопируем значение Input1 по X и вставим его в значение Input2 по X.

Это значит, что значение длинны кривой будет все время делится на число 0.516.

То есть в данном случае 0.516 / 0.516 =1 это и будет значение для скейла наших костей. К примеру если мы растянем кривую до 1.
То 1 / 0.516 = 1,937 на это значение отскейлится кость.

Осталось привязать результат вычислений ноды multiplyDivide1 к атрибуту масштабирования кости по оси, которая смотрит в Bone.
В нашем случае, это ось Х.

Итак откройте Connection Editor.



Слева загрузите ноду multiplyDivide1 (чтобы это сделать нужно выделить ноду multiplyDivide1 в Hypergraphe), а справа последнюю кость скелета (выделить последнюю кость скелета в сцене и нажать кнопку Reload Right в Connection Editor). Слева выделите атрибут outputX а справа scaleX (у меня по X)



Проделаем это для всех костей скелета кроме головы, перезагружая только правую часть в Connection Editor.



Теперь наша гусеница растягивается!


Можем поупражняться в анимации.

Моя первая попытка анимировать гусеницу не удалась, так как я не совсем понимала, как на какие атрибуты каких объектом ставить ключи. Я передвигала кривую, ставила ключ, перемещалась в другой кадр, двигала другую кривую, ставила ключ и из этого у меня ничего толком не вышло.

Я была разочарована до слёз, но... нужно было просто дождаться следующей лекции! :))

А вот вчера я узнала, что

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


Но и это не совсем оказалось удобным (выделять каждый раз все управляющие кривые.)

И для этого есть супер функция, позволяющая создать Set атрибутов, на которые будут назначены ключи по нажатию клавиши "S" (после выставления нужной нам позы для персонажа)

Итак , рассмотрим чуть подробней создание Character Set.

Для того чтобы анимировать нашу гусеницу, нам придётся ставить её в ключевые позы, двигая наши управляющие кривые.

Поэтому все ключи будут стоять на атрибуты трансформации.


Выделим все управляющие объекты в нашей сцене.
Зайдём в опции меню Character -- Create Character set


Name -- назовём наш сет именем персонажа -- Gusica_Char
А в Attributes поставим галочку All Keyable except:
и тут в данном случае я оставила атрибуты для Translate и Rotate, а остальные атрибуты не буду включать в создание сета.

Я могла в принципе выбрать опцию -- From Channel box, Выделить нужные мне атрибуты в Channel Box-е, на которые будут создаваться ключи.
Тоже довольно удобно.

Жмём кнопку Create character Set, тем самым подтверждая наш выбор.


Мы создали наш сет, который упростит создание анимации для гусеницы.
В Outliner создался наш Set (с иконкой в виде человечка), а атрибуты подсветились жёлтым цветом.(Мы сможем ставить на них ключи!)



Теперь после того, как мы выставим нужную позу для гусеницы в нужном нам кадре, при создании ключа (нажав S) у нас будут ставиться ключи на атрибуты ВСЕХ управляющих объектов.

Очень удобно!

Зная об этом, легко и весело поползла моя гусеница.

среда, 30 марта 2011 г.

Гусеница. Create Character Set

Почему я вчера такая расстроенная была? :)

А всё потому, что я не знала на тот момент о замечательной функции Maya -- Create Character Set.
О ней завтра чуть подробней, так как на часах почти полночь, а мне через несколько часов вставать на работу.

Но гусеницу после сегодняшней лекции я не могла не сделать! :))

вторник, 29 марта 2011 г.

Анимация. Пз-9

Анимация, ты меня убила! :(

Создание скелета под анимацию персонажа. Boy

Решила заново "с нуля" пройти путь создания скелета.
(для закрепления материала)

Проверяем, чтобы персонаж смотрел на Z.

Поехали!

Меню Animation -- Sceleton -- Joint Tool

Выбираем инструмент и начинаем создавать скелет, начиная с Root-- первый joint (обычно находится в месте таза)
(я начинаю создавать скелет из Front View)


Двигаясь от Root-а вверх по позвоночнику ставим джоинты (на рисунке от 1 до 7)





Нажав Enter, мы обрываем нашу связь с инструментом.
Выбрав снова инструмент Joint Tool продолжаем делать скелет для левой половины нашей модели.
Я решила продолжить с ноги.

Нажимаем на Root и продолжаем "наращивать" кости вниз по ноге. (при этом не забывайте переходить в разные view окна, чтобы посмотреть правильно расположение joint-ов.)
подвинуть joint можно нажав клавишу D в режиме перемещения (Move)



Затем наращиваем кости руки.

Нам осталось сделать кости для запястья. Тут я посоветую начинать со среднего пальца. (в этом случае, ось будет смотреть в центр кисти руки и нам не нужно будет переназначать её локальную ось в будущем для правильного поворота)

Для этого лучше всего перейти в TOP View.



Сделаем теперь кости и для остальных пальцев.


Подвинем joints на свои места, используя для этого разные View панели.



Теперь предстоит немного рутинная, но очень важная работа. Нам нужно дать имена всем джоинтам нашего скелета. Это позволит нам в дальнейшем при переносе левой половины скелета на правую сторону, сэкономить время. Да и работать с названными правильно джоинтами всегда удобно. :)

Называть все джоинты с левой стороны скелета лучше начиная с "L_"
Позже вы поймёте для чего мы это делали.







Теперь займёмся не менее важным процессом. Нам нужно проверить направление всех локальных осей для joints в созданной половине скелета.

Для более удобной работы с осями, включим их отображение.

Выделим всю иерархию нашего скелета


И вызовем отображение локальных осей вращения.

Меню Display -- Transform Display -- Local Rotation Axes


Наша главная сейчас задача -- проверить правильность направления локальных осей для joints.
Лично мне потребовалось время, чтобы понять, что значит -- Правильно!?

Ответ нашла только когда начала вращать джоинты. Главное, чтобы они вращались по осям, по которым анатомически правильно должна двигаться геометрия персонажа.


Если вы заметили, что оси располагаются неправильно, вы можете исправить это двумя способами:
1. Команда Orient Joint (выбрать нужную ориентацию в опциях)
2. Вручную. Для этого нужно перейти в режим выделения компонентов (нажав клавишу F8) и нажать иконку с вопросительным знаком (Select miscellanious components).


Установите локальную ось нужного вам джоинта так как вам нужно. (помните, что при этом вы не должны находиться в Gimbal, иначе вы не сможете двигать оси)

Теперь направление локальных осей джоинтов проверено, все джоинты переименованы.
Мы можем сделать вторую половину скелета.

Для этого выделите один родительский джоинт левой половины (например, для руки)


Затем зайдите в опции команды Mirror Joint. Выберите оси, относительно которых будет происходить отзеркаливание скелета.

Здесь чуть подробней остановимся на опциях Mirror Function.
Принципиально важно понимать, как образуется другая сторона скелета, выбрав Bihavior или orientation.

Итак, Bihavior.
Применим его и посмотрим на результат.

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


Повращаем joint (откуда растёт рука). Вращение правильное.

Сделаем откат назад (Ctrl/Z) и поставим галочку теперь в Orientation


И повращаем снова joint. А вот теперь он вращается не так как нам нужно.

В режиме Orientation ориентация не отражается, а просто дублируется, то есть вращая левую и правую кость одновременно они будут крутится в разных направлениях



Поэтому остановимся на Behavior.

В строке Search for укажите начало названия всех ваших джоинтов для левой половины скелета "L_" (вот где пригодилось переименование джоинтов!)
и в строке Replace With впишите "R_"

В этом случае, все ваши новые отзеркаленные джоинты для правой стороны создадутся с правильными именами, которые будут начинаться на R (right), и в будущем вам будет легко найти их при необходимости в Outlinere.

То же самое проделайте для ноги



Готово! Мы создали с вами скелет для персонажа для дальнейшей анимации.



И ещё, пока не забыла.. После создания скелета перед настройкой setup-а оси вращения всех джоинтов должны быть в нуле.


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