3D 가우시안 스플래팅(3DGS) 실전 가이드: 원리, 함정, 그리고 메시 변환
지난 1년 동안, 3D 가우시안 스플래팅(3D Gaussian Splatting, 3DGS)은 3D 렌더링 업계를 완전히 휩쓸었습니다. 유튜브나 X(트위터)에서 흔히 볼 수 있는, 믿기 힘들 정도로 사실적인 실시간 렌더링 데모는 많은 사람들이 "이 기술이 전통적인 모델링과 NeRF를 대체할 것"이라고 외치게 만들었습니다.
하지만 실제로 이 기술을 프로젝트에 적용해 보면, '광고와 실제의 차이'라는 괴리를 느끼게 됩니다. 오늘은 3DGS의 기본 원리와 실제 작업에서 겪게 되는 잘 알려지지 않은 함정들을 파헤쳐 보겠습니다.
| 기술 측면 | 전통적인 사진 측량(Photogrammetry) | 3D 가우시안 스플래팅(3DGS) |
|---|---|---|
| 세계관 | 단단한 면: 삼각형 메시 + PBR 텍스처 맵 | 부드러운 안개: 수백만 개의 빛나는 반투명 타원체 |
| 렌더링 속도 | 매우 빠름 (전통적인 GPU 하드웨어 래스터라이제이션에 부담 없음) | 매우 빠름 (GPU 깊이 기수 정렬 + 오버레이) |
| 모델 편집 및 물리 | 매우 성숙 (충돌 가능, 본드 스켈레톤 바인딩 가능) | 거의 불가능 (단순한 점 집합, 충돌 감지 불가) |
| 시점에 따른 반사 및 하이라이트 | 복잡한 셰이더 시뮬레이션 필요, 일반적으로 건조하고 부자연스러움 | 매우 사실적, 수면과 유리 반사가 시점에 따라 자연스럽게 변화 |
| 3D 프린팅 지원 | 기본 지원 (이미 닫힌 메시 솔리드) | 직접 프린팅 불가 (격렬한 알고리즘 추출 변환 필요) |
현상의 이면을 보자: 3DGS는 도대체 뭘까?
간단히 말해, 3DGS는 전통적인 3D 모델의 '점이 선이 되고 선이 면이 되는' 규칙을 버렸습니다. 대신 **늘어나고 줄어들 수 있고, 투명도를 가지며, 시점에 따라 색이 변하는 '빛나는 털실 공'(가우시안 커널)**을 수없이 쌓아서 장면을 만듭니다.
각 가우시안 커널은 위치, 회전(쿼터니언), 스케일(공분산 행렬), 불투명도, 색상(구면 조화 함수 SH)을 포함합니다. 이 방식은 매우 교묘합니다. 복잡한 광선 추적 굴절을 계산할 필요 없이, 이 타원체들을 거리 순으로 정렬한 뒤 가까운 것부터 멀리까지 레이어별로 그리기만 하면 되기 때문에 일반 그래픽 카드에서도 100FPS 이상의 놀라운 프레임률을 냅니다.
스플랫 파일의 웹 환경에서의 냉혹한 현실
데모 영상은 멋져 보이지만, 실제로 3DGS를 웹 페이지에 넣어 고객에게 보여주려면 첫 번째 관문은 파일 크기와 VRAM 폭발입니다.
- 표준 PLY 형식: 완전한 정밀도 좌표와 고차 구면 조화 색상(Spherical Harmonics, SH)을 유지합니다. 3차 SH인 경우 각 커널마다 시점에 따른 색상을 표현하기 위해 45개의 부동소수점을 저장해야 합니다. 100제곱미터 방의 장면이라면 파일 크기가 쉽게 800MB를 넘습니다.
- SPLAT 형식: 고급 색상 변화를 제거(0차 SH로 다운그레이드, 즉 단색)하여 크기를 약 250MB로 압축합니다. 사실적인 빛의 흐름을 희생하는 대신 크기를 줄였습니다.
- SPZ / KSPLAT 형식: 매우 공격적인 양자화 압축을 거쳐 모바일 환경을 위해 설계되었으며, 약 30MB까지 압축할 수 있습니다.
실제 테스트에서 발견한 한계: 현대 모바일 브라우저(예: iPhone Safari)는 대략 30만에서 80만 개의 가우시안 커널을 부드럽게 렌더링할 수 있습니다. 장면에 100만 개 이상의 커널이 있거나, SPZ로 변환하지 않고 수백 MB의 PLY 파일을 웹 페이지에 바로 넣으면 모바일에서는 대부분 흰 화면이 나오며 충돌합니다.
자신의 기기 한계를 테스트해보고 싶다면, 바로 Any3D Splat 뷰어를 사용해 로컬에서 로드해 보세요. 순수 브라우저 측에서 WebGL 또는 WebGPU를 사용해 렌더링하므로 서버 대역폭을 소모하지 않습니다.
가장 아픈 깨달음: 3DGS를 메시로 변환하기
많은 사용자가 장면을 촬영한 후 가장 먼저 하는 생각은 "멋지다, 바로 STL로 변환해서 출력하자!" 또는 "블렌더에 가져와서 캐릭터 애니메이션을 넣자!"입니다.
냉혹한 진실은 3DGS를 메시로 변환하는 것은 기술적인 수렁이라는 점입니다.
가우시안 커널이 본질적으로 빛나는 반투명 안개 덩어리이기 때문에, 전통적인 메시 표면 추출 알고리즘(예: 푸아송 재구성, Poisson Reconstruction)은 이러한 비실체를 다룰 때 치명적인 기하학적 모호성 문제에 직면합니다:
- 유리와 수면의 재앙: 3DGS에서 매우 사실적으로 보이는 투명 유리는 알고리즘이 그곳에 떠 있는 실체가 있다고 판단합니다. 메시로 변환하면 개가 물어뜯은 듯 울퉁불퉁한 구멍과 폐면이 생깁니다.
- 떠다니는 노이즈(Floaters): 훈련이 완전히 수렴되지 않은 가우시안 커널은 공중에 잡다한 모자이크를 형성하며, 메시 추출 시 하늘에 수많은 떠다니는 '운석'이 생깁니다.
- 털과 가는 나뭇가지: 완전히 실패, 거칠고 뭉개진 형태가 됩니다.
장면에 반사 재질이나 미세한 구조가 많다면 메시화된 결과에 대한 기대를 완전히 낮추세요. 강제로 변환해도 대개 '형체를 알아볼 수 없는 진흙 덩어리'만 얻을 수 있습니다.
자주 묻는 질문과 실전 전략
훈련을 위해 스마트폰으로 동영상을 찍을까요, 사진을 찍을까요?
둘 다 가능하지만, 핵심은 중복률과 궤적입니다. 실제 테스트 결과, 스마트폰으로 4K 60fps 모드로 대상을 안정적으로 한 바퀴 돌며 촬영한 후 10프레임마다 한 장씩 추출하는 것이 손떨림으로 200장의 사진을 찍는 것보다 훨씬 효과적입니다(모션 블러는 3DGS의 치명적 약점입니다). 중요한 것은 반드시 주위를 돌며 촬영하고, 한 자리에서 빙글빙글 돌며 녹화하지 마세요.
게임 엔진에 가져와서 물리 충돌을 어떻게 구현하나요?
가우시안 커널로 충돌을 구현하는 것은 기대하지 마세요. 현재 언리얼 엔진(UE5)과 유니티의 성숙된 방법은 3DGS로 시각적 화면을 렌더링하고, 대상 외부에 매우 거친 보이지 않는 박스나 로우폴리곤 메시를 만들어 전통적인 메시로 물리 충돌 볼륨(Collider)을 구현하는 것입니다.
제 라이다(LiDAR) 포인트 클라우드로 이 기술을 사용할 수 있나요?
일반적인 라이다 포인트 클라우드는 XYZ 좌표와 단일 반사색만 포함하며, 시점에 따른 광장 정보가 없어 구면 조화 파라미터를 훈련할 수 없습니다. Any3D PLY 뷰어를 사용해 전통적인 포인트 클라우드를 바로 미리 볼 수 있지만, 3DGS의 '빛나는 광채'를 보여주려면 반드시 완전한 다중 시점 이미지 기반(COLMAP 전처리) 훈련 과정을 거쳐야 합니다.