방 하나를 아홉 가지 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)
사진만으로 위치·깊이 추정"] M1 & M2 & M3 & M4 & M5 & M6 & M7 & M8 & M9 --> 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 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
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 처리 중 · SSIM 처리 중 · 처리 중 gaussians · 처리 중 min · web 처리 중 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 보다 또렷한가
- 흰 벽의 구멍·판
숫자: 처리 중 · 처리 중 min · web 처리 중 MB
⑧ 2D 가우시안
어떻게 만들었나: 2D 가우시안(2DGS): 얼룩을 납작한 원판으로 만들어 면에 붙게 학습한다. gsplat 의 2DGS 학습기로 ④ 와 같은 데이터·단계(3만)로 돌렸다.
- 면에 붙어서 ④ 보다 형태가 또렷하다 (연구 결과)
- 흰 벽·바닥에서 떠다니는 얼룩이 줄어든다
- 사진 같은 느낌은 ④ 보다 약간 떨어질 수 있다
- 웹 뷰어가 2DGS 전용이 아니라 일반 가우시안으로 근사해 보여 준다
이 3D 에서 볼 것
- ④ 와 번갈아 보며 벽·바닥이 더 평평한가
- 모서리가 더 또렷한가
숫자: PSNR 처리 중 · SSIM 처리 중 · 처리 중 min · web 처리 중 MB
⑨ VGGT (AI)
어떻게 만들었나: VGGT(Meta, 2025): 사진 여러 장을 넣으면 AI 가 카메라 위치와 깊이를 한 번에 추정한다. 그래픽카드(16 GB)에 한 번에 16장 정도만 들어가서, 촬영 순서대로 서로 4장씩 겹치는 16장 묶음 22개를 만들어 각각 돌렸다. 묶음마다 AI 가 추정한 카메라 위치를 아이폰 위치에 맞춰(크기·방향·자리) 점을 옮기고 합쳤다. 즉 모양·깊이는 AI, 묶음을 잇는 자리는 아이폰. AI 위치가 아이폰과 15 cm 또는 15° 넘게 다른 묶음 6개는 실패로 보고 뺐다.
- 사진 해상도라 라이다보다 물건이 또렷하다
- 빠르다: 방 전체 3분 9초 (묶음 하나 약 10초)
- 깊이 자체는 센서 없이 사진만으로 나온다. 라이다 없는 폰·카메라에도 쓸 수 있다
- 혼자서는 크기(m)를 모르고 묶음끼리 잇지 못한다. 이번에는 아이폰 위치가 그 역할을 했다
- 한 번에 넣을 수 있는 사진 수가 그래픽카드 메모리에 묶인다
- 묶음 27%(22개 중 6개)가 실패했다. 사진을 흩어 뽑으면 아예 실패 (99 cm, 127°)
이 3D 에서 볼 것
- 라이다(②)보다 물건 모양·글자·색이 또렷하다. 사진 해상도로 깊이를 추정해서
- 빠진 묶음 자리에 생긴 빈 곳
- ② 라이다 점과 번갈아 보며 같은 자리에 겹치는가 (거리 중앙 3.6 cm)
숫자: 방 전체: 16장 묶음 22개 중 16개 사용 · 묶음 위치 차이 중앙 4.7 cm · 방향 5.8° · 라이다와 거리 중앙 3.6 cm · 3분 9초
한눈에 비교
| 방법 | 추가 처리 시간 | 겉모습 | 치수·도면 | 웹 크기 |
|---|---|---|---|---|
| ① 앱 메시 | 0 | 거침 | 대략 | 1.2 MB |
| ② 라이다 점 | 해독만 | 점, 가까이 비어 보임 | 가장 믿을 만함 | 19.5 MB |
| ③ RealityScan | 6분 | 형태 좋음, 색 흐림 | 좋음 (메시) | 6.35 MB |
| ④ 가우시안 | 35분 | 사진 같음 | 어려움 | 48.0 MB |
| ⑤ 가우시안 + 깊이 | 처리 중분 | 사진 같음 | 어려움 | 처리 중 MB |
| ⑥ 라이다 메시 | 2.7분 | 매끈, 색 흐림 | 좋음 (라이다 치수) | 4.5 MB |
| ⑦ WebODM | 처리 중분 | 처리 중 | 좋음 (메시) | 처리 중 MB |
| ⑧ 2D 가우시안 | 처리 중분 | 사진 같음, 면 또렷 | 어려움 | 처리 중 MB |
| ⑨ VGGT (AI) | 3.2분 | 거친 점 | 크기 모름 | 22.5 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 로 바꿔 넣었다
다음에 할 것
- 줄자로 벽 두세 곳을 재서 ② 라이다와 ③ RS 의 치수 오차를 숫자로
- ③ 텍스처: 3D Tiles 로 내보내 텍스처를 살리거나 윈도우 RS 로 한 번 대조
- ④·⑤ 를 웹에서 시점에 따른 색(SH)까지 보이게 (더 큰 파일 형식 SOG 등)
- 공실 서비스 흐름에 붙이기: 앱에서 보내면 arcAI 가 이 다섯 가지를 자동으로 만들고 이 페이지를 갱신