Post

Tool: AI로 3D 모델 생성해 사용하기

Tool: AI로 3D 모델 생성해 사용하기

요즘은 3D모델도 AI가 만들어줄 수 있는 시대가 됐다. 그림을 그려주는거야 워낙 예전부터 많이 알려졌었는데, 3D 모델도 꽤나 수준급으로 뽑아줘서, 간단한 게임을 만드는데는 크게 활용도가 높을 것 같다. 다만 대부분 수준급의 결과를 내기 위해서는 유료 플렌을 사용해야 하기 때문에, 무료플랜으로 괜찮은 모델을 뽑는 법을 한번 살펴보자.

  1. 레퍼런스 이미지 뽑기

    LLM서비스를 이용한 이미지 생성은 워낙 많이 쓰였기에 사용법은 따로 말할 것은 없을 것 같다. 다만 모델별로 원하는 느낌으로 일관되게 뽑아주는데는 확실한 차이가 있는 것 같다. 내가 만들고 싶었던 모델은 카툰풍에 꼬마다. 사실적인 그림체나 디테일은 필요 없어서 어느 AI한테 시키든 쉬울 것으로 생각했는데, 몇몇 시켜본 것들 중에는 구글의 제미나이-나노바나나가 제일 잘 만들어준 것 같다. 아직 별로 유료로 쓸 생각이 없기에 더 차이가 있는 걸 수도 있겠다. 몇가지 비교해보자면 다음과 같다.

  • Nano Banana 2
    • 구글의 이미지 생성 모델로 무료는 나노바나나2만 주어진다. 가장 처음부터 생각하던 이미지대로 잘 뽑아준 모델이다. 미국 TV 애니메이션과 비슷한 느낌의 그림으로 처음부터 잡혀 나왔다.
  • GPT-Image
    • 오픈AI의 Chat-GPT를 통해 이용할 수 있는 모델이다. 성능 자체는 나노바나나와 비슷한 것 같은데, 느낌상 그릴 수 없는 제약조건이 구글보다 많은 것 같다. 수정해서 그려달라는 걸 계속 실패했다며 거부하다가 2장정도 뽑아볼 수 있었다. 기본 스타일은 미국 애니메이션/디즈니 같은 느낌을 준다.
  • Grok Image
    • XAi의 Grok에 같이 있는 이미지 생성 AI이다. 예전에 처음 출시했을 때는 성능이 좋다고 많이 알려졌던 것 같은데, 내가 많이 안사용해봐서 그런지, 아니면 무료라 그런지, 일관성 없이 수정 요구에 따라 너무 많이 바뀌는 모습이다. 초창기 막강한 성능으로 유명해지다가 크게 제약을 걸면서 다른 모델들에 비해 덜 쓰이게 됐다고 들었다. 실사풍의 이미지/영상은 꽤나 잘 뽑아줬던 것으로 기억했는데, 아마 그래서 카툰풍은 오히려 못뽑아준 것 아닐까 싶기도 하다.
    첫번째
    두번째
    세번째
    네번째
  • FLUX.2
    • AI 그림 생성의 붐을 일으켰던 Stable Diffusion이후 주목받은 오프라인에서 쓸 수 있는 그림 AI다. https://playground.bfl.ai/에서 온라인으로도 사용할 수 있는데 로컬 실행과는 다르게 유료이다. 처음에는 체험용으로 50장의 무료 이미지 생성권을 얻으니 맛보기엔 충분한 것 같다. 전체적으로 일관된 느낌으로 뽑아주긴 하는데 기본 스타일은 그록이랑 비슷한 것 같다. 사실적인 그림/영상을 잘 뽑아주는 것으로 알려진 듯 하다. 다른 AI 작업물 뽑듯이 프리셋으로 설정하고 몇차례 더 다듬으면 원하는 결과물에 가깝긴 할것이다.

이외에도 그림 생성 AI 종류는 많은데, 일단 생각하던 카툰풍 그림체를 나노 바나나가 바로 잘 뽑아서 그걸로 쓰면 될 것 같다.

  1. 3D 모델 생성

    레퍼런스 이미지를 뽑았다면 모델을 생성해볼 차례다. 3D 생성 AI도 여러가지가 있는데 일단 크게 3개 정도가 접근성이 좋은 것 같다.

    • 미국의 3D AI 서비스로 안정적이고 준수하게 뽑아주는 것 같다. 전반적인 모델링 형태나 텍스처 색감도 3d게임하면 생각할 익숙할 약간은 클레이스러운 형태로 많이 뽑아준다.
    • 다만 무료 플랜으로는 구형 모델인 Meshy5만 지원하는데, 손가락이 갯수가 다른등 아쉬운 부분들이 있다. 그래도 돈을 낼 의향이 있다면 Meshy6로 준수한 퀄리티를 뽑아낼 수 있을 듯 하다. 기본 폴리곤이 30만 내외로 나왔는데, 아마 쓸려면 리토폴로지 하긴 해야할 것이다. 기본생성 폴리곤 수 조절은 유료 플랜부터 가능하다.
  • 훈위안(훈원, HY3D)
    • 텐센트에서 제공하는 3D생성 툴이다. MeshyAI가 게임용 모델 텍스처 색감이 약간 색연필로 칠한 것 같이 옅게 나온다
    • 기본 폴리곤 수는 V3.1모델 기준 150만개부터 5만개까지 선택할 수 있다. 디테일의 차이는 어느정도 있지만 카툰풍에서는 입이나 머리카락같은 세밀한 부분을 제외하면 큰 차이는 없는 것 같다.
    50K faces
    1.5M faces
  • Tripo
    • 미국의 다른 3D AI로, 제일 그림과 똑같이 만들어준다. 성향 자체는 MeshyAI와 유사한 것 같다. 게임보다는 애니메이션에서 봤을 법한 결과물을 만들어주는 것 같다. 생성 속도도 다른 모델에 비해선 빠른 편이였다. 폴리곤 수를 슬라이더와 값을 이용해 더 세밀하게 설정할 수 있다.
    • 다만 무료로 다운로드 가능한 모델인 v2.5는 성능이 Meshy와 훈위안에 중간정도인 것 같다. 모델의 디테일이 망가지기보다도 그림을 복사하듯 카피하던 유료버전과는 다른 이질감을 보여준다.

    무료로 사용하고자 한다면 훈위안의 결과물이 제일 나은것 같고, 유료로 쓴다면 Meshy AI나 Tripo가 더 좋지 않을까 생각한다. 일단 지금은 훈위안에서 얻은 50K 모델로 사용해보도록 하겠다.

  1. 디테일 수정 및 리토폴로지

    AI가 전체적으로는 잘 뽑아주긴 했지만 여전히 만족스럽진 않을 수 있다. 그럴 때는 몇가지 선택지가 있다. 첫번째 방법은 맘에 안드는 부분만 새로 만들어서 3D 툴에서 합치는 것이다. 서로 다른 메쉬를 연결해 합치는 작업이 필요하겠지만 처음부터 새로 만드는 것보단 빠를 것이고, 약간의 그래픽 작업을 요구하겠지만 크게 어려운 사항까진 아니다. 두번째 방법은 직접 그래픽 툴에서 이상한 부분을 바로잡는 것이다. 약간 찌그러진 버텍스 배치등 작은 수정사항이라면 첫번째 방법보다 나을 수 있다. 하지만 장식품이나 손가락등 디테일한 부분의 수정은 첫번째 방법보다는 많은 작업을 요구할 것이다.

어떤 방법을 쓰든 결국 한번은 확인해줘야 하는게 있다면 폴리곤 수가 너무 많을 때 리토폴로지(Retopology)를 해주는 작업이다. 폴리곤/버텍스의 배열을 재구성하는 작업으로, AI모델 특유의 정돈되지 않은 폴리곤 면들을 다듬어 줄 수 있다. 이는 특히 정돈되지 않고 무작위적으로 섞여있는 3D모델에는 필수적으로 들어가야 하는데, 사각형 쿼드 기반으로 고리, 엣지루프를 형성하지 않으면 애니메이션 처리를 하기위해 구부리고 휘는 과정에서 깨지는 모양이 보일 수 있기 때문이다. 또한 보통 AI가 생성한 폴리곤은 불필요하게 많은 버텍스와 페이스를 가지는 경우가 있는데, 이는 게임 성능에도 영향을 미칠 수 있기에 정리하고 줄여주는 과정이 필요하다. 블렌더 내장 리토폴로지 기능으로도 리메쉬(Remesh)가 스컬프팅 모드에 존재하지만, 이는 버텍스/페이스 수를 줄여주는 목적이 더 크고, 엣지루프 형성에는 약한 편이다. 유료 모델들도 있지만 찾아보면 쓸만한 오픈소스 프로젝트들도 있는데, 그중 하나 내가 찾은건 Instant Meshe라는 프로그램이다. 리토폴로지 방법에 대한 연구 결과 시연을 위해 공개해놓은 프로젝트인데, obj나 ply 형식으로 파일을 불러들여 자동으로 폴리곤 수를 줄이고 정리해줄 수 있다.

Orientation field계산 후의 모습
선들은 쿼드 배열의 방향을 나타낸다.
Position field계산 후의 모습
실제 배열될 쿼드들의 대략적인 밀도와 모습을 보여준다.
Extract mesh 후의 모습
형상은 어느정도 유지하며 쿼드 배열로 리토폴로지가 됐다.
리토폴로지 전 후 차이
전에 검게 보이도록 많은 버텍스는 확실히 줄었다.

리토폴로지를 진행한다면 기존의 버텍스/페이스 배치에 맞춰져 있는 텍스처는 사용할 수가 없다. 때문에 텍스처를 생성하는 작업인 베이킹(Baking)을 새로운 리토폴로지에 맞추어 다시 작업해주어야 한다.

1. 블렌더로 원본과 수정본을 모두 불러온다.
정확히 같은 위치에 겹쳐야 한다.
처음 불러오면 원점이라 괜찮을거다.
2. 리토폴로지 된 수정본을 다시 언랩한다.
Edit Mode->모두선택(A)->U->smart UV Project.
Angle: 60도, Margin: 0.02로 세팅했다.
3. 새로 씌울 텍스처를 생성한다.
ShaderEditor->Add->Texture->ImageTexture
New를 눌러 새 텍스처 이미지를 만들었다.
4. 베이킹을 실행한다.
RenderProperties에서 Engine을 Cycles로 변경한다.
베이크 옵션 값들도 사진처럼 조정했다.

베이크 실행에 있어서 원본선택 후에 수정본을 선택하고 베이크를 실행해야 한다. 나는 블렌더 3.5버전을 사용했는데, 예전버전은 출력 방향이 반대지만, 지금은 마지막에 선택한 모델쪽으로 베이크 결과가 출력된다. 그리고 베이킹 실행 전에 아까 추가한 Image Texture노드를 선택한 상태로 진행해야 한다. 출력할 대상을 노드에서 선택하고 진행해야 올바른 이미지 파일로 출력된다.

최적화 전 텍스처와 UV
정돈되지 않고 어지러운 모습이다.
최적화 후 텍스처와 UV
리토폴로지된 모습에 맞게 정돈됐다.

나름 깔끔한 결과물이 만들어졌다. 더 깔끔하게 모델링과 텍스처를 손보면 좋겠지만 아직까진 실력이 부족하다. 텍스처를 따로 저장해도 되는데, 나는 Export할 때 embeded textures 옵셥으로 파일에 포함시켰다. 그 편이 관리하기 편한 것 같다. 실제로 뒤에 보이는 언리얼로 불러오는 작업에서 텍스처와 UV가 자꾸 깨져서 맵핑이 제대로 안되는 현상이 있었는데, 하나의 파일로 두면 그럴 일은 없어서 좋다. 어차피 보통 하나의 텍스처는 하나의 모델를 위해 만들어지는 경우가 많으니 큰 문제는 없는 방법일 것이다.

  1. Mixamo를 이용한 자동 애니메이션

    단순 사물, 프롭을 만들려는게 아니라 움직이는 동작이 필요한 캐릭터라면 당연히 애니메이션도 만들어줘야 한다. 다행히 사람 형태의 캐릭터는 Adobe에서 제공하는 애니메이션 AI, Mixamo를 이용하면 간단한 모션은 쉽게 만들어낼 수 있다. 캐릭터 모델을 업로드하고 적당한 위치들을 잡으면 본 작업과 몇가지 애니메이션 생성까지 자동으로 할 수 있다.

캐릭터를 업로드하면 대략적인 기준점을 잡는다.
생성된 리깅 결과물 모습
T 포즈
앉은 애니메이션
  1. 언리얼에서 불러오기

    모두 끝나면 언리얼에서 불러오면 된다. 에셋들을 임포트할 때 fbx파일들을 가져오는 과정과 동일하다. 다만 임포트 되는 모델의 크기가 많이 차이날 수 있어, 임포트할 때 Transform에서 적절한 Scale값을 입력해줘야 한다. 나는 100배로 가져왔다. 에셋을 사용하지 않으면서도 게임 컨셉에 맞는 모델들이 필요하다면 충분히 쓰기 좋은 방법인 것 같다. 특히 소규모/1인 개발 과정이라면 유료 AI까지 사용하면 제작시간을 줄이면서도 높은 퀄리티의 게임을 만들 수 있을 것이다.

로딩된 에셋 모습
애니메이션
This post is licensed under CC BY 4.0 by the author.