| Приlinkовываем стрелочку к жо.. к первой кости спины, и ставим на
место - к первой ик, вы заметили, что шейп прошел половину расстояния
от пройденной курсором мышки - потому, что на него действует два
контроллера - если вы подвинете копыто, то он пройдет половину
расстояния пройденного копытом. Создаем еще одну ик и прилинковываем
все как на картинке. Не знаю как у вас, а у меня работает, правда
стрелочка как то сильно кости равняет, (при беге лошадь старается
поставить ногу так что бы первая и третья кость были параллельно ,по
этому ставлю копыто в максимальное переднее положение и подвигаю
стрелочку, так что бы кости были параллельны, отодвигаю в крайнее
заднее положение копыто и в motion панели добавляю вес на Position
Constrain пока кости не выровняются. То есть система получившаяся в
ходе наших манипуляций действует автоматически, когда мы двигаем копыто
- работает вся нога, но в тоже время мы в любой момент можем
подкорректировать положение - такой полуавтомат получился. ( Мы не
смогли бы этого сделать, если бы назначили одну ик на все ногу.)
Маленькое замечание - так как на один из управляющих объектов действует
два объекта, то при анимации следите, чтобы ключи ( пиковые)на оба
шейпа были на одном кадре, позволяет избежать не нужных нам замедлений
и внезапных ускорений. Теперь по вращаем копыто - у меня у нижней кости
угол наклона такой же, как и у шейпа, но положение меняется (чуть не
забыл пивот - то есть точка оборота, не только является тем, чем есть,
но также эта точка, по которой пишется вся анимации ,положение объекта,
например по оси х это положение не самого объекта, а его пивота - ведь
пивот может быть смещен, по этому, прежде чем приступать к ригу -
поставьте центр трансформаций по пивоту), Кость вращается вокруг пивота
копта - мы можем убрать вращение, поставив пивот шейпа на мест третей
ика, но мы сделаем немного по-другому - заходим в иерархи панель
(рядышком с motion), и включаем Effect pivot only, ставим пивот на
краешек копыта спереди - так как копыто топает не заметно при беге, но
в самой дальней точке поворачивается на носке, то можно избежать
добавочных контролеров сзади и посередине. Создаем пару Points -спереди
и сзади. Назначаем на обе ik в Motion панели таргеты- точки куда будет
повернута плоскость изгиба ( Pick Target) .
Написать это было намного труднее, чем сделать - честное слово.
Передняя нога
Рисунок 5
Буду краток - тоже самое, что и задняя.
Спина
Рисунок 6
Прежде чем приступать к созданию рига создадим несколько линий- для
контроля сзади и назовем Ass , для контроля переда ( Brest) , для
середины ( называйте как хотите) и еще одну линию при создании которой
будем использовать Smooth vertices , для чего перед тем как создавать
линию включим initial type - smooth - начинается эта линия в начале
цепочки костей , вторая точка посередине и точка три в конце ( эта
линия понадобится при создании spline IK)
Далее - Animation/IK Solvers/ SplineIK Solver-выбираем первую кость
потом последнею и нашу линию. Появится Ik Goal (синенький крестик ) и
три points .Совмещаем пивоты управляющих элементов с надлежащими
points( Hierarchy panel/ Effect pivot only - Alt A , выбираем точку) ,
прилинковываем (см/ рис. 6). Теперь нужно написать скрипт на поворот
спины вдоль продольной оси. Но прежде чем мы приступим к этой
процедуре, мы должны выбрать правильную ось вращения для наших shapes ,
а для этого придется сделать маленькое отступление и познакомить вас с
отстойной системой Gimbal .
Gimbal
Система в которой пишутся все повороты в программах по 3 D-графике (
макс отнюдь не исключение). И главное что стоит понять это зависимость
осей вращения друг от друга и от порядка обхода
Рисунок 7
Порядок обхода мы можем узнать в motion панели, у данного объекта X
Y Z - и это значит что ось Z не зависит от поворотов самого объекта, а
зависит только от положения его родителя (предыдущего по иерархии
объекта, в данном случае Scene Root и повернуть вы ее не сможете) ось Y
-зависит только от оси Z .X - зависит от обеих осей вращения и (какое
счастье) совпадает с локальной осью на туже букву, вот на эту ось (не
на X, а на первую ось в обходе) и приходится львиная доля скриптов ,
wire parameters and expressions . Но как повернуть нужную нам ось в
нужное положение? Если мы просто повернем объект, то получим вот такую
картину-(см рис 7), то есть две оси схлопнутся в одну, так называемый
Gimbal Lock ( кстати это основное положение для столь частых глюков в
3д программах) и если писать анимацию в другой системе, например Local,
то скрипт будет выполняться на половину и или не будет вообще. По этому
можно добавить еще одного родителя и поворачивать его или, что более
правильно, поменять порядок обхода и сделать, так что бы нужная вам ось
была первой в порядке обхода.
Обратно к лошади
У меня ось, которая мне нужна, это ось Y , по этому я выбираю обход
YZX и приступаю к написанию скрипта. Выбираю IK Goal и перехожу в
панель Motion.
Рисунок 8
Выбираю Twist End Angler, кликаю на знак вопроса и выбираю Float Script
Строка первая -
DependsOn $Ass $Brest
Описание влияющих объектов. Спереди и сзади .
p=DegToRad $Ass.Rotation.Y_Rotation.Controller.Value
присваиваю переменной p значение Y вращения объекта Ass
o=DegToRad $Brest.Rotation.Y_Rotation.Controller.Value
Переменная o , объект Brest
i=o-p
От вращения переднего объекта ( он задает поворот грудины ) отнимаю
вращение задницы ( до этого она влияла на поворот всего туловища,
теперь влияет только на заднюю часть.)
Ну вот и все. Может человек, который добросовестно прошел туториал
макса, спросит, почему так просто, а где умопомрачительная иерархия,
где второй скрипт на начальный угол. Отвечаю: во-первых, зачем
усложнять? А во-вторых, если вы <правильный> скелет положите на
бочок и покрутите, то ваш персонаж превратится в выжатую тряпочку -
произойдет резкое перекручивание костей ( а ведь анимация смерти и
падения входят в основной набор игровых анимаций Вы рожаете его в
творческих муках, на ваших глазах он делает первые неуверенные шаги,
как вы радовались, когда он побежал, а потом вы его убиваете. Убиваете!
УБИВАЕТЕ!!!).
Я не знаю, где Discreet заказывал уроки, но мне интересно, откуда такие ошибки, и почему ни слова о Gimbal.
Шея
Рисунок 9
Шея последний элемент в настройке нашего скелета, и здесь мы будем
использовать все то, что использовали раньше на полную катушку. Начнем
с создания управляющих элементов и сплайна для ик решателя( особое
внимание уделите голове, вы не должны вращать сам объект, и должны
правильно выбрать порядок обхода) . Назначаем Spline IK .Назначаем на
треугольники Position Constrain и прилинковываем. Настраиваем веса
отношений приблизительно по отношению расстояний до управляющих
элементов. Прилинковываем points . Создаем для кости головы orientation
constrain относительно управляющего голову сплайна ( Animation/
Constrains/ Orientation) кость повернется под не нужным нам углом. Для
того что бы избавится от этого выбираем кость и переходим в Motion
панель и кликаем на Rotation (рис 10 )
Рисунок 10
Опускаемся ниже по панели. И ставим <сохранить смещение> (рис 11)
Рисунок 11
Рисунок 12
и теперь приступаем к написанию зависимости поворота продольной оси,
но будем для разнообразия использовать Float Expression . Для этого
выберем ик и в Motion панели (рис 12) на Twist End Angler (1.)
назначаем (2.) Float Expression. В появившемся окне создаем две
скалярные переменные < а> и < b> (3.) , выбираем переменную
<а> (4.) и кликаем на Assign to controller (5.) (назначить
контроллеру) и выбираем ротацию по игреку объекта head (6.) ( что бы
легче было выбирать объект -перейдите в Isolate Selection), закрываем
окошко(7.) и по аналогии назначаем переменной < b> ротацию <
y> объекта Brest .
Пишем в окошке Expression -< a- b> , вот и все. 1 2
| |