시작하면서
- 이제 강체(Rigid), 변화체(Deformable)의 Animation은 할 수 있다
- 사람의 경우는 어떠할까? 사람은 root(pelvis)에서부터 관절과 뼈로 이루어져있다.
- 이를 계층구조로 나타내어 Animation하는 방법을 알아보자
사람의 Animation 구현방법
- Physical laws
근육의 특성이용하여, 뼈에 근육붙이고 시뮬레이션 하기
장: 굉장히 정확한 움직임 얻을 수 있음
단: 너~무 오래걸림
- Hierarchical Modeling
계층구조로 나타내어 각 관절의 회전을 받아 시뮬레이션 하기
각 관절마다 상대적인 회전값을 가짐
여기에 제약사항을 넣어 실제와 가깝게 표현 가능!(ex.팔꿈치 회전의 제약)
팔꿈치를 30도 회전하고, 어깨를 50도 회전해도 상대적인 회전값은 그대로. 전체적으로는 바뀜
- Artuculation objec: 관절이 있는 물체
- Articulation variable: 각도
- End effector: 가장 끝 부분(손목 또는 손바닥이라고 할 수 있음)
Hierarchies in Animation
- Forward Kinematics (FK)
- time 마다 angle을 하나씩 정해주기..
- 그러고나서 interpolation
- Art의 영역
장: 원하는 움직임 가능
단: 사람의 노력이 필요함
- Inverse Kinematics (IK)
- 모두 control이 아니라, end effector의 위치를 바꾸려면 얼마나 회전해야할지 계산
- Math의 영역
장: 쉬운 제어 가능, 부가적인 움직임(잡기위해 허리 숙이는 등) 가능
단: 계산으로 움직여서 부자연스러울 수 있음
FK는 어떻게 하나요?
모든 값을 지정해줍니다.
Joint의 종류
- Revolute Joint: 한 방향 회전 joint
- Prismatic Joint: 이동하는 joint(늘었다, 줄었다)
- Complex Joint: 모든 축으로 회전 가능. 하나로 두기 복잡해서 3개의 관절로 나눠 표현하기도함.
Joint-Link표현
- Node(모양)와 Arc(상대거리)값으로 되어있음
- Arc값은 부모로부터 얼마나 떨어져있는지에 대한 값.(거리, 각도)
- 머리에 10cm위로 붙어있는 모자라면, arc는 10을 가짐
- Binary Tree 형태로 표현한다.
IK는 어떻게 하나요?
goal position까지의 회전 과정을 역으로 계산해냅니다.
Spaces
- Configuration space: L과 세타로 구성된 위치
- Reachable workspace: 도달할 수 있는 위치(End effector가 있을 수 있는 위치). 넓을수록 어디든 갈 수 있어
- Dextrous workspace: 다양한 경우를 가질 수 있는 위치. 넓을수록 움직이기 편함
Numeric(Analytic)
- analtytically하게 문제를 풀기가 어렵다.
- 원하는 위치로 도달할 수 있는 방법이 너무 많음
- 그래서 수치해석적인(Numeric) 풀이를 해보자!
- 우선 사람의 팔은 3-1-3또는 3-2-2 의 DOF를 가짐
- 가장 적게 움직이는 관절(end effector 근처의 관절)을 먼저 움직이도록 하는 방식
- 움직여보고 안되면 더 넓은 범위의 움직임.
장: 잘 풀리기는 한다.
단: 자연스러운 움직임은 어렵다. 항상 해를 찾는것을 아니다.
Generic math notation
- 일반적인 해를 구하기 위해서는 변화량에 따른 속도를 구해, Jacobian 행렬을 만들어 곱하기
- Jacobian 의 역행렬을 곱하면 goal vector를 얻을 수 있다.
장: 정확한 자연스러운 해 구함
단: 현재 configuration에서만 정확하므로, 모든 시점에 대해 Jacobian 행렬을 구해야함..
하지만.. 이또한 도달할 수 없는경우, 그곳에 가기위해 왔다갔다하며, 발버둥치는 모습을 볼 수 있다.
Damping factor를 더해야한다.
IK에서 발생할 수 있는 문제
- Damping factor
조금만 움직여도 더 움직이는걸로 여겨서, 결국엔 덜 움직이게 하기 위한것!
=> 그러면 왔다갔다 하는 현상이 줄어듦
- Singularity
Singular위치에 goal 있으면 답 안나오는 문제.(일직선상에)
기본 해결법: Singular한 곳에 빠지지 않게 하기
그래도 안되면: 포기하거나.. 다른 방법을 생각해보거나.. 뒤로 물러나보기
- Cyclic Coordinate Descent(CCD)
하나씩 움직여보기
3차원일 경우, 2차원 상으로 투영시켜서 문제 풀기
장: Joint limit주기가 쉬움, 속도 제약도 쉬워짐
정리!
- FK는 자연스럽지만, 손으로 설정해야하는 단점
- IK는 제어가 쉽지만, 자연스럽지 않다는 단점
=> 어떻게 해야할까? => Motion capture!
Motion Capture
사람의 motion을 캡쳐합니다.
무엇을 capture하는가
어떻게 capture하는가
- Joint의 위치를 캡쳐합니다. 어떻게? marker를 이용해서!
MoCap 기술
- Electro-Mechanical
- exo-skeleton과 같은 기계를 입는다.
장: 다른 장비 필요없음. 실외캡쳐 쌉가능
단: 입는거, 움직임 불편. 액션하기 불편
- Magnetic
- 자기장을 이용. x, y, z(위치), wx, wy, wz(각도)까지 얻어서 6DOF 가능
장: 많은것을 붙일 필요 없음. 빨리 측정가능. 좀더 많은 모션 가능
단: 선이 많아.. 근처에 금속판같이 자기장 변화시키는것 둘 수 없음
- Optical(Passive)
- 광학식. 어디서든 정반사하는 마커를 이용. x, y, z(위치)만 가능.
- 마커의 위치를 통해, 역으로 링크를 계산
- 카메라 캘리브레이션이 필요(위치 대응하는 과정)
- 위지윅스튜디오의 모션캡쳐실
장: 선이 없음. 좋은 카메라 많으면, 정확도 올라감.
단: 마커가 많이 필요. 가려지면 튀어버림. 정확한 위치가 필요해짐
- Optical(Active)
- 마커가 빛을 내는 방식.
장: 빛이 밝으니 적당히 가려져도 괜찮음. 재질의 영향도 적음. 마커에 비해 오래 쓸 수 있음
단: 전선이 있다
비교해보자
- Electro-Mechanical: 정확하지않고, 자유롭지도 않음
- Magnetic: 적당히 정확하고, 적당히 자유로움
- Passive Optical: 정확하고, 자유로움
- Active Optical: 정확하고, 자유로움
Optical 은 매우 비싸다는 단점이 있긴함.
Markerless system
- 영상처리 방식. 부분으로 분리하여, 역으로 관절, 뼈 유추
장: 마커가 없어도 됨
단: 유추이다보니, 정확하지 목함. face는 괜찮은편
Marker 추출
- 여러 카메라를 통해 마커의 위치 추정(삼각측량법 사용)
- 마커와 옷 구분을 함.(적외선 사용. 반짝이는곳이 마커)
- 주위환경에서 빛을 반사하지 않도록 조치해야함
Marker Tracking
- 이전 움직임과 다음 움직임을 매칭시켜야함
- 박수를 치고 난 후가 문제생길 수 있음.
- 튀는 곳에 대해서는 clean up이 필요. 아직까지 수작업으로 고쳐주곤함
Mocap 결과
- root에 대한 hierarchy 정보, 각 Frame에 대한 각도를 얻을 수 있음
- 이제 캡쳐는 가능!
- Missing joint, Different body size에 대한 문제 해결이 필요
활용
- Motion Retargeting: 체형이 다른 캐릭터로 모션을 맞추기
- Motion Blending: 걷는 motion에서 뛰는 motion으로 자연스럽게 연결하기
- Motion Control: 굴곡 또는 경로 변경되면 자연스럽지 않을 수 있음. 리타게팅, 블렌딩 이용