About me/What I did

[Template mesh model 제작] METHA : Meta's topology-based (Ava-256, Multiface) Template model for Head Avatar

침닦는수건 2025. 5. 15. 15:21
반응형

Motivation

body mesh하면 SMPL, Head mesh하면 FLAME 사실 사람과 관련된 template mesh model은 MPI가 독점하고 있다. 초창기에는 성능 때문에, 요즘에는 대규모 커뮤니티를 통해 검증/발전되었기 때문에 이것들만 쓴다. 나 역시 많이 써보았고, 자체 완성도와 녹아있는 노하우들에 감탄할 때가 많다. 

 

하지만 종종 서양인에 맞추어진 표현력이 아쉬울 때도 많았다. 대규모 3D SCAN을 사용해서 만든 FLAME이라고는 하지만 대상이 유럽인이 대부분이기 때문에 서양인 얼굴 형태에 bias가 들어있다. 그 결과 낮은 콧대나 옆으로 넓은 얼굴에 대한 표현력이 상당히 아쉽다. 

 

Introduction

그래서 내가 모아서 전처리해둔 모든 데이터들을 모아서 Head template mesh model을 하나 만들어보았다. 이름하여 METHA(ㅋㅋ). 이름은 META에서 공개한 topology를 기본 topology로 사용했기 때문이다. 

 

최근 META에서 공개한 multiface와 ava256을 보면 상당히 정확한 퀄리티의 registered mesh를 동일한 topology로 공개했다. 나는 이 데이터에다가 회사에서 마련한 대규모 한국인 SCAN 데이터 Polygom8K8K를 추가해서 template을 만들어 보기로 했다. 

 

내가 시도해보고 싶었던 것은 다음과 같다.

1) 표현력이 더 커진 shape / expression basis

2) 얼굴 영역이 아닌 부분에 대한 basis도 만들기 (머리영역이나 귀, 귀가 은근히 사람의 identity를 좌우하는 요소기도 하다.)

 

결과적으로 Local PCA를 활용하여 face / hair / ear 영역으로 나누어서 template model을 만들었다. 

 

https://github.com/jseobyun/METHA

 

GitHub - jseobyun/METHA: METHA: Meta's topology-based Template model for Head Avatar

METHA: Meta's topology-based Template model for Head Avatar - jseobyun/METHA

github.com


전체 공개는 추후에 할 예정. 일단은 내가 이렇게 저렇게 사용해보면서 안정화시켜볼 생각.

 

Topology processing

일단 topology를 정리했다. META에서 제공하는 topology를 그대로 보면 얼굴 + 눈알 + 입 안 공간으로 되어있다. 각각이 독립된 그룹으로 저장되어 있기 때문에 trimesh에서 process=True/False로 하는 여부에 따라 일관되게 loading이 안될 뿐더러, 굳이 눈알과 입 안은 중요하지 않다고 생각하기 때문에 제거했다. 

 

그리고 수많은 3D SCAN 데이터에 registration을 해보니, 은근 목 밑부분이 문제다. template mesh는 머리통 자체만 표현을 해야 이상적인데 자꾸 목 밑이 옷깃이나 악세사리를 표현하기 때문이다. 따라서 목 밑부분도 추가로 제거해주었다. 

 

결과적으로 초기 7306개 vertex에서 5095개 vertex 버전으로 topology를 정리한 뒤 사용했다. 

그리고 나서 face/hair/ear 영역으로 나누어 vertex mask를 생성해두었고, 이 mask region 별로 따로 PCA를 수행해 linear basis를 만들기로 했다. 

 

Data processing

multiface나 ava256은 애초에 topology가 같기 때문에 위 전처리 과정에 따라 vertex 일부를 제거만 하고 사용했다. 

 

Polygom8K8K의 경우, 내가 registration했을 때 FLAME face subdivision 2회한 버전으로 했기 때문에 2번 subdivision된 FLAME과 META topology 간에 vertex correspondence를 찾아 변환해서 사용했다. 

 

전체 데이터의 양은 Polygom8K8K만 해도 7791 명이기 때문에 기존 FLAME의 다양성을 압도하는 규모다.

 

METHA

방법은 뭐 알려진대로 잘 정렬된 vertex들을 sample 별로 쌓고, PCA를 돌린 뒤 eigenvector만 꺼내는 것이니 간단하다. 

 

위 영상은 학습 완료된 shape basis/expression basis를 보여주는 그림인데, 중앙에 있는 모델의 expression coefficient를 나머지 모델의 shape coefficient와 함께 시각화한 것이다. 

 

위화감이 적을 수록 shape basis와 expression basis가 독립적으로 잘 수렴했다는 것이다. 

 

마찬가지로 hair에 대한 shape basis도 만들었기 때문에 머리 모양도 변형이 가능하다. 다만 아쉬운 것은 머리 모양은 얼굴 대비 자유도가 너무 높기 때문에 단순히 coefficient swapping 만으로 자연스러움을 추구하긴 어렵다. 대머리와 풍성 곱슬 머리는 아무리 노력해도 위화감 없이 합칠 수 없더라.

 

 

Details

추가로 META에서 제공한 UV mapping도 그대로 METHA에 옮겨두었다. 

반응형