32
캐캐캐 캐캐캐캐캐 윈윈윈 윈윈 윈윈윈윈윈 캐캐캐

4. 캐릭터 애니메이션

Embed Size (px)

Citation preview

Page 1: 4. 캐릭터 애니메이션

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

박민근

Page 3: 4. 캐릭터 애니메이션

애니메이션

1.Vertex Animation

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

3.Bone Animation, Skeletal Animation

4.Skinning

5.Inverse Kinematics

Page 4: 4. 캐릭터 애니메이션

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

Page 5: 4. 캐릭터 애니메이션

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

Page 6: 4. 캐릭터 애니메이션

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

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

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

Page 7: 4. 캐릭터 애니메이션

Skeletal Animation

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

Page 8: 4. 캐릭터 애니메이션

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

Page 9: 4. 캐릭터 애니메이션

Skinning

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

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

Page 10: 4. 캐릭터 애니메이션

Skinning

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

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

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

Page 11: 4. 캐릭터 애니메이션

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

Page 12: 4. 캐릭터 애니메이션

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

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

Page 15: 4. 캐릭터 애니메이션

DirectX Skinned Mesh

Page 16: 4. 캐릭터 애니메이션

Skinning Animation 구현

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

2.Fixed-Pipeline 사용

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

4.셰이더 사용

Page 17: 4. 캐릭터 애니메이션

D3DXFRAMESkeletal 의 Bone 구조체

Page 18: 4. 캐릭터 애니메이션

D3DXMESHCONTAINERSkinned Mesh 의 정보를 담는 구조체

Page 19: 4. 캐릭터 애니메이션

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

Page 20: 4. 캐릭터 애니메이션

1. Shader File 로딩

Page 21: 4. 캐릭터 애니메이션

2. Mesh Hierarchy 로딩

D3DXLoadMeshHierarchyFromX

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

SetupBoneMatrixPointers

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

Page 22: 4. 캐릭터 애니메이션

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

Page 23: 4. 캐릭터 애니메이션

4. GenerateSkinnedMesh

Page 24: 4. 캐릭터 애니메이션

5. OnFrameMove

Page 25: 4. 캐릭터 애니메이션

6. UpdateFrameMatrices

Page 26: 4. 캐릭터 애니메이션

7. OnFrameRender셰이더에 ViewProj Matrix 세팅

Page 27: 4. 캐릭터 애니메이션

8. DrawMeshContainer

Page 28: 4. 캐릭터 애니메이션

8. DrawMeshContainer

Page 29: 4. 캐릭터 애니메이션

9. SkinnedMesh.fx

Page 30: 4. 캐릭터 애니메이션

Skinning

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

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

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

Page 31: 4. 캐릭터 애니메이션

10. SkinnedMesh.fx

Page 32: 4. 캐릭터 애니메이션

참고자료

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

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

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