기본적인 아이디어의 얼개는 다음 동영상에서 가져왔습니다.
https://youtu.be/kz13lcOQcig?si=TRlwu_A5ojT7ulKX
먼저 얼굴 이미지를 고릅니다. 일단 가볍게 테스트할 용도로 StableDiffusion이 생성한 이미지를 한 장 가져옵니다.
https://www.ptsearch.info/articles/detail/249ef784-e391-4b6c-8d8c-a36c3f25192b
전형적인 요즘 흔히 보이는 생성 이미지인데 얼굴이 잘 보여서 작업이 잘 될 것 같아 이걸로 골랐습니다.
그 다음에는 이미지를 3D 메시로 변환해야 하는데, 이 작업을 위해 얼굴 이미지에서 5군데의 점(양쪽 눈, 코, 입의 양쪽 끝)을 찾아야 합니다. 저는 다음 라이브러리를 이용했습니다.
https://github.com/ipazc/mtcnn
파이썬을 설치하고 처음에 선택한 이미지에서 이 라이브러리를 돌려주면 5군데의 점이 나옵니다. 점들을 txt 파일로 저장하고 다음 라이브러리를 세팅해서 이미지와 점 배열을 넣고 돌려주면 3D 메시(OBJ 포맷)가 나옵니다.
https://github.com/sicxu/Deep3DFaceRecon_pytorch
메타휴먼으로 넘기기 전에 블렌더에서 UV를 만들어 줍니다. 이 과정은 처음 나온 동영상에 잘 나와있습니다. 매번 동영상을 보기가 번거로워서 블렌더에서의 작업 단계를 정리합니다.
Bake Type을 Diffuse로 지정
Contributions를 Color만 남기고 모두 지움
Path Mode는 Copy
Object Types는 Mesh만 선택
여기까지 작업해서 만든 메시를 블렌더에서 보니 처음에 선택했던 이미지와 크게 다르지는 않은데 살짝 덜 예뻐진 것 같습니다.
이제 메시를 메타휴먼으로 넘겨줍니다. 이 과정은 다음 문서에 잘 나와있습니다.
https://dev.epicgames.com/documentation/en-US/metahuman/mesh-to-metahuman-quick-start-in-unreal-engine
이 단계를 실제로 해보면 메타휴먼으로 넘기는 과정에서 얼굴 형태에 변형이 생깁니다. 메타휴먼 플러그인이 눈코입 위주로 처리해서 넘기는 방식이라 전체적인 모양이 생각대로 안 나옵니다. 눈이 작아진 것처럼 느껴지는것도 얼굴이 커져서가 아닐까 싶어요. 프로그래머인 저 보다 예술감각이 있는 사람이 메타휴먼 크리에이터에서 세팅을 하면 이것보단 나을 것 같지만 헤어스타일에도 제약이 많아서 비슷한 느낌이 나지 않네요. 전반적으로 얼굴이 평범해집니다.
생성한 메타휴먼을 언리얼 인게임으로 불러오는건 생략하겠습니다. 메타휴먼 단계에서 이 상태면 인게임에서는 더 안 예쁠 공산이 크므로 귀찮네요.
일단 된다는데 의의를 두고 좀 더 다듬어봐야겠네요. 얼굴형이 중요한 타입 보다는 눈코입이 뚜렷한 타입의 얼굴이 결과물이 잘 나올 것 같아요.