구글 태그

2023년 11월 8일 수요일

얼굴 이미지로 메타휴먼 생성하기

2D 얼굴 이미지를 3D 메시로 만들어 언리얼 메타휴먼을 생성해보는걸 해봤습니다. 결과가 썩 만족스럽지는 않지만 전체 과정을 한 바퀴 돌았으니 여기까지 한 작업을 간단히 정리하고 퀄리티 업으로 넘어가기로 합니다. 본문에서 한 줄로 짧게 넘어가는 과정이 실제로는 그렇게 간단하진 않습니다. 직접 적용하려면 파이썬, 블렌더, 언리얼에 대해 어느 정도 사전 지식이 필요합니다.

기본적인 아이디어의 얼개는 다음 동영상에서 가져왔습니다.

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를 만들어 줍니다. 이 과정은 처음 나온 동영상에 잘 나와있습니다. 매번 동영상을 보기가 번거로워서 블렌더에서의 작업 단계를 정리합니다.

  • 씬을 비우고 OBJ 파일 임포트
  • UV Editing으로 이동해서 빈 UV 이미지 생성
  • 빈 UV 이미지에 이름 지정
  • 메시를 선택하고 UV 메뉴에서 Smart UV Project
  • Shading에서 Color Attribute 입력을 추가하고 Color 속성을 Color로 변경하여 Principled BSDF의 Base Color에 연결
  • Render 속성에서 렌더러를 Cycles로 변경하고 Device를 GPU Compute로 변경
  • Image Texture 추가하고 앞서 생성한 UV 이미지로 지정
  • Target Image를 앞서 생성한 UV 이미지로 지정
  • Bake 메뉴에서 다음과 같이 지정하고 Bake
  • Bake Type을 Diffuse로 지정 
  • Contributions를 Color만 남기고 모두 지움 
  • Bake가 완료되면 Target Image의 Color를 Principled BSDF의 Base Color에 연결하여 결과 확인
  • 작업이 완료된 이미지를 저장
  • 다음과 같이 옵션을 지정하여 FBX로 익스포트
  • Path Mode는 Copy
  • Object Types는 Mesh만 선택 

  • 여기까지 작업해서 만든 메시를 블렌더에서 보니 처음에 선택했던 이미지와 크게 다르지는 않은데 살짝 덜 예뻐진 것 같습니다.

    이제 메시를 메타휴먼으로 넘겨줍니다. 이 과정은 다음 문서에 잘 나와있습니다.

    https://dev.epicgames.com/documentation/en-US/metahuman/mesh-to-metahuman-quick-start-in-unreal-engine

    이 단계를 실제로 해보면 메타휴먼으로 넘기는 과정에서 얼굴 형태에 변형이 생깁니다. 메타휴먼 플러그인이 눈코입 위주로 처리해서 넘기는 방식이라 전체적인 모양이 생각대로 안 나옵니다. 눈이 작아진 것처럼 느껴지는것도 얼굴이 커져서가 아닐까 싶어요. 프로그래머인 저 보다 예술감각이 있는 사람이 메타휴먼 크리에이터에서 세팅을 하면 이것보단 나을 것 같지만 헤어스타일에도 제약이 많아서 비슷한 느낌이 나지 않네요. 전반적으로 얼굴이 평범해집니다.

    생성한 메타휴먼을 언리얼 인게임으로 불러오는건 생략하겠습니다. 메타휴먼 단계에서 이 상태면 인게임에서는 더 안 예쁠 공산이 크므로 귀찮네요.

    일단 된다는데 의의를 두고 좀 더 다듬어봐야겠네요. 얼굴형이 중요한 타입 보다는 눈코입이 뚜렷한 타입의 얼굴이 결과물이 잘 나올 것 같아요.