Кто не хочет читать ONLINE, можете скачать доступные части книги:

Скачать часть1 (1.1 Мб) - Ознакомление с программой 3ds MAX

Скачать часть2 (1.4 Мб) - Объекты произвольной формы

Скачать часть3 (2.2 Мб) (не завершена) - Текстурирование

Глава 9. Оснастка анимационного скелета

Элементарная оснастка конечности

Оснастка - это создание вспомогательных объектов, позволяющих нам наиболее легко и просто управлять анимационным скелетом. Такими вспомогательными объектами являются как звенья обратной кинематики, так и другие вспомогательные объекты. В прошлой главе мы вкратце коснулись вопроса о том, какие звенья инверсной кинематики нужно создавать для ноги персонажа: одно звено от бедра и до ступни (условимся называть ступнёй ту часть ноги, которая твёрдо стоит на земле), другое следует создать для самой ступни, и зацепить за следующую по иерархии кость, например за основание пальца.

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

Если мы создадим только одно звено инверсной кинематики, как мы это делали в случае с простейшим персонажем в главе 6, то наши ступни будут поворачиваться так, как им заблагорассудится. Чтобы ступня стояла на земле и не вращалась, понадобится ещё одно звено, которое фиксирует положение конца ступни. Крестики обоих звеньев инверсной кинематики (они называются IK target) можно привязать к вспомогательному объекту, типа Dummy (находится в категории вспомогательных объектов), и тогда передвигая один объект Dummy мы контролируем положение обоих IK target. Размеры Dummy устанавливаются за счёт масштабирования этого объекта по разным осям. К объекту Dummy привязываются все звенья анимации ноги (выделить все крестики и привязать).

Теперь конечное положение ноги задаёт этот объект, он управляет не только положением, но и ориентацией стопы. Мы можем поворачивать объект Dummy, и ступня будет поворачиваться вместе с ним. Это гораздо удобнее, чем каждый раз перемещать оба IK target по отдельности, хотя бы потому, что при раздельном перемещении анимационные кости будут перекашиваться, вводя нас в заблуждение.

Учтите, что при больших углах поворота или большом отклонении вспомогательного объекта Dummy от положения равновесия, всё же движения ступни могут несколько отличаться от движений объекта Dummy. Но при нормальных амплитудах шага этих нежелательных эффектов не должно наблюдаться.

И ещё один совет: прежде чем привязывать звенья инверсной кинематики к вспомогательному объекту, совместите его опорную точку при помощи инструмента Align (выравнивание) с опорной точкой IK target звена инверсной кинематики, тянущегося от бедра до ступни (если забыли, как это делается, вернитесь к Главе 4). Такое положение опорной точки даёт более удобное управление вращением ступни. Конечно, можно этого и не делать. В любом случае, поскольку поворотом ступни теперь управляет объект Dummy, то положение опорной точки ступни определяется положением опорной точки этого Dummy. В принципе, можно выбрать её так, как вам будет удобно, расположить соответствующим образом вспомогательный объект, а потом привязать к нему звенья инверсной кинематики ноги. Если вы уже привязали их, не забудьте перед тем, как двигать вспомогательный объект Dummy, нажать кнопку Don't Affect Children.

Для рук оснастку можно создать похожим образом, даже, пожалуй, можно обойтись одним звеном инверсной кинематики, поскольку ладонь у нас не должна твёрдо соприкосаться с землёй. Звено должно начинаться с плеча, и цепляться за ладонь. IK target звена руки желательно привязать либо к корневой кости скелета, либо к воротниковой кости. Это нужно для того, чтобы при анимации ходьбы не думать лишний раз ещё и о руках. Если мы не привяжем IK target руки к корню скелета или к воротниковой кости, при перемещении нашего скелета IK target будет оставаться на месте, и руки будут тянуться к нему. Если же мы осуществим привязку IK target, то он будет перемещаться вместе с нашим скелетом. И при анимации ходьбы об анимации рук можно будет не думать.



Рис. 9.1. Оснастка скелета


Пальцы при такой оснастке анимируются вручную. Маленькие конечные косточки на конце каждого пальца при такой оснастке в общем-то не нужны, но всё же лучше их не удалять. Во-первых, они могут пригодиться, если вдруг мы захотим создать звенья инверсноей кинематику для пальцев. Но это ещё не всё. Существует способ привязки "шкуры" к скелету, который основывается на иерархии этого скелета, и привязывает определённые части "шкуры" не к костям, а к иерархическим связям между этими костями. Связь при таком способе привязки понимается как линия, проведённая между опорными точками родительского и дочернего объектов. И если бы не было конечных косточек, то линии от последних фаланг и от головы и нижней челюсти просто не к чему было бы провести, этих линий не было бы. Но об этом подробнее речь пойдёт в отедьной главе, в этой же будем рассматривать оснастку скелета для анимации.



Рис. 9.2. Простая оснастка ноги. IK target обоих анимационных звеньев ноги привязаны к объекту Dummy (зелёный параллелепипед). Здесь опорная точка объекта Dummy совмещена с звеном инверсной кинематики, которое протянуто от бедра до стопы.

Примечание: Убедиться, что мы привязываем объект к нужному объекту, или заканчиваем звено обратной кинематики на нужной кости можно если некоторое время подержать курсор мыши на месте. Должна всплыть подсказка с названием объекта, который находится под прицелом. Если для названий использовались русские буквы, они будут отображаться в виде тарабарского шрифта.

Создание более сложной оснастки ноги

Чтобы не заботиться об анимации пальцев при ходьбе динозавра, можно усложнить оснастку. Для каждого пальца создать звенья инверсной кинематики типа HI-solver (исторически-независимый решатель). Довольно-таки легко сделать так, чтобы когда наш персонаж поднимает ногу, пальцы как бы тянулись к земле. Для этого создаим ещё один объект Dummy, выровняем его относительно первого объекта Dummy и привяжем к нему. Первый объект Dummy отвечает за положение ступни, поэтому в файле примера он назван REX foot Dummy R (далее для краткости - foot Dummy). Второй Dummy назовём REX step Dummy R (далее для краткости - step Dummy). Step - значит шаг. Правда, стоит сказать, что step - не всегда имеется ввиду шаг, который делается ногами. Как и в русском языке, это слово может иметь множество значений: шаг как изменение какой-то величины, шаг как ступенька лестницы или резкий скачок от одного значения параметра к другому. Специально упоминаю об этом, потому что в программе 3ds MAX этот термин действительно встречается в настройках анимации параметров именно в значении скачка или ступеньки. Существует более точный термин: footstep - это уж точно о ходьбе (дословно - шаг ноги).

Но не будем зацикливаться на терминах, в данном случае всё понятно. Step Dummy надо выровнять относительно foot Dummy, можно это быстро сделать с помощью инструмента align , а можно расположить объект вручную. Здесь не требуется точного совмещения опорных точек. Объект step Dummy надо сделать таким, чтобы он по размерам отличался от объекта foot Dummy, чтобы его было удобно выделять, и чтобы он вообще не сливался со step Dummy. Поскольку параметров у Dummy не предусмотрено никаких, размеры задаются только в момент создания, при помощи движения мышки, и корректируются уже за счёт масштабирования по разным осям.

Далее объект step Dummy привязать к foot Dummy, a в настройках иерархии (hierarchy ) для step Dummy отключить наследование (inherit) для следующих параметров: для движения (move) по оси z и для вращения (rotation) по оси x (если скелет расположен так, что вид сбоку отображается в окне left, а вид спереди - в окне front). Все звенья кинематики для пальцев надо привязать к объекту step Dummy.



Рис. 9.3. Оснастка ноги, со звеньями инверсной кинематики для пальцев. Маленький Dummy (foot Dummy) контролирует как подьъём ноги, так и вращение ступни, и её перемещение по горизонтали. Нижний Dummy (step Dummy) автоматически движется за foot Dummy не отрываясь от земли. Так же он повторяет повороты foot Dummy Он служит для того, чтобы кончики пальцев тянулись к земле при подъёме ноги.


Теперь, для создания анимации ноги во время ходьбы, надо создавать анимационные ключи только для foot Dummy. Перемещение туловища осуществляется за счёт перемещения корневой кости иерархии (на рис. 9.1 она показана чёрным цветом).

Предохранение объектов от случайных изменений:
спрятать (hide) и/или заморозить (freeze)

Итак, у нас создано много объектов, движением большинства из которых управляют другие объекты. Для этих обхектов не надо создавать анимационные ключи, поэтому желательно как-то предохранить эти объекты от случайных изменений. Для этого существует два способа: спрятать объект, либо заморозить его. Спрятанные объекты вообще не видны, а замороженные видны, но их нельзя выделить. И в том, и в другом случае объекты не доступны для редактирования или перемещения при помощи наших действий. Но они по-прежнему продолжают контролироваться теми объектами, которые так или иначе влияют на их движения.

Спрятать и заморозить объекты можно во вкладке Display . Спрятать: Hide, заморозить - Freeze. Ищите во вкладке Display подменюшки с соответствующими названиями. Менюшки Hide и Freeze аналогичны, отличаются лишь последней строчкой.



Таблица 9.1. Меню Hide и Freeze
Hide / Freeze Selected Спрятать / Заморозить выделенные объекты
Hide / Freeze Unselected Спрятать / Заморозить не выделенные объекты
Hide / Freeze by Name... Спрятать / Заморозить по имени... (По нажатии открывается список, где надо выбрать нужные объекты по именам. Удерживая клавишу Ctrl нажатой, можно выбрать в списке сразу несколько объектов)
Hide / Freeze by Hit Спрятать / Заморозить по щелчку мыши. Надо нажать кнопку (она пожелтеет) и кликать мышью по нужным объектам. Когда все нужные объекты будут спрятаны / заморожены, кнопку надо выключить.
Unide / Unfreeze All Отспрятать / Разморозить Всё (всё что спрятано / заморожено)
Unide / Unfreeze by Name... Отспрятать / Разморозить по имени... Вот тут тем, кто не уделяет должного внимания именованию своих объектов, придётся пожалеть: вам нужно будет выбрать из списка нужные объекты по их именам. Такой способ позволяет отспрятать / разморозить только те объекты, которые понадобится.
флажок Hide Frozen Object Если включить этот флажок, все замороженные объекты становятся невидимыми.
Unfreeze by hit Если включить эту кнопку, то замороженные объекты можно размораживать, кликая по ним мышью.


Спрятать и заморозить объекты можно и не залезая во вклаюку Display . Надо выделить нужные объекты и кликнуть правой кнопкой мыши. Появятся менюшки, в которых надо выбрать пункт Properties... - свойства. Если менюшки четыре, то ищите нужный пункт в нижней правой. Если две - просто в нижней. Как только вы выберете пункт, появится окно Object Properties. В нём несколько вкладок, нам нужна только первая: General (открыта по умолчанию).

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

Как раз в группе Interactivity (интерактивность, взаимодействие) можно видеть действия: hide (спрятать) и freze (заморозить). Если мы поставим соответствующие флажки, выделенные объекты либо спрячутся, либо заморозятся. Можно сделать с объектами и то, и другое. Отспрятать и/или разморозить объекты можно только через вкладку Display .

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

Другие пункты нужны и полезны при моделировании геометрических объектов произвольной формы, будем их рассматривать потом, по ходу дела.

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

Создание симметричных частей скелета

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

К сожалению, звенья инверсной кинематики отразить не удастся.

Если мы попытаемся выбрать ногу (двойной клик по бедру выделить все кости ноги) и отразим её при помощи инструмента mirror , наш скелет сильно перекосит. Чтобы этого не происходило, надо отвязать ручки и ножки от основного скелета, прежде чем браться за их отражение. Потому что кости устроены так - тянешь за одну косточку, а за ней тянется и родительская. Пока рука и нога привязаны к общей иерархии, стоит потянуть за их основания, и скелет начинает наклоняться или поворачиваться. Когда мы создаём отражение руки или ноги, это самое отражение так же оказывается привязанным к тому же самому объекту, что и исходник, но расположение корневого объекта этого отражения несколько иное, что и приводит к перекосу. Если мы будем отражать при выбранном режиме (центр трансформаций находится в опорной точке), сразу после завершения отражения перекоса не будет, поскольку в этом случае опорная точка корневого объекта отражённой конечности будет совпадать с таковой у исходника. Но как только мы попытаемся переместить отражённую конечность, чтобы поставить её на правильное место, скелет начнёт перекашивать.

В случае простейшего персонажа такого эффекта не наблюдалось, поскольку он был собран не из объектов типа "кость", а из простых объектов, их поведение в иерархии не такое, как у костей.

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

Но тут мы сталкиваемся со следующей проблемой: все объекты, на которые были применены звенья инверсной кинематики начинают перекашиваться жутким образом, словно вывихнутые. Чтобы этого не было, надо сделать следующее: зайти во вкладку Motion (движение), выбрать звено инверсной кинематики. В группе меню IK-solver есть нажатая кнопка Enabled (разрешено, активизировано, позволено). Она находится сразу под разворачивающимся меню, в котором выбран тип решателя. Мы выбирали всегда исторически-независимые (HI) решатели, у нас должно в этой строке стоять IKHISolver. Кнопку Enabled надо выключить для всех звеньев инверсной кинематики, которые находятся в конечности. После этого можно смело отвязывать.

 

Помните, что двойной клик по объекту быстро выделяет как сам объект, так и все дочерние объекты. Конечности лучше отражать по одной, тем более, что у нас их только две, не так уж и много.

Итак, отвязываем руку и ногу от скелета: для этого надо выделить бедро и воротниковую кость (можно сразу вместе, можно по очереди) и отвязать их от родительских объектов при помощи кнопки unlink .

Вернёмся к ноге. Кликаем два раза по бедру. Выделяется нога (все кости ноги должны побелеть в окнах с режимом wireframe и окружиться трёхмерными скобками в окнах с другими режимами визуализации). Отражение осуществляется при помощи кнопки mirror . В появившемся меню можно выбрать ось (или пару осей), вдоль которой отражать, метод отоажения:

No Clone - отражает объект, иерархию или группу объектов. Все остальные пункты оставляют объекты без изменения, но создают отражённый клон объекта, иерархии или группы объектов. В случае иерархии - создаётся симметричная ей иерархия. В четвёртой версии 3ds MAX этот метод отражения работал плохо, часто глючил. Далее глюк потихоньку исправлялся. В шестой версси можно считать, что его уже нет.

Все эти методы колонирования рассматривались в Главе 3, в пункте Клонирование объектов. Снизу будет возможность поставить или отключить флажок Mirror IK Limit - это нужно для того, чтобы отразить ограничения, которые могут быть введены для инверсной кинематики. Ограничения вводятся на углы поворота костей друг относительно друга. Мы ничего не вводили, тем не менее, пускай флажок стоит. Если вид сбоку у вас отображается в окне проекции Left, то отражать надо вдоль оси x. Выберем, нажмём OK. В данном случае не суть, каким методом клонирования мы воспользуемся. Правда если мы создаём зависимую копию типа Instance или Reference, при изменении костей в одной из конечностей, будем видеть всякие полтергейсты в другой. К примеру, если мы захотим настроить положение костей при нажатой кнопке Don't Affect Children, то увидим следующее: в симметричной части положение опорных точек костей не меняется, однако сами кости так или иначе корёжатся, укорачиваются или удлинняются, между костями образуются разрывы. Если к кости привязано несколько дочерних костей (как к стопе или ладони), то она может перекашиваться, и эти перекосы будут влиять на дочерние ветви.

Когда кнопка Don't Affect Children не нажата, мы можем поворачивать или двигать кости, и не будем наблюдать в симметричной части абсолютно никаких аномальных явлений.

Ещё раз напомню, что отражение происходит за счёт изменения масштабов объекта по той оси, по которой мы отражаем.

Итак, отражаем ногу. Если мы не позаботились об опорной точке отражения, нога отразится относительно некого центра нашей структуры. Скорее всего, это будет центр параллелепипеда, окружающего нашу структуру. Быстро разместить ногу можно так: выделить бедро отражённой ноги, выровнять относительно бедра исходной ноги (по опорным точкам Pivot Point (в окне диалога должны быть выбраны флажки Pivot Point дла обоих объектов), ориентацию не выравнивайте!). Далее знак координаты х для бедра меняете на противоположный.

Можно заранее позаботиться о том, чтобы отражённая конечность разместилась в нужном нам месте. Проделаем это с рукой. Не забудьте отвязать воротниковую кость от скелета. Затем, двойным кликом по воротниковой кости, выделим ветвь руки.

Вспомним, что в панели инструментов есть кнопочка-переключатель ( , ), которая позволяет выбрать, куда поместить центр трансформаций, относительно которого будет осуществляться перемещение, вращение и масштабирование.

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

- центр трансформаций находится в геометрическом центре объекта.

- центр трансформаций помещён в центр Мира.

Если мы не перемещали позвоночник, он должен находиться в плоскости x=0, а значит, конечности можно отражать относительно центра координат мира вдоль оси x. Рука у нас выделена, теперь выбираем в переключателе мировой центр в качестве центра трансформаций , после чего нажмём кнопку отражения mirror и отразим руку вдоль оси x. Если всё сделано правильно, она расположится как раз там, где нам надо.

Теперь осталось отразить объекты Dummy, которые мы сделали для управления анимацией ступни.

Для этого выделим их оба, и отразим с выбранным режимом , как это делали для руки.

Если в своё время мы пометили все правые части буковкой "R", расположенной в самом-самом конце имени объекта, то имена всех левых частей должны оканчиваться на "R01". Быстро сменить это "R01" на "L" можно при помощи описаного ранее инструмета Tools/Rename Objects...



Рис. 9.4. Скелет, вид сверху. Левые части выделены.


Выделим все левые части (удобно это сделать в виде сверху (рис. 9.4.), а в виде перспектива - проконтролировать, повертеть вид и посмотреть со всех сторон. Далее заходим в Tools/Rename Objects...

  1. Отключаем флажок Base Name (основное имя) - поскольку основное имя менять мы не будем. Не забудьте отключить этот флажок, иначе основное имя изменится, а вернее будет сказать - сотрётся.
  2. Включаем флажок Remove Last (удалить последние) в поле ставим 3 (Digits - Знака). Нам надо удалить 3 знака, что соответствует трём символам "R01".
  3. Включаем флажок Suffix и в графу вписываем L.
  4. Проверим, что у нас нужные флажки включены, а всё остальное выключено, и нажимаем OK.

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

 

Если вдруг вы забыли привязать руки или ноги к родительскому объекту и уже создали и настроили звенья инверсной кинематики, прежде чем привязывать их, проделайте то же самое и для новой половины.

А проделывается всё то же самое: Во вкладке Motion для каждого звена инверсной кинематики отключается кнопка Enabled. Ниже в той же группе меню IK-solver должна быть подргуппа Preffered Angles (предпочтительные углы) с двумя кнопками: Set As Pref Angles (установить как предпочтительные углы) и Assume Pref Angles (принять положение предпочтительных углов).

Кнопка Set As Pref Angles - по нажатию на себя устанавливает текущее положение костей, входящих в звено инверсной кинематики, как предпочтительное. Её надо понажимать для всех звеньев инверсной кинематики, которые находились в ветви иерархии, которую мы привязали. Если у какого-либо звена сползает IK-target, то нажатие на кнопку Assume Pref Angles быстро возвращает IK-target на место - в опорную точку той косточки, за которую он зацеплен, а цепочка костей (если она деформировалась) при этом принимает положение, которое было в момент нажатия на кнопку Set As Pref Angles.

После того, как все эти процедуры будут проделаны, для всех звеньев инверсной кинематики надо снова включить кнопку Enabled, иначе инверсная кинематика у нас не будет реагировать на перемещение сврих IK-target. Если всё было сделано правильно и нигде ничего не забыто, то после включения кнопок Enabled у нас не должно ничего перекосить.

Звенья обратной кинематики тоже могут быть проименованы, что и следует сделать, опять же, если в сцене будет несколько персонажей, удобнее будет разбираться. Именовать звенья инверсной кинематики рекомендуется так: Имя_персонажа IK название_цепочки L_или_R.

Например, для цепи от бедра до ступни в нашем случае подойдёт имя: REX IK leg R/L.

Leg - это по английски нога в целом. Foot - ступня, стопа. Цепочку для ступни так и назовём: REX IK foot R/L. Для руки - arm. Вспомним, что палец руки - finger, палец ноги - toe. В данном случае такое разделение названий удобно, поскольку если бы и на руках и на ногах пальцы назывались бы одинаково, это загромоздило бы наше название, пришлось бы писать: Имя_персонажа палец_руки/палец_ноги ## R/L.

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

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

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

Анимация ходьбы

Теперь заморозим все лишние объекты. Оставить надо только foot Dummy для обеих ног и корневой объект всей иерархии. И теперь сделаем несколько шагов подобно тому, как мы это делали для простейшего персонажа.

Освежим в памяти следующие моменты:

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

Файл с готовым скелетом можно открыть здесь. Персонаж получился несколько несуразный, поскольку на данной стадии мы не особо-то заботились о его пропорциональности. Потом, после того, как освоим создание объектов нужной нам формы мы ещё вернёмся к проблемам скелета, поскольку у нас остались нерассмотренными такие проблемы, как Spline IK Solver, который удобен для анимации движений хвоста, мы не рассмаотривали ещё контроллеры анимации, а это довольно-таки интересная тема. К примеру, с помощью контроллера анимации можно управлять привязкой одного объекта к другому и изменять эту привязку во времени. Благодаря этому персонаж может брать некоторые предметы руками (в этот момент предмет привязывается к руке), а потом положить их (тут предмет отвязывается от руки). Кнопки Link и Unlink этого не позволяют, и такой эффект достигается при помощи специального контроллера движения.

Но для многих контроллеров движения, таких как Path Constraint - движение по заданному пути, нужны вспомогательные объекты типа Spline (сплайн) или Line (линия). А мы ещё не разбирались с тем, как их создавать и редактировать. А рассмотреть это лучше в разделе, посвящённом моделированию, потому что сплайны служат не только для создания траекторий, но и для моделирования своих объектов.



<< Назад Оглавление   Вперёд >>
homepage: http://teapot3d.narod.ru
Используются технологии uCoz