[Computer Animation] Motion Retargetting

후이재·2020년 11월 25일
1

시작하며

  • 지금까지 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

  • 시작점과 끝점의 차이 계산을 통해 얼마만큼 이동할지 역으로 계산

정리하자면

  1. 시작 motion에서 시작. (constraint 지정 필요)
  2. 시작 extimate를 찾기
  3. motion curve뽑기
  4. 최적화 문제를 풀어서 최적의 선택 찾기
  5. 결과가 불만족스러우면, 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에 애니메이션 적용, 복구.
profile
공부를 위한 벨로그

0개의 댓글