시작하며
- 지금까지 Motion을 받아오는 방법을 알아봤다.
- key frame을 제작하거나, Motion Capture로 받아오거나 한다.
- 이제 만들어낸 Animation을 다른 오브젝트로 적용시켜보는 Motion Retargetting을 공부해보자.
- 인턴생활을 하여 이 과정을 Vicon 자체 소프트웨어에서 손수 하나하나 짚어주며 수행했는데, 자동화가 너무 고팠던 기억이 있다..
Motion Retargetting이란?
- 움직이는 신체와 다른 구성, 형태에 애니메이션을 적용시키는것!
- Hierarchy가 같은 경우, 다른경우에 따라 다르게 적용이 된다.
- 같은 경우는, 자동화 하기가 쉽다고한다. 구성이 같으니까 End Effector의 위치만 잘 맞춰주면 된다.
- 다른 경우는, 예를들어 사람을 개로!조금 더 까다로운 연산이 필요하다.
필요한 이유: 컨텐츠의 재생성이 가능!. 열심히 만든 모션을 다른 캐릭터에도 쓸 수 있다.
Model에 대해
- 애니메이션에 사용될 Object
- Bodies(몸 Volume), Meshes(피부), Textures(모양), Functions(기본 움직임 . 예를 들어, 귀 쫑긋거림) 로 구성된다.
- 몸의 구성은 DAG로 되어있다. Root(Pelvis에 대해)
- 기본포즈는 T 또는 A 포즈. 기본포즈로부터 얼마나 움직였느냐를 Animation으로 나타냄
Retargetting 해보자
Step 1: Selection
- Original body와 Target body를 매칭한다.
- 매칭방법은 기계적(Mechanical), 의미적(Semantic) 방법이 있다.
기계적 Finding
- Spatial query: 위치관계로 찾아낸다. root에서 오른쪽 첫번째. 이런식으로(Front, Right, Back)
- Extent query: 가장 멀리있는 것에서 두번째. 이런식으로 찾기(frontMost, bottomMost)
- functions: type맞는것 끼리 찾기. mouth, spine, root 이렇게
Step 2: Posing
- Mapping완료후, Mapping으로 만들어진 부분에서의 동작.
- 정해놓은 Link에 대해 Pose를 정한다.
- 모든것에 대해 다 하는것이 아니라, 걷는 모드! 뛰는 모드! 이런식으로 모드를 정함.
- 관절에 따라 DOF가 다를 수 있음.
- 이를 Generalization이라 한다.
Movement Modes
- Identify: 움직인 그대로 회전, 움직임. 내몸 10도 움직이면 타겟몸도 10도 움직
- Rest Relative: Rest pose(기본포즈)에서 얼만큼 변화한지를 보고 움직임
- Scale Mode: 팔이 길면 더 움직이게 하기. size와 움직이는 량 비례하게
- Ground Relative: 땅에서부터의 상대적 거리를 맞춤. 내 발이 땅에서 10 떨어져있으면 타겟 발도 땅에서 10 떨어져있게
- Secondary Relative Movement: ground relative와 비슷. 바깥물체와의 관계 이용.
- Lookat: 방향을 정하기
- Mirroring Mode: 내가 움직이는것의 반대로 움직임
Step 3: Blending & Keying
- Blending: 만들어놓은 걷기와 뛰기를 연결시켜 자연스럽게 바뀌도록 하기
- Keying: key가 되는 control point를 저장하기.
Step 4: Animation Instantiation
- 다른 모델에 적용시키기(예. 다리 2개 사람-> 다리 10개 target으로.)
- branching
여러 질문에 대해 T/F로 진행되어, 동작을 수행. 서있을 수 있으면 방망이 휘두르는 동작 가능! 이런식
- UprightSpine: 똑바로 서있을 수 있는가?
- HasGraspers: 손으로 잡을 수 있는가?
- HasFeet: 발이 있는가?
- variants
어떻게 다르게 행동하는지
- 물건 잡으면 어디부터 잡는지.
- 손가락이 몇개인지에 따라 다르게.
- Varient group을 만들어서 동시에 제어.
- 예를들어, 상체와 하체를 다르게 구분하여, 조합 사용.
- constraint를 적용하면, 해당조합은 불가능하게 할 수도 있음
Gaits
- 잘 정의하면 자연스러운 표현이 가능.
- walk, run이 필요한데 다리가 없다? 기어가거나 떠다니거나 할 수 있게 하기.
- Gaits는 cycle을 가짐. 발이 땅에 떨어질때가 cycle의 시작점이 될수가 있음
- 양쪽발에 대해, 0.0, 0.5로 정의하면, 1.0주기에 대해 규칙적으로 발을 땅에 딛음
- 0.0, 0.3으로 한다면, 절룩거리는 애니메이션 가능.
결론적으로,
- 나눠서 풀면 간단하다.
- 복잡한 solution보다는 순차적 처리가 나음.
Retargetting 관련 연구들을 살펴보자
Example 1: M.Gleicher, Retargetting Motion to New Characters, published in SIGGRAPH 1998
요약
- 같은구조일 경우
- original body 에서 target body로 원하는 지점을 밟고가는 애니메이션을 옮기려함.
- 그냥 데이터 그대로 옮기면 발에 땅이 닿지 않는다.
- IK를 통해 end effector 바닥에 닿게하면, 정해진 시간안에 해당 지점에 가기위해 불연속점이 생겨버림.
- t에 의해 멀리 뻗도록 조정하면 멀리 뻗어 움직여 불연속 지점 해결.
- 각 지점의 간격이 너무 멀다면, 부자연스러운 motion이 나타남. => 밟는 지점의 간격은 model에 따라 조절이 필요함.
- 이를 Adaping(적응)이라고 부르고, 물체를 들거나, 두명이 추는 춤을 추거나, 캔과 같은 물체에 움직임을 입히는데 사용할 수 있다.
- 또한 모핑에도 사용할 수 있다. 같은 애니메이션으로 큰 사람에서 작은사람으로 변화하는 모습 가능
방법
- 어떠한 애니메이션을 다른것으로 옮길 때, 어떤것을 보존해야하는지 애매함
- 보존해야하는것을 제약조건으로 둠으로, 나머지를 적절히 옮겨주면 됨.
- 예를들어 해당 지점을 건너게 하라는 제약조건으로 그것에 적응한 애니메이션이 플레이됨.
- 해당 조건 외의 것은 d(t)를 더해서 진행.
- IK로 원하는 위치에 옮기되, low-pass filter와 spacetime에 대해 적용하여 자연스러운 변화를 유도.
수학적인 풀이는 어렵다
- 모든 인자가 다 주어져도 수식을 푸는것이 어려움.
- 그래서, 최소화, 단순화, 새로운 표현, 시작을 잘 잡기를 통해 문제를 축소
Objective functions
- 선택가능한 많은 선택지중 최적의 선택하기! => Optimize problem
- 어떻게? 관절의 움직임이 가장 적은 선택
- 쉬운 최적화를 위해 curve를 사용.
- control point가 많을수록 high-frequency. 적을수록 부드러운 움직임
Starting points
- 시작점과 끝점의 차이 계산을 통해 얼마만큼 이동할지 역으로 계산
정리하자면
- 시작 motion에서 시작. (constraint 지정 필요)
- 시작 extimate를 찾기
- motion curve뽑기
- 최적화 문제를 풀어서 최적의 선택 찾기
- 결과가 불만족스러우면, control point를 늘려서 다시 찾기
활용
Motion Morphing
- 이를 통해 점점 작아지거나 커지는 몸체에 대한 애니메이션이 가능
Differing Cahracter
- 매핑만 잘해준다면, 어느 몸체든 움직일 수 있음
Example 2: K.Aberman, P.Li, Dani Lischinski, Olga Sorkine-Hornung, Daniel Cohen-Or, Baoquan Chen, Skeleton-Aware Networks for Deep Motion Retargeting, presented in SIGGRAPH 2020
요약
- 다른 구조일 경우.
- Target body의 Join가 부족하거나 다를 때, 중립적 모델을 만드는것(딥러닝 기술 활용)이 포인트
- 비슷한 것을 묶어 두 모델의 중립모델을 만든다.
- 이것을 타겟 모델에 적용한 후, 다시 원래 모습으로 디코딩한다.
방법
- Deep learning방식은 관계를 보아, 가장 유사한것을 합침.
- 공통의 모델을 통해 Target body에 애니메이션 적용, 복구.