2011년 8월 20일 토요일

ASE 파일 Skined Animation


맥스에서 기본으로 출력되는 ASE파일의 TM(변환행렬)은 월드 행렬.

Bone, Biped 구조일 경우에 각 노드마다 로컬 TM이 필요함.
로컬 TM = 자신 TM * Inverse(부모 TM)

이렇게 구해진 로컬 TM을 Bone 구조에 따라 차례대로 곱해주면
원래의 각 노드별 월드 행렬을 구할 수 있음.

맥스에서 캐릭터를 만든 다음 Bone, Biped를 이용하여 붙이는 작업을 하게됨.
만들어진 캐릭터 역시 월드좌표 기준으로 완성되어 있음.

위에서 구해진 계층 구조 TM을 적용할려고 캐릭터 정점에 바로 계층 구조TM을 곱하면 안됨.
계층 구조로 이루어진 각 노드의 월드 TM은 월드 좌표 원점 기준 변환 TM임.

그러므로 현재 월드 좌표로 이루어진 캐릭터 정점에 계층 구조TM을 곱하면
엉뚱한 좌표로 이동하게 됨.

노드 월드 TM의 역행렬을 구하면 노드 중심의 피봇 좌표계로 이동가능.

최종 변환 정점 = 캐릭터 정점 * 피봇 TM * 계층 구조 TM

= 캐릭터 정점 * Inverse(노드 월드 TM) * 계층 구조 TM

댓글 3개:

  1. .ase 파일을 불러와 Biped 애니메이션을 볼수 있는 프로그램을
    만들려고 하는대요 저에게 도움이 될만한 샘플이나 개념들을 상세하게 알려주시면 안될까요?

    답글삭제
  2. directX SDK 안에 있는 MultiAnimation을 참고하시면 됩니다. 더욱 기초가 필요하여 샘플이나 개념을 잡으실려면 3D 게임 프로그래밍(김용준 저) 이 책을 참고해 보시길 바랍니다. 위에 것은 비록 x 파일이나 xml을 사용하지만 개념이나 방법은 비슷합니다. 그리고 ase의 구조나 익스포터는 검색하시면 쉽게 찾을 수 있습니다. 위 내용은 책의 한 챕터 이상 분량이 되기 때문에 차근히 자료 찾아서 구현해 보시기 바랍니다.

    답글삭제
  3. 네 답변 갑사합니다. OpenGL을 사용해서 해당 셈플만을 구할려고 했는데 DX를 좀더 공부해서 해당 개념 부터 먼저 배워야 겠네요 ^^

    답글삭제