Мобильная версия сайта | |||||||||
[Главная] | [Новости] | [Статьи] |
[Проекты] |
[Ссылки] |
[Автор] |
||||
[Архив новостей] | |||||||||
[Форум] | на форуме можно задать вопрос, посмотреть ответы на часто задаваемые вопросы | ||||||||
Здравствуйте! Вы попали на информационно-образовательный сайт посвященный информатике, информационным технологиям и компьютерным играм. Подробнее о целях и задачах сайта в разделе Главная. [English version of this page here...] | |||||||||
[Базовые уроки по DirectX] [Основы DirectMusic на Delphi] [Основы DirectInput8 на Delphi] [Основы DirectSound8 на Delphi] | |||||||||
[Разработка компьютерной игры] [Пример игры Donuts3D] [Delphi DirectX] | |||||||||
Построение ирерархических связей между объектами. | |||||||||
Чтобы модели не "рассыпались" на составные части при экспорте образуйте из них иерархию путем установления связей (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. Т.е. данная кость будет полностью определять положение данной вершины. | |||||||||
Аналогично корректируются веса влияния костей для всех остальных вершин, чья анимация, если Вы заметите, осуществляется некорректно - т.е. кости движутся, а вершины - движутся слабо или вообще остаются на месте. | |||||||||
Это было всё, что я хотел Вам рассказать о проблемах создания и экспорта скелетной (и объектной) анимации. Если что-то было Вам не совсем ясно или не получилось - значит нужно еще попрактиковаться. Тема достаточно сложная и обширная, но она стоит того, т.к. без анимации не обходится ни одна игра. Если всё же вы столкнулись с неразрешимыми на ваш взгляд трудностями, то - пишите, постараюсь ответить. | |||||||||
[назад] | |||||||||
[Базовые уроки по DirectX] [Основы DirectMusic на Delphi] [Основы DirectInput8 на Delphi] [Основы DirectSound8 на Delphi] | |||||||||
[Разработка компьютерной игры] [Пример игры Donuts3D] [Delphi DirectX] | |||||||||
Обновления
и новости о развитии Delphi DirectX проекта http://www.megainformaticsite.pochta.ru http://www.megainformatic.boom.ru http://www.megainformatic.narod.ru
|
|||||||||
по всем вопросам пишите на megainformatic@mail.ru или оставьте сообщение на форуме |
|||||||||
Обмен ссылками | |||||||||
|
|||||||||
(с) МЕГА ИНФОРМАТИК 2006-2009 | |||||||||