POOOLING FOREST
복잡한 3D 모델링은 그만, 파이썬으로 경험하는 세 가지 Gaussian Splatting - 파이썬과 NullSplats 프로젝트를 통해 전통적인 방식부터 AI 기반의 단일 이미지 3D 생성까지, 최신
AI

복잡한 3D 모델링은 그만, 파이썬으로 경험하는 세 가지 Gaussian Splatting

파이썬과 NullSplats 프로젝트를 통해 전통적인 방식부터 AI 기반의 단일 이미지 3D 생성까지, 최신 Gaussian Splatting 기술을 실무적인 관점에서 살펴봅니다.

김테크

8년차 개발자

안녕하세요. 풀링포레스트 풀스택 개발자 김테크입니다.

개발자로서 기술 트렌드를 쫓다 보면, 가끔은 "와, 세상 참 좋아졌다"라는 말이 절로 나오는 순간이 있습니다. 특히 최근 컴퓨터 비전과 그래픽스 분야가 그렇습니다. 예전에는 3D 모델 하나를 만들기 위해 고가의 장비나 복잡한 포토그래메트리(Photogrammetry) 툴이 필요했는데, 이제는 코드 몇 줄과 AI 모델로 그럴듯한 3D 장면을 만들어내는 시대가 되었으니까요. 오늘은 최근 GitHub에서 흥미롭게 살펴본 NullSplats라는 프로젝트를 통해, 최신 3D 생성 기술인 Gaussian Splatting(가우시안 스플래팅)을 어떻게 실무적인 관점에서 접근할 수 있는지 이야기해보려 합니다.

솔직히 고백하자면, 저는 백엔드와 인프라가 주력이라 그래픽스 쪽은 전문 분야가 아닙니다. 하지만 요즘 트래픽을 처리하다 보면 3D 에셋이나 XR 관련 데이터 처리에 대한 니즈가 늘어나는 것을 피부로 느낍니다. 그래서 틈틈이 관련 기술을 파보던 중이었는데, 보통 이 바닥이 진입 장벽이 꽤 높습니다. CUDA 버전을 맞추느라 반나절을 보내거나, 리눅스 환경에서만 돌아가는 라이브러리 때문에 윈도우 개발자는 좌절하기 일쑤죠.

그런데 이 프로젝트는 접근 방식이 아주 흥미롭습니다. 무려 파이썬의 Tkinter를 사용하여 GUI를 구성했습니다. "2024년에 Tkinter라고?" 하며 의아해하실 분들도 계시겠지만, 저는 오히려 이 지점에서 개발자의 실용주의 정신을 엿보았습니다. 화려한 프론트엔드 프레임워크 대신, 가장 익숙하고 가벼운 도구로 OpenGL 뷰어를 감싸서 빠르게 결과물을 시각화할 수 있게 만든 것이죠.

이 도구는 크게 세 가지 방식으로 3D Splat을 생성합니다. 기술의 발전 과정을 한눈에 보여주는 듯한 이 세 가지 방법론을 비교해보면 꽤 재미있는 인사이트를 얻을 수 있습니다.

첫 번째는 전통적인 COLMAP과 gsplat을 이용한 방식입니다. 약 50장 이상의 사진을 찍어 넣으면, COLMAP이라는 도구가 카메라의 위치를 추정(SfM)하고, 이를 바탕으로 학습을 진행합니다. RTX Pro 6000 기준으로 약 5분 정도 걸린다고 하는데, 데이터가 많은 만큼 결과물의 퀄리티는 가장 확실합니다. 우리가 흔히 아는 "노가다에는 장사 없다"는 원칙이 여기서도 적용됩니다. 데이터가 많으면 결과는 좋습니다.

두 번째는 Depth Anything 3(DA3)를 활용한 방식입니다. 여기서는 단 5장의 사진만 있으면 됩니다. 부족한 3D 정보는 AI 모델이 심도(Depth)를 추정해서 채워 넣습니다. 다만, 이 방식은 16GB라는 상당한 VRAM을 요구합니다. 제가 인프라를 다루면서 항상 고민하는 지점이 바로 이 '리소스와 효율성'의 트레이드오프입니다. 데이터 준비 시간을 줄이는 대신, 하드웨어 리소스를 갈아 넣는 방식인 셈이죠. 결과물은 약간 투명하거나 기하학적으로 불안정할 수 있지만, 적은 데이터로 이 정도 결과를 낸다는 것 자체가 놀라웠습니다.

세 번째는 가장 충격적이었던 SHARP(Monocular View Synthesis) 방식입니다. 단 1장의 사진으로 3D를 만듭니다. 학습 시간도 2.5분 정도로 가장 짧습니다. 단 한 장의 2D 이미지에서 3D 구조를 뽑아낸다는 건, 불과 몇 년 전만 해도 마법에 가까운 영역이었습니다. 물론 완벽하지는 않겠지만, 프로토타이핑 관점에서 본다면 생산성을 극적으로 높여줄 수 있는 기술입니다.

코드 구조를 뜯어보면서 배울 점도 많았습니다. backend 폴더와 ui 폴더를 명확히 분리하고, io_cache.py를 통해 파일 입출력을 체계적으로 캐싱하고 있었습니다. 특히 3D 처리 파이프라인은 중간 과정이 유실되면 다시 처음부터 계산해야 하는 비용이 매우 큽니다. 이 프로젝트는 장면별로 입출력을 캐싱하여 작업을 중간에 멈췄다 다시 시작할 수 있게 설계되어 있습니다. 이는 대용량 데이터 처리가 빈번한 백엔드 시스템을 설계할 때도 반드시 고려해야 할 '멱등성'과 '재현성' 확보라는 원칙과 맞닿아 있습니다.

개발자로서 우리는 종종 새로운 기술을 도입할 때 막막함을 느낍니다. "이걸 언제 다 공부해서 적용하지?"라는 생각이 들죠. 하지만 NullSplats 같은 프로젝트를 보면, 복잡한 내부 로직은 PyTorchgsplat 같은 라이브러리에 위임하고, 개발자는 이를 잘 엮어서(Orchestration) 사용자가 쓰기 편한 형태로 가공하는 능력만 있어도 충분히 가치 있는 도구를 만들 수 있다는 것을 깨닫게 됩니다.

여러분도 거창한 목표보다는, 지금 당장 내 로컬 머신에서 돌아가는 작은 파이프라인 하나를 구축해보는 건 어떨까요? 1장의 사진으로 3D 공간을 만드는 경험은 꽤나 짜릿할 것입니다. 기술은 멀리 있지 않습니다. 실행하는 자의 손끝에 있습니다.

지금 읽으신 내용, 귀사에 적용해보고 싶으신가요?

상황과 목표를 알려주시면 가능한 옵션과 현실적인 도입 경로를 제안해드립니다.