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

댓글을 달아 주세요


ASE Lexer(구문해석기) & Parser(어휘해석기)

 Lexer는 Scanner라고도 하는데 문법을 가진 문장을 TOKEN단위로 잘라 주는 역할을 해 주는 것을 말한다. 컴파일(Compile)을 하는데 가장 먼저라고 할 수 있다.

*3DSMAX_ASCIIEXPORT 200
*COMMENT "AsciiExport Version 2."
*SCENE {
}

 위의 문장을 '*3DSMAX_ASCIIEXPORT', '200', '*COMMENT', "AsciiExport Version 2.", '*SCENE', '{', '}' 로 잘라서 하나 하나를 TOKEN으로 만들어 주는 것이 Lexer 이다.

 Paser란 이렇게 잘라진 TOKEN을 문법이 맞는지 검사하는 것이라 할 수 있다.



Posted by deviAk

댓글을 달아 주세요


ASE 파일이란 3D 데이터를 ASCII 형태로 출력한 파일이다.

ASE 파일을 사용하는 이유
  1. ASE는 이해가 쉽다.
     일반 ASE로 출력한 데이터의 경우 이해가 쉽다. Binary 파일로 저장된 경우 그 값을 읽기가 쉽지 않다. 하지만 ASE는 Text 형태이므로 값들을 직접 볼 수 있으므로 쉽게 파악을 할 수 있다.

  2. 필요할 경우 조작이 쉽다.
     가장 좋은 점 중에 하나로 Text 형태의 가장 큰 특징이라고 할 수 있다. 필요할 경우 출력된 ASE 파일에서 특정한 데이터를 간단하게 없애버리거나 추가하거나 하는 것이 자유롭다.
     이는 프로그램을 테스트할 때 상당히 유용하다. 자신이 특정 엔진을 제작 할 때 필요한 데이터를 직접 조작할 수 있다는 점은 엄청나게 편리함을 준다.

  3. ASE에는 많은 내용을 담고 있다.
     ASE를 교육용이나 학습용으로 가장 많이 사용하는 이유 중에 하나이다. 일반적으로 3D Max의 3D 데이터 형태를  D3D와 같은 API와 상당히 많이 다른 형태를 가지고 있다.
     그리고 3D Max만의 독자적인 형태의 데이터나 구조가 존재한다. 하지만 이는 SDK를 막 공부해서는 자료가 부족할 뿐만 아니라 Max가 담고 있는 그 세부적인 구조에 대해서는 제대로 알 기회가 없다.
     ASE 에는 3D Max의 수많은 기능과 구조를 담은 다양한 형태의 정보들이 저장되어 있어 학습하는 과정에서 구조의 파악과 기능의 파악에 상당히 도움이 된다. 따라서 3D Max의 Export를 공부하는 과정에서 ASE 파일을 사용해 구체적인 구조와 형태에 대해서 쉽게 학습할 수 있는 장점이 있다.

ASE의 한계
  1. 대규모 데이터의 처리에 한계가 있다.
     ASE 파일은 텍스트 형태라 같은 데이터라도 Binary에 비해 그 크기가 엄청나게 방대하다. 또 추가적인 구분을 위한 텍스트 까지 포함하으로 그 데이터는 실로 엄청나다. 따라서 대규모 데이터의 경우 ASE를 이용해 Parsing을 하는 것 자체가 잘못된 선택이다.

  2. 추가적인 에디터나 Parser가 필요하다.
     ASE는 텍스트로 출력이 되므로 프로그램에서 사용하려면 그 텍스트를 읽어들일 추가적인 Parser가 필요하다. 이는 역시 직접 프로그래밍하여 제작하여야 한다. 또 실제 게임에서 사용하기 위해서는 ASE 파일을 읽어들여 Parsing을 한 이후에 각종 처리를 하여 게임에서 사용할 Binaryt 파일로 저장할 툴이 필요할 것이다.

  3. 꼭 필요한 데이터 중  ASE에 없는 데이터가 있다.
     게임에서 많이 사용되는 데이터지만 ASE에는 포함되어 있지 않는 데이터가 있다. (애니메이션을 위한 Tick 간격이나 Skinning을 위한 Bone 이나 Weight 정보 등) ASE 출력부분도 Max SDK를 사용하므로 Max SDK를 이용해 ASE 출력부분을 수정, 사용하는 등의 다른 방법 등이 필요하다.


 ASE 에서 출력 되는 데이터는 기본적으로 우리가 게임에서 사용하는 데이터와 그 형태와 내용이 다를 것이다. 그래서 그 데이터를 읽어 들여 다양한 변형이 필요하다. Max SDK를 사용할 경우 출력 시부터 처리를 할수 있는 내용으로 ASE를 사용하면 복잡한 처리를 해야 하는 경우가 종종 있다.


Posted by deviAk

댓글을 달아 주세요


 3D Max 에서 데이터를 Export 할 수 있는 방법은 크게 3 가지가 있다.
  1. ASCII로 출력해서 읽어들이는 방법
  2. Max SDK를 이용하여 추출하는 방법
  3. Max Script를 이용하여 추출하는 방법

1. ASCII Export

 가장 이해하고 다루기 쉬우면서 불편한 방법이다. ASCII Export는 기본적으로 3D 데이터들을 직접 Text형태의 ASCII 파일로 출력하는 방법이다. 파일의 확장자가 ASE이므로 일반적으로 ASE파일이라 부른다. 3D의 각종 데이터들을 Text로 출력하므로 출력된 파일들을 직접 눈으로 읽을 수 있다.

 필요한 3D 데이터를 직접 Text파일로 출력한 이후 ASCII로 된 Text파일들을 직접 Parsing 과정을 거쳐 읽어들인 다음 사용할 수 있다. 이러기 위해서는 ASCII 데이터를 읽어서 3D 데이터로 바꿔줄 프로그램이나 툴이 필요하다.

 일반적으로 작고 소소한 데이터나 후결합이 필요한 데이터의 경우 ASE와 같은 간단한 것을 사용하는 경우가 많다. 또 게임 제작 중 각종 테스트 등을 할 때도 역시 ASE를 많이 사용한다.

ASCII파일의 장단점
  1. 출력된 데이터를 직번 눈으로 보고  상태를 확인할 수 있다.
  2. 출력된 ASCII 파일은 Text 형태의 파일이므로 필요에 따라서 자기가 직접 조작이나 변형을 하기 쉽다.
  3. 출력을 위한 프로그래밍 과정이 없거나 적다.
  4. ASCII 데이터를 Parsing하여 읽어들일 프로그램이나 툴이 필요하다.
  5. 데이터로 사용하기 위해서 Parsing 과정이 필요하므로 실행 시 상당한 시간을 필요로 한다.
  6. ASCII로 되어 있어 파일의 크기가 상당히 크다. 따라서 대용량의 그래픽 데이터의 경우 크기가 상상을 초월한다.
  7. 실제 게임에서는 기능 테스트나 소용량 데이터 처리를 위한 중간 파일로 많이 사용한다.

2. Max SDK

 3D Max에서 Max Script와 같이 Max의 거의 모든 기능을 조작하거나 추가할 수 있도록 Max SDK라는 것을 제공해 준다. 이 Max SDK는 Scipt와 다르게 실행파일 형태인 DLL로 제작하는 것이다. 확장자는 DLE등 다양하게 되어 있으나 실질적, 그리고 내부적으로 DLL 파일으로 확장자만 바꾸어 놓은 것이다.
 SDK는 Max의 Scipt 처리기에서 읽혀져서 실행되는 것이아니라 DLL 파일을 사용한다는 점이 다르다.
즉, SDK를 사용하게 되면 Max Scipt와 같은 조작하고자 하는 기능을 마치 3D Max의 하나의 부분처럼 미리 제작해 처음이 초기화 단계에서 읽어 들여 사용할 수 있다는 것이다.

 MAP 데이터나 복잡한 형태의 데이터 혹은 내부적으로 '커스터마이징' 이 필요한 데이터의 경우 Max SDK 를 많이 사용한다.

Max SDK 장단점
  1. Max SDK를 사용하면 실행하는 부분을 DLL 파일로 미리 제작한 다음 실행하므로 빠르고 기능에 거의 제약이 없이 Max의 모든 부분을 조작할 수 있다.
  2. 제작 시 직접적으로 프로그램을 짜고 컴파일해야 하므로 버그 수정과 테스트가 용이하지 않다.( 제작이 어렵다. )
  3. 또 필요할 때 약간만 수정해 다시 사용하는 것이 힘들다.
  4. DLL 파일은 버전에 따른 호환을 보장하지 않다.
  5. 제작 시간이 오래 걸리며 범용적이지 않고 특정 데이터에 특화된 것이 일반적이다.
  6. 실제 게임에서는 특화된 데이터 처리나 대용량의 데이터를 처리해야 하는 곳에서 많이 사용된다.

3. Script

 3D Max에는 내부적으로 간단한 명령을 Script 형태로 받아서 처리하는 Scipt 처리기를 내장하고 있다. 이것을 이용해 Max의 거의 모든 기능을 조작하거나 수정이 가능하다. 바로 이 Script를 이용해 데이터를 출력하게 하는 방법이다.

 Script의 경우 그 빈도가 비교적 낮은 편이지만 역시 간단한 테스트용으로 종종 사용한다.

Script의 장단점
  1. Script를 이용해 Script 프로그램 작성, 3D Max의 특정데이터를 파일로 저장하게 하는 방법을 사용하게 된다.
  2. Script를 이용하므로 프로그램이 잘못되거나 사소한 변경이 필요할 때 즉시 열어서 수정할 수 있다.
  3. 고정적인 기능이 아니므로 사용상 약간의 불편이 있으며 Script 소스를 이용해 관리해야 하며 복잡한 프로그램을 작성할 때 약간의 한계가 있다.
Posted by deviAk

댓글을 달아 주세요