
Rebuilding Summer #1: Mac에서 로컬 AI만을 사용하여 100개 이상의 게임용 3D 에셋을 무료로 생성한 방법
요약
Mac 환경에서 로컬 AI만을 활용하여 100개 이상의 게임용 3D 에셋을 무료로 생성한 개발 사례를 공유합니다. ComfyUI와 Hunyuan3D를 결합한 2단계 파이프라인을 통해 Apple Silicon에서 성공적으로 에셋을 구축하는 방법을 다룹니다.
핵심 포인트
- Mac(Apple Silicon) 환경에서 로컬 AI를 통한 3D 에셋 생성 성공
- ComfyUI와 SDXL을 이용한 참조 이미지 생성 후 3D 변환 파이프라인 구축
- Hunyuan3D 모델의 MPS(Metal Performance Shaders) 지원 확인
- 3D 출력 품질은 입력 이미지의 구도와 배경 설정에 크게 의존함
안녕하세요! 저는 StudioMidori입니다. 현재 Unreal Engine 5를 사용하여 90년대 여름 방학 게임의 _분위기(vibe)_를 재현하는 것을 목표로 협동 게임(가제 "Engawa Summer")을 개발하고 있습니다.
이 "Rebuilding Summer" 시리즈를 통해, 저는 성공 사례부터 실패 사례까지 상세하면서도 때로는 아주 솔직하게 개발 과정의 기술적인 측면들을 기록할 계획입니다.
첫 번째 에피소드의 주제는 1인 개발자들에게 영원한 숙제인 **"3D 에셋을 어떻게 확보하는가?"**입니다. 결론부터 말씀드리겠습니다. 저는 추가 비용 없이 오직 Mac과 로컬 AI(local AI)만을 사용하여 100개 이상의 에셋을 생성했습니다. 제가 구축한 환경과 겪었던 시행착오들을 공유해 드리겠습니다.

설정: 이미지 생성에서 "이미지 $\rightarrow$ 3D" 변환까지의 2단계 파이프라인 (Pipeline)
저는 완전히 로컬에서 실행되는 무료 도구들을 사용했습니다.
| 단계 | 사용된 도구 | 비고 |
|---|---|---|
| ① 참조 이미지 생성 (Reference Image Generation) | ComfyUI + SDXL (RealVisXL) | "흰색 배경 위에 떠 있는 1990년대 스타일의 둥근 우체통"과 같은 "제품 사진"을 생성했습니다. |
| ... |
Hunyuan3D가 CUDA (NVIDIA)에 크게 맞춰져 있는 것처럼 느껴지지만, 실제로 Apple Silicon의 MPS에서 실행됩니다! 솔직히 이 부분이 가장 걱정되었던 부분입니다. MPS에서 구현되지 않은 연산자(operators) 때문에 다른 3D 모델들이 처참하게 충돌했던 경험이 있었거든요... 하지만 이번에는 성공적으로 완료되었습니다. 잘 해냈네요!
측정된 결과는 다음과 같습니다:
- 생성 시간: 아이템당 약 6~8분 (
octree_resolution256–320 기준). - GPU 사용률: 생성 중 장치 사용률(Device Utilization) 100% (
ioreg로 확인. 놀지 않고 열심히 일했다는 증거입니다). - 출력 메쉬 (Output Mesh): 자판기 한 대 기준, 약 709,000개의 정점(vertices) / 35만 개의 삼각형(triangles) (이것이 왜 문제가 되는지는 나중에 설명하겠습니다).
품질의 80%는 "입력 이미지 생성 (Input Image Creation)"에 의해 결정됩니다
직접 시도해 본 결과, 3D 출력물의 품질은 거의 전적으로 입력 이미지에 의해 결정된다는 것을 절실히 느꼈습니다. 수많은 시행착오 끝에 저는 다음과 같은 레시피(recipe)로 결론을 내렸습니다.
- 상자 형태의 물체는 정면(front view)에서 촬영하고, 원기둥이나 구 형태는 45도 각도에서 촬영하세요 (형태를 올바르게 추정하는 데 도움이 됩니다).
- "levitating in an empty white void, nothing underneath" (빈 흰색 공간에 떠 있음, 아래에 아무것도 없음) 라는 프롬프트를 포함하세요. → 이 문구를 포함하지 않으면, 물체 아래의 바닥과 그림자가 지면과 함께 실체화되어, 자판기에 날개가 달린 듯한 형상이 나타나는 등의 문제가 발생합니다.
podium, plinth, table, shadow를 엄격하게 네거티브 프롬프트(negative prompt)로 설정하세요 (그대로 두면 제품 사진의 경우 아이템이 자동으로 전시용 받침대 위에 놓이게 됩니다).- 어떠한 텍스트도 생성하지 마세요 (
no text프롬프트 사용 +chinese characters, garbled text를 네거티브 프롬프트로 설정).
"텍스트" 부분이 가장 해결하기 어려운 난제였습니다. 표지판에 일본어 문자를 넣으려고 시도했을 때, 이미지 AI는 자신 있게 "한자"처럼 보이는 무언가를 만들어냈습니다. 그래서 저는 일찌감치 이를 포기하고, 모든 표지판을 단순한 흰색 표면으로 생성한 뒤, 나중에 엔진에서 직접 올바른 폰트를 적용하기로 결정했습니다. ...나중에 깨달은 사실이지만, 이 결정은 "저작권 관점에서 절대적으로 옳은 선택"이었습니다만, 이는 다음에 다룰 다른 이야기입니다.
▼ 입력 이미지 (왼쪽) vs 생성된 3D의 3면 실루엣 (오른쪽)


저의 처참한 실패 사례들 (이 부분이 가장 유용합니다)
기술적인 글에서 완벽한 성공 사례만 보여주는 것은 정직하지 않을 것이기에, 저는 몇 가지 **재현 가능한 실패 사례 (reproducible failures)**를 공유하고자 합니다.
실패 ①: 얇거나 작은 물체가 "팬케이크"처럼 변함
헤이세이(Heisei) 시대를 상징하는 폴더블 폰을 예로 들어보겠습니다. 결과물은 깊이 정보(depth information)가 사라진 얇고 납작한 크래커 같았습니다. 프롬프트(prompt)를 아무리 수정해도 두께를 만들어낼 수 없었습니다.

원인: 단일 뷰 이미지-투-3D (image-to-3D) 모델은 보이지 않는 측면을 추측해야 하기 때문에, 얇거나 작은 물체를 다룰 때 무너지는 경향이 있습니다.
해결책: 저는 휴대폰, 삐삐, 카세트 테이프처럼 본질적으로 얇은 물체들에 대해서는 AI에 전혀 의존하지 않기로 했습니다. 대신, 엔진 내에서 단순한 박스 프리미티브 (box primitives)를 사용하여 나중에 직접 만드는 것이 더 낫다는 것을 깨달았습니다. 어떤 도구를 어디에 사용할지 아는 것이 중요합니다.
실패 ②: 조각상이 허락 없이 "증식"함
지조(Jizo) 조각상을 딱 하나만 요청했는데, 두 개가 나란히 나타났고, 묘하게 어떤 두 몸을 가진 형태의 무언가로 합쳐져 버렸습니다.
해결책: 프롬프트에 one single ... , only one figure를 명시적으로 추가하고, 부정 프롬프트 (negative prompts)에 multiple, two를 추가했습니다. 이는 수호견(guardian dogs)이나 이나리 여우(Inari foxes)의 경우에도 효과가 있었습니다. 그런 간단한 문구만으로도 다시 단일 개체로 되돌릴 수 있었습니다. AI에게 맡겨두면 추가적인 것들을 더함으로써 "너무" 친절하게 굴려는 경향이 있으므로, "딱 하나면 충분하다"라고 명확하게 말하는 것이 핵심입니다.
실패 ③: 코드/안테나가 "허공으로 흩어짐"
게임 컨트롤러를 생성했을 때, 케이블이 끊어져서 공중에 스파게티처럼 떠다녔습니다.
해결책: 프롬프트에서 얇은 부착물(코드, 안테나, 또는 줄 등)을 제외하세요. 본체만 생성한 다음, 전선은 나중에 추가하는 것이 좋습니다.
성공률은 약 85%입니다. 하지만 큰 함정이 기다리고 있었습니다.
집, 가전제품, 조각상, 자동차, 건물과 같은 고체 객체(solid objects)로 초점을 제한했을 때, 성공률(yield rate)은 일반적으로 약 85% 정도였습니다. 세발자전거 나 트랙터와 같이 "바퀴가 달린" 아이템의 경우, 바퀴가 강력한 구조적 힌트(structural hints) 역할을 하여 놀라울 정도로 깔끔한 형태가 생성되었습니다.

유기물(동물)조차도 예상보다 더 형태를 잘 잡아냈습니다.

하지만 생성된 66개의 아이템을 검토한 후, 한 가지 사실이 명확해졌습니다.
생성된 GLB 파일에는 UV, 노멀(normals), 그리고 재질(materials)이 없습니다. 모두 그저 평평한 회색 덩어리일 뿐입니다.
이는 "단일 텍스처를 적용한다"는 상식적인 작업을 할 수 없음을 의미합니다. 이것이 다음에 넘어야 할 산입니다.
이 시점에서 저는 엔진 측에서 색상을 일괄적으로 적용하면 될 것이라고 생각했습니다. 결론부터 말씀드리자면, 이 가정은 나중에 뒤집히게 됩니다. 정확히 무엇이 잘못되었는지, 그리고 어떻게 되었는지는 다음 포스트에서 다루겠습니다.
요약 및 다음 예고
- Mac + 로컬 AI만을 사용하여 게임용 3D 에셋을 무료로 대량 생산할 수 있습니다 (단순 객체의 경우 예상 성공률 85%).
- 품질은 입력 이미지에 80% 의존합니다. 프롬프트를 작성할 때, 텍스트 생성을 피하기 위해 객체를 빈 공간에 띄우고 "하나씩" 요청할 것입니다.
- 출력물은 **UV나 재질이 없는 회색 메쉬(mesh)**입니다. 다음 과제는 이것에 어떻게 색을 입힐지 알아내는 것입니다.
다음 시간에는 이 100개의 대량 생산된 에셋들을 Unreal Engine으로 가져와 실제로 작동하게 만드는 과정에서 발생하는 모든 문제에 대한 Python 스크립트를 포함하여 모든 것을 공유할 계획입니다. 해당 포스트의 제목은 "회색 덩어리들에 '생명(life)'이 아닌 '색(color)'을 불어넣는 에피소드"가 될 것입니다.
...그렇게 말하고 싶지만, 솔직하게 미리 주의를 드려야 할 것 같습니다. 다음 포스트에서 저는 저의 채색 전략을 완전히 재구축할 것입니다.
저는 X (@StudioMidori)를 통해 매일 진행 상황을 업데이트하고 있습니다. 괜찮으시다면, 여름이 한 픽셀씩 다시 구축되는 과정을 함께 지켜봐 주시고 팔로우해 주신다면 정말 감사하겠습니다.
――StudioMidori
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기