2015.08.06 22:38

프레임 계층 구조에서 사용되는 수학적 내용


 


세상에는 ​여러 부분이 부모-자식 관계로 연결되어 있는 것들이 많다.

사람의 관절을 예를 들 수 있는데 사람의 관절은 부모가 움직일 때 자식이 함께 움직여야한다.

사람의 손은 손, 아래팔, 위팔과 같이 세 부품으로 나눌 수 있다.

손은 손목 관절을 중심으로 독자적으로 회전하지만 팔뚝이 팔꿈치 관절에 대해 회전하면 손도 반드시 그에 따라 움직여야한다.

마찬가지로 위팔이 어깨 관절에 대해 회전하면 팔뚝도 그에 따라 회전한다.


앞으로 설명을 위해 위팔 - 팔뚝 - 손 계층구조를 계속해서 언급할 것이고, 이들을 각각 뼈대0, 뼈대1, 뼈대2로 칭할 것이며 root는 뼈대0을 의미한다.

우리는 캐릭터 애니메이션의 움직임이 world-space에서 표현되기를 원하므로 생각해야할 문제는 바로 이것이다.

" 계층구조의 한 부품을 움직일 때, 이것을 어떻게 world-space로 변환해야하는가? "

​여기서 한 부품만을 변환해서는 안된다.

계층구조의 위치와 방향은 조상들로부터 영향을 받으므로 조상들의 변환도 고려해야한다.


계층구조에서 한 부품은 local-space를 가지며 pivot joint(관절)을 가져야한다.

물체를 편하게 회전할 수 있도록 pivot은 local-space의 원점에 위치하도록 하자.


계층 구조에서 각각의 부품의 local-spcae간의 관계를 정의하는 것이 가능하다.

특히 임의의 순간(한 순간 찰나의 시간)에서의 local과 local간의 관계를 정의하는 것이 유용한데 애니메이션이라는 것이 시간에 따라 움직이기 때문이다.


각 local-space를 parent-space를 기준으로 하여 서술할 수 있다.

이 때 계층구조 최상위에 있는 root의 부모 좌표계는 world-space이다.

이것을 행렬로 서술하면 자식의 공간에서 부모의 공간으로 변환하는 행렬이라 할 수 있고 이를 To-parent행렬이라 부를 수 있다.


손-팔뚝-위팔의 예제를 통해 설명하면 손은 팔뚝 공간으로의 행렬, 팔뚝은 위팔 공간으로의 행렬, 위팔은 월드 공간으로의 행렬을 갖는다.

각각의 행렬을 A0, A1, A2 라고 할 때

손을 world-space로 변환하는 행렬은 M = A0*A1*A2로 정의할 수 있다.

결과적으로 계층구조의 한 물체를 변환하기위해서는 그 물체가 world-spcae에 도달할 때까지 계속해서 To-parent 변환을 진행하면 된다.


이러한 발상은 일반적인 Tree 구조에서도 적용된다.




[참고문헌 : 프랭크 D. 루나 저 류광 역, DirectX 11을 이용한 3D 게임 프로그래밍 입문 ,

원제 : Introduction to 3d game programming with Directx 11 ]


[참고 URL : http://www.gamedev.net/page/resources/_/technical/graphics-programming-and-theory/skinned-mesh-animation-using-matrices-r3577

]


출처 : http://blog.naver.com/jidon333

신고
Posted by 우엉 여왕님!! ghostkyow

티스토리 툴바