AI를 사용한 3D 모델의 인페인팅 도구들 사용 후기

 

작년부터 스테이블 디퓨전을 사용한 이미지 생성에 관심이 있어 조금씩 만지다가, 최근 스테이블 디퓨전으로 3D 모델을 인페인팅하여 UV 맵을 생성하면 좋겠다는 생각이 들어 간만에 머리를 좀 써 보았다.

인페인팅 도구 사용기

1. 블렌더 애드온 ComfyUI-BlenderAI-node

이 애드온은 블렌더에서 ComfyUI 서버와 연결하여 별도의 외부 추출 없이 ComfyUI 노드를 사용할 수 있게 도와준다. 블렌더 뷰포트에서 뎁스 이미지를 추출해 ComfyUI에 넘기고, 이를 컨트롤넷으로 사용하여 이미지를 샘플링한 후 UV 맵에 바로 투영(Projection)하면 간단하게 워크플로우를 구축할 수 있을 것 같아 바로 진행해 보았다.

이 방법은 블렌더에서 직접 ComfyUI 워크플로우를 구현하고 실행할 수 있기 때문에 하나의 앱에서 모든 처리가 가능하다는 장점이 있다. 또한, 원하는 체크포인트와 로라를 적용할 수 있어 본인이 원하는 스타일의 모델을 설치하고 의도에 적합한 매핑을 할 수 있다.

하지만 ComfyUI 확장 노드들 중 호환되지 않는 노드도 있어 실험적인 작업이 필요하고, 이미지를 투영해 UV 맵을 만드는 것은 반대편은 투영이 안 된 상태이기 때문에 2D 게임 개발 같은 한정적인 용도로만 사용할 수 있다.

2. 블렌더 애드온 Dream Texture

이 애드온은 블렌더 최신 버전을 지원하지 않기 때문에 LTS 버전인 3.6 버전을 별도로 설치하여 테스트하였다. SD 2.1 모델을 사용하며, 처음 공개된 시점과 비교할 때 현재는 인기가 별로 없는 애드온으로 보인다.

이 애드온은 위에서 언급한 ComfyUI-BlenderAI-node 기반의 워크플로우와 비슷하게 동작하지만, 일반인들도 쉽게 사용할 수 있도록 직관적이고 간단한 구성으로 이루어져 있다. 따라서, 동일한 단점을 공유하며, 내 입장에서는 ComfyUI-BlenderAI-node의 하위호환으로 보아 관심을 거두었다.

3. STABLE PROJECTORZ

WebUI와 유니티를 사용해 만든 앱이다. WebUI의 파라미터 UI를 비슷하게 가져왔기 때문에 WebUI를 사용해 본 경험이 있다면 쉽게 적응할 수 있지만, 인페인팅 부분은 그리 직관적이지 않아 조작감이 조금 아쉽다.

기본적으로 모델의 원하는 뷰포트를 설정하고 뎁스 컨트롤넷 기반으로 이미지를 샘플링하여 투영하는 방식으로 적용된다(뎁스 외에 여러 컨트롤넷을 사용할 수 있다). 투영이 적용되지 않는 부분은 그 부분만 마스크를 적용해 인페인팅을 적용하여 채우는 방식이다. 따라서 여러 번 인페인팅을 적용하며, 각 인페인팅 텍스처가 만나는 경계선은 적당히 브러시로 혼합하여 사용하기 때문에 샘플링 이미지가 크게 이질적이지 않다면 위화감이 크게 느껴지지 않는다.

Stablle Projectorzl

단점으로는 투영되지 않거나 이질감이 느껴지는 부분을 직접 마스킹해 여러 번 인페인팅을 적용해야 하기 때문에 손이 많이 가며, 인페인팅 도구의 조작감이 이상하고, 원하는 카메라의 위치나 LookAt, 등각투영 등의 옵션을 제공하지 않거나, 세밀하게 조정할 수 없다. 또한, 이 프로젝트는 오픈소스가 아니기 때문에 커스텀해서 사용할 수 없다.

스테이블 디퓨전 특성상 빛과 그림자 요소를 억제할 수 없기 때문에 알베도 텍스처로 사용하기는 애매하고, 레딧에서도 이를 지적하는 편이지만, 개발자는 이를 개선할 의지가 없는 것으로 보인다.

4. 언리얼 플러그인 ComfyTexture

언리얼 프로젝트에서 카메라 뷰포트에 렌더되는 선택된 오브젝트를 사전 정의된 ComfyUI 워크플로우를 실행시켜 샘플링된 이미지를 투영하여 텍스처를 생성하는 플러그인이다. 엔진에서 렌더되는 뷰포트의 뎁스, 노말, 엣지 정보를 이미지로 추출해 ComfyUI에 넘기고, 컨트롤넷으로 사용한다. 생성된 텍스처는 머티리얼 에셋으로 변환해 저장하고, 인페인팅 기능도 제공한다.

개인 개발자이나 별도의 디스코드를 운영하고 있어 시간이 맞으면 1:1로 바로 도움을 받을 수 있다. 환경 설정에 문제가 생겨 문의해보니 1시간 이내로 친절한 도움을 받을 수 있었다.

ComfyTexture

언리얼 엔진으로 편집한 월드와 카메라 액터를 활용해 레벨에 적합한 인페인팅을 엔진 에디터에서 바로 생성하고 편집할 수 있는 장점이 있다. 하지만, 스테이블 디퓨전의 빛과 그림자 요소를 억제할 수 있는 별도의 방법을 제공하지 않기 때문에 3D용 알베도 텍스처로 사용하기에는 애매한 점이 있다.

5. Paint3D

Paint3D: Paint Anything 3D with Lighting-Less Texture Diffusion Models 논문 링크

2023년 12월에 나온 논문을 바탕으로 논문 저자가 만든 오픈소스 실증 프로젝트이다.

  1. 정면 및 후면의 뎁스 이미지로 샘플링하고 투영하여 텍스쳐 맵을 생성한다.
  2. 좌우측, 위아래 방향의 뎁스 이미지와 아직 투영되지 않은 부위를 마스크로 처리해 인페인팅하고 투영하여 텍스쳐 맵을 계속 채운다.
  3. 완성된 텍스쳐 맵에서 투영되지 않은 부분을 채우기 위해 특별히 제작된 uv pos 컨트롤넷을 사용해 인페인팅한다.
  4. 최종 완성된 텍스쳐 맵을 Tile 컨트롤넷을 사용해 품질을 높인다.

기존의 Era3D, TripoSR, Zero123와 같이 텍스트 또는 이미지 기반으로 3D 모델을 생성하는 알고리즘은 전용 모델을 사용해야 하기에 제약이 많다고 생각되었다. 사용하고자 하는 체크포인트와 로라를 사용하면서 3D 모델 매시를 인페인팅하는 것은 현재 Paint3D 프로젝트가 유일하다고 생각된다.

이 논문에서 Lighting-Less Texture(빛과 그림자를 억제)를 생성하기 위해 제안하는 방법은 사전 학습된 uv pos 컨트롤넷 모델을 사용해 후보정하는 것인데, 생각과 달리 품질이 좋지 못하며 후보정 과정에서 인페인팅 샘플링을 하기 때문에 의도에 맞는 텍스처를 생성하기는 어려운 편이다.

또한, 현재 공개된 uv pos 컨트롤넷 모델은 SD 1.5만 지원되기에 SDXL 모델은 사용할 수 없다.

ComfyUI-Paint3D-Nodes

위 프로젝트는 WebUI 또는 ComfyUI로 사용할 수 있는 확장 플러그인이 없다. 위 논문을 바탕으로 약간의 커스텀을 하여 전용 노드와 워크플로우를 만들어 보았다.