FBX improvements in XNA Game Studio 3.0

by Blogger 하얀쿠아
2011. 10. 3. 03:32 소프트웨어 Note/XNA Framework
max에서 FBX파일을 export한뒤 xna에서 import하여 다룰때 필요한 심화된 정보 정도로 보면 되겠다.



One of the less obvious changes in our 3.0 release is that we picked up an updated version of the FBX SDK from our partners at Autodesk, which enables some cool new functionality in our FBX importer:

  • Multiple textures
  • Multiple texture coordinate channels
  • Effect materials
  • Material name strings are now imported correctly

To use this stuff, you first need to make sure you have the latest version of the Max or Maya FBX exporters.

Now create a material that uses more than one texture. For instance I used Max to apply a diffuse texture map, specular map, and bump map. Here's how that data shows up when I read it with our 3.0 FBX importer:

  <Resource ID="#Resource1" Type="Graphics:BasicMaterialContent">
      <Name>ShawnsTestMaterial</Name>
      <OpaqueData>
        <Data Key="DiffuseColor" Type="Framework:Vector3">0.5 0.5 0.5</Data>
        <Data Key="EmissiveColor" Type="Framework:Vector3">0 0 0</Data>
        <Data Key="Alpha" Type="float">1</Data>
        <Data Key="SpecularColor" Type="Framework:Vector3">0 0 0</Data>
        <Data Key="SpecularPower" Type="float">1.9</Data>
      </OpaqueData>
      <Textures>
        <Texture Key="Texture">
          <OpaqueData>
            <Data Key="TextureCoordinate">TextureCoordinate0</Data>
          </OpaqueData>
          <Reference>#External1</Reference>
        </Texture>
        <Texture Key="SpecularFactor0">
          <OpaqueData>
            <Data Key="TextureCoordinate">TextureCoordinate0</Data>
          </OpaqueData>
          <Reference>#External2</Reference>
        </Texture>
        <Texture Key="Bump0">
          <OpaqueData>
            <Data Key="TextureCoordinate">TextureCoordinate1</Data>
          </OpaqueData>
          <Reference>#External3</Reference>
        </Texture>
      </Textures>
    </Resource>
  

See those extra two textures? See how the TextureCoordinate opaque data records whichcoordinate channel goes with each one?

The bad news is that if you load and draw this model in the usual way, these extra textures will not actually show up. That is because BasicEffect has no idea how to apply specular or bump maps, so the default material processor will just throw them away.

To render this kind of richer material, you must provide a suitable shader, then use a custom processor to apply it to your model. The improvement is that in 3.0, such processors now have more information about how the original material was set up in Max or Maya. With sufficient smarts, you could make a processor that examined the material to see which of many possible texture layers were present, chose the best fit from a set of shaders, then automatically applied the appropriate shader, passing all the correct textures through to it.

A more automated approach for using custom shaders comes into play if you apply a Direct3D material directly to your object in Max (I believe this is not currently supported by Maya). This now works in FBX the same way it previously did with X files. You can export an FBX file that uses a custom D3D effect as a material, import this into the Content Pipeline, where the material will show up as an EffectMaterialContent, then load it into your game, where the material will come through as an instance of your custom Effect already configured with the appropriate textures and parameter values.

This kind of thing makes me a happy chappie.

Go Autodesk!

출처 : http://blogs.msdn.com/b/shawnhar/archive/2008/09/18/fbx-improvements-in-xna-game-studio-3-0.aspx

'소프트웨어 Note > XNA Framework' 카테고리의 다른 글

FBX improvements in XNA Game Studio 3.0  (0) 2011.10.03
XNA와 3D 기초 (1)  (0) 2011.09.10
XNA Framework의 논리적 흐름  (0) 2011.07.21
이 댓글을 비밀 댓글로

XNA와 3D 기초 (1)

by Blogger 하얀쿠아
2011. 9. 10. 15:41 소프트웨어 Note/XNA Framework
 [1] XNA에서 3D 프로그래밍의 시작.
3D 자료를 2차원인 모니터 화면에 렌더링 한다는 것의 의미는 무엇인가??

3D 렌더링이라는 것은 기본적으로 3차원 공간의 기하구조를 2차원 평면에 투영하고, 투영된 기하구조에 적절한 색들을 채워 넣는 것이다.

초창기 3D게임들은 3D 렌더링을 위한 레이캐스팅(ray-casting)과 같은 기법들을 전적으로 CPU에서 처리!
하지만, 오늘날의 3D 그래픽 처리는 모두 GPU에서 일어난다.

GPU는 다각형들을 화면에 그리고 픽셀들을 채우는 일뿐만 아니라
3D자료를 2D로 투영하고 변환하는 작업도 모두 처리한다.

게다가 투영, 변환과 픽셀 채우기 작업의 구체적인 방식을 개발자가 세세하게 지정하는것도 가능
 ☞ 셰이더(Shader) 기술을 통해서 가능함

3D 점들을 화면 좌표로 투영하는 작업 : 정점 셰이더(Vertex Shader)
화면에 보이는 다각형들을 픽셀로 채우는 작업 : 픽셀 셰이더(Pixel Shader)

특히 픽셀 셰이더는 색을 바꾸거나, 텍스쳐들을 혼합하거나, 빛과 그림자를 적용하는 등으로 최종적인 결과물의 모습을 임의로 제어할 수 있는 수단이다!

XNA는 정점 셰이더와 픽셀 셰이더를 지원하지 않는 구형 하드웨어를 아예 지원하지 않음.
 ☞ 따라서 하위 호환성을 위해 고정 기능 파이프라인이나 소프트웨어 렌더링으로 전환하는 문제는 전혀 생각할 필요가 없다. (XNA를 위해서는 적어도 셰이더 모델 1.1이 필요. 즉, 지포스3나 ATI 8000급의 그래픽 카드가 필요하다는 뜻)





 [2] 3D 자료가 2차원 화면으로 투영되기까지.
크게 다음과 같은 네 단계를 거친다.

- 3D자료를 WorldMatrix를 통해서 3차원 공간의 적절한 위쳉 적절한 방향, 크기가 되도록 배치.

- 3D 모형의 모든 점(Vertex)이 이 WorldMatrix에 의해 변환되어서 3D 세계 공간의 적절한 위치에 놓임.
DirectX나 고정 기능 파이프라인에서는 이러한 변환이 자동으로 일어나나, XNA에서는 셰이더로 모든 변환을 직접 수행해 주어야 함. (XNA는 고정 기능 파이프라인(FFP)을 전혀 지원하지 않음)

- 화면에 실제로 나타나는 것들은 카메라(또는 시점)의 위치와 방향에 의해 결정됨. 3D 세계 공간의 모든 것이 이 카메라 공간으로 투영됨.
다른말로 하면, 카메라 행렬을 적절히 설정하는것으로 3D 세계 공간의 어떤 부분을 어떤 각도로 표시할 것인가가 결정된다는 얘기. (Matrix.CreateLookAt 메서드로 생성한 카메라 행렬을 정점 셰이더에게 넘겨주면 정점 셰이더가 그것을 통해 3D 세계의 자료를 카메라 공간으로 변환)

- 카메라 공간에 투영된 모든 것을 화면 공간으로 변환. 최종적으로 2차원 화면 버퍼에 렌더링.
카메라 공간에서 화면 공간으로의 변환하는 방식은 투영 행렬(Projection Matrix 라 함)에 의해 결정.
카메라의 시야각, 가까운 평면과의 거리와 먼 평면과의 거리를 지정해서 투영 행렬을 만들어 준다.



 [3] 3D 자료의 최종적인 모습을 만드는 것
화면에 투영된 3D 자료에 픽셀들을 채워 최종적인 모습을 만드는 작업은 픽셀 셰이더가 담당.
화면이 2차원이므로 픽셀 셰이더도 2차원 공간에서 동작함.


'소프트웨어 Note > XNA Framework' 카테고리의 다른 글

FBX improvements in XNA Game Studio 3.0  (0) 2011.10.03
XNA와 3D 기초 (1)  (0) 2011.09.10
XNA Framework의 논리적 흐름  (0) 2011.07.21
이 댓글을 비밀 댓글로

XNA Framework의 논리적 흐름

by Blogger 하얀쿠아
2011. 7. 21. 17:10 소프트웨어 Note/XNA Framework


XNA는 Frameworkd 이기 때문에 일련의 논리적 순환 순서가 있다.
공부를 시작하면 우선 이를 인지해야 한다.

1. 메인 응용 프로그램이 게임 생성자를 호출한다.

2. 게임 생성자는 게임 컴포넌트들을 생성하고 게임 컴포넌트의 생성자를 호출한다.

3. XNA Framework에서 게임의 Initialize 메서드를 호출한다.

4. XNA Framework에서 각각의 게임 컴포넌트에 해당하는 Initialize 메서드를 호출한다.

5. XNA Framework에서 각각의 Drawable 게임 컴포넌트에 해당하는 LoadContent 메서드를 호출한다.

6. XNA Framework에서 게임의 LoadContent 메서드를 호출한다.

7. XNA Framework에서 게임의 Update 메서드를 호출한다.

8. XNA Framework에서 각각의 게임 컴포넌트에 해당하는 Update메서드를 호출한다.

9. XNA Framework에서 게임의 Draw메서드를 호출한다.

10. XNA Framework에서  각각의 Drawable 게임 컴포넌트에 해당하는 Draw 메서드를 호출한다.

11. 매초마다 7단계에서 10단계까지 여러번 반복한다.

12. 장치를 유실할 경우(사용자가 창을 다른 모니터로 이동했거나 화면 해상도가 변경되었을경우, 또는 창이 최소화된 경우 등) UnloadContent 메서드를 호출한다.

13. 장치를 리셋한 경우 6단계에서 다시 시작된다.

14. 게이머가 게임을 종료한다.

15. XNA Framework에서 게임의 Dispose 메서드를 호출한다.

16. 게임의 Dispose 메서드에서 기본 객체의 Dispose 메서드를 호출한다. 이경우 다음 두 단계를 발생시킨다.

17. XNA Framework에서 각각의 게임 컴포넌트에 해당하는 Dispose 메서드를 호출한다.

18 .XNA Framework에서 게임의 UnloadContent 메서드를 호출한다.

19. 게임의 Dispose 메서드로 초점(focus)이 반환되고 게임이 종료된다.

'소프트웨어 Note > XNA Framework' 카테고리의 다른 글

FBX improvements in XNA Game Studio 3.0  (0) 2011.10.03
XNA와 3D 기초 (1)  (0) 2011.09.10
XNA Framework의 논리적 흐름  (0) 2011.07.21
이 댓글을 비밀 댓글로