2008/09/26 - [Ψ Programing Book/Δ 3D Data Export] - Chapter 3.1 참고자료

3D Max에서 데이터를 게임에서 사용하기 위해서 추출하는 방법 중에 하나가 ASCII Export이다.
ASE는 원래 Max의 플로그인으로 제작되어 있다. 즉, 파일을 외부로 Export하는 플러그인이 Max SDK로 제작된 것이다.
이 ASE 플러그인 소스는 Max의 Max SDK의 예제 소스로 제공해 준다. 따라서 필요한 경우 이 소스를 수정하여 사용할 수 있다.

ASE의 전반적인 구조
  1. File Head
     ASE 파일이 Version 정보나 Comment 등의 정보를 담고 있다.

  2. Scene
     Scene에 대한 전반적인 정보를 담고 있다.
     버전정보나 전체 프레임수 등 ASE의 기본적인 정보를 표시해 준다.

  3. Material List
     사용된 Material들의 List 이다.
     Object 중 GeoObject에서 사용하는 Material을 List형태로 나열해 놓았으며 각 Material에는 번호를 붙여 놓아서 GeoObject에서 이 번호를 참조해 어던 Material을 사용하는지 알아내도록 되어 있다.

  4. Object List
     각종 Object들의 List, GeoObject, ShapeObject, LightObject, CameraObject, HelpObject 등이 있으며 Group으로 묶어질 수 있다. Object는 쉽게 말해서 장면들을 구성하는 각종 객체들이라고 할 수 있다. Face로 구성된 GeoObject에서부터 선을 나타내는 ShapeObject, 광원, 카메라 기타 도움을 주는 Object등 다양한 형태의 Object들이 계층 구조를 가지고 있다.




< Geo Object >

 일반적인 Mesh를 가진 객체를 말한다. 가장 핵심적인 Object라고 할 수 있다.
 Mesh를 가지고 있으며 Mesh는 Face의 모임으로 구성되어 있다. 또 Face는 3개의 Vertex로 이루어져 있으며 다양한 형태의 Vertex들로 구성되어 있다.
 이 부분의 개념이 D3D와 많은 차이가 난다. D3D에서는 모든 Vertex들이 하나로 뭉쳐서 Vertex를 이루지만 3D Max에서는 좌표정보를 가진 Vertex, Texture좌표를 가진 Vertex 등 다양한 종류의 Vertex로 나뉘어 있다.

< Shape Object >

 선을 가진 객체를 의미 한다. 와이어만으로 객체를 형성한 것으로 여러 개의 끊어진 선으로 출력된다.
 D3D에서 보자면 LINE_LIST나 LINE_STRIP 등에 해당하는 것으로, 하나의 Line은 두개의 Vertex로 구성되어 있으며 Mesh와 같이 Vertex와 Index로 나뉘어져 있지 않고 그냥 Vertex로만 구성되어 있다. 단 선의 굵기를 설정할 수 있는데 이 부분을 제대로 처리하기에는 D3D가 약간 부족한 면이 있다.

< Light Object >

 광원에 대한 객체를 의미한다. 말 그대로 광원을 의미하는 것으로 D3D에 비해서 다양한 형태의 광원을 만들 수 있다.
 물론 이러한 광원들을 모두 D3D에서 그대로 옮겨서 사용할 수는 없다. 다양한 종류의 Attenuation, 다양한 형태의 광원 모양 등 다양한 파라미터로 구성되어 있기 때문에 D3D로 변환 할 때 어느 정도의 융통성이 필요로 한 부분이다.

< Camera Object >

 카메라에 대한 객체를 의미한다. 카메라는 D3D에서 View와 Projection Matrix을 결정하는 부분으로 역시 D3D에 비해서 다양한 옵션을 지원한다.

< Help Object >

 Group이나  Object에 대한 부수적인 정보를 가진 Object라고 할 수 있다.

< Group >

 Group은 자체로써 객체는 아니다. 단지 여러 개의 Object들을 묶어 놓은 것을 의미한다. 또 Group은 다층이 가능하다. 즉 Group안에 다시 Group이 올 수도 있다는 뜻이다.
 Group은 여러 개의 객체를 묶어 놓은 것으로 하나의 Node로 취급될 수 있는데 이것은 Help Object가 대신해 준다. Group과 똑같은 이름의 Help Object가 존재해서 이것이 Group에 속해 있는 모든 Object들의 최상위 부모 Object로 설정이 되는 것이다.
posted by deviAk