Chapter 5.1 Ase Materal

Programming/ASE 2008.09.30 12:33

 D3D와 3D Max는 Matrerial에 대해서 다른 개념을 가지고 있다.

< 3D Max와  D3D Material의 차이점 >

  1. 3D Max의 Material은 D3D Material + D3D Texture
     

  2. 3D Max의 Material은 다층 구조 Material
     D3D는 Material이 하나의 Material정보만을 가지고 있다. 그러나 3D Max에서는 Material이 하나의 Material이 여러 개의 Sub Material을 가질 수 있다. 그리고 그 Sub Material은 다시 또 하나의 Material로 인식되어 자신의 Sub Material을 가질 수 있다.


  3. 다양한 3D Max의 Material
     3D Max의 Material은 다양한 계층구조 방법과 이론적으로 다양한 방법의 계산법을 제공한다. 필요에 따라 프로그래머가 제작할 수도 있다.
     물론 D3D에서도 Shader를 사용하게 되면 3D Max와 같은 다양한 형태의 Material을 구현할 수 있지만 기본적으로 실시간 시스템이어야 한다는 단점으로 3D Max의 다양한 Material의 구현은 실질적으로 힘들다고 할 수 있다.










posted by deviAk

 Node TM에서 추출된 TM은 World 상의 변환 정보이다.

< Object의 Pivot >
 모든 Object들은 자신만의 Pivot이 존재한다. Pivot이란 Object 자신의 중심점을 의미한다. 이 중심점을 기준으로 한 좌표계를 Local 좌표계라 한다. 또 Local transform Matrix란 자신의 부모 Node의 Pivot과 자신의 Pivot과의 상대적인 Transform Matrix라 한다.
 Node Transform Matrix는 원점을 기준으로 한 Transform Matrix라면 Local Transform Matrix는 자신의 부모를 기준으로 한 Transform Matrix라 할 수 있다.
 일반적으로 NodeTm을 얻을 때 World Transform Matrix에 해당하는 NodeTM 자체와 함께 부모와 상대적인 Transform을 의미하는 Local Transform Matrix를 모두 구하는 것이 일반적이다. 실질적으로 사용하게 되는 Transform matrix는 Local Transform Matrix가 된다.

< LTM ( Local Transform Matrix ) 구하기 >
 LTM을 구하는 방법은 자신의 Node TM에 부모의 Node TM을 곱해 얻는다.

 Local TM = Node TM * Parent Node TM





posted by deviAk

 Node TM은 Node 정보에 있어서 가장 기본적이면서도 가장 중요한 정보 중 하나이다. Node TM에 많은 정보가 있지만 해석하는 과정이 까다로운 부분 중 하나이다.

*NODE_TM {
// Node의 이름
*NODE_NAME    "Box01"

// Inherit 정보
*INHERIT_POS    0 0 0
*INHERIT_ROT    0 0 0
*INHERIT_SCL    0 0 0

// Affain된 TM
*TM_ROW0    1.0000  0.0000  0.0000
*TM_ROW1    0.0000 -0.0000  1.0000
*TM_ROW2    0.0000 -1.0000 -0.0000
*TM_ROW3    0.2514  0.0000  0.0000

// Decomp Affaine된 TM
*TM_POS           0.2514 0.0000 0.0000  
*TM_ROTAXIS       -1.0000 0.0000 0.0000
*TM_ROTANGLE      1.2785
*TM_SCALE          1.0000 1.0000 1.0000
*TM_SCALSCALEAXISE    0.0000 0.0000 0.0000 
*TM_SCALEAXISANG       0.0000
}



< Node Name >
 Node 의 이름이다. Camera Object와 같은 것은 Node Tm을 2개를 가질 수 있다. 이럴 경우 2개의 Node Tm을 구분하기 위해 Node TM의 이름이 필요하다.
 Node Name은 특별한 의미가 없지만 Node TM이 2개이고 그에 따른 애니메이션 정도가 있을 경우 어떤 Node TM에 대한 애니메이션을 구분하는 정보로 주로 사용된다.

< Node Inheriance >
 Node TM의 상속정보이다. 잘 사용하지 않는다.

< Node Transform >
 가장 핵심적인 부분이라 할 수 있다. Node Transform의 정보는 두 가지 형태로 저장되어 있다. 하나느 Scale, Rotation, Translation을 모두 곱하여 Matrix 형태로 저장한 부분과 Transform 정보를 분해해 Scale, Rotation, Position 정보를 저장한 정보 두 가지가 있다. 그러나 이 두 가지 형태는 기본적으로 같은 Transform을 기반으로 해 출력된 정보라 값은 모두 동일하다.

 TM_ROW1에서 TM_ROW4로 출력되는 4개의 줄이 Node Transform Matrix의 각 줄에 해당하는 값이다. 단 여기서 각 ROW의 4번째 열은 출력되지 않고 3개의 값만을 가지고 있다. 이 4번째 열 0, 0, 0, 1이라는 값으로 고정적으로 들어가므로 생략되었다.



  1. Negative Scale의 확인
     Negative Scale이란 Scale 값이 음수를 가진다는 것이다. 3D Max의 작업상 Mirroring을 하여 작업하면 Negative Scale이 된다. 이런 Negative Scale의 경우 일반적인 경우에는 문제가 되지 않지만 상황에 따라 normal 처리나 혹은 애니메이션 처리에 문제 되는 경우가 있다. 이를 위해서 상황에 따라 Negative Scale을 확인해 적절한 처리가 필요한 경우가 존재한다.
     Negative Scale의 확인 과정은 간단하다. TM에서 Rotation을 나타내는 ROW1~ROW3에 해당하는 것이 각각 x, y, z축을 나타내므로 이 중 두 축을 '외적'한 값이 다른 한 축과 방향이 반대인지 혹으 ㄴ같으닞를 확인하면 된다. 이것을 판단하기 위해 두 축을 '외적' 한 값과 다른 한 축을 '내적'을 하여 그 값이 음수이면 축이 반대이고 양수이면 같은 방향이다.




  2. 좌표계 변환
     Max의 오른손 좌표계와 Z-Up을 DX의 왼손 좌표계와 Y-Up으로 변환하려면 Y와 Z에 해당하는 두 값만을 바꿔 주면 된다. 그리고 ROW2와 ROW3도 두 값을 바꾸어 줘야만 한다.

    1. X와 Z를 바꾼다.

    2. ROW2와 ROW3를 바꾼다.

    3. 최종결과

< 분해된 Transform >
 ROW1~ROW4로 출력된 정보 이후에 분해된 Transform 정보가 출력된다. 이 정보는 ROW1~ROW4의 값을 Position, Rotation, Scale 값으로 분해에 저장한 것이다.

  1. Position 값
     TM_POS의 값은 이동 정보로 ROW3의 값과 동일하다.

  2. Rotation 값
     TM_ROTAXIS와 TM_ROTANGLE는 회전 정보를 출력한 것을 Eular Angle의 형태로 출력되어 있다. TM_ROTAXIS는 회전 출을 나타내며 TM_ROTANGLE는 회전축을 기준으로 한 회전 각도를 나타낸다.

  3. Scale 값
     Scale의 값은 TM_SCALE에 각각 x, y, z 축에 대한 확대축소 값을 나타낸다.
     Scale은 기준의 x, y, z축을 기준으로 한 Scale이 아니라 Scale Axis를 기준으로 한 Scale 값이다. 그러므로 이 값으로 TM을 만들기 우해서는 Scale Axis의 회전만큼 먼저 반대로 회전한 이후 SCale을 적용시키고 그 다음에 다시 sCale Axis만큼 회전시켜 원상복구 시키는 과정을 해야만 한다.

  4. 분해된 Translation Matrix 합하기
     각자 계산도니 Postion, Rotation, Scale Matrix를 모두 합해 하나의 TM으로 만들기 위해서 곱해주면 된다.

     NodeTM = ScaleTM * RotationTM * PositionTM
     
  5. DX용 Node TM 만들기
     * DX좌표계로 바꾸기 위해서 미리 y, z 축을 바꾸었다면 그것을 만들어진 TM과 그 곱은 다시 다른 조작을 할 필요가 없다.
     

posted by deviAk

 3D Max의 Object들은 계층적(Hierarchy) 구조를 가지고 있다. 각 Object들은 하나의 부모(Parent)를 가질 수 있고, 또 다수의 자식(Child)을 가지고 있다. 즉 3D Max의 Object 역시 가장 일반적인 구조인 트리(Tree) 형태의 계층적 구조를 가지고 있다는 뜻이다.

 3D Object의 Object는 다양한 종류가 있다. 3D 메시정보를 가지고 있는 GeoObject, 선의 정보를 가지고 있는 Shape Object, 광원정보를 가지고 있는 Light Object, 카메라 정보를 가지고 있는 Camera Object 그리고 기타 정보를 가지고 있는 Help Object 등 다양한 Object가 있다.
 이들은 모두 기본적으로 Node의 속성을 가지고 있다. Node의 기본적인 속성인 부모 Node에 대한 정보를 가지고 있으며 물론 자신도 다른 Node의 부모가 될 수 있다. 그 외에 기본적인 속성들과 추가적으로 자신만의 정보를 가지고 있다.


*GEOMOBJECT {              // 1. Node의 종류
*NODE_NAME  "Name"        // 2. Node의 이름
*NODE_PARENT "Parent_Name"   // 3. 부모 Node의 이름
*NODE_TM {            // 4. Node Transform Matrix
...
}

*MESH {
...
}

*PROP_MOTIONBLUR 0
*PROP_CASTSHADOW 1
*PROP_RECVSHADOW 1
*TM_ANIMATION {         // 5. Node TM에 대한 Animation
...
}
}


Node Name
 Node의 이름은 너무나 당연한 말이다. Node를 구분하기 위해서 Node의 이름을 가지게 되고 이 이름으로 각각의 Node를 구분하는 용도로 사용하게 된다.

Parent Node
 자신의 부모 Node를 의미한다.

Node Transform Matrix
 객체의 World상의 Transform 정보를 의미한다. 일반적으로 말하는 World Tansform Matrix가 된다.
 Node TM은 크게 4부분으로 나뉘어져 있다.
  1. Node의 이름 정보
  2. Node의 상속관계를 나타내는 Inheritance 정보
  3. TM 대한 정보
  4. TM을 나눠 놓은 정보

 각 Node의 TM에 대한 애니메이션 정보를 가질 수 있다. 애니메이션 정보는 이동, 회전, 스케일에 대해 각각 애니메이션 정보를 가질 수 있다. 물론 애니메이션이 전혀 없을 수도 있다.
 애니메이션 정보는 공통적으로 가질 수 있는 Node TM에 대한 TM뿐만 아니라 상황에 따라서 다른 종류의 애니메이션이 추가될 수도 있다. 또 TM이 2개가 있다면 애니메이션 역시 각각에 대해서 하나씩 가질 수 있다.
posted by deviAk

Chapter 3.1 참고자료

Programming/ASE 2008.09.26 15:24
2008/09/26 - [Ψ Programing Book/Δ 3D Data Export] - Chapter 3.1 ASCII Export란?

ASE 파일은 크게 두 가지 정보를 저장한다.

  1. 매터리얼 정보
     X 파일 포맷에 비해 상당히 맣은 정보가 저장 되게 된다. 이 정보 중 대부분은 실시간 랜더링을 하는 게임과는 맞지 않는 부분이 있지만, 유용한 정보도 많으므로 적당히 선별해서 읽어들여야 한다.

  2. 메시 정보
 하나의 모델은 하나 또는 그 이상의 메시로 이루어지는데 애니메이션 되지 않는다면 하나의 메시로 만드는 것이 훨씬 좋지만 어쩔 수 없이 여러개의 메시로 나누어야 하는 경우도 생긴다.

 매터리얼의 특징은 서브 매터리얼이란 개념이다. 서브 매터리얼 개념은 x 포맷에는 없는 개념으로 ASE에만 있는 개념이다. 서브 매터리얼은 하나의 매터리얼은 하나의 매터리얼 안에 여러 개의 매터리얼 즉 서브 매터리얼이 존재하는 것이다.

 3D Max에서 하나의 메시는 하나의 매터리얼 밖에 가지지 못한다. 이럴 경우, 하나의 메시를 여러 가지 매터리얼을 사용하고자 하는경우에는 어려움을 겪게 되는데, 3D Max에서는 이것을 서브 매터리얼 개념을 사용하여 극복하였다, 즉, 메시는 하나의 매터리얼을 가지고 이 매터리얼에 메시에서 사용되는 수많은 매터리얼을 서브 매터리얼로 저장하는 방식이다.

posted by deviAk