방 하나를 열 가지 3D 로
아이폰 라이다 스캔 한 번으로 만들 수 있는 3D 를 전부 만들어 나란히 비교했다 (2026-10-14)
- 영상 프레임 524장 (1920×1440) + 장마다 아이폰이 기록한 카메라 위치·방향 (실제 m 단위)
- 고화질 사진 44장 (2016×1512) + 카메라 위치
- 라이다 점 12,132,505개 (색 포함)
- 앱이 만든 메시 58,319 삼각형
처음부터 끝까지
flowchart LR A["아이폰 + Modelar 앱
방을 걸으며 약 11분 스캔"] --> B["압축본 1개 544 MB
윈도우 D: → arcAI 서버"] B --> C["형식 해독
Cloud.log · Mesh.scn · 카메라 json"] C --> M1["① 앱 메시
그대로 꺼냄"] C --> M2["② 라이다 점
채움 점 제거"] C --> P["카메라 위치 568장
아이폰 표기 → RS·COLMAP 표기"] P --> M3["③ RealityScan
위치 고정 → 메시 → 라이다 색"] P --> M4["④ 가우시안
gsplat 3만 단계"] M2 --> M4 M2 --> M5["⑤ 가우시안 + 라이다 깊이
+ 카메라 위치 보정"] P --> M5 M2 --> M6["⑥ 라이다 메시
Open3D Poisson"] P --> M7["⑦ WebODM(ODM)
아이폰 위치 → 가짜 GPS"] P --> M8["⑧ 2D 가우시안
면에 붙는 가우시안"] M2 --> M8 C --> M9["⑨ VGGT (AI)
깊이는 AI · 위치는 아이폰 · 크기는 라이다"] P --> M9 M2 --> M9 M9 --> M10["⑩ 가우시안 + VGGT 시작점
+ 깊이 학습 + 위치 보정"] M1 & M2 & M3 & M4 & M5 & M6 & M7 & M8 & M9 & M10 --> W["웹용 압축
GLB · PLY · splat"] W --> X["Cloudflare Pages
이 페이지"] classDef app fill:#fef3c7,stroke:#f59e0b,stroke-width:3px,color:#78350f classDef lidar fill:#d1fae5,stroke:#10b981,stroke-width:3px,color:#064e3b classDef rs fill:#dbeafe,stroke:#3b82f6,stroke-width:3px,color:#1e3a8a classDef gs fill:#fce7f3,stroke:#ec4899,stroke-width:3px,color:#831843 classDef gsd fill:#ede9fe,stroke:#8b5cf6,stroke-width:3px,color:#4c1d95 classDef lmesh fill:#ccfbf1,stroke:#14b8a6,stroke-width:3px,color:#134e4a classDef odm fill:#fee2e2,stroke:#ef4444,stroke-width:3px,color:#7f1d1d classDef gs2d fill:#e0f2fe,stroke:#0ea5e9,stroke-width:3px,color:#0c4a6e classDef vggt fill:#ecfccb,stroke:#84cc16,stroke-width:3px,color:#365314 classDef gsf fill:#fae8ff,stroke:#d946ef,stroke-width:3px,color:#701a75 class M1 app class M2 lidar class M3 rs class M4 gs class M5 gsd class M6 lmesh class M7 odm class M8 gs2d class M9 vggt class M10 gsf
3D 로 비교하기
탭을 누르면 그 방법의 3D 를 불러온다. 마우스 끌기로 돌리기, 휠로 확대, 오른쪽 끌기로 이동. 휴대폰은 두 손가락. 가우시안(④⑤⑧)은 실제로 찍은 자리에서 볼 때 가장 사진 같아서 '촬영 시점' 에서 시작한다.
방법별 자세히
① 앱 메시
어떻게 만들었나: Modelar 앱이 촬영하면서 바로 만든 메시를 그대로 꺼냈다. 앱 파일 Mesh.scn 은 Apple SceneKit 형식이라 다른 프로그램이 못 읽어서, 구조를 직접 풀어 94조각을 하나로 합쳤다 (read_modelar_mesh.py).
- 추가 처리 0분. 앱 화면에서 보던 것 그대로
- 파일이 가장 작다 (1.2 MB)
- 방 크기·벽 위치 같은 큰 형태는 맞다
- 삼각형 5.8만 개라 매우 거칠다. 5 cm 격자로 만든 메시
- 색이 꼭짓점에만 있어 물건 모양이 뭉개진다
- 앱 밖으로 꺼내는 공식 방법이 없어 직접 해독했다
이 3D 에서 볼 것
- 위에서 보기: 방 전체 윤곽과 가구 배치는 알아볼 수 있는가
- 책상·의자 같은 물건이 덩어리로 보이는 정도
- 다른 방법들의 기준선(앱만 쓰면 얻는 것)으로 볼 것
숫자: 33,363 vertices / 58,319 triangles
② 라이다 점
어떻게 만들었나: 앱이 저장한 라이다 점 파일 Cloud.log 을 해독했다. 공식 문서가 없어 바이트를 직접 보고 블록 구조를 찾았고, 블록 점 수의 합이 앱 기록(21,029,180)과 정확히 같은지로 검증했다. 그중 8,896,675개(42.3%)는 빈 자리를 채운 (0,0,0) 이라 뺐다. 웹에는 1,300,000개만 무작위로 올렸다.
- 센서가 직접 잰 거리라 크기가 처음부터 실제 m
- 이 페이지의 모든 결과가 이 점과 같은 좌표에 있다 (RS 메시와 중앙 1.5 cm 차이)
- 치수 재기·도면에 가장 믿을 만한 원천
- 점이라 가까이 가면 사이가 비어 보인다
- 라이다 거리 한계(앱 설정 5 m)와 해상도 때문에 작은 물건 경계가 흐리다
- 유리·거울·검은 면에서 점이 빠지거나 튄다
이 3D 에서 볼 것
- 천장 숨기기 + 위에서 보기: 도면처럼 벽선이 곧게 나오는가
- 모니터·창문처럼 반사되는 곳에 구멍이나 튄 점
- 방 안에서 보기로 가까이 가서 점 간격 확인
숫자: 12,132,505 points (web 1,300,000, 19.5 MB)
③ RealityScan 메시
어떻게 만들었나: 사진 568장을 RealityScan 2.2 리눅스판(arcAI)에 넣었다. 사진만으로는 65장만 한 덩어리로 맞아서, 아이폰 카메라 위치를 RS 사전정보 파일(XMP)로 바꿔 붙이고 '고정'으로 줬다. 이때 아이폰 회전 표기(열 우선, 카메라→세계, ARKit 축)를 RS 가 맞춘 65장과 비교해 확정했다 (회전 차이 중앙 1.68°). 그 뒤 메시(Normal) → 150만 삼각형으로 줄이기. 색은 RS 내보내기가 흰색만 내서, 정점마다 가장 가까운 라이다 점 4개의 색을 입혔다 (97.7% 정점).
- 가장 촘촘한 표면. 물건 모서리와 작은 물건 모양이 살아난다
- 메시라 치수·면적 계산과 다른 프로그램 연동이 쉽다
- 라이다와 같은 좌표, 중앙 1.5 cm 차이
- 흰 벽·바닥처럼 무늬가 없는 곳은 사진측량이 약해 울퉁불퉁하거나 빈다
- 리눅스 명령줄에서 텍스처 이미지 저장이 실패했고(Feature not implemented) 정점 색도 흰색만 나와, 라이다 색을 빌려 입혔다. 그래서 글씨·무늬가 흐리다
- 아이폰 위치를 고정했으므로 위치 오차가 그대로 남는다
이 3D 에서 볼 것
- 책상 위 키보드·모니터 받침처럼 작은 물건의 형태 (① 과 비교)
- 흰 벽과 천장의 울퉁불퉁함 (② 라이다와 비교)
- 문 밖으로 이어진 부분: 라이다는 5 m 에서 끊기지만 사진은 더 멀리 본다
숫자: 568/568 aligned · reprojection 1.03 px · align 60 s · mesh 192 s · colour 74 s · 1,499,250 triangles · web 6.35 MB
④ 가우시안
어떻게 만들었나: 가우시안 스플래팅: 장면을 수백만 개의 작은 반투명 색 얼룩으로 표현하고, 사진과 똑같이 보이도록 얼룩을 학습한다. 아이폰 카메라 위치를 그대로 쓰고(사진 정렬 생략), 라이다 점 388,339개(2 cm 격자)에서 시작했다. 엔진 gsplat 1.5.3 은 이 그래픽카드용 설치판이 없어 CUDA 13 으로 직접 빌드했다. 3만 단계, 사진 8장 중 1장은 학습에서 빼 품질 평가에 썼다. 웹에는 기본 색만 남긴 .splat 으로 줄였다.
- 사진처럼 보인다. 반짝임·반투명·얇은 물건(케이블)까지 표현
- 진짜로 방 안을 걸어 다니듯 볼 수 있다
- 흰 벽처럼 사진측량이 약한 곳도 매끈하게 보인다
- 면이 아니라 얼룩이라 치수·도면에는 쓰기 어렵다
- 찍은 방향에서 벗어나면 흐릿한 얼룩이 보인다
- 아이폰 위치 오차가 그대로 흐림이 된다
- 학습에 그래픽카드와 수십 분이 든다
이 3D 에서 볼 것
- 방 안에서 보기: 모니터 빛, 의자 망사, 케이블이 사진처럼 보이는가
- 카메라를 천장 쪽이나 구석으로 돌렸을 때 떠다니는 얼룩
- ③ RS 메시와 같은 자리를 번갈아 보며 '보기' 대 '형태' 차이
숫자: PSNR 15.43 · SSIM 0.76 · 2,723,832 gaussians · 35 min · web 48.0 MB
⑤ 가우시안 + 라이다 깊이
어떻게 만들었나: ④ 와 같은 데이터에 두 가지를 더했다. (1) 사진마다 보이는 라이다 점을 연결해 두고 학습 때 '그 점까지의 거리'를 맞추게 했다 (깊이 학습). (2) 아이폰 카메라 위치도 학습 중에 조금씩 고치게 했다 (위치 보정). 연구에서 아이폰 라이다 실내에 쓰는 DN-Splatter 와 같은 생각이다. 같은 3만 단계, 같은 평가 사진.
- 벽·바닥이 라이다 위치에 붙어 떠다니는 얼룩이 줄어야 한다
- 카메라 위치 보정으로 흐림이 줄어야 한다
- ④ 와 숫자로 비교할 수 있다 (같은 평가 사진)
- 여전히 얼룩이라 치수용은 아니다
- 라이다가 틀린 곳(유리·검은 면)에서는 잘못된 거리에 끌려간다
- 설정이 하나 늘어난 만큼 학습이 조금 느리다
이 3D 에서 볼 것
- ④ 와 같은 자리에서 번갈아 보기: 흰 벽·바닥의 떠다니는 얼룩이 줄었는가
- 모서리·문틀 선이 더 또렷한가
- 아래 비교 표의 PSNR 차이
숫자: PSNR 18.33 · SSIM 0.8 · 3,385,261 gaussians · 55 min · web 48.0 MB
⑥ 라이다 메시
어떻게 만들었나: ② 라이다 점을 1 cm 격자로 줄인 뒤(173만 점), 점마다 면 방향을 추정해 가장 가까운 아이폰 카메라 쪽으로 맞추고, Open3D 의 Poisson 방식으로 매끈한 면을 씌웠다. 점이 드문 곳에 생기는 가짜 면(밀도 하위 3%)은 지우고 100만 삼각형으로 줄였다. 색은 라이다 점 색.
- 사진측량 없이 라이다만으로 면이 생긴다. 흰 벽도 곧고 매끈하다
- 치수가 라이다 그대로라 도면·면적에 바로 쓸 수 있다 (면적 합 94.7 m²)
- 계산이 빠르다 (CPU 2.7분)
- Poisson 은 구멍을 메우려고 면을 부풀리는 성질이 있어, 문밖·가구 뒤에 없는 면이 생길 수 있다
- 작은 물건(케이블·펜)은 라이다 해상도 밖이라 뭉개진다
- 색이 점 색이라 사진보다 흐리다
이 3D 에서 볼 것
- ③ RS 메시와 같은 자리: 흰 벽이 RS 는 너덜, 라이다 메시는 곧은가
- 가구 뒤·문밖에 부풀어 생긴 없는 면
- ② 라이다 점과 번갈아 보며 면이 점을 잘 따라가는지
숫자: 1,000,000 triangles · 2.7 min (CPU) · web 4.5 MB
⑦ WebODM
어떻게 만들었나: WebODM 의 처리 엔진(ODM 3.8.3, arcAI 에 이미 있는 것)으로 같은 사진 568장을 처리했다. ODM 은 카메라 위치를 GPS 로만 받아서, 아이폰 위치를 임의 원점(위도 1°, 경도 1°, 실제 위치와 무관) 둘레의 GPS 값으로 바꿔 사진 사본에 넣고 'GPS 를 믿어라(--force-gps, 5 cm)' 로 돌렸다. 실내라 정사영상은 생략.
- 무료 오픈소스, 명령 하나로 메시·텍스처까지
- 텍스처를 사진에서 직접 입힌다 (RS 리눅스가 못 한 부분)
- 동두천 드론 때와 같은 엔진이라 비교가 쉽다
- CPU 로만 돌아 느리다
- 실내·흰 벽은 RS 와 같은 사진측량 한계
- 아이폰 위치를 GPS 로 우회해 넣는 꼼수가 필요하다
이 3D 에서 볼 것
- ③ RS 와 같은 자리에서 형태 비교
- 텍스처가 붙어 글씨·무늬가 RS 보다 또렷한가
- 흰 벽의 구멍·판
숫자: 568장 중 304장 정렬 · 텍스처 메시 81만 삼각형(149 조각) · 라이다까지 중앙 2.2 cm (90% 8.6 cm) · 60 min · web 12.5 MB
⑧ 2D 가우시안
어떻게 만들었나: 2D 가우시안(2DGS): 얼룩을 납작한 원판으로 만들어 면에 붙게 학습한다. gsplat 의 2DGS 학습기로 ④ 와 같은 데이터·단계(3만)로 돌렸다.
- 면에 붙어서 ④ 보다 형태가 또렷하다 (연구 결과)
- 흰 벽·바닥에서 떠다니는 얼룩이 줄어든다
- 사진 같은 느낌은 ④ 보다 약간 떨어질 수 있다
- 웹 뷰어가 2DGS 전용이 아니라 일반 가우시안으로 근사해 보여 준다
이 3D 에서 볼 것
- ④ 와 번갈아 보며 벽·바닥이 더 평평한가
- 모서리가 더 또렷한가
숫자: PSNR 18.06 · SSIM 0.79 · 66 min · web 48.0 MB
⑨ VGGT (AI)
어떻게 만들었나: VGGT(Meta, 2025): 사진 여러 장을 넣으면 AI 가 카메라 위치와 깊이를 한 번에 추정한다. 그래픽카드(16 GB)에 한 번에 16장 정도만 들어가 두 가지로 해 봤다. (가) 묶음 방식: 겹치는 16장 묶음 22개를 돌려, AI 가 추정한 카메라 위치를 아이폰 위치에 맞춰 이었다. 아이폰과 15 cm·15° 넘게 다른 묶음 6개는 실패라 뺐다. (나) 채움 방식 (이 탭): AI 의 카메라 추정은 쓰지 않고 깊이는 VGGT, 위치는 아이폰, 크기는 라이다로 사진마다 놓았다. 사진마다 라이다 점을 투영해 VGGT 깊이와 비율을 재고, 비율이 사진 안에서 15% 넘게 흔들리는 사진은 버렸다 (524장 중 343장 사용). 이 생각은 조사한 MapAnything·Prompt Depth Anything 처럼 '사진 + 아는 위치 + 라이다' 를 함께 쓰는 방식이다.
- 사진 해상도라 라이다보다 물건이 또렷하다
- 빠르다: 방 전체 5분 14초 (묶음 하나 약 10초)
- 깊이 자체는 센서 없이 사진만으로 나온다. 라이다 없는 폰·카메라에도 쓸 수 있다
- 혼자서는 크기(m)를 모르고 묶음끼리 잇지 못한다. 이번에는 아이폰 위치와 라이다가 그 역할을 했다
- 한 번에 넣을 수 있는 사진 수가 그래픽카드 메모리에 묶인다
- 사진 35%(181장)는 라이다와 모양이 안 맞아 버렸다. AI 위치 추정은 묶음 27% 가 실패, 흩어 뽑으면 아예 실패 (99 cm, 127°)
이 3D 에서 볼 것
- 라이다(②)보다 물건 모양·글자·색이 또렷하다. 사진 해상도로 깊이를 추정해서
- 묶음 방식에서 비었던 곳이 채워졌는가 (라이다 표면 60.0% → 84.7%)
- ② 라이다 점과 번갈아 보며 같은 자리에 겹치는가 (거리 중앙 1.1 cm)
숫자: 채움 방식: 524장 중 343장 · 라이다 표면 84.7% 덮음 · 라이다까지 중앙 1.1 cm (90% 4.2 cm) · 5분 14초 / 묶음 방식: 60.0% · 3.6 cm (90% 19.0 cm)
⑩ 가우시안 + VGGT
어떻게 만들었나: 조사(VGGT-X: '가우시안은 시작점이 좋아야 한다')에서 나온 실험. ⑤ 와 같은 학습(깊이 학습 + 카메라 위치 보정, 3만 단계)인데, 시작점과 깊이 기준을 라이다 점 대신 ⑨ VGGT 채움 점(사진 해상도, 라이다로 크기 맞춤, 1 cm 격자 105만 점)으로 바꿨다. 바뀐 것은 이 하나뿐이라 ⑤ 와 숫자로 바로 비교된다.
- 시작점이 촘촘하고 사진 해상도라 작은 물건이 일찍 자리를 잡는다
- VGGT 의 또렷함과 가우시안의 사진 같은 표현을 합친다
- VGGT 가 버린 사진(35%) 자리는 시작점이 성기다
- 학습 시간은 ⑤ 와 비슷하다
이 3D 에서 볼 것
- ⑤ 와 같은 '촬영 시점' 에서 번갈아 보기
- 책상 위 작은 물건과 글자
- 아래 비교 표의 PSNR: ⑤ 18.3 대비
숫자: PSNR 처리 중 · SSIM 처리 중 · 처리 중 min · web 처리 중 MB
한눈에 비교
| 방법 | 추가 처리 시간 | 겉모습 | 치수·도면 | 웹 크기 |
|---|---|---|---|---|
| ① 앱 메시 | 0 | 거침 | 대략 | 1.2 MB |
| ② 라이다 점 | 해독만 | 점, 가까이 비어 보임 | 가장 믿을 만함 | 19.5 MB |
| ③ RealityScan | 6분 | 형태 좋음, 색 흐림 | 좋음 (메시) | 6.35 MB |
| ④ 가우시안 | 35분 | 사진 같음 | 어려움 | 48.0 MB |
| ⑤ 가우시안 + 깊이 | 55분 | 사진 같음 | 어려움 | 48.0 MB |
| ⑥ 라이다 메시 | 2.7분 | 매끈, 색 흐림 | 좋음 (라이다 치수) | 4.5 MB |
| ⑦ WebODM | 60분 | 텍스처 있음 | 좋음 (메시) | 12.5 MB |
| ⑧ 2D 가우시안 | 66분 | 사진 같음, 면 또렷 | 어려움 | 48.0 MB |
| ⑨ VGGT (AI) | 5.2분 | 또렷한 점 | 라이다로 크기 맞춤 (중앙 1.1 cm) | 22.5 MB |
| ⑩ 가우시안 + VGGT | 처리 중분 | 사진 같음 | 어려움 | 처리 중 MB |
해 보다 막힌 것 (그대로 남긴다)
- RS 에 사진만 넣었을 때 568장 중 가장 큰 덩어리가 65장. 아이폰 위치를 '초기값'으로 줘도 62장. '고정'으로 줘서야 568장 전부가 맞았다. 실내 흰 벽·흔들린 영상 프레임에서 사진 특징점이 모자란 것
- RS 리눅스판 명령줄에서 텍스처 이미지 내보내기가 매번 'Feature not implemented' 로 실패 (PNG·JPG, 코덱 지정, 한 장 합치기 끄기 모두). 정점 색 계산(74초)은 돌았지만 내보낸 색이 전부 흰색. 가까운 라이다 점 색을 입혀 대신했다. 또 한 변 최대 7.9 m 인 엉뚱한 삼각형 742개를 걸러냈다
- 라이다 점 파일의 42.3% 가 실제 점이 아니라 (0,0,0) 채움이었다. 처음 해독한 점 수(21,029,180)가 기록과 맞아서 놓칠 뻔했다. 중앙값이 정확히 0 인 것을 보고 찾았다
- 학습 도구를 설치하던 중 다른 패키지가 torch 를 2.11 에서 2.12 로 몰래 올렸다. CUDA 확장이 맞지 않게 되어 되돌리고 다시 빌드했다
- pip 로 받은 CUDA 13 컴파일러(13.0)와 함께 따라온 부품(nvvm·crt)이 13.4 라 컴파일이 깨졌다. 버전을 맞춰 해결
- 학습 도구에 딸린 COLMAP 읽기 코드가 텍스트 형식에서 깨져(파이썬 3 버그) 이진 형식으로 썼다
- VGGT 에 촬영 전체에서 고르게 흩어 뽑은 16장을 넣었더니 위치 차이 99 cm, 방향 127° 로 실패. 서로 겹치는 16장으로 바꾸자 6.8 cm, 5° 로 맞았다
- WebODM(ODM) 도 사진만으로는 정렬이 안 되는 부분이 있어, 아이폰 위치를 임의 원점 기준 가짜 GPS 로 바꿔 넣었다
다음에 할 것
- 줄자로 벽 두세 곳을 재서 ② 라이다·⑥ 라이다 메시·⑦ WebODM·⑨ VGGT 의 치수 오차를 숫자로
- ⑨ 다음 단계: VGGT 대신 MapAnything(Meta) 또는 Depth Anything 3 에 아이폰 위치·라이다를 같이 넣어 깊이 통과율(지금 65%)과 정확도 올리기. 둘 다 큰 모델은 비상업 라이선스라 사업용이면 확인
- 사진마다 깊이를 합쳐 TSDF 메시 만들기 (치수·도면용으로 ③ RS·⑥ Poisson 대체 후보)
- 가우시안 웹 표시를 시점에 따른 색(SH)까지 (더 큰 파일 형식 SOG 등)
- 공실 서비스 흐름에 붙이기: 앱에서 보내면 arcAI 가 이 처리들을 자동으로 하고 이 페이지를 갱신