4. 캐릭터 애니메이션
TRANSCRIPT
![Page 1: 4. 캐릭터 애니메이션](https://reader033.vdocuments.site/reader033/viewer/2022061613/5562cacad8b42aaf178b5443/html5/thumbnails/1.jpg)
캐릭터 애니메이션윈도우 게임 프로그래밍
박민근
![Page 2: 4. 캐릭터 애니메이션](https://reader033.vdocuments.site/reader033/viewer/2022061613/5562cacad8b42aaf178b5443/html5/thumbnails/2.jpg)
[KGC2010] M2 프로젝트의 절차적 리깅 시스템
![Page 3: 4. 캐릭터 애니메이션](https://reader033.vdocuments.site/reader033/viewer/2022061613/5562cacad8b42aaf178b5443/html5/thumbnails/3.jpg)
애니메이션
1.Vertex Animation
2.Hierarchical Animation ( 계층적 애니메이션 )
3.Bone Animation, Skeletal Animation
4.Skinning
5.Inverse Kinematics
![Page 4: 4. 캐릭터 애니메이션](https://reader033.vdocuments.site/reader033/viewer/2022061613/5562cacad8b42aaf178b5443/html5/thumbnails/4.jpg)
Vertex Animation각각의 버텍스를 직접 이동 = 모핑 (morphing)
![Page 5: 4. 캐릭터 애니메이션](https://reader033.vdocuments.site/reader033/viewer/2022061613/5562cacad8b42aaf178b5443/html5/thumbnails/5.jpg)
Hierarchy Animation계층 구조를 만들어 , 부모의 이동이 자식 노드에게 영향을 준다모든 애니메이션 구조의 기본이 된다 .
![Page 6: 4. 캐릭터 애니메이션](https://reader033.vdocuments.site/reader033/viewer/2022061613/5562cacad8b42aaf178b5443/html5/thumbnails/6.jpg)
Skeletal Animation뼈대 (Bone) 을 중심으로 각 버텍스가 어느 뼈대에 붙어있는지 ( 가중치 ) 정의 되어 있고 ,
뼈대를 움직여서 애니메이션을 한다 .
뼈대는 렌더링 되지 않는 모델링에 정의 되어 있는 계층적 자료 구조이다 .
![Page 7: 4. 캐릭터 애니메이션](https://reader033.vdocuments.site/reader033/viewer/2022061613/5562cacad8b42aaf178b5443/html5/thumbnails/7.jpg)
Skeletal Animation
Bone 이 애니메이션 하면 , Bone 에 영향을 받는 Vertex 들도 따라서 이동 한다 .
![Page 8: 4. 캐릭터 애니메이션](https://reader033.vdocuments.site/reader033/viewer/2022061613/5562cacad8b42aaf178b5443/html5/thumbnails/8.jpg)
Skeletal Animation본의 계층 구조가 같으면 , 다른 모델에도 동일한 애니메이션을 적용 가능
![Page 9: 4. 캐릭터 애니메이션](https://reader033.vdocuments.site/reader033/viewer/2022061613/5562cacad8b42aaf178b5443/html5/thumbnails/9.jpg)
Skinning
http://cybershin.tistory.com/category/API.%20Programming/DirectX9
정점에 서로 다른 Bone 에 대한 가중치를 주고 보간 한다 .
![Page 10: 4. 캐릭터 애니메이션](https://reader033.vdocuments.site/reader033/viewer/2022061613/5562cacad8b42aaf178b5443/html5/thumbnails/10.jpg)
Skinning
예를 들어 , 영향을 받는 본의 개수가 2 개일 때
Vertex[39] : Bone 7(0.3), Bone 8(0.7)
이런식으로 Mesh 에 저장되어 있다 .
![Page 11: 4. 캐릭터 애니메이션](https://reader033.vdocuments.site/reader033/viewer/2022061613/5562cacad8b42aaf178b5443/html5/thumbnails/11.jpg)
Inverse KinematicLeaf Bone 의 위치가 결정됨에 따라서 , 역으로 부모 본들의 위치가 실시간으로 변경되는 애니메이션
![Page 12: 4. 캐릭터 애니메이션](https://reader033.vdocuments.site/reader033/viewer/2022061613/5562cacad8b42aaf178b5443/html5/thumbnails/12.jpg)
애니메이션 블렌딩2 개 이상의 애니메이션을 섞는 것 ( 블렌딩 )
상하체 애니메이션 블렌딩 애니메이션 전환 블렌딩
![Page 13: 4. 캐릭터 애니메이션](https://reader033.vdocuments.site/reader033/viewer/2022061613/5562cacad8b42aaf178b5443/html5/thumbnails/13.jpg)
[KGC2010] M2 프로젝트의 절차적 리깅 시스템
![Page 14: 4. 캐릭터 애니메이션](https://reader033.vdocuments.site/reader033/viewer/2022061613/5562cacad8b42aaf178b5443/html5/thumbnails/14.jpg)
[KGC2010] M2 프로젝트의 절차적 리깅 시스템
![Page 15: 4. 캐릭터 애니메이션](https://reader033.vdocuments.site/reader033/viewer/2022061613/5562cacad8b42aaf178b5443/html5/thumbnails/15.jpg)
DirectX Skinned Mesh
![Page 16: 4. 캐릭터 애니메이션](https://reader033.vdocuments.site/reader033/viewer/2022061613/5562cacad8b42aaf178b5443/html5/thumbnails/16.jpg)
Skinning Animation 구현
1.SW 계산으로 구현 (CPU)
2.Fixed-Pipeline 사용
3.Fixed-Pipeline Index 사용 ( 매트릭스 팔레트 )
4.셰이더 사용
![Page 17: 4. 캐릭터 애니메이션](https://reader033.vdocuments.site/reader033/viewer/2022061613/5562cacad8b42aaf178b5443/html5/thumbnails/17.jpg)
D3DXFRAMESkeletal 의 Bone 구조체
![Page 18: 4. 캐릭터 애니메이션](https://reader033.vdocuments.site/reader033/viewer/2022061613/5562cacad8b42aaf178b5443/html5/thumbnails/18.jpg)
D3DXMESHCONTAINERSkinned Mesh 의 정보를 담는 구조체
![Page 19: 4. 캐릭터 애니메이션](https://reader033.vdocuments.site/reader033/viewer/2022061613/5562cacad8b42aaf178b5443/html5/thumbnails/19.jpg)
ID3DXAllocateHierarchy각 Frame 과 MeshContainer 를 할당하고 해제하는 인터페이스 구현
![Page 20: 4. 캐릭터 애니메이션](https://reader033.vdocuments.site/reader033/viewer/2022061613/5562cacad8b42aaf178b5443/html5/thumbnails/20.jpg)
1. Shader File 로딩
![Page 21: 4. 캐릭터 애니메이션](https://reader033.vdocuments.site/reader033/viewer/2022061613/5562cacad8b42aaf178b5443/html5/thumbnails/21.jpg)
2. Mesh Hierarchy 로딩
D3DXLoadMeshHierarchyFromX
위 함수를 호출하면 , CAllocateHierarchy 에 구현된 함수들이 호출 된다 .
SetupBoneMatrixPointers
Mesh 에 정의된 BoneMatrix 들을 세팅한다
![Page 22: 4. 캐릭터 애니메이션](https://reader033.vdocuments.site/reader033/viewer/2022061613/5562cacad8b42aaf178b5443/html5/thumbnails/22.jpg)
3. CreateMeshContainerMesh Data 를 로딩하고 , 생성하는 함수
![Page 23: 4. 캐릭터 애니메이션](https://reader033.vdocuments.site/reader033/viewer/2022061613/5562cacad8b42aaf178b5443/html5/thumbnails/23.jpg)
4. GenerateSkinnedMesh
![Page 24: 4. 캐릭터 애니메이션](https://reader033.vdocuments.site/reader033/viewer/2022061613/5562cacad8b42aaf178b5443/html5/thumbnails/24.jpg)
5. OnFrameMove
![Page 25: 4. 캐릭터 애니메이션](https://reader033.vdocuments.site/reader033/viewer/2022061613/5562cacad8b42aaf178b5443/html5/thumbnails/25.jpg)
6. UpdateFrameMatrices
![Page 26: 4. 캐릭터 애니메이션](https://reader033.vdocuments.site/reader033/viewer/2022061613/5562cacad8b42aaf178b5443/html5/thumbnails/26.jpg)
7. OnFrameRender셰이더에 ViewProj Matrix 세팅
![Page 27: 4. 캐릭터 애니메이션](https://reader033.vdocuments.site/reader033/viewer/2022061613/5562cacad8b42aaf178b5443/html5/thumbnails/27.jpg)
8. DrawMeshContainer
![Page 28: 4. 캐릭터 애니메이션](https://reader033.vdocuments.site/reader033/viewer/2022061613/5562cacad8b42aaf178b5443/html5/thumbnails/28.jpg)
8. DrawMeshContainer
![Page 29: 4. 캐릭터 애니메이션](https://reader033.vdocuments.site/reader033/viewer/2022061613/5562cacad8b42aaf178b5443/html5/thumbnails/29.jpg)
9. SkinnedMesh.fx
![Page 30: 4. 캐릭터 애니메이션](https://reader033.vdocuments.site/reader033/viewer/2022061613/5562cacad8b42aaf178b5443/html5/thumbnails/30.jpg)
Skinning
예를 들어 , 영향을 받는 본의 개수가 2 개일 때
Vertex[39] : Bone 7(0.3), Bone 8(0.7)
이런식으로 Mesh 에 저장되어 있다 .
![Page 31: 4. 캐릭터 애니메이션](https://reader033.vdocuments.site/reader033/viewer/2022061613/5562cacad8b42aaf178b5443/html5/thumbnails/31.jpg)
10. SkinnedMesh.fx
![Page 32: 4. 캐릭터 애니메이션](https://reader033.vdocuments.site/reader033/viewer/2022061613/5562cacad8b42aaf178b5443/html5/thumbnails/32.jpg)
참고자료
3D 게임 프로그래밍 – 애니메이션 챕터
DX9 게임 프로그래밍 – 애니메이션 챕터
게임 프로그래밍의 정석 – 애니메이션 챕터