Skeletal animationLocal motions
bone의 역할
- Local motions
- 각 뼈는 자체 local motion을 가짐(own 좌표계에서 정의)
- 각 뼈의 움직임은 회전으로 제한됨
- 이 제한은 높은 수준의 유연성 제공하면서 애니메이션 프로세스를 간단화함
- Casading Effect(폭포 효과)
- 뼈는 부모-자식 관계로 구성되어 있어, 모든 자식 뼈들이 부모의 영향을 받음
- upper arm(팔 상안부)를 회전하면 자동으로 forearm, wrist, hand가 회전한다. 연결된 모든 부분이 움직이는 것을 보장함.

- Mi,d 는 i번째 bone이 Character space로 가기 위한 matrix를 의미
- Character to bone space: Mi−1,d

Forward Kinematics
- animated vertex를 계산하기 위해서 FK 기술이 필요함
- root bone에서 출발하여 end effector까지 진행되는 계층 구조에서 각 관절의 회전과 변환에 기반을 두고 있는 캐릭터 뼈의 위치를 FK가 계산함
- 뼈를 애니메이팅 하기 위해 FK을 사용한 이후 animated vertex는 다시 캐릭터 space로 돌아가야 함.

- 각 뼈는 local joint를 기준으로 회전하는데, 이를 local transform이라고 함.
- forearm에서의 local transform은 M5,l로 표현하며 v5에 영향을 줌
![업로드중..]()
- M4,a 는 upper arm에서의 vertex를 애니메이팅 하고 character space로 변환하는 matrix를 의미함.
![업로드중..]()
- character space에서 bone space로 Mi−1,d 로 이동하고 Mi,a를 계산해서 다시 animated vertex 계산 동시에 character space로 되돌아옴.
정리
Mi,d : i번째 bone space에서 character space로 가는 matrix
Mi−1,d : character space -> i번째 bone space
Mi,l : i번째 bone space에서 local transform 수행
→ vi에 영향을 준다
Mi,a : i번째 bone space에서 animated된 vi를 character space로 변환
default pose -> animated pose
- 기본 v에 Mi,aMi−1,d를 곱해주어 animated vertex 계산 후 character space로 복귀시킴
Skinning
skin : 캐릭터 애니메이션에서 skeleton에 붙이는 polygon mesh를 의미함
Skin
![업로드중..]()
- 뼈에 vertex가 속한다고 가정하면 움직였을 때 부자연스러움
![업로드중..]()
- 여러 뼈가 vertex에 영향을 줄 수 있게 하고 뼈에 vertex를 묶는 대신 blending을 하여 결과를 내면 위의 현상이 완화됨.(alleviate)
![업로드중..]()
- character space에서의 점 v가 forearm과 hand에 영향을 받는다고 가정
- 각 뼈에 영향 받는 가중치 w5,w6를 계산함.
구현
![업로드중..]()
- 게임 같은 실시간 3D 앱에서는 프로그래밍 효율을 위해 vertex에 영향을 주는 뼈의 수(m)을 4개로 제한한다.
- vertex shader에 의해 sknning 알고리즘 구현됨
- 캐릭터가 뼈 20개를 가진다면, 각 프레임에서 Mi의 20개 인스턴스를 업데이트 해야한다.
- 이 인스턴스들은 matrix palette 테이블에 저장되고 균일한 변수로서 제공된다
- 반면에 palette index들과 blend weight는 vertex array에 저장된다
Keyframe Animation
- Mi,aMi−1,d는 매 프레임마다 계산됨
- Mi−1,d은 한번 계산되고 고정된 상태로 있으나, Mi,a는 keyframe에서 Mi,a을 보간하여 프레임 사이마다 업데이트 됨
- Mi,a는 Mi−1,a Mi,l Mi,p 로 정의됨
- Mi,l은 사실상 회전
- Mi,p는 이동과 회전으로 구성된 공간 변환 matrix
Let Mi,p,l denote Mi,p Mi,l. It is in [R|t].