블로그 이미지
이태원에서 사는 다섯식구의 무직 가장. 흰둥에미

카테고리

분류 전체보기 (184)
Itaewon (2)
ryu's?? (1)
20121210이전 (20)
20130827이전 (147)
soo'study (13)
Total34,023
Today5
Yesterday5

'ase'에 해당되는 글 4건

  1. 2013.02.16 ASE Material
  2. 2013.02.15 ASE GeoObject (1)
  3. 2013.02.14 3.ASE Node
  4. 2013.02.04 1. 3D Data Exporting 개요

3DMax의 Material

 - 3DMax Material = D3D의 VertexShader,PixelShader + Material + Texture

   3DMax의 Material은 다층 구조. Material이 여러개의 SubMaterial을, 또 그 하위에 SubMaterial을 가질 수 있음.


Material의 ASE 출력

 - Object가 나오기전에 MATERIAL이 출력(0번 부터)


Standard Material

 - Shader : 광량을 계산하는 방법을 정의

   Parameter : 계산을 위한 파라미터(Diffuse, Ambient, Specular등)

     - Diffuse와 Ambient는 D3D의 Material에도 똑같이 적용

       D3D의 Specular는 Specular값 * SpecularLevel / 100으로

       D3D의 Specular Power(127최대)은  Glossiness(100최대)로 적용

       D3D의 Emissive는 SELFILLUM 값을 사용.

       D3D의 Alpha는 1.0f에서 TRANSPARENCY 값을 빼서 사용.

   Map : Map을 의미(Texture Map이 아닌 것도 설정가능)

    - D3D에서 Mapping으로 사용되는 것은 무조건 Texture이지만, 3DMax에서는 계산에 의한 Map도 존재


Multi/Sub Object

 - Mesh정보에서 Material ID 부분이 Sub-Material의 번호가 됨.

   오브젝트 처리

    1. Mesh의 Face List에서 *MESH_MTLID 값을 모두 읽어, Face를 *MESH_MTLID가 같은 것끼리 모음

    2. *MESH_MTLID가 같은 Face들로 새로운 IndexBuffer를 만들고, 각각에 맞는 Sub Materialㅇ르 적용

    3. Draw시에는 Sub Material이 전혀 다른 Material인 것처럼 Sub Material의 숫자만큼 따로 그려줌.


Double Sided

 - 앞면과 뒷면의 Material을 따로 설정할 수 있는 Material

   D3D로 적용시,

     Cull Mode만 NONE으로 사용(쉬움) : 한면은 포기하고, Facing Material만 적용, Cull Mode만 NONE으로 해서 안 보이는 것만 막음.

                                                        가장 쉽지만, Normal의 뒤집힘 문제로 Rendering 품질을 떨어뜨림

     Two Pass Rendering(정석,일반) : 2개의 Material 처리를 위해, CCW, CW로 CullMode를 지정하여 두번 렌더

     One Pass Rendering(Shader) : CullMode를 NULL로 하여, Vertex Shader나 Pixel Shader에서 광원의 방향과 Normal값의 내적을

                                                 수행하여, 그 값이 0보다 크면 Facing Material을 적용, 0보다 작으면 Back Material을 적용

                                                 추가적인 부하가 있지만, Draw하는 Batch를 줄일 수 있어, 성능상의 이점


Shell Material과 DirectX 9 Shader

 - 어떤 Material에 덮어씌워 Material을 추가하는 것을 의미, 일반적으로 Sub 0가 오리지널, Sub 1이 Baked Material임

   Light Map 사용시에 사용

   

신고

'20130827이전 > 3DDataExport' 카테고리의 다른 글

ASE Material  (0) 2013.02.16
ASE GeoObject  (1) 2013.02.15
3.ASE Node  (0) 2013.02.14
2. ASE Lexer와 Parser  (0) 2013.02.04
1. 3D Data Exporting 개요  (0) 2013.02.04
Posted by 흰둥에미
TAG ase, material

GeoOjbect 구조

 - GEOMOBJECT {   NOTE_TM, MESH, MATERIAL, ...   }

   Mesh : GeoObject의 가장 핵심, Vertex 정보와 Face정보를 가짐.

   Material REF : 적용되는 Material의 번호를 의미


Mesh 구조

 - D3D : 모든 정보들이 모여져서 저장되는 Vertex 구조

            (하나의 Vertex의 좌표, 법선, 컬러, 텍스쳐 정보등이 모두 들어감)

   3DMax : 모든 정보들이 분리되어 저장되는 Vertex 구조

               (PVertex, CVertex, TVertex, PIndex, CIndex, TIndex)


Vertex 정보

 - TVertex와 TIndex는 텍스쳐 좌표 정보를 가진 Vertex를 의미, 다른 Vertex들처럼 Y와 Z값을 바꾸지 않음.

   TVertex의 2개 좌표만을 사용(UV좌표계), 단 V값은 1.f - Y를 해서 생성.

   D3D에서 다중 텍스쳐가 ASE의 Mapping Channel임.

 - CVertex와 CIndex는 정점의 색상 정보, 중복이 되는 CVertex는 제거

 - PVertex와 PIndex는 정점의 좌표와 그 인덱스

   출력되어 나오는 Vertex의 좌표 정보는 모두 Vertex에 NodeTM이 곱해져서 나온 좌표들, 따라서 Vertex를 읽어들이고 난 후,

   NodeTM의 역행렬로 Transform해줘야, Local좌표계로 맞춰짐.

더보기

 - Vertex와 Index 정보들의 3가지 문제점

   Vertex의 중복 : Vertex 리스트 중 똑같은 정보를 가진 Vertex가 존재, 중복 Vertex는 하나로 줄여주고, 그 Index의 값을 변경

   Vertex의 미사용 : Vertex 리스트에 존재하지만, Index에는 한번도 나타나지 않음, 미사용된 Vertex를 찾아서 제거

   잘못된 Mesh정보의 문제 : Mesh의 최소단위인 Face설정을 위해서는 3개의 Vertex가 필요한데, 잘못된 Vertex를 인덱싱

                                        잘못된 Mesh를 찾아서 제거.

 - 최적화 : 중복된 Vertex의 제거, 잘못된 Face의 제거, 출력에 최적화되게 Vertex들을 정렬


Normal 정보

 - 각 Face마다 1개의 Face Normal과 3개의 Vertex Normal이 존재.

   Face Normal은 은면 제거를 위해, Vertex Normal은 광원 처리를 위해 사용.

 - D3D로 변환시 문제 : 3DMax는 하나의 Vertex에 여러 개의 Normal이 존재, 하지만 D3D는 하나의 Vertex에 하나의 Normal이 존재

                                같은 Vertex라도, Normal값이 다르다면, Vertex를 둘로 나누어줌.

 - Normal값 검사 : Normal값은 float의 자료형을 가지므로, 일반 비교 연산을 통하여 같은지 검사는 무의미

                          실수 비교를 위한 EPSILON을 이용하거나, 두 Normal을 내적하여 일치함으로 간주하는 경계값을 설정하여 비교.

 - Normal값의 직접 계산 : FaceNormal과 SmoothingGroup을 이용하여 직접 계산

                                    Vertex가 접한 모든 Face들의 FaceNormal의 평균값을 VertexNormal로 사용.

                                                                                    (각진 부분에서는 원하지 않는 효과 발생)

 - Normal은 NodeTM의 역행렬을 이용하여, 변환할 필요 없음.

                                    



신고

'20130827이전 > 3DDataExport' 카테고리의 다른 글

ASE Material  (0) 2013.02.16
ASE GeoObject  (1) 2013.02.15
3.ASE Node  (0) 2013.02.14
2. ASE Lexer와 Parser  (0) 2013.02.04
1. 3D Data Exporting 개요  (0) 2013.02.04
Posted by 흰둥에미

1. ASE File의 전반적인 구조

 - File Header : ASE파일의 버전정보 등

   Scene : Scene에 대한 전반적인 정보(Frame수 등)

   Material List : 사용된 Material들의 List

   Object List : GeoObject, ShapeObject, LightObject, CameraObject, HelpObject 등이 있음.


 - GEO Object : 일반적인 Mesh를 가진 객체로써, 가장 핵심적인 오브젝트

      Mesh를 가지고 있으며, Mesh는 Face의 모임, Face는 3개의 Vertex로 이루어져 있음(메시, 텍스처, 법선 정점 등으로 나뉘어 있음)

   Shape Object : 선을 가진 객체를 의미, Wire만으로 형성된 객체

   Light Object : 광원에 대한 객체를 의미, D3D에 비해서 다양한 형태의 광원을 만들수 있음

   Camera Object : 카메라에 대한 객체를 의미

   Help Object : Group나 Object에 대한 부수적인 정보를 가짐

   Group : 여러 개의 Object들을 묶어 놓은 것을 의미


 - ASE 파일의 오브젝트들은 트리 형태의 계층적 구조를 가짐

 - 각 오브젝트들은 기본적으로 Node의 속성을 가지고, 각각의 타입에 따라 필요한 정보를 가짐

 - 구조

*GEOMOBJECT {                             ----> Node의 종류

  *NODE_NAME  “Name”                    ----> Node의 이름

  *NODE_PARENT “Parent_Name”       ----> 부모 Node의 이름

  *NODE_TM {                                 ----|

  …                                                      |-> Node Transform Matrix

  }                                                  ----|


  *MESH {

  …

  }

  

  *PROP_MOTIONBLUR 0

  *PROP_CASTSHADOW 1

  *PROP_RECVSHADOW 1

  *TM_ANIMATION  {                       ----|

  …                                                     |-> Node TM에 대한 애니메이션

  }                                                 ----|


 - Node Transform Matrix

   객체의 World상의 Transform 정보를 의미

   노드의 이름, 노드의 상속 관계, TM에 대한 정보, TM을 나누어 놓은 정보로 이루어짐.

   Node TM에 대해 애니메이션이 있다면, Animation 정보를 가질 수 있으며, 이동, 회전, 확대 축소에 대해 가지고 있음.


2. Node TM의 해석

*NODE_TM {

  *NODE_NAME "Box01"                                         ----> Node 이름

  *INHERIT_POS 0 0 0                                             ---|

  *INHERIT_ROT 0 0 0                                                 |-> 상속 정보

  *INHERIT_SCL 0 0 0                                             ---|

  *TM_ROW0                1.0000   0.0000    0.0000        ---|

  *TM_ROW1                0.0000  -0.0000   1.0000             |

  *TM_ROW2                0.0000  -1.0000  -0.0000            |-> Node Transform : Affain Node TM(곱해진 형태)

  *TM_ROW3                0.4751   0.0000    0.0000        ---|

  *TM_POS                   0.4751  0.0000    0.0000        ---|

  *TM_ROTAXIS           -1.0000  0.0000    0.0000            |

  *TM_ROTANGLE         1.5708                                   |

  *TM_SCALE               1.0000  1.0000  1.0000              |-> Node Transform : Decomp.Affain Node TM(분해된 형태)

  *TM_SCALEAXIS         0.0000  0.0000  0.0000              |

  *TM_SCALEAXISANG  0.0000                               ---|

}

 - Node 이름은 크게 의미는 없으나, Node TM을 두개가질때의 구분을 위해 사용

   상속 정보는 실질적인 의미가 그다지 없음

   Node Transform은 첫번째는 변환행렬이 완성된 형태, 두번째는 각 변환의 종류에 따라 나뉜 형태로 직접 변환 행렬로 만들어줘야함.

   - 곱해진 Node TM의 경우 변환행렬로 사용시, 0, 0, 0, 1을 4열에 추가하여 사용.

      Negative Scale의 확인 : Scale값이 음수를 갖는것으로, 상황에 따라 Normal이나 Animation 처리시 문제가 발생

                                        Rotation을 나타내는 ROW0-ROW1이 각각 X, Y, Z축을 의미하므로, 두 축을 외적한 값이 다른 한축과

                                        방향이 같은지를 검사하면 됨.

      MAX는 오른손 좌표계를 사용하므로, D3D에서 사용을 위해 Y와 Z값을 바꿔줘야 함. (ROW 1-2 바꾸기, COL 1-2 바꾸기)

      분해된 Node TM에서도 Y와 Z값을 바꿔줘야 함.

      SCALE의 경우, SCALEAXIS(-1) X SCALE X SCALEAXIS의 연산을 통해 실제 SCALE행렬을 얻을 수 있음

                           (SCALE의 값이 SCALEAXIS를 축으로 변환된 것이기 때문)

   NodeTM = ScaleTM X RotationTM X PositionTM 임.


3. Local TM

 - 모든 Object들은 자신만의 pivot이 있음. Local TM은 자신의 부모 Node와 pivot과 자신의 pivot과의 상대적인 변환 행렬임.

   NodeTM은 원점 기준, LocalTM은 자신의 부모가 기준.

   LocalTM = NodeTM X ParentNodeTM(-1)

   LocalTM으로 계층 구조를 구현한 이후 IK나 FK의 애니메이션에 많이 사용.


   

신고

'20130827이전 > 3DDataExport' 카테고리의 다른 글

ASE Material  (0) 2013.02.16
ASE GeoObject  (1) 2013.02.15
3.ASE Node  (0) 2013.02.14
2. ASE Lexer와 Parser  (0) 2013.02.04
1. 3D Data Exporting 개요  (0) 2013.02.04
Posted by 흰둥에미

3D Graphic Data 제작 방법

- 직접 입력 : 간단한 테스트 용으로 밖에 사용할 수 없음.

  직접 툴 만들어 사용 : 캐릭터 제작을 위한 툴 자체를 만들기가 힘듦, 그래픽 제작자가 툴을 익혀야 함.

  기존의 툴 사용: 툴 제작 시간이 없고, 다양하고 편리한 기능, 사용법을 미리 학습하기 편함.

  - 독자적인 파일이 생성되므로, 자신의 프로그램에 적합한 파일로 커스터마이징을 함.

    읽고 사용하기 어려움, 필요없는 데이터의 포함, 보안 등의 문제로 Exporting이 필요함.


3D Graphic Tool의 Export를 위한 지원

- ASE : 작고 소소한 데이터나 결합이 필요한 데이터에 사용

  - 파일이 Text여서 확인이 쉽고, 출력을 위한 프로그래밍 과정이 없거나 적음

    파싱하여 읽어 들일 툴이 필요하고, 실행에 시간이 많이 소요 되며, 파일의 크기가 큼

  Script : 사용빈도는 낮고, 간단한 테스트용으로 종종 사용.

  - 프로그램 수정이 용이, 고정 기능이 아니어서 사용상 약간의 불편, Script Source를 이용하여 관리

  Max SDK : 특화된 데이터 처리나 대용량의 데이터를 처리해야 하는 곳에서 많이 사용.

  - 빠르고 기능에 거의 제약 없이 Max의 모든 부분 조작 가능, 버그 수정과 테스트가 어려움, 수정 후 재사용이 어려움.

    DDL 파일은 버전에 따른 호환을 보장하지 않음.


ASE 파일

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

  장점 : 이해가 쉬움, 조작이 쉬움(파일의 수정이 용이), 많은 내용이 담김

  단점 : 대규모 데이터 처리에 한계, 추가 에디터나 파서가 필요, ASE에 없는 데이터도 존재.

  ASE 파일을 파서로 파싱 후, 바이너리로 다시 저장하여 실제 게임에서 사용.

  ASE로 출력되지 않는 대표적인 데이터

  - 애니메이션을 위한 Tick, Skinning을 위한 Bone, Weight 정보




신고

'20130827이전 > 3DDataExport' 카테고리의 다른 글

ASE Material  (0) 2013.02.16
ASE GeoObject  (1) 2013.02.15
3.ASE Node  (0) 2013.02.14
2. ASE Lexer와 Parser  (0) 2013.02.04
1. 3D Data Exporting 개요  (0) 2013.02.04
Posted by 흰둥에미

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

티스토리 툴바