Мобильная версия сайта | |||||||||
[Главная] | [Новости] | [Статьи] |
[Проекты] |
[Ссылки] |
[Автор] |
||||
[Архив новостей] | |||||||||
[Форум] | на форуме можно задать вопрос, посмотреть ответы на часто задаваемые вопросы | ||||||||
Здравствуйте! Вы попали на информационно-образовательный сайт посвященный информатике, информационным технологиям и компьютерным играм. Подробнее о целях и задачах сайта в разделе Главная. [English version of this page here...] | |||||||||
[Базовые уроки по DirectX] [Основы DirectMusic на Delphi] [Основы DirectInput8 на Delphi] [Основы DirectSound8 на Delphi] | |||||||||
[Разработка компьютерной игры] [Пример игры Donuts3D] [Delphi DirectX] | |||||||||
Основы 3D-анимации, экспорт скелетной анимации дата публикации: 9.10.2007 Цели и задачи статьи: показать способы создания анимации в 3Ds Max 7.0 или выше (можно использовать и ранние версии, но с оговорками указанными ниже) и использования ее в Delphi DirectX - играх. Системные требования - Наличие среды Delphi 6, 7 или выше для компиляции исходного кода, наличие 3Ds Max 7.0 или выше для создания моделей и анимаций; - Операционная система Windows 98SE/2000/XP sp2 или выше с установленным DirectX 8.1 или выше; - минимум ПК уровня Pentium III с тактовой частотой 1000 МНz или выше, RAM 128 Mb и выше, 32 Mb Video RAM и выше, DirectX-совместимая звуковая карта, мышь. - Рекомендуется наличие DirectX SDK 8.1 или выше (для изучения DirectX); - Терпение, старание и желание создавать компьютерные игры. Введение Наверное нет смысла объяснять что игра без анимации - это всё равно что паровоз без колес. В современных играх применяется 2D и 3D анимация. И если 2D анимация у Вас не вызывает особых вопросов значит Вы готовы к изучению основ 3D анимации. В DirectX SDK Вы найдете примеры реализации различных видов анимации - от 2D до 3D. 2D анимация и способ ее реализации показан в примере игры из DirectX SDK 8.1 адаптированной автором на Delphi 6-7 - Donuts3D. Ее можно с успехом применять для анимированных текстур (например вода, небо, лава и т.п.) и 2D-объектов используемых в 3D-сцене. Всё что требуется для создания 2D-анимации - это набор кадров и их последовательное отображение. От программиста требуется только выборка нужных кадров из специально подготовленного для этих целей изображения и показ их на экране в нужной последовательности с нужной скоростью. Ситуация с 3D-анимацией несколько иная. В 3D анимации учавствует уже не плоское изображение (хотя может учавствовать и оно), а трехмерная модель состоящая из некоторого количества объектов - вершин, граней, примитивов. Также как и в случае с 2D анимацией - мы имеем модель находящуюся в разных состояниях во времени. Эти состояния - кадры (frames). Анимацию можно производить непрерывно и постепенно меняя состояние нужного объекта в каждом кадре, а можно и ограничиться так называемыми ключевыми кадрами (keyframes). Ключевые кадры - это положения задаваемые для модели аниматором, а все промежуточные между ними кадры программа просчитывает сама используя линейную или другой вид интерполяции. Итак, любая анимация 3D модели - это трансформация (смещение, вращение, масштабирование - Translate, Rotate, Scale) суб-объектов модели (вершин, граней, примитивов). Условно можно выделить следующие виды анимации - - вершинная (или морфинг) - анимируются трансформации отдельных вершин. - объектная - модель создается как набор простых примитивов любой формы и конфигурации, но таких чтобы каждый из них можно было анимировать простой трансформацией - смещением, вращением, масштабированием. Таким образом вершины модели разбиваются на логические группы - в виде отдельных составных ее частей. - скелетная (Skinned Mesh) - относительно новый вид анимации (по крайней мере для новичков в 3D-программировании) включает в себя концепцию использования скелета. Суть ее заключается в том, что вся модель снова представляется как единый меш (Mesh). Внутрь меша внедрена другая - более примитивная модель называемая скелетом. Скелет состоит из отдельных примитивов называемых костями (Bones). Каждая вершина привязана к определенной кости (костям). Степень влияния отдельных костей на вершину называется весовым коэффициентом (Weights), представляется числом с плавающей точкой (тип Single) и лежит в диапазоне от 0 до 1. Сумма всех весов костей влияющих на данную вершину должна составлять 1. Кости совершенно не влияющие на данную вершину имеют весовой коэффициент для нее 0, влияющие >0. В Direct3D8 на вершину не должно влиять более 4 костей, а на практике часто встречается влияние только лишь одной кости. Анимируя скелет мы тем самым анимируем и связанные с данными костями вершины. Все эти виды анимаций применяются в 3D-играх и имеют свои достоинства и недостатки. Морфинг - этой самый простой вид анимации с точки зрения объема необходимых вычислений. Но объем получаемых выходных файлов для анимации морфингом слишком большой. Поэтому для сокращения объема применяют ряд оптимизаций - уменьшение FPS (Frames Per Second) - частоты кадров, уменьшение количества вершин модели и различные способы упаковки информации об анимации, применение межкадровой интерполяции. Объектная анимация более удобна за счет сокращения объема выходных данных, но требует большей работы с моделями и больше вычислений. Скелетная анимация в свою очередь требует еще больше предварительной работы над моделью и еще большего количества вычислений, но объем анимированной модели значительно сокращается. Кроме того, скелетную анимацию можно использовать не только для одной, но и для многих других подобных моделей, что еще больше сокращает объем необходимых медиа-файлов игры. Примеры анимаций Анимация методом морфинга показана в DirectX SDK в примере приложения Dolphin. Адаптированное для Delphi приложение представлено в базовых уроках Delphi DirectX. Примеры объектной и скелетной анимации мы с Вами создадим на протяжении данной статьи. Создаем анимированные модели Сначала поговорим о том, в какой формат будем экспортировать анимированную модель из 3Ds Max. Для экспорта анимаций в произвольный формат можно воспользоваться возможностями MAXScript языка встроенного в 3Ds Max или даже написать собственный плагин. Но для этого Вам понадобится MAX SDK. Если будем экспортировать в формат X с использованием плагина из DirectX SDK 9.0 - DXExtensionsMax.gup то столкнемся с проблемой того, что объектная анимация экспортируется без проблем (для Direct3D9), а вот скелетная - увы почему-то не поддерживается (даже для Direct3D9!). Для анимации вершин нужно выводить каждый кадр в отдельный файл, а затем все это оптимизировать и упаковывать в один файл с анимированной цепочкой кадров. Поэтому для экспорта скелетной анимации придется писать свой плагин или экспортер. Можно на первых порах воспользоваться и сторонними экспортерами, например, Я нашел в Интернете экспортер PandaDXExport. Этот экспортер устанавливается точно также как и DXExtensionsMax.gup Но он требует очень аккуратного обращения. К сожалению отсутствует исходник экспортера. Но это уже личное дело его автора, потому что экспортер распространяется бесплатно! Подготовка моделей для экспорта должна вестись очень аккуратно, иначе это приведет к нарушениям в полученной экспортированной модели. Ниже Мы попытаемся разобраться в проблемах экспорта с помощью PandaDXExport и обойти возможные ошибки и сложности. Для экспериментов с экспортом Вам понадобится следующая модель - roboo (60 Кб). Это просто "Шагающий двуног" - бокс с вычлененными при помощи Bevel и Extrude двумя конечностями, с внедренным скелетом из двух конечностей и базовой кости. Также содержатся объекты Dummy как захваты для управления анимированием. О моделировании персонажей будет рассказано в отдельных статьях посвященных урокам по 3Ds Max. |
|||||||||
Итак, предположим, что Вы уже скачали архив roboo и распаковали например, в папку SkinnedMeshExperim, установили плагин PandaDXExport. | |||||||||
Откройте файл roboo_anim_go.max из 3DS Max 7 (или выше) и попробуйте экспортировать его командой File > Export > Panda DirectX (название этого пункта будет зависеть от того, что вы пропишете в конфигурационном файле plugin.ini в папке установленного 3Ds Max). | |||||||||
Когда Вы введете подходящее имя и нажмете кнопку Save (Сохранить) перед Вами появится окно параметров экспорта Панды. Задайте следующие параметры экспорта - | |||||||||
И нажмите ОК. При этом модель должна благополучно экспортироваться в файл X с именем, которое Вы указали. | |||||||||
Для проверки результата экспорта можно воспользоваться утилитой MeshView из DirectX SDK 8.1 или DirectX Viewer из DirectX SDK 9. | |||||||||
Кроме того, поскольку целью нашего экспорта является использование анимаций в Delphi DirectX 3D-игре, мы проверим проигрывание экспортированной анимации в приложении SkinnedMesh. (1,6 Mb). | |||||||||
Для компиляции и исполнения Вам понадобятся файлы из архива с ОБЩИМ КОДОМ (772 Кб). Замечания по компиляции и исполнению читайте в readme.txt вложенный внутри данного архива! | |||||||||
В папке архива SkinnedMesh после распаковки вы найдете папку Media. В ней содержатся три примера анимации - nx4.x, tiny.x и robooPDX.x. nx4 - подлодка из проекта Тайны Морских Глубин: Операция Тайфун, показана анимация объектов - вращающихся винтов; tiny.x - оригинал из DirectX SDK 8.1, 9; robooPDX.x - то, что вы должны получить в процессе экспорта модели из файла roboo_anim_go.max |
|||||||||
Для проверки данных анимированных моделей откройте файл проекта SkinnedMesh.dpr из среды Delphi, откройте unit SkinnedMeshUnit.pas, в классе CMyD3DApplication найдите реализацию функции InitDeviceObjects найдите строчку кода m_szPath := 'Media\tiny.x'; И задайте другую модель из имеющихся - nx4.x или robooPDX.x Перекомпилируйте приложение и запустите полученный исполнимый файл. Если получаете ошибку об отсутствии файла D3DX81ab.dll скопируйте этот файл из папки с ОБЩИМ КОДОМ в папку с исполнимым файлом SkinnedMesh.exe и снова запустите приложение SkinnedMesh.exe. |
|||||||||
Roboo экспортировался в Х без проблем. Остановимся теперь на экспорте более сложных, но близких к реальным игровым приложениям примерах моделей. | |||||||||
Модели должны быть очень аккуратно подготовлены к экспорту. Что это значит? Это значит что любые огрехи в анимации или моделировании непременно скажутся на качестве выходной модели если вообще не приведут к ее порче. Чтобы продемонстрировать Вам неверный экспорт и ошибки скачайте архив с некорректной моделью - uncorrect_model (115 Кб). | |||||||||
Распакуйте архив в какую-нибудь папку и откройте файл human_skeleton_animate_go.max из 3Ds Max. Попробуйте экспортировать в формат X экспортером PandaDXExport. | |||||||||
Полученную модель проверьте в приложении SkinnedMesh или утилитами MeshView из DirectX SDK 8.1 или DirectX Viewer из DirectX SDK 9. | |||||||||
Налицо сразу 3 ошибки - часть головы оторвана и движется вместе с рукой; периодически мелькает нулевая позиция меша - с разведенными в стороны руками; отсутствует текстура. | |||||||||
Корни данной некорректной модели лежат в основе ее создания. Чтобы избежать создания таких ошибок рассмотрим процесс подготовки модели и ее скелета более подробно. | |||||||||
[далее] | |||||||||
[Базовые уроки по 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 | |||||||||