2015.08.06 22:39

애니메이션과 애니메이션 자료구조


​애니메이션이라는 것은 한 순간에서의 물체의 position, rotation, scale을 지정하는 키 프레임들의 시간순의 목록으로 정의된다.

게임 어플리케이션에서 매 프레임 시간은 원하는대로 정확하게 끊어지지 않으므로 키 프레임과 키 프레임 사이에 보간이 필요하다.



키 프레임의 구조는 위 코드와 비슷하게 구성할 수 있을 것이다.

( 여기서 rotation정보를 표현하는데 기하학적으로 4차원 벡터의 형태를 갖는 쿼터니온을 사용하고 있는 것을 볼 수 있는데 이것은 구면선형보간이 가능하다.)


​골격을 애니메이션 하는 것은 그냥 연결된 여러 개의 뼈대를 변환하는 것에 불과하다.

즉 골격을 애니메이션 하기 위해서는 각 bone에 대해 local 애니메이션을 마친 뒤, 그 bone의 조상을 고려하여 Root-space로 변환하면 된다. 

또한 캐릭터는 아마 다양한 동작을 할 수 있을 텐데 ( 걷기, 뛰기, 사격 등등) 이러한 하나의 동작을 정의하는 bone들의 애니메이션의 집합을 "Animation Clip" or "Animation Set"이라 부른다.


 


일반적으로 하나의 캐릭터는 다양한 동작을 하기 때문에 이러한 동작 하나를 정의하는 애니메이션 클립이 여러개 필요하다.

그런데 모든 애니메이션은 같은 골격에 대해 작동하므로 사용하는 뼈대 개수가 모두 동일하다( 일부 뼈대가 움직이지 않는 경우도 있겠지만...)

마지막으로 앞에서 언급한 것처럼 각 뼈대마다 정점들을 bind-space에서 bone-space로 변환하는 offset matrix가 필요하다.

또한 골격계층구조를 표현하기 위한 방법도 필요하다. ( 아래에 나올 예제 코드에서는 배열을 사용하여 표현한다.)

다음은 이러한 것들을 종합하여 만든 골격 애니메이션 자료 구조이다.


 



최종 변환의 계산


​캐릭터의 계층 구조는 일반적으로 트리로 구성된 이런식의 계층구조를 갖는다.

 


앞으로 기술할 Frank.D.Luna의 예제 코드는

이러한 계층구조를 하나의 정수 배열로 표현하며, 배열의 i번쨰 원소가 i번째 뼈대의 부모의 인덱스가 되게 한다.

비슷하게 뼈대의 인덱스 i는 해당 애니메이션 클립에서 그 뼈대의 BoneAnimation의 인덱스와 일치하며,

offset 변환 배열에서 그 뼈대의 offset 변환의 인덱스와도 일치한다.

Root 뼈대는 항상 0번이며, 부모는 없다.


다음은 이러한 관례에 기초한 각 뼈대의 최종 변환을 구하는 코드이다.

 


[참고문헌 : 프랭크 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

티스토리 툴바