Орехово-Зуевский район, посёлок Давыдово: история,новости,фотографии,объявления,телефоный справочник,погода,транспорт,бары,рестораны

Теги
Нет тегов для показа


 
Ответить в данную темуНачать новую тему
> Экспорт анимации из 3dMax-а в XNA, Разработка компьютерных игр
Артем
сообщение 9.1.2011, 11:01
Сообщение #1


Постоялец
***
Группа: Пользователи
Сообщений: 168
Регистрация: 10.10.2007
Пользователь №: 296

[Вставить ник]
[Цитата]



Репутация:   2  

Любители-разработчики компьютерных игр уже два года бьются над проблемой экспорта 3d моделей из 3dMax-а
в Visual Studio. Именно любители, гуру создания компьютерных игр - эта проблема уже была решена.
С момента появления одной из первых компьютерных игр Арканойд и еще ряда игр типа BattelTank, Orion и Larry написанных
под Dos, опять появляются программисты-одиночки, благодаря пакету программ
XNA Game Studio и Visual Studio Express
выпущенных фирмой Microsoft два
года назад. После появляния Арканойда за разработку игр берутся серьезные компании, которые вкладывают в этот бизнесс громадные
деньги и окупают их в десять раз больше. Так появляются на свет StarCraft, Heroes 3, Civilization 3 - игры с двумерной спрайтовой
анимацией, затем появляется MaxPayne уже с 3d моделями, смоделированными в 3dMax-е четвертой версии, Heroes 5, Civilization 5,
Counter Strike, Doom 3, Crisys здесь анимация уже трехмерная. Но стоимость затраченная на компьютерное оборудование и программы,
а так же разделения труда разработчиков КИ на программистов, художников модельеров, писателя сюжета игры и тестировщиков игры,
не дают никакой возможности обычному пользователю компьютера, а точнее разработчику компьютерной игры индивидуалу, в домашних
условиях написать компьютерную игру. Сейчас благодаря XNA и 3dMax-у опять наступает эра разработчиков компьютерных игр одиночек. Интернет - дешевый,
за 300 руб. в месяц можно иметь 10Gb интернета, для сравнения дистрибъютив 3dMax-а весит около 0.7 Gb, скорость просто супер,
с выделенной оптоволоконной линией это будет 8Mbit в секунду, около 2Mb, да и 300 рублей просто смешно. За обычный телефон мы
платим 500 рублей в месяц. XNA и Visual Studio Express распространяются фирмой Microsoft абсолютно бесплатно, а даже если и
программа платная вроде 3dMax-а, то кто запрещает ввести заветно слово Crack в Гугл. Благо все программы американские
и если вы не любитель отдыхать в Америке, то за кражу вас никто не посадит. Хотя садят, раз в 3-ри года какого-нибудь директора
школы за пользование хакерской Windows, да и все эти программы сплошь направо и налево продаются на рынках по 200 руб за штуку,
хотя стоимость 3dMax - а исчисляется в тысячах евро. Да и для разработки игр есть форумы - CodePlex
и Справка по программе Visual Studio, где на ваш вопрос ответят
сами программисты из Microsoft.

Собственно, когда XNA только появился, то экспорт 3d моделей из 3dMax-а уже был реализован в
XNA FrameWork - это стандартные классы написанные на C++ и скомпилированные в
библиотеки .dll, вроде как NetFrameWork, только для игр. Это можно посмотреть в этом
проекте для Visual Studio,
а именно в этом коде файла-класса - ShadowMapping.cs

Код
   // Loop over meshs in the model
            foreach (ModelMesh mesh in model.Meshes)
            {
                // Loop over effects in the mesh
                foreach (Effect effect in mesh.Effects)
                {

                    if (effect.GetType() == typeof(BasicEffect))
                    {
                        BasicEffect effect1 = (BasicEffect)effect;

                        effect1.World = WorldMatrix;
                        effect1.View = Matrix.CreateLookAt(new Vector3(0.0f, 100.0f, 50.0f), Vector3.Zero, Vector3.Up);
                        effect1.Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f),
                             aspectRatio, 1.0f, 1000.0f);
                    }
                    // Set the currest values for the effect
                    //effect.CurrentTechnique = effect.Techniques[techniqueName];
                   // effect.Parameters["World"].SetValue(world);
                   // effect.Parameters["View"].SetValue(view);
                    //effect.Parameters["Projection"].SetValue(projection);
                   // effect.Parameters["LightDirection"].SetValue(lightDir);
                    //effect.Parameters["LightViewProj"].SetValue(lightViewProjection);

                   // if (!createShadowMap)
                      //  effect.Parameters["ShadowMap"].SetValue(shadowRenderTarget);
                }
                // Draw the mesh
                mesh.Draw();
            }




Я его немного поправил, потому что проект двух-летней давности у меня не сохранился на компьютере, поэтому я
скачал с сайта один из проектов и реализовал его, как это сложилось исторически. Как мы видим в проекте для файла
3d модели dude.fbx назначен стандартный импротер Autodesk FBX - XNA Framework и экспортер Model - XNA Framework.

Вот картинка -

Прикрепленный файл  Dude.JPG ( 15,84 килобайт ) Кол-во скачиваний: 2


Рендер довольно очень страшный, но писать игру в специализированной среде разработки игр уверяю вас значительно
легче, чем все это делать с нуля.

Из 3dMax-а модель экспортируется при помощи стандартного .fbx экспортера встроенного в 3dMax, забыл отметить, что
XNA поддерживает только файлы 3dмодели формата .x DirectX-овский стандарт и .fbx

Собственно, когда это увидели юные дизайнеры 3dMax-а, то первое о чем затрубил интернет - это
"Анимация из 3dMax-а, Анимация из 3dMax-а" Действительно вся анимация в XNA заключается в вращении модели, перемещении
и масштабировании. А как заставить того же солдата dude.fbx не просто сдвигаться, а дать кулаком по морде своему врагу.


Год назад эта анимация, которая называлась скелетной анимацией, в одном из проектов Visual Studio была реализованна.
Суть ее заключалась в том, что в 3dMax-е рисуется модель человека или человеко-подобного существа на нее натягивается
скелет Bip, и к модели применяется модификатор Skin. Все, затем к скелету подгружается файл движения формата
.bip и ваша модель солдата секунд 7-8 дерется у вас на экране монитора. Файлов движения для 3dMax-а полно в мультистудии
телепроекта "Мульт Личности", который показыватся по первому или второму каналу. Там они их делают на очень дорогом
оборудовании сенсорного захвата движения. Т.е. актер цепляет на себя датчики и 3dмодель повторяет в программе 3dMax
все его движения и затем компьютер все это записывает в файл формата .bip Так, что если у вас есть время и желание едьте туда
и выпрашиваете эти файлы в Останкино. Несколько файлов можно купить в моем интернет магазине. Такую анимацию я затем пробовал
экспортировать при помоши стандартного fbx экспортера, но модель почему-то в окне XNA проекта превращалась в паучка,
т.е кости модели почему-то изворачивались и ничего подходящего, как "паук" названия к такой модели я не вижу.

Неделю назад мне удалось экспортировать анимацию при помощи вот этого экспортера 3dMax-а.
Он экспортирует анимацию в формат .x

Вот так должно выглядеть окно экспортера перед экспортом модели.

Прикрепленный файл  KWXexporter.JPG ( 63,73 килобайт ) Кол-во скачиваний: 7



Рассказывать, что обозначает каждая опция я не буду, главное, что это работает.

Реализованно это вот в этом проекте Можете запустить его и посмотреть,
не забудьте нажать правой кнопкой мыши в окне для просмотра анимации. Собственно модель, которую я анимировал - это
Robot.x, экспортер CPU Skinned Model для нее написан в этом решении проекта, а именно проекты CpuSkinningDataTypes (Windows) и
CpuSkinningPipelineExtensions, оба пректа компилируются, как библиотеки, а не екзешники. Обе билиотеки
CpuSkinningDataTypes.dll и CpuSkinningPipelineExtensions.dll можно найти в папке
CPUSkinningSample_4_0\CpuSkinningPipelineExtensions\bin\x86\Debug.

Теперь, чобы написать игру с нуля можно либо влючить эти проекты к вашему решению, либо указать эти библиотеки, как ссылки.
А именно в папку Content обе ссылки, а в основной проект CpuSkinningDataTypes.dll. И пользоваться ими, как обычно. Dll - шки -
это обычные файлы-классы, только скомпилированные в один файл для удобства и может еще для разделения труда программистов.
Типа одни товарищи пишут одни Dll - шки другие другие, а потом кто-то один их собирает в один проект.

Инициализируется модель вот так -


Код
cpuRobot = Content.Load<CpuSkinnedModel>("Robot");


Этот код добавляет анимацию -

Код

            // Create an animation player, and start decoding an animation clip.
            animationPlayer = new AnimationPlayer(cpuRobot.SkinningData);
            AnimationClip clip = cpuRobot.SkinningData.AnimationClips["Anim1"];
            animationPlayer.StartClip(clip);


Anm1 - это название анимации, которую вы указали при экспорте модели из 3dMax-а

В методе Update() пишеться вот такая строчка


Код

   // update animations
            animationPlayer.Update(gameTime.ElapsedGameTime, true, Matrix.Identity);


И наконец последнне метод Draw()

Код
  graphics.GraphicsDevice.Clear(Color.LightGoldenrodYellow);
            spriteBatch.Begin();
            //выведем фоновое изображение
          //  spriteBatch.Draw(txtBack, recBack, Color.White);
            //Выведем игровые объекты

            // Compute camera matrices.
            const float cameraDistance = 180;
            Matrix view = Matrix.CreateTranslation(0, -40, 0) *
                          Matrix.CreateRotationY(MathHelper.ToRadians(0f)) *
                          Matrix.CreateRotationX(MathHelper.ToRadians(0f)) *
                          Matrix.CreateLookAt(new Vector3(0, 0, cameraDistance), new Vector3(0, 0, 0), Vector3.Up);
            Matrix projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, GraphicsDevice.Viewport.AspectRatio, 1, 1000);

          
            // reset graphics state to be appropriate for drawing our model
            graphics.GraphicsDevice.BlendState = BlendState.Opaque;
            graphics.GraphicsDevice.RasterizerState = RasterizerState.CullCounterClockwise;
            graphics.GraphicsDevice.DepthStencilState = DepthStencilState.Default;
            graphics.GraphicsDevice.SamplerStates[0] = SamplerState.LinearWrap;

            // draw the correct model based on our current rendering mode
            if (displayCpuModel)
            {
                foreach (CpuSkinnedModelPart modelPart in cpuRobot.Parts)
                {
                    modelPart.SetBones(animationPlayer.SkinTransforms);

                    modelPart.Effect.SpecularColor = new Vector3(1f);
                    modelPart.Effect.SpecularPower = 32f;

                  
            modelPart.Effect.World = world;
            modelPart.Effect.View = view;
            modelPart.Effect.Projection = projection;

                    modelPart.Effect.EnableDefaultLighting();
            
            
            modelPart.Effect.DirectionalLight0.Direction = Vector3.Forward;
            modelPart.Effect.DirectionalLight0.Enabled = true;
            modelPart.Effect.DirectionalLight1.Enabled = true;
            modelPart.Effect.DirectionalLight2.Enabled = true;            
            modelPart.Draw();
                }
            }



Теперь поговорим о небольшой моей хитрости. В 3dMax - е нельзя записать множественную анимацию в один файл .x
А в некоторых играх хотелось бы записать несколько анимаций персонажа, например ходьба, прыжок, приседание, в
один файл и не просто записать но еще иметь возможность обращаться к таким анимациям по индексу, самый идеальный
вариант "Anim1", "Anim2","Anim3" индекс здесь 1,2 и 3 ну еще может добавить анимацию смерти "Death"

Что для этого нужно сделать.

1. в 3dMax-е при помощи Mixer загружаем несколько .bip анимаций одна за другой.
2. вычисляем кадр начала и конца для каждой анимации и
3. в экспортере, смотрите картинку сверху задаем первый кадр, кол-во кадров и название анимации "Anim1", два, три и т.д.

Все, теперь в коде проекта XNA можно обращаться к каждой анимации таким образом.

Код
             int i;
               i=3;
             AnimationClip clip = cpuRobot.SkinningData.AnimationClips["Anim"+i.ToString()];
             animationPlayer.StartClip(clip);



Но история не стоит на месте, скоро 3d дизайнеры потребуют от программистом Microsoft экспорта произвольной анимации
из 3dMax, поэтому живем, как и раньше, ждем, следим за новостями сайтов,
и радуемся жизни.

Конец статьи. автор - Харченко Артем




















Перейти в начало страницы
 
+Цитировать сообщение

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Отказ от ответственности
Текстовая версия Сейчас: 24.11.2017, 17:11 | Skin Design by Metalaxe

При любом использовании материалов ресурса,
ссылка на www.davidovo.info обязательна.
Интересные новости, статьи и фотографии
высылайте на admin@davidovo.info