4. 캐릭터 애니메이션

Preview:

Citation preview

캐릭터 애니메이션윈도우 게임 프로그래밍

박민근

애니메이션

1.Vertex Animation

2.Hierarchical Animation ( 계층적 애니메이션 )

3.Bone Animation, Skeletal Animation

4.Skinning

5.Inverse Kinematics

Vertex Animation각각의 버텍스를 직접 이동 = 모핑 (morphing)

Hierarchy Animation계층 구조를 만들어 , 부모의 이동이 자식 노드에게 영향을 준다모든 애니메이션 구조의 기본이 된다 .

Skeletal Animation뼈대 (Bone) 을 중심으로 각 버텍스가 어느 뼈대에 붙어있는지 ( 가중치 ) 정의 되어 있고 ,

뼈대를 움직여서 애니메이션을 한다 .

뼈대는 렌더링 되지 않는 모델링에 정의 되어 있는 계층적 자료 구조이다 .

Skeletal Animation

Bone 이 애니메이션 하면 , Bone 에 영향을 받는 Vertex 들도 따라서 이동 한다 .

Skeletal Animation본의 계층 구조가 같으면 , 다른 모델에도 동일한 애니메이션을 적용 가능

Skinning

http://cybershin.tistory.com/category/API.%20Programming/DirectX9

정점에 서로 다른 Bone 에 대한 가중치를 주고 보간 한다 .

Skinning

예를 들어 , 영향을 받는 본의 개수가 2 개일 때

Vertex[39] : Bone 7(0.3), Bone 8(0.7)

이런식으로 Mesh 에 저장되어 있다 .

Inverse KinematicLeaf Bone 의 위치가 결정됨에 따라서 , 역으로 부모 본들의 위치가 실시간으로 변경되는 애니메이션

애니메이션 블렌딩2 개 이상의 애니메이션을 섞는 것 ( 블렌딩 )

상하체 애니메이션 블렌딩 애니메이션 전환 블렌딩

DirectX Skinned Mesh

Skinning Animation 구현

1.SW 계산으로 구현 (CPU)

2.Fixed-Pipeline 사용

3.Fixed-Pipeline Index 사용 ( 매트릭스 팔레트 )

4.셰이더 사용

D3DXFRAMESkeletal 의 Bone 구조체

D3DXMESHCONTAINERSkinned Mesh 의 정보를 담는 구조체

ID3DXAllocateHierarchy각 Frame 과 MeshContainer 를 할당하고 해제하는 인터페이스 구현

1. Shader File 로딩

2. Mesh Hierarchy 로딩

D3DXLoadMeshHierarchyFromX

위 함수를 호출하면 , CAllocateHierarchy 에 구현된 함수들이 호출 된다 .

SetupBoneMatrixPointers

Mesh 에 정의된 BoneMatrix 들을 세팅한다

3. CreateMeshContainerMesh Data 를 로딩하고 , 생성하는 함수

4. GenerateSkinnedMesh

5. OnFrameMove

6. UpdateFrameMatrices

7. OnFrameRender셰이더에 ViewProj Matrix 세팅

8. DrawMeshContainer

8. DrawMeshContainer

9. SkinnedMesh.fx

Skinning

예를 들어 , 영향을 받는 본의 개수가 2 개일 때

Vertex[39] : Bone 7(0.3), Bone 8(0.7)

이런식으로 Mesh 에 저장되어 있다 .

10. SkinnedMesh.fx

참고자료

3D 게임 프로그래밍 – 애니메이션 챕터

DX9 게임 프로그래밍 – 애니메이션 챕터

게임 프로그래밍의 정석 – 애니메이션 챕터