Продолжаем
Создание
скелета
для данной модели
Тут
следует пару слов сказать о концепции применения инверсной кинематики.
Существует и такое понятие как Прямая (Forward) кинематика. Она представляет
собой моделирование физики движущейся иерархии костей в прямом направлении
- от родителя к потомкам. Т.е. сначала перемещаем плечевую кость, потом
предплечье, затем кисть и только после этого - пальцы. Применение инверсной
кинематики позволяет сделать это наоборот без нарушения физической модели,
т.е. переместив сразу конец иерархической цепочки - пальцы произойдет
и соотвествующее смещение кисти-предплечья-плеча.
Как
видите всё очень просто - инструменты инверсной кинематики позволят Вам
анимировать персонаж перемещая только концы конечностей - кисти рук, стопы
ног. Всё остальное будет моделироваться инструментами инверсной или прямой
кинематики. |
|
Итак,
вот цепочка костей для левой руки - |
|
|
|
При
создании костей со значениями размеров по умолчанию они будут слишком большими
(0,254m). Чтобы этого избежать предварительно задайте нужный размер или
используйте панель модификаций (Modify). Расположите цепочку костей так,
чтобы она лежала наиболее естественно и находилась внутри руки (кроме концевой
кости - она носит вспомогательный характер, поэтому должна находиться снаружи
модели и это нормально! далее поймете почему). На виде сверху видно что
цепочка костей идет не строго прямо, а слегка под углом, что соответствует
модели руки персонажа. |
|
Переименуйте
кости так, чтобы к ним в дальнейшем было легко обращаться, например так
- плечо-предплечье-кисть-кончик - что будет соответствовать 3ds max'овскому
- LArm_Bone_shoulder - LArm_Bone_forearm - LArm_Bone_fingers - LArm_Bone_tip |
|
Названиям
следует уделять такое пристальное внимание потому, что имея сложную модель
Вам легче будет ориентироваться в составляющих ее объектах. |
|
Для
того, чтобы сгиб руки происходил естественно применим к цепочке костей инструмент
IK - HI Solver. |
|
Выберите
кость LArm_Bone_shoulder. Она будет корнем иерархии костей левой руки. Выберите
пункт меню Animation > IK Solvers > HI Solver и щелкните на кости
LArm_Bone_tip |
|
|
|
Откройте
панель Motion, переименуйте IK Chain01 в LArm_IK_Chain, там же несколько
уменьшите размер Целевой (Goal) точки IK - |
|
|
|
Что
нам дает созданный IK - Hi Solver? А попробуйте теперь выбрать Целевую (goal)
точку и перемещать ее инструментом Select And Move добиваясь даже сгиба
руки. |
|
|
|
Как
видите сгиб связки костей происходит, но не с точки зрения того как на самом
деле сгибается рука. Такой изгиб костей для нормальной руки выглядит неестественным.
Следовательно мы расположили кости не совсем правильно. Как это исправить? |
|
Сначала
проведем небольшой эксперимент по созданию цепочки из трех костей, коррекции
их положения и применения инструмента HI Solver. |
|
|
|
Как
видно из рисунка для достижения правильного сгиба кости должны располагаться
не строго в одну линию, а с небольшим сгибом в ту сторону, в которую мы
хотим сгибать их при помощи IK HI Solver. |
|
Удалите
все экспериментальные и созданные для левой руки кости и переделайте работу
так, чтобы сгиб руки в горизонтальном направлении происходил правильно. |
|
|
|
Для
того, чтобы легче было манипулировать перемещением используем вспомогательный
объект Dummy. Это пустой (не отрисовываемый) объект, который можно использовать
как ручку для управления конечностью модели. |
|
Выберите
панель Create нажмите кнопку Helpers и создайте объект Dummy. Расположите
его так, чтобы он охватывал Целевую точку (goal) инструмента инверсной кинематики
(LArm_IK_Chain) для левой руки. |
|
|
|
Сам
по себе объект Dummy не играет никакой роли, но если осуществить привязку
к нему нужных объектов (в нашем случае LArm_IK_Chain), то он действительно
будет работать как удобная рукоятка - смещая LArm_Dummy (так его можно назвать)
вы будете смещать LArm_IK_Chain, который будет в свою очередь смещать все
связанные с ней кости левой руки. Впоследствии, когда Вы осуществите привязку
вершин модели к скелету, смещения костей будут вызывать смещения связанных
с ними вершин. Таким образом получится иерархическая цепочка, но результатом
будет - смещая LArm_Dummy вы сместите нужные вершины модели относящиеся
к руке. |
|
Привязка
(link) осуществляется от подчиненного (привязываемого объекта) к главному
(в нашем случае - от LArm_IK_Chain к LArm_Dummy). |
|
Выберите
LArm_IK_Chain и нажмите кнопку Select and Link на панели инструментов -
|
|
|
|
И
протащите связывающий курсор мыши от подчиненного объекта (LArm_IK_Chain)
к главному (LArm_Dummy). При этом Dummy на какое-то мнгновение станет выделенным,
а потом выделение исчезнет. Проверьте что связь работает - перемещения LArm_Dummy
должны приводить к соотвествующим перемещениям скелета левой руки. Если
это не так или если Вы ошибочно связали LArm_Dummy с другим объектом, то
можно выделить оба неверно связанных объекта и разорвать связь кнопкой Unlink
Selection (правее от Select and Link). |
|
Для
того, чтобы визуально удостовериться в правильности сделанной связи можно
открыть окно схематического вида - Graph Editors > New Schematic View |
|
|
|
В
нём Вы визуально проследите все имеющиеся в сцене иерархические связи. На
рисунке стрелка идет от LArm_Dummy к LArm_IK_Chain - значит связь установлена
верно. Можете закрыть окно Схематического вида. |
|
Если
Вы экспериментировали с перемещением LArm_Dummy и связанной с ним цепочки
скелета левой руки - отмените сделанные перемещения, чтобы скелет руки располагался
в первоначальной позиции. |
|
Аналогичным
путем можно создать скелет для правой руки. Советую потренироваться еще.
Если Вы уже преуспели в создании костей скелета, применении HI Solver и
установлении связей с управляющим Dummy-объектом, то можете просто клонировать
и зеркально отобразить всю цепочку объектов скелета левой руки (кости, HI
Solver и Dummy) и расположить их для правой руки. Не забудьте только переименовать
созданные объекты, чтобы они соответствовали наименованиям для правой руки
- RArm_Bone_shoulder, RArm_Bone_forearm, RArm_Bone_fingers, RArm_Bone_tip,
RArm_IK_Chain, RArm_Dummy. |
|
Подобным
же образом Вам нужно построить скелет для левой и правой ног, спины и головы.
Окончательно всё это будет выглядеть так - |
|
|
|
Щелкнув
по данному изображению Вы можете скачать готовую модель с внедренным скелетом. |
|
Архив
имеет размер 204 Кб. Текстуру к нему Вы можете взять из архива nn.
Архив включает следующие файлы -
fedja_skinned_char.max
- готовый скелет модели и привязка посредством модификатора Skin
fedja_anim.max
- готовый к анимации персонаж
fedja_anim_go.max
- анимация хотьбы |
|
Изучив
модель скелета и установленные связи между объектами (их можно посмотреть
в схематическом виде - Schematic View) вы увидите, что корнем иерархии является
объект Body_Dummy. К нему привязаны все остальные объекты Dummy, которые
в свою очередь привязаны к IK цепочкам костей. У костей спины (Spine_Bone,
Head_Bone) вы увидите выступы. Они создаются для облегчения наблюдения за
ориентацией кости. Чтобы создать их в панели модификаций кости установите
в группе Bone Fins соответствующие нужным выступам флажки, если требуется
- откорректируйте их размеры. |
|
|
|
Следующие
важные моменты. Под ногами модели персонажа вы увидите схематичный рисунок
человечка. Он означает, что все относящиеся к скелету объекты - кости, IK
HI Solver, Dummy были выделены в сцене и преобразованы в персонаж (Character)
командой меню Character > Create Character (это было актуально в более ранних версиях 3ds max, в более современных нужно
добавить на панель инструментов кнопку Create Character (об этом чуть ниже).
Кстати если у вас на панелях инструментов нет кнопки Create a Character - её нужно добавить -
Customize - Customize User Interface
Toolbars
Category - Characters
и перетащить элемент Create a Character
на нужную панель инструментов. После этого можно будет её нажимать - предварительно выделив в сцене
все, что будет объединено в группу Character.
далее -
Такое формирование позволяет
теперь обращаться ко всем объектам скелета как к единому целому - отвечающему
за скелет персонажа. |
|
Для
привязки скелета к модели персонажа используется модификатор Skin. После
применения модификатора в него добавляются все объекты скелета, которые
будут влиять на модель данного меша. Это делается кнопкой Add в панели модификаций
в группе Parameters с последующим выбором нужных объектов скелета. |
|
|
|
Далее
осуществляется настройка огибающих костей скелета (Envelopes). И ведется
настройка степени влияния каждой кости на вершины модели, т.е. осуществляется
настройка весовых коэффициентов. Внутренний (красный) контур огибающей задает
степень влияния всех попадающих в нее костей дополняя сумму весовых коэффициентов
до 1. Внешний (коричневый) контур представляет отсутствие влияния (спад
влияния до 0). |
|
Обратите
внимание - настройка огибающих осуществляется только инструментов Select
And Move (остальные будут недоступны). Полезными функциями в группе Envelope
properties в окне параметров модификатора Skin при открытом и выбранном
узле Envelope (см. рисунок - в стеке модификаций выбран желтым пункт Envelope)
являются Copy и Paste. Они позволяют Вам копировать огибающие костей для
одной конечности (например для выбранной кости левой руки) и вставлять ее
в аналогичную (или подобные) кости правой руки. Это значительно ускоряет
процесс настройки огибающих. |
|
Для
настройки огибающих выбирайте внутренние обработчики (серые квадратики)
для смещения огибающих и внешние (на красной и коричневой области) для масштабирования
области огибающей. |
|
В
окне параметров вы также найдете и другие полезные функции, в том числе
Weight Table которая позволяет задать или изменить весовые коэффициенты
для каждой вершины и влияющих на нее костей вручную. Это бывает полезно
для тех вершин, которые плохо охватываются огибающими. |
|
Перед
экспортом в формат X обязательно задайте следующие параметры модификатора
Skin - |
|
|
|
Установите
флажок для выбора вершин, выделите все вершины, установите параметры Rigid,
Rigid Vertices. Количество костей одновременно влияющих на одну вершину
(Bone Affect Limit) не задавайте более 4. Меньшие значения сделают анимацию
вершин менее плавной, но и сократят сложность анимации и количество вычислений
на обработку и вывод анимации. |