Построение
ирерархических связей между объектами и основы 3d анимирования. |
|
Чтобы
модели не "рассыпались" на составные части при экспорте образуйте
из них иерархию путем установления связей (Select And Link) между главными
и дочерними объектами. Например, если руки, ноги и голова - отдельные объекты,
то тело может стать главным объектом (корневым - root), а к нему будут привязаны
эти объекты. Точно также если рука состоит из плеча и предплечья (как отдельных
объектов), то плечо может быть родителем (root) для предплечья в иерархической
связи между ними. При создании скелета иерархические связи между костями
цепочки созданной за один раз устанавливаются автоматически. При этом первая
созданная кость цепочки и будет родительским (корневым) объектом, а последующие
кости будут связаны между собой точно такими же последовательными связями
- от родителя к потомкам: плечевая кость -> кость предплечья -> кости
(кость) кисти -> кость (кости) пальцев. |
|
В
данной цепочке перемещение плечевой кости приведет к перемещениям всей цепочки
связанных костей. Это и будет прямая кинематика (forward kinematics или
FK). Если рассматривать данную манипуляцию в обратной последовательности
- перемещение пальцев, то инверсная кинематика (IK) вызовет соответствующие
смещения всех родительских костей - кистевых - предплечья - плеча. |
|
Создание
анимации |
|
Мы
с Вами рассмотрим создание анимации на примере объектной, т.е. будет взята
модель построенная из отдельных примитивов, а анимация будет основана на
простых трансформациях этих примитивов. |
|
Скачайте
данный архив - object_anim (26 Kb) и откройте
модель necto.max из 3ds max 7.0 (или выше). |
|
|
|
Вы
увидите модель некоего Некто, полностью построеннную из простых примитивов.
Можете посмотреть систему иерархических связей данной модели - Graph Editors
> Schematic View |
|
|
|
Все
связи сделаны при помощи Select And Link от подчиненного объекта к главному.
Как видите корневым (root) объектом является примитив body. Все остальные
примитивы напрямую или посредством родителя присоединены к нему. |
|
Это
даст Вам возможность с одной стороны иметь цельный неразрывный объект (модель),
а с другой анимировать каждый из примитивов с использованием простых трансформаций
- смещения, вращения, масштабирования. |
|
Попробуем
анимировать простейшую хотьбу. |
|
Расположите
модель удобным образом и выберите левую ногу (LLeg). |
|
|
|
Настроим
параметры анимации. Пусть наша анимация будет качеством Film (24 кадра в
секунду - 24 fps) и длительностью 24 кадра (1 секунду). |
|
В
панели анимации нажмите кнопку Time Configuration |
|
|
|
В
открывшемся окне диалога задайте указанные параметры и нажмите ОК - |
|
|
|
Вы
увидите теперь, что временная шкала анимации отображает искомые 24 кадра,
что нам и нужно. |
|
Создадим
анимацию движения левой ноги по ключевым кадрам - |
|
В
панели анимации нажмите кнопку Auto Key для автоматической генерации ключевых
кадров - |
|
|
|
Пусть
движение ноги будет происходить за 4 фазы, каждая по 6 кадров. Переместите
бегунок анимации на 6 кадр (на рисунке 0/24 - обведен кружком). |
|
Выполните
перемещение и вращение ноги так, чтобы оформился шаг - |
|
|
|
После
вращения Вы увидите, что нога отделилась от тела, поэтому переместите ее
так, чтобы этого не происходило. |
|
Теперь
переместите бегунок на 12 кадр и щелкните по нему правой кнопкой. В открывшемся
диалоговом окне в поле Source Time введите 0, нажмите ОК |
|
|
|
Это
приведет к копированию ключевого кадра из 0 в 12 и к возврату ноги в исходное
состояние. |
|
Теперь
сделайте подобную анимацию, но для движения ноги в противоположном направлении. |
|
|
|
Перейдя
на 24 кадр скопируйте ключевой кадр из 12 в 24 - |
|
|
|
Отключите
кнопку Auto Key. Попробуйте проиграть анимацию движения левой ноги путем
перемещения бегунка или путем нажатия кнопки Play на панели анимации. Пример
законченной анимированной модели - necto_go (18
Kb). |
|
Для
остальных конечностей и тела анимация осуществляется аналогично. Только
имейте в виду, что связи типа Link (при помощи Select And Link) работают
только односторонне, т. е. перемещая родителя можно переместить и все
связанные с ним объекты, но не наоборот. Перемещая дочерний объект Вы
не переместите родительский! Ведь это не инверсная кинематика!!!
Созданный
анимированный файл легко экспортировать в формат X экспортером PandaDXExport
для применения в Direct3D8, Direct3D9 и DXExtensionsMax.gup
только для Direct3D9. При экспорте экспортером PandaDXExport
на вкладке Animation не забудьте указать верную анимационную цепочку и
частоту кадров, возможно даже придется немного поэкспериментировать с
параметрами экспорта, чтобы экспорт анимации происходил корректно. |
|
Данный
тип анимации (как уже было сказано выше) носит название объектной, т.к.
осуществляется за счет простых трансформаций отдельных примитивов модели,
образующих ирерархию. |
|
Как
видите он проще для создания, но и менее изящен. Анимация осуществляется
с гораздо меньшими вычислительными затратами по сравнению со скелетной.
Такой тип анимации применялся например в игре Warcraft III Reign of Chaos,
так что можете сами посудить о всех ее достоинствах и недостатках. |
|
Технология
создания скелетной анимации осуществляется точно таким же образом с тем
лишь отличием, что Вы анимируете скелет, который в свою очередь анимирует
связанные с ним вершины модели. |
|
Особенности
подготовки модели к экспорту скелетной анимации мы рассмотрим ниже. |
|
Если
Вы возьмете файл fedja_anim_go.max из архива skinned_fedja
и попробуете экспортировать скелетную анимацию в формат X при помощи экспортера
PandaDXExport,
то получите примерно такой результат - |
|
|
|
Такой
результат анимации Вы получите если будете просматривать ее из DirectX Viewer
DirectX SDK 9. Приложение SkinnedMesh вообще не сможет ничего показать давая
лишь ошибку. |
|
Первое
что приходит в голову - это то, что виноват экспортер PandaDXExport.
Однако это не совсем так и всё еще можно исправить. |
|
Всё
дело в том, что руки модели персонажа должны быть уже опущены. Соответственно
должны быть опущены и кости скелета рук. |
|
|
|
Щелкнув
по рисунку Вы можете скачать архив fedja_transformed
(95 Кб). Он содержит скорректированные модель и скелет, а также анимацию.
Коррекция состояла в перемещении вершин модели относящихся к рукам в положение
показанное на рисунке. Кости скелета также были трансформированы. Архив
также содержит файл fedja_transformed_with_skel_go.max содержащий готовую
к экспорту скорректированную модель и скелетную анимацию. |
|
Следует
заметить, что если Вы сами возьмете из архива файл fedja_transformed_with_skel.max
и попробуете настроить корректно огибающие (Envelopes) для весов костей,
создадите анимацию, то столкнетесь с проблемой настройки весов для отдельных
вершин, которые плохо или совсем не охватываются огибающими. Выше уже говорилось,
что такую настройку можно выполнить через Таблицу Весов - Weight Table. |
|
|
|
Если
выбрать определенную вершину (несколько вершин), для этого нужно установить
флажок Vertices в окне параметров модификатора Skin с открытым узлом Envelope
- |
|
|
|
На
рисунке кружком отмечена выбранная на модели вершина |
|
Данная
вершина при анимации как раз плохо охватывалась огибающей, поэтому жмем
кнопку Weight Table и выбираем - Selected Vertices (только для выбранных
вершин). |
|
|
|
Поскольку
мы выбрали только одну вершину, то она и показана в столбце Vertex ID. Данная
вершина должна двигаться вместе с костью RLeg_Bone_Clavicle (если вершина
выбрана на правой ноге). Прокручиваем нижнюю полосу прокрутки и находим
искомую кость. Задаем для нее коэффициент 1,000. Т.е. данная кость будет
полностью определять положение данной вершины. |
|
Аналогично
корректируются веса влияния костей для всех остальных вершин, чья анимация,
если Вы заметите, осуществляется некорректно - т.е. кости движутся, а вершины
- движутся слабо или вообще остаются на месте. |
|
Это
было всё, что я хотел Вам рассказать о проблемах создания и экспорта скелетной
(и объектной) анимации. Если что-то было Вам не совсем ясно или не получилось
- значит нужно еще попрактиковаться. Тема достаточно сложная и обширная,
но она стоит того, т.к. без анимации не обходится ни одна игра. Если всё
же вы столкнулись с неразрешимыми на ваш взгляд трудностями, то - пишите,
постараюсь ответить. |