주말 만에 끝내는 3D 가우시안 스플래팅(3D Gaussian Splatting) 입문

본 가이드는 Kerbl 등이 2023년 발표한 3D 가우시안 스플래팅(3DGS)의 핵심 원리를 약 1,000줄의 C++/OpenGL 코드로 직접 구현하며 설명합니다. 'Supersplat'에서 제공하는 약 20만 개의 스플래트 데이터셋을 활용해 구형 조화 함수(SH)와 공분산 행렬 투영 등 복잡한 수학적 개념을 실시간 렌더링으로 시연하는 방법을 다룹니다.

AI 요약

3D 가우시안 스플래팅(3DGS)은 여러 각도에서 촬영된 2D 이미지 데이터셋을 기반으로 머신러닝 알고리즘을 사용하여 3D 장면을 재구성하는 최신 기술입니다. 기존의 3D 렌더러가 삼각형(Triangles)을 기본 단위로 사용하는 것과 달리, 3DGS는 '가우시안 스플래트'라는 독특한 프리미티브를 사용하여 실사 수준의 결과물을 만들어냅니다. 본 기사는 Kerbl et al. 2023 논문에서 제시된 기술적 결정을 바탕으로, 학습 과정이 아닌 '렌더링'의 수학적 메커니즘을 이해하기 위해 약 1,000줄의 코드로 경량 렌더러를 구축하는 과정을 소개합니다. 실습을 위해 'Supersplat' 사이트에서 다운로드한 약 20만 개의 스플래트로 구성된 '토마토 접시' 장면을 예시로 사용하며, C++와 OpenGL 환경에서 소스 코드를 구현합니다. 이를 통해 독자는 선형 대수학 및 확률론을 바탕으로 한 가우시안 분포의 2D 투영 및 정렬 과정을 직관적으로 파악할 수 있습니다.

핵심 인사이트

  • 논문 기반 기술: Kerbl 등이 2023년에 발표한 3D 가우시안 스플래팅 기술을 기반으로 하며, 미분 가능성(Differentiability)과 양의 준정부호 공분산 유지 등의 핵심 설계 철학을 반영합니다.
  • 경량 데이터셋 활용: 실습 예제로 'Supersplat'에서 제공하는 약 20만 개(200k)의 스플래트로 구성된 '토마토 접시' 씬을 사용하여 최적화되지 않은 사용자 정의 렌더러에서도 실시간 구동이 가능하게 합니다.
  • 코드 및 도구: C++와 OpenGL을 사용하여 약 1,000줄의 코드로 렌더러를 구현하며, 모든 소스 코드는 GitHub에 공개되어 있습니다.
  • 고유 포맷 및 로더: 가우시안 스플래트 데이터는 주로 .ply 형식으로 저장되며, 이를 위해 별도의 ply_loader.h를 통해 가우시안 객체 배열로 파싱하는 과정을 거칩니다.

주요 디테일

  • 구형 조화 함수(Spherical Harmonics): 3DGS 장면에서 각 스플래트의 색상을 표현하기 위해 SH 상수를 로드하고 이를 카메라 위치에 따른 색상값으로 변환합니다.
  • 공분산 행렬의 재파라미터화: 가우시안 분포의 모양을 정의하기 위해 회전(Rotation, 쿼터니언)과 스케일링(Scaling) 벡터를 조합하여 공분산 행렬을 구성합니다.
  • 투영 알고리즘: 3D 공간상의 가우시안 중심점(Centroid)과 공분산 행렬을 2D 화면 공간으로 투영하기 위한 수학적 공식(Jacobian matrix 등)을 셰이더 내에서 처리합니다.
  • 알파 블렌딩 및 정렬: 투명도가 있는 스플래트들을 올바르게 렌더링하기 위해 카메라와의 거리를 기준으로 스플래트들을 정렬(Sorting)하는 과정이 포함됩니다.
  • 셰이더 구조: 버텍스 셰이더는 쿼드(Quad)의 배치를 담당하고, 프래그먼트 셰이더는 2D 가우시안 분포를 실제 픽셀로 그려내는 역할을 수행합니다.

향후 전망

  • 범용 그래픽 엔진 확장: 본 예제는 OpenGL을 사용했지만, 제공된 이론은 WebGPU, Metal, DirectX 등 최신 그래픽 API로의 이식이 용이하여 웹 및 모바일 환경에서의 3DGS 활용이 확대될 것입니다.
  • 실사 렌더링 대중화: 삼각형 메쉬 없이도 고품질 3D 복원이 가능해짐에 따라 가상현실(VR) 및 증강현실(AR) 분야에서 사진 같은 그래픽 구현이 더욱 빨라질 전망입니다.
출처:hackernews
Share

이것도 읽어보세요

댓글

이 소식에 대한 의견을 자유롭게 남겨주세요.

댓글 (0)

불러오는 중...