Информатика и образование
  Мобильная версия сайта            
               
[Главная] [Новости]
[Статьи]
[Проекты]
[Ссылки]
[Автор]
               
    [Архив новостей]        
               
  [Форум] на форуме можно задать вопрос, посмотреть ответы на часто задаваемые вопросы  
       
  Здравствуйте! Вы попали на информационно-образовательный сайт посвященный информатике, информационным технологиям и компьютерным играм. Подробнее о целях и задачах сайта в разделе Главная. [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 (или выше).    
       
  модель Necto    
       
  Вы увидите модель некоего Некто, полностью построеннную из простых примитивов. Можете посмотреть систему иерархических связей данной модели - Graph Editors > Schematic View    
       
  иерархические связи модели Necto    
       
  Все связи сделаны при помощи Select And Link от подчиненного объекта к главному. Как видите корневым (root) объектом является примитив body. Все остальные примитивы напрямую или посредством родителя присоединены к нему.    
       
  Это даст Вам возможность с одной стороны иметь цельный неразрывный объект (модель), а с другой анимировать каждый из примитивов с использованием простых трансформаций - смещения, вращения, масштабирования.    
       
  Попробуем анимировать простейшую хотьбу.    
       
  Расположите модель удобным образом и выберите левую ногу (LLeg).    
       
  выбор левой ноги (LLeg)    
       
  Настроим параметры анимации. Пусть наша анимация будет качеством Film (24 кадра в секунду - 24 fps) и длительностью 24 кадра (1 секунду).    
       
  В панели анимации нажмите кнопку Time Configuration    
       
  панель анимации и кнопка 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, то получите примерно такой результат -    
       
  результат экспорта fedja_anim_go.max    
       
  Такой результат анимации Вы получите если будете просматривать ее из DirectX Viewer DirectX SDK 9. Приложение SkinnedMesh вообще не сможет ничего показать давая лишь ошибку.    
       
  Первое что приходит в голову - это то, что виноват экспортер PandaDXExport. Однако это не совсем так и всё еще можно исправить.    
       
  Всё дело в том, что руки модели персонажа должны быть уже опущены. Соответственно должны быть опущены и кости скелета рук.    
       
  модель Феди с опущенными руками    
       
  Щелкнув по рисунку Вы можете скачать архив fedja_transformed (95 Кб). Он содержит скорректированные модель и скелет, а также анимацию. Коррекция состояла в перемещении вершин модели относящихся к рукам в положение показанное на рисунке. Кости скелета также были трансформированы. Архив также содержит файл fedja_transformed_with_skel_go.max содержащий готовую к экспорту скорректированную модель и скелетную анимацию.    
       
  Следует заметить, что если Вы сами возьмете из архива файл fedja_transformed_with_skel.max и попробуете настроить корректно огибающие (Envelopes) для весов костей, создадите анимацию, то столкнетесь с проблемой настройки весов для отдельных вершин, которые плохо или совсем не охватываются огибающими. Выше уже говорилось, что такую настройку можно выполнить через Таблицу Весов - Weight Table.    
       
  кнопка вызова Таблицы весов панели параметров модификатора Skin c открытым узлом Envelope    
       
  Если выбрать определенную вершину (несколько вершин), для этого нужно установить флажок 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
Hosted by uCoz