Paper/Human

Local Anatomically-Constrained Facial Performance Retargeting

침닦는수건 2024. 7. 2. 17:51
반응형

내 맘대로 Introduction

 

이 논문은 사람 A의 표정을 사람 B로 옮겨주는 리타게팅 논문인데, 다루는 문제가 조금 특별하다. 완전히 모르는 표정, 완전히 모르는 사람 B로 옮기는 것이 아니라 이미 웬만한 건 다 알고 있는 상태다. 사람 A와 B의 mesh(with topology)도 알고 있고, 같은 표정을 지은 SCAN도 이미 알고 있다. 예를 들면 사람 A의 웃는 표정, 사람 B의 웃는 표정.

 

그럼 이미 알고 있는데 사람 A to 사람 B 표정 옮기기가 왜 필요한가? 여기서 집중하는 점은 "같은 표정일지라도 사람 A의 표현력으로 웃는 사람 B"를 만들고 싶은 것이다. 사람마다 얼굴 근육 길이나 조절 능력이 다르기 때문에 같은 표정을 지으라고 해서 누구는 입꼬리가 더 올라가고 누구는 덜 올라가고 차이가 크다. 그냥 사람 B가 평소에 활짝 웃는 정도를 넘어서 사람 A가 활짝 웃는 만큼 사람 B도 활짝 웃도록 변형하고 싶은 것이다. 

 

문제가 큰 틀에서 표정 옮기기가 아니라 미묘한 사람 간의 차이를 담아내고 싶은 것이다. 

 

따라서 리타게팅이라는 문제 관점에서는 이미 주어진 정보가 너무 풍성해서 별 것 아닌 것 같지만, 섬세한 영역을 다루는 논문이라 경험치에서 나온 관점이라고 보면 좋을 것 같다. 

 

메모




앞서 짧게 설명한 바와 같이, 사람 A의 표정을 사람 B로 옮기는 문제. 대충 옮기는 것이 아니라 엄청 정확하게 옮기는 것이 목표.

그래서 사람 A mesh를 patch 단위로 잘게 잘게 쪼개서 patch 하나하나 어떻게 움직이는 지를 찾아내고, 

이 움직임을 값을 사람 B에 자연스럽게 이식하는 과정이 담겨있다.



일단 사람 A,B 둘 다 정해진 표정에 대한 MESH가 있어야 한다. 
-> 이걸 보고 이미 있네? 하면 처음부터 다시 읽으면 된다.
-> 이미 있는데 미세한 피부 움직임 레벨에서 보면 사람 A의 웃는 것과 사람 B의 웃는 것은 느낌만 비슷하지 다른 레벨
-> 이 차이를 담아내는 것이 목표

무표정이 기준0 이고 나머지 표정 N-1개가 추가로 주어져야 함. 이 때 N-1개는 변형이 심한 표정일 수록 좋다고 함


그리고 위 그림처럼 서로 mesh 상의 correspondence를 찾을 수 있도록 patch를 만든다. 이 때 A<->B 간의 patch 대응 관계도 알 수 있어야 할 뿐더러, 같은 A 내 표정 간에서 patch 대응 관계를 알고 있어야 한다.
-> 같은 topology 쓰는게 필수는 아니라고 하지만 현실적으로 필수라는 소리
-> 없으면 디자이너가 직접 mapping을 해야 한다고 함
-> 비용 소모가 크고 느릴게 당연하니까 같은 topology 쓰는게 좋음
-------------
그 다음은 blendshape coefficient를 찾는 것인데, "patch 마다 coefficient"를 찾는다.

기존 방식이었다면 표정 SCAN 전체를 1개의 단위로 SCAN 횟수만큼 coefficient를 찾으면 됐는데

여기선 patch 개수 * SCAN 횟수만큼 coefficient를 찾는 것.
-> 최적화가 훨씬 어렵겠지만, 완성만 된다면 피부를 local하게 움직일 수 있는 능력이 생기는 것
-> 추후 디자이너가 local coefficient만 컨트롤할 수 있게 해준다면 얼굴의 특정 영역만 움직일 수 있다는 소리
----------------
coefficient를 찾고 나면 해당 coefficient를 그대로 들고, 사람 B patch를 blending 하면 retargeting 되는 개념
-> 물론 우글우글 하게 안맞겠지만, 이건 바로 뒤에 보정하는 방법이 있음



(ALM은 디즈니에서 2016년 자체적으로 만든 모델임, 뼈위치, normal, skin 두께로 표현됨)



retargeted 사람 B 우글우글 patch들을 부드럽게 처리하는 방법은 ALM을 이 patch들에 fitting하는 것이다.

ALM은 뼈와 피부를 고려한 강한 constraint가 걸려있는 모델이기 때문에 face prior를 들고 있다고 할 수 있다. 이런 모델을 noisy retargeted patch들에 fitting하고 fitted ALM이 최종 결과가 되는 것

먼저 사람 A에서 patch 별 blendshape coefficient 최적화하는 첫번째 스텝 방법을 먼저 설명함

수식(7)과 같이, 사람 A SCAN vs patch로 blending한 사람 A 간의 L1 LOSS가 들어간다. 

SCAN의 좌표계가 mesh 좌표계랑 미묘하게 안 맞을 수 있느니 (특히 head pose) global coordinate를 맞춰줄 수 있도록 R(SE3)가 추가됨.

--------
blendshape coefficient가 기본적으로 높으면 noisy해지니까, 0에가깝도록 억제,

patch 단위의 coefficient다 보니까 기존 blendshaep coefficient에서 사용하지 못하는 neighbor consistency 를 줄수도 있음

인접한 patch라면 cofficient가 유사해서 비슷하게 움직이게끔.



이건 이해 못했으나 크게 알 필요는 없어 보임. ALM 모델 디테일에서 출발한 분석.

사람 A에 대한 최적화가 끝나서 coefficient를 다 구했다면 하나의 활용이 가능함

디자이너가 만약 특정 patch의 coefficient를 scale한다면 해당 위치의 움직임이 강조되거나 억제될 수 있다.

예를 들면 볼이 많이 안움직이게, 혹은 많이 움직이게 할 수 있다.

따라서 patch 별로 scale factor를 또 부여한다면 더 풍성한 조절이 가능함.
마지막으로 patch coefficient를 이제 사람 B에 이식하고, patch로 표현된 우글우글 사람 B에 ALM 모델을 피팅하는 과정

ALM vertex 별로, vertex가 포함된 patch 와의 거리를 줄이는 식으로 최적화 했다. 

ALM이 patch들에 최대한 가깝에 붙도록.

이렇게 하면 patch 경계면에서 우글우글, 마치 모자이크 방식으로 만든 mesh처럼 noisy했던 것이 ALM prior에 의해서 없어진다.

patch 사람 B -> ALM 사람 B로 넘어가버리는 것.

실제 사용은 ALM 갖고 하는 것.

반응형