핵심 요약
- 3D Model Anything은 아이폰 LiDAR로 방을 스캔한 측정값과 촬영 위치가 기록된 사진을 근거로, AI 코딩 에이전트가 편집 가능한 Three.js 장면 코드를 작성하게 하는 프로젝트입니다. 아이폰 캡처 앱, 에이전트 스킬
scan-to-threejs, 웹 뷰어, 완성된 사무실 예제를 함께 공개했습니다. - 스캔 메시를 그대로 보여주는 변환기가 아닙니다. 에이전트가 벽과 개구부, 가구 치수를 먼저 재고 모델링한 뒤, 원본 사진과 같은 카메라 위치에서 렌더링한 화면을 나란히 놓고 차이를 고치는 과정을 반복합니다.
- 스캔에는 LiDAR가 있는 iPhone Pro 또는 iPad Pro(iOS 17 이상)가 필요하고, 앱은 App Store에 출시되지 않아 Xcode로 직접 빌드해야 합니다. 현재 작업 흐름은 방과 실내 공간에 맞춰져 있습니다.
- 코드와 스킬은 MIT 라이선스지만, 사무실 예제의 측정 데이터와 이미지는 별도 이용 조건을 따릅니다.
3D Model Anything 소개
실제 방을 웹에서 둘러볼 수 있는 3D 모델로 만드는 방법은 보통 둘로 나뉩니다. 하나는 휴대폰 스캔 앱이 만든 메시(mesh)를 그대로 올리는 것이고, 다른 하나는 3D 도구에서 사람이 치수를 재 가며 직접 모델링하는 것입니다. 스캔 메시는 빠르게 얻을 수 있지만 촬영 당시의 조명이 색에 그대로 남고, 의자 하나를 옮기거나 재질을 바꾸려면 덩어리 전체를 다시 다뤄야 합니다. 직접 모델링은 수정하기 쉬운 결과를 주지만 방 하나에 들어가는 시간이 큽니다. 이번에 소개하는 3D Model Anything은 그 사이에서 측정은 아이폰이, 모델링은 AI 코딩 에이전트가 맡도록 나눈 프로젝트입니다.
3D Model Anything의 출발점은 아이폰 앱이 기록하는 근거 자료입니다. 앱은 Apple RoomPlan이 인식한 벽, 문, 창문, 가구 상자와 LiDAR 메시, 그리고 카메라 위치와 렌즈 정보가 붙은 사진을 한 번의 스캔에서 함께 저장합니다. 에이전트는 이 자료를 읽어 바닥과 벽면, 개구부, 가구 크기를 먼저 확정하고 Three.js 코드로 방을 짓습니다. 그다음 원본 사진을 찍은 카메라 위치에서 모델을 렌더링해 사진 옆에 붙이고, 가장 큰 차이부터 고칩니다. 프로젝트는 이 과정을 *"an iterative reconstruction workflow, not a one-click scan-to-perfect-model converter"*라고 설명합니다.
아래 그림은 공개된 사무실 예제를 웹 뷰어에서 연 화면입니다. 왼쪽은 에이전트가 코드로 다시 지은 모델(Rebuilt)을 위에서 비스듬히 내려다본 Dollhouse 보기이고, 오른쪽은 같은 장면을 Wireframe 소스로 바꾼 것입니다. 오른쪽에서 보듯 책상, 의자, 식물, 선반이 모두 별도 지오메트리로 나뉘어 있어 하나씩 수정할 수 있습니다.
3D Model Anything은 강의와 팟캐스트 Syntax로 알려진 웹 개발자 Wes Bos가 2026년 10월에 공개했습니다. 저장소는 Swift로 작성된 아이폰 앱, TypeScript와 Three.js로 작성된 뷰어와 공용 런타임, Python 보조 스크립트를 담은 에이전트 스킬로 구성되어 있습니다. Wes Bos는 이 저장소를 소개한 YouTube 영상 설명에서 Codex의 GPT-6 Astra(
OpenAI GPT-6 Astra 출시: 사이버보안 Critical 등급 첫 도달과 낮아진 CoT 모니터링 가능성)로 집 전체를 모델링했다고 밝혔습니다. 이 영상은 OpenAI의 후원을 받아 제작되었습니다(설명란의 #ChatGPT_Partner 표기). 스킬 자체는 특정 에이전트에 묶여 있지 않으며, 로컬 스킬을 지원하는 에이전트라면 쓸 수 있도록 작성되어 있습니다. 다만 스킬 디렉토리만 다른 에이전트로 복사해도 비교 캡처에는 이 저장소의 뷰어와 런타임이 계속 필요합니다.
3D Model Anything vs. 이미지 한 장 기반 Three.js 재구성 도구
PyTorchKR에서 소개한 img2threejs와 img2obj도 에이전트가 Three.js 코드를 작성하고 렌더 결과를 참조 이미지와 비교하며 고친다는 점에서 3D Model Anything과 같은 계열입니다. 다른 점은 입력과 대상의 크기입니다:
| 항목 | img2threejs, img2obj | 3D Model Anything |
|---|---|---|
| 입력 | 오브젝트 이미지 한 장 | LiDAR 메시, RoomPlan 구조, 카메라 위치가 기록된 사진, 깊이 프레임 |
| 재구성 대상 | 소품, 기계 장치, 식물 같은 단일 오브젝트 | 방과 실내 공간 전체 |
| 치수의 근거 | 이미지에서 판독(가려진 면과 정확한 치수는 알 수 없음) | 스캔 측정값(벽면, 바닥 높이, 가구 경계 상자) |
| 비교 방식 | 렌더 결과와 참조 이미지를 나란히 비교 | 원본 사진과 같은 카메라 위치와 화각에서 렌더링해 나란히 비교 |
| 결과물 | 오브젝트를 만드는 TypeScript 팩토리 함수 | 뷰어에 등록하는 방 모듈(RoomModule) |
이미지 한 장 기반 도구가 가려진 면과 치수를 추정해야 하는 반면, 3D Model Anything은 그 부분을 스캔 측정값으로 채웁니다. 그 대가로 LiDAR가 있는 기기와 직접 촬영할 수 있는 실제 공간이 필요합니다. Wes Bos도 영상에서 이 차이를 직접 겪었다고 설명합니다. 사진만 올려 사무실을 재구성하게 했을 때는 모델이 물체의 크기와 공간 배치를 추측해야 했습니다. Polycam 앱의 LiDAR 스캔을 Codex에 넣었을 때는 치수는 맞았지만 흐린 텍스처 때문에 장난감 자동차 같은 세부를 실제와 다르게 만들었습니다. 그래서 Wes Bos는 LiDAR 데이터와 고해상도 사진을 함께 기록하는 앱을 따로 만들었습니다.
3D Model Anything은 스캔 결과를 그대로 쓰는 방식과도 다릅니다. 스킬 문서는 RoomPlan이 돌려주는 가구 상자를 완성된 가구가 아닌 경계(bounds)로 다루라고 하고, 스캔 메시의 색은 촬영 조명이 섞여 실제 색보다 어둡다고 적고 있습니다. 스캔 데이터는 모델의 재료가 아니라 측정 근거로 쓰는 셈입니다.
3D Model Anything을 사용하면 좋을 사용자
LiDAR가 있는 아이폰과 Mac을 갖고 있고, 자기 방이나 사무실, 매장 같은 실내 공간을 웹에서 돌아다닐 수 있는 모델로 만들고 싶은 웹 개발자에게 맞습니다. 결과물이 일반 TypeScript 코드라는 점이 스캔 메시와 다른 장점입니다. 가구 배치를 바꾸거나 물리 엔진 모드를 붙이는 후속 작업을 코드 리뷰와 버전 관리 안에서 할 수 있습니다. 코딩 에이전트에게 측정, 모델링, 시각 비교를 오래 맡겨 보는 실험 소재로도 쓸 만합니다.
반면 3D Model Anything은 앱이 App Store에 없어 Xcode 빌드와 서명 설정을 직접 해야 합니다. 저자가 스스로 원클릭 변환기가 아니라고 밝힌 만큼, 에이전트와 여러 번 주고받는 작업 시간도 감안해야 합니다. Wes Bos는 영상에서 모델이 품질과 토큰 절약 사이에서 균형을 잡으려는 것 같다며, 때로는 아직 부족하니 계속하라고 재촉해야 했다고 말했습니다. 측량 수준의 정밀도가 필요한 건축과 인테리어 실무에는 3D Model Anything이 아직 적절한 선택지가 아닙니다. 앱 도움말도 정밀한 작업에 쓰기 전에 측정값을 직접 확인하라고 안내합니다.
3D Model Anything의 아이폰 캡처 앱
캡처 앱(저장소 경로는 apps/house-capture)은 방 하나를 스캔할 때 하나의 ARKit 세션에서 네 가지 자료를 함께 기록합니다:
| 자료 | 내용 |
|---|---|
| RoomPlan 구조 | 라벨이 붙은 벽, 문, 창문, 개구부, 가구 경계 상자 |
| LiDAR 메시 | 스캔하는 동안 사진 커버리지에 따라 빨강(사진 필요)과 초록(확보)으로 칠해지는 삼각형 메시, mesh/room-N.ply로 저장 |
| 위치가 기록된 사진 | 커버리지를 가장 많이 늘리는 지점에서 자동 촬영한 선명한 프레임과 수동 촬영 사진, 사진마다 정확한 카메라 위치와 내부 파라미터(intrinsics) |
| 깊이 프레임 | 256×192 Float16 깊이와 신뢰도, 640×480 컬러 JPEG, 초당 최대 5장 |
앱이 보여주는 Photo detail 수치는 방을 얼마나 스캔했는지가 아니라, 관찰된 메시 면적 중 쓸 만한 사진이 확보된 비율입니다. 움직임이 너무 빠르거나 시각적 특징이 부족해 위치 추적이 불안정해지면 사진과 깊이 기록을 멈추고, 1.5초 동안 정상 추적이 이어진 뒤에 다시 기록합니다. 방을 하나 끝낼 때마다 house.json과 번들에 바로 기록하므로 앱이 중간에 종료돼도 잃는 것은 진행 중이던 방 하나뿐입니다. 결과는 시스템 공유 시트로 ZIP 파일로 AirDrop하거나 파일 앱에 저장해 작업할 컴퓨터로 옮깁니다. 앱은 네트워크 요청을 보내지 않으며, LiDAR가 없는 기기에서도 가져온 스캔을 열어 보고 공유할 수 있습니다.
여러 방을 이어 집 전체를 만드는 기능은 부분적입니다. 앱에는 문틀을 기준으로 두 방을 수동으로 맞추는 Connect to another room 기능이 있지만, 저자는 이것이 자동으로 검증된 정합(registration)이 아니라고 적었습니다. 스킬의 집 단위 가져오기 스크립트도 정합이 끝난 세션만 배치하고, 메시 병합이나 자동 정합은 하지 않습니다. 현재 뷰어는 방을 하나씩 보여줍니다.
3D Model Anything의 scan-to-threejs 스킬 작업 흐름
에이전트 스킬은 저장소의 .agents/skills/scan-to-threejs/SKILL.md에 있습니다. 스킬은 캡처 자료 중 형상을 측정 근거로, 사진을 시각 근거로 나눠 쓰라고 정의하고, 작업을 측정, 모델링, 비교의 세 단계로 진행합니다.
입력은 캡처 앱의 내보내기 외에 RoomPlan JSON이나 Polycam 등에서 내보낸 GLB/glTF 스캔도 받습니다. 다만 RoomPlan JSON에는 벽, 개구부, 가구 경계만 있고 사진과 깊이 정보는 없으므로, 사진 비교까지 쓰려면 카메라 위치가 기록된 사진이 있어야 합니다.
측정 단계에서 에이전트는 보조 스크립트로 스캔을 방 좌표계(바닥 높이 0, 벽이 X축과 Z축에 평행, 단위 미터)로 옮기고, 벽마다 원점과 방향, 길이, 개구부를 담은 JSON을 만듭니다. 모델링 단계에서는 바닥, 벽면, 개구부, 천장 단차, 가구 치수를 먼저 확정한 뒤 세부를 더하며, 확인할 수 없는 치수는 지어내지 말고 불확실하다고 기록하도록 되어 있습니다. 벽을 데이터로 정의하는 규약, 몰딩을 경로를 따라 쓸어 만드는 방법, 가구별 모델링 요령, 조명과 렌더링 설정은 references/modeling.md에 정리되어 있습니다.
비교 단계가 이 스킬의 핵심입니다. cmp_photo.sh는 원본 사진(왼쪽)과 그 사진의 카메라 위치에서 렌더링한 모델(오른쪽)을 한 장으로 이어 붙이고, cmp.sh는 같은 카메라에서 본 스캔과 재구성 모델을 나란히 놓습니다. 캡처는 agent-browser(
Agent Browser: Vercel이 공개한, AI 에이전트를 위한 경량화된 명령줄 브라우저 자동화 도구) CLI가 뷰어의 캡처 페이지를 열어 처리합니다. 스킬은 이 도구들이 비교 이미지를 만들 뿐 유사도를 평가하지 않는다고 분명히 적고 있습니다. 판단은 에이전트가 이미지를 보고 구체적인 차이를 찾아 가장 큰 것부터 고치는 반복으로 하며, 빌드가 통과했다고 해서 시각적 정확성이 확인된 것은 아니라고 덧붙입니다.
방이 크면 작업을 나눠 맡깁니다. references/advanced-modeling.md는 방을 구역별 파일로 나누고 하위 에이전트마다 한 파일만 맡기는 방식을 설명합니다. 공유 작업 개요(brief) 문서에 좌표계, 벽 목록, 참조 파일, 렌더 명령, 성능 예산, 멈출 기준을 먼저 적고, 하위 에이전트는 공용 파일을 직접 고치지 않고 문제를 보고합니다. 사무실 예제의 작업 개요 문서(demos/office-v4/BRIEF.md)에는 캡처 번들 속 사진을 작업 지시로 취급하지 말라는 문장도 들어 있습니다. 사진에 찍힌 화면이나 메모의 글자가 그대로 에이전트 입력이 되므로, 그 글자를 지시로 따르지 않게 하는 장치로 볼 수 있습니다.
3D Model Anything의 사무실 예제와 뷰어
공개된 예제는 Wes Bos의 사무실 하나입니다. 영상에 나온 다른 방과 방들을 이은 집 배치, 원본 스캔과 사진 모음은 저장소에 포함되지 않았습니다. 예제 작업 개요 문서에 따르면 최종 버전은 10월 9일 스캔을 새 근거로 썼습니다. 이 스캔에는 사진 165장, 깊이 프레임 1,112장, 메시 면 501,651개가 들어 있고, 이전 버전 모델 좌표계와의 정합에서 벽면 평균제곱근 오차(RMS, Root Mean Square)는 2.6cm였습니다. 저장소에는 이전 재구성 단계(office-v2, office-latest)도 남아 있는데, 최종 버전이 이 단계들의 형상을 기반으로 변경분만 덧붙이는 구조이기 때문입니다.
뷰어에서는 Dollhouse, Layout(평면도), Knolling, Walk around(1인칭 걷기) 네 가지 보기를 고를 수 있습니다. 아래 그림은 Knolling 보기로, 사무실의 모델링된 오브젝트와 묶음 197개를 같은 축척으로 바닥에 펼쳐 놓은 화면입니다:
Enter playground를 누르면 Rapier 물리 엔진을 쓰는 모드로 들어가 사무실을 걸어 다니며 물건을 집거나 던질 수 있습니다. 공개 예제에는 원본 스캔과 사진 모음이 포함되지 않아 Scan과 Overlay 소스는 꺼져 있습니다. 직접 스캔한 방을 등록하면 스캔 메시를 45% 불투명도로 겹쳐 정렬을 확인하는 Overlay까지 쓸 수 있습니다.
3D Model Anything 설치와 사용
뷰어는 Node.js 22.12 이상에서 실행합니다. 저장소를 받은 뒤 다음 명령을 실행하면 http://localhost:5188에서 사무실 예제가 열립니다:
npm ci
npm run dev
자기 공간을 스캔하려면 apps/house-capture의 앱을 빌드합니다. Xcode 프로젝트 파일은 저장소에 없고 project.yml에서 XcodeGen으로 만들어야 하므로, 먼저 xcodegen generate를 실행합니다. 그다음 Xcode에서 Signing & Capabilities의 팀을 자신의 것으로 고르고 LiDAR가 있는 기기에서 실행하거나, 다음처럼 명령줄로 빌드합니다:
cd apps/house-capture
xcodegen generate
xcodebuild -project HouseCapture.xcodeproj -scheme HouseCapture -configuration Release \
-destination 'generic/platform=iOS' -derivedDataPath build -allowProvisioningUpdates build
Xcode 타깃과 내보내기 형식 식별자는 앱 이름과 달리 HouseCapture, house-capture/5입니다. 앱 이름이 바뀌기 전의 식별자를 호환성 때문에 그대로 두었다고 밝히고 있으므로, 위 명령에서도 그 이름을 그대로 씁니다. 실제 스캔에는 Debug 빌드가 Swift 최적화를 끄기 때문에 Release 빌드를 쓰라고 권장합니다.
스캔한 방을 ZIP으로 내보내 data/captures-in/<room>/에 풀고, 로컬 스킬을 지원하는 에이전트에서 저장소를 연 뒤 스킬을 지정해 요청합니다. 저자가 제시한 요청 예시는 다음과 같습니다:
Use scan-to-threejs to rebuild the room in data/captures-in/my-room. Inspect the measurements and photos, create an editable scene, and compare rendered views with the original photographs.
보조 스크립트는 Python 3를 쓰고, 비교 캡처에는 agent-browser CLI, 사진 비교에는 Pillow, 선택 기능인 깊이 기반 메시 재구성에는 NumPy와 Open3D, Pillow가 필요합니다. 새 방은 demos/<id>/에 모듈로 만들어 demos/index.ts에 등록합니다. 개인 스캔과 비교 결과물은 Git에서 제외되는 디렉토리에 두도록 되어 있으니, 저장소를 공개할 때는 자신의 사진이 섞이지 않았는지 확인해야 합니다.
3D Model Anything의 라이선스
3D Model Anything의 소스 코드와 에이전트 스킬은 MIT 라이선스로 공개되어 있어 개인 및 상업적 목적으로 자유롭게 사용할 수 있습니다.
단, data/ 디렉토리의 사무실 측정 데이터와 이미지, 홍보용 썸네일은 MIT 라이선스에서 제외되고 별도 이용 조건을 따릅니다. 예제를 실행하고 공부하는 용도로는 쓸 수 있지만, 독립된 에셋으로 판매하거나 재배포할 수는 없습니다. 자신의 프로젝트에는 직접 스캔한 데이터를 쓰시기 바랍니다.
3D Model Anything 사무실 예제 뷰어
3D Model Anything 제작 과정 영상 (Wes Bos YouTube)
3D Model Anything 프로젝트 GitHub 저장소
더 읽어보기
-
img2obj: 참조 이미지를 애니메이션 가능한 Three.js 절차적 코드로 재구성하는 Codex 플러그인
-
Amagine3D: 설명과 치수를 주면 수정 가능한 CAD 소스로 하드웨어 케이스를 설계하는 에이전트 프로젝트
이 글은 GPT 모델로 정리한 초안을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 댓글로 알려주시기를 부탁드립니다. ![]()
파이토치 한국 사용자 모임
은 이런 글들을 한국어로 정리해 나누고 있습니다. 회원으로 가입하시면 주요 글들을 이메일
로 보내드리고, 텔레그램(Telegram)과 Slack/Discord/Teams/Dooray/GoogleChat 등으로도 새 글 알림을 받으실 수 있습니다. ![]()
아래
쪽에 좋아요
를 눌러주시면 다음 글을 정리하는 데 힘이 됩니다~ ![]()


