본문 바로가기

프로그래밍/DirectX

3D 애니메이션 이론 2

Animation Methods as Data Compression Techniques

가장 많이 쓰는 방법은 오브젝트 표면에 애니메이션 컨트롤용의 작은 포인트를 잡아주는 것이다.
이렇게 하면 많은 양의 데이터가 잠재적으로 들어있는 애니메이션을 만들 수 있다     

Joint는 직접적으로 조종되는 오브젝트다. 그리고 bone들은 심플하게 joint들 사이의 빈공간에 위치하게 된다.

Joint Index는 애니메이션 데이터 구조 내의 Joint를 나타내기 위해 사용된다
ex) Child Joint는 지정된 인덱스의 부모 Joint를 참조한다
Skinned 메쉬에서 정점은 인덱스로 바인딩된 Joint를 나타낸다

Joint 구조체는 Joint의 이름, 부모 Joint의 인덱스, Inverse bind pose가 들어간다
Bind pose는 skin 메쉬의 정점에 바인딩된 Joint의 위치, 방향, 크기를 나타낸다

Skeleton은 인공적으로 Joint를 회전, 평행이동, 스케일링하여 포즈를 취한다
Joint의 Pose는 Joint의 위치, 방향, 크기가 정의되어 있는데 몇몇 참조 프레임과 관련이 있다.

Skeleton의 pos는 모든 Joint의 pose의 집합이고, SRT나 행렬의 심플한 배열로 구성되어 있다

bind pose를 reference pose 또는 rest pose라고 부른다.

Joint의 pose는 부모 Joint를 기준으로 지정된다. 부모 기준 pose는 Joint 를 자연스럽게 움직일 수 있게 한다

Parentrelative pose는 Local pose라고도 한다. Local pose는 항상 SRT 형식으로 저장이 된다


Pj = Joint의 pose 4x4 행렬로 표현된다
Tj = Translation Vector 이동/변형 벡터

SjRj = 스케일 x 회전 행렬

전체 Skeleton의 pose 즉, 모든 [0, N-1]의 Pj 를 나타낸다

구조체 JointPose는 
struct JointPose
{
Quaternion m_rot; // R
Vector4 m_trans; // T
Vector4 m_scale; // S
}; 로 구성된다

struct SkeletonPose
{
Skeleton* m_pSkeleton; // skeleton + num joints
JointPose* m_aLocalPose; // local joint poses
}; 로 구성된다
m_aLocalPose는 Skeleton의 Joint의 수와 일치하는 JointPose의 발생을 포함하도록 동적할당된다

local joint pose는 부모를 기준으로 지정된다

Global Pose : 월드 공간에서 Joint Pose를 표현하는 것

Model space : 모델링 툴에서 만든 것의 공간

Joint의 모델링 스페이스의 pose는 Joint 에서부터 root까지 모든 skeletal 계층을 따라 가면서 로컬 포즈를 곱함으로써 찾을 수 있다

ex)

제가 정리한 내용이 도움이 되셨다면 공감 한번씩 눌러주세요~ 
수정해야할 내용이 있다면 밑에 댓글 남겨주시면 신속하게 고치도록 하겠습니다.

'프로그래밍 > DirectX' 카테고리의 다른 글

DirectX11 자원 (Resource)  (0) 2019.04.05
DirectX 11 기초  (0) 2019.03.28
Directx11 렌더링 파이프라인  (0) 2019.03.22
3D Animation 이론 1  (0) 2019.03.22
Rasterizer  (0) 2019.03.04