﻿define('DISALLOW_FILE_EDIT', true);
define('DISALLOW_FILE_MODS', true);<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>/dev/head &#187; 3dMax</title>
	<atom:link href="http://devhead.ru/cat/3dmax/feed" rel="self" type="application/rss+xml" />
	<link>http://devhead.ru</link>
	<description>Статьи и видео уроки</description>
	<lastBuildDate>Mon, 30 Jan 2017 11:12:34 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.37</generator>
	<item>
		<title>Экспорт анимации из 3dMax в XNA</title>
		<link>http://devhead.ru/read/eksport-animacii-iz-3dmax-v-xna</link>
		<comments>http://devhead.ru/read/eksport-animacii-iz-3dmax-v-xna#comments</comments>
		<pubDate>Tue, 11 Jan 2011 13:41:21 +0000</pubDate>
		<dc:creator><![CDATA[artem005]]></dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[3dMax]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[XNA]]></category>
		<category><![CDATA[анимация]]></category>

		<guid isPermaLink="false">http://devhead.ru/read/eksport-animacii-iz-3dmax-v-xna/</guid>
		<description><![CDATA[Любители-разработчики компьютерных игр уже два года бьются над проблемой экспорта 3d моделей из 3dMax-а  в Visual Studio. Именно любители, гуру создания компьютерных игр - эта проблема уже была решена. С момента появления одной из первых компьютерных игр Арканойд и еще ряда игр типа BattelTank, Orion и Larry написанных под Dos, опять появляются программисты-одиночки, благодаря пакету [&#8230;]]]></description>
				<content:encoded><![CDATA[<div>Любители-разработчики компьютерных игр уже два года бьются над проблемой экспорта 3d моделей из 3dMax-а  в Visual Studio. Именно любители, гуру создания компьютерных игр - эта проблема уже была решена. С момента появления одной из первых компьютерных игр Арканойд и еще ряда игр типа BattelTank, Orion и Larry написанных под Dos, опять появляются программисты-одиночки, благодаря пакету программ <a href="http://create.msdn.com/en-us/home/getting_started">http://create.msdn.com/en-us/home/getting_started</a> XNA Game Studio и Visual Studio Express  выпущенных фирмой <a href="http://www.microsoft.com/ru/ru/default.aspx">http://www.microsoft.com/ru/ru/default.aspx</a> Microsoft два года назад.</div>
<div><span id="more-1001"></span></div>
<div>После появляния Арканойда за разработку игр берутся серьезные компании, которые вкладывают в этот бизнесс громадныеденьги и окупают их в десять раз больше. Так появляются на свет StarCraft, Heroes 3, Civilization 3  - игры с двумерной спрайтовой анимацией, затем появляется MaxPayne уже с 3d моделями, смоделированными в 3dMax-е четвертой версии, Heroes 5, Civilization 5,Counter Strike, Doom 3, Crisys здесь анимация уже трехмерная. Но стоимость затраченная на компьютерное оборудование и  программы, а так же  разделения труда разработчиков КИ на программистов, художников модельеров, писателя сюжета игры и  тестировщиков игры,не дают никакой возможности обычному пользователю компьютера, а точнее разработчику компьютерной игры индивидуалу, в домашних условиях написать компьютерную игру. Сейчас благодаря XNA и  <a href="http://usa.autodesk.com/adsk/servlet/pc/index?id=13567410&amp;siteID=123112&quot;]3dMax-у[/url">http://usa.autodesk.com/adsk/servlet/pc/index?id=13567410&amp;siteID=123112 </a></div>
<div>3dMax-у опять наступает эра разработчиков компьютерных игр одиночек.</div>
<div><!--more--></div>
<div>XNA и Visual Studio Express распространяются фирмой Microsoft абсолютно бесплатно. да и для разработки игр есть форумы - <a href="http://www.codeplex.com/ CodePlex">http://www.codeplex.com/</a> CodePlex  и   http://msdn.microsoft.com/ru-ru/library/ms123401.aspx  Cправка по программе Visual Studio, где на ваш вопрос ответят сами программисты из Microsoft. Собственно, когда XNA только появился, то экспорт 3d моделей из 3dMax-а уже был реализован в http://depositfiles.com/files/6z1tc0in1 XNA FrameWork  - это стандартные классы написанные на C++ и скомпилированные в библиотеки .dll, вроде как NetFrameWork, только для игр. Это можно посмотреть в этом <a href="http://depositfiles.com/files/3fd0q14fn">http://depositfiles.com/files/3fd0q14fn</a> проекте для Visual Studio, а именно в этом коде файла-класса</div>
<div><strong>ShadowMapping.cs</strong></div>
<div>
<pre class="brush: csharp">// 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();
 }
</pre>
</div>
<div>Я его немного поправил, потому что проект двух-летней давности у меня не сохранился на компьютере, поэтому я скачал с сайта один из проектов и реализовал его, как это сложилось исторически. Как мы видим в проекте для файла 3d модели dude.fbx назначен стандартный импротер Autodesk FBX - XNA Framework и экспортер Model - XNA Framework.Вот картинка -</div>
<div><img src="http://artem00511.narod.ru/Dude.JPG" alt=" Ckjlfn Dude" height="382" width="460" /></div>
<div>Рендер довольно очень страшный, но писать игру в специализированной среде разработки игр уверяю вас значительно легче, чем все это делать с нуля. Из 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 Так, что если у вас есть время и желание едьте туда и выпрашиваете эти файлы в Останкино. Несколько файлов можно купить в моем</div>
<div><a href="http://artem00511.narod.ru/html_shop/index.html?idn=65086&quot;]интернет">http://artem00511.narod.ru/html_shop/index.html?idn=65086 </a>интернет магазине. Такую анимацию я затем пробовал  экспортировать при помоши стандартного fbx экспортера, но модель почему-то в окне XNA проекта превращалась в паучка, т.е кости модели почему-то изворачивались и ничего подходящего, как "паук" названия к такой модели я не вижу. Неделю назад мне удалось экспортировать анимацию при помощи вот этого <a href="http://www.kwxport.org/">http://www.kwxport.org/</a> экспортера 3dMax-а. Он экспортирует анимацию в формат .x</div>
<div>Вот так должно выглядеть окно экспортера перед экспортом модели.</div>
<div><img src="http://artem00511.narod.ru/KWXexporter.JPG" alt="KWX Exporter" height="526" width="584" /></div>
<div>Рассказывать, что обозначает каждая опция я не буду, главное, что это работает.</div>
<div>Реализованно это вот в этом <a href="http://depositfiles.com/files/6lvvqh300&quot;]проекте[/url">http://depositfiles.com/files/6lvvqh300"]проекте</a> Можете запустить его и посмотреть, не забудьте нажать правой кнопкой мыши в окне для просмотра анимации. Собственно модель, которую я анимировал - это Robot.x, экспортер CPU Skinned Model для нее написан в этом решении проекта, а именно проекты CpuSkinningDataTypes (Windows) и CpuSkinningPipelineExtensions, оба пректа компилируются, как библиотеки, а не екзешники. Обе билиотеки CpuSkinningDataTypes.dll и CpuSkinningPipelineExtensions.dll можно найти в папке CPUSkinningSample_4_0CpuSkinningPipelineExtensionsbinx86Debug. Теперь, чобы написать игру с нуля можно либо влючить эти проекты к вашему решению, либо указать эти библиотеки, как ссылки. А именно в папку Content обе ссылки, а в основной проект CpuSkinningDataTypes.dll. И пользоваться ими, как обычно. Dll - шки - это обычные файлы-классы, только скомпилированные в один файл для удобства и может еще для разделения труда программистов. Типа одни товарищи пишут одни Dll - шки другие другие, а потом кто-то один их собирает в один проект. Инициализируется модель вот так -</div>
<div>
<pre class="brush: csharp">cpuRobot = Content.Load&lt;CpuSkinnedModel&gt;("Robot");</pre>
</div>
<div>Этот код добавляет анимацию -</div>
<div>
<pre class="brush: csharp">// Create an animation player, and start decoding an animation clip.
 animationPlayer = new AnimationPlayer(cpuRobot.SkinningData);
 AnimationClip clip = cpuRobot.SkinningData.AnimationClips["Anim1"];
 animationPlayer.StartClip(clip);</pre>
</div>
<div>Anm1 - это название анимации, которую вы указали при экспорте модели из 3dMax-а</div>
<div>В методе Update() пишеться вот такая строчка</div>
<div>
<pre class="brush: csharp">// update animations
 animationPlayer.Update(gameTime.ElapsedGameTime, true, Matrix.Identity);[/code] И наконец последнне метод Draw() [code]
 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();
 }
 }</pre>
</div>
<div>Теперь поговорим о небольшой моей хитрости. В 3dMax - е нельзя записать множественную анимацию в один файл .x А  в некоторых играх хотелось бы записать несколько анимаций персонажа, например ходьба, прыжок, приседание, в один файл и не просто записать но еще иметь возможность обращаться к таким анимациям по индексу, самый идеальный  вариант "Anim1", "Anim2","Anim3" индекс здесь 1,2 и 3 ну еще может добавить анимацию смерти "Death"</div>
<div><strong>Что для этого нужно сделать.</strong> </p>
<ul>
<li>в 3dMax-е при помощи Mixer загружаем несколько .bip анимаций одна за другой.</li>
<li>вычисляем кадр начала и конца для каждой анимации и</li>
<li>в экспортере, смотрите картинку сверху задаем первый кадр, кол-во кадров и название анимации "Anim1", два, три и т.д.</li>
</ul>
</div>
<div>Все, теперь в коде проекта  XNA можно обращаться к каждой анимации таким образом.</div>
<div>
<pre class="brush: csharp">int i;
 i=3;
 AnimationClip clip = cpuRobot.SkinningData.AnimationClips["Anim"+i.ToString()];
 animationPlayer.StartClip(clip);
</pre>
</div>
<div>Но история не стоит на месте, скоро 3d дизайнеры потребуют от программистов Microsoft экспорта произвольной анимации из 3dMax, поэтому живем, как и раньше, ждем, следим за новостями http://create.msdn.com/en-US/education/catalog/ сайтов, и радуемся жизни.</div>
<div><em>Конец статьи. автор - Харченко Артем</em></div>
]]></content:encoded>
			<wfw:commentRss>http://devhead.ru/read/eksport-animacii-iz-3dmax-v-xna/feed</wfw:commentRss>
		<slash:comments>4617</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->