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

댓글을 달아 주세요