반응형
  • 핵심은 씬을 MLP가 아니라 수백만 개의 3D 가우시안(타원체) 으로 명시적(explicit)으로 표현한 것.
  • 여기에 미분 가능한 타일 기반 래스터라이저와 적응적 밀도 제어(densification) 를 붙여서 품질·속도를 둘 다 잡았다.

1. 핵심 아이디어: 씬을 3D 가우시안으로 표현

씬을 수백만 개의 3D 가우시안으로 나타낸다. 각 가우시안은 다음 속성을 가진다:

  • 위치(mean) — 3D 공간상의 중심점
  • 공분산(covariance) — 타원체의 모양·방향·크기
  • 불투명도(opacity, α) — 얼마나 진하게 기여하는지
  • 색(color) — 뷰 의존 색상을 구면 조화 함수(Spherical Harmonics, SH) 계수로 저장

즉 각 가우시안은 공간에 떠 있는 반투명한 타원형 얼룩(splat) 이고, 이걸 화면에 잔뜩 겹쳐 그리면 씬이 된다. MLP를 질의하는 게 아니라, 이미 존재하는 명시적 프리미티브를 그리기만 하면 되니 빠르다.

2. 공분산을 어떻게 파라미터화했나 (핵심 트릭)

3D 공분산 행렬 Σ는 양의 준정부호(positive semi-definite) 여야 물리적으로 의미가 있는데, 최적화 과정에서 행렬 원소를 직접 건드리면 이 조건이 쉽게 깨진다.

논문은 이를 우회하려고 공분산을 스케일(scale) S와 회전(rotation) R로 분해한다:

3D Gaussian Splatting for Real-Time Radiance Field Rendering

 

4. DIFFERENTIABLE 3D GAUSSIAN SPLATTING  (6)
  • S: 축별 스케일(대각 행렬) → 타원체가 각 축으로 얼마나 늘어나는지
  • R: 회전 → 쿼터니언으로 저장

이렇게 하면 최적화 대상이 "스케일 벡터 + 회전 쿼터니언"이 되고, 어떤 값이 나와도 유효한 공분산이 보장된다. 그래디언트도 이 분해를 통해 흘려보낸다.

구현 시 함정: 쿼터니언 순서 규약(wxyz vs xyzw) 이 구현마다 다르다. 다른 코드베이스로 이식할 때 여기서 스플랫이 통째로 틀어지는 경우가 많다.
실제 겅험: 실제 학습 악화로 넘어가 스케일이 불일치로 이어져 점 소멸 및 needle 문제로 이어질 수도 있다.

3. 미분 가능한 타일 기반 래스터라이저

속도의 핵심. 화면을 타일(예: 16×16) 로 나누고, 각 가우시안을 겹치는 타일에 배정한 뒤, 타일 단위로 깊이 정렬 → 앞에서 뒤로 알파 블렌딩한다.

특징:

  • 픽셀마다 광선을 쏘는 볼륨 렌더링이 아니라, 프리미티브를 화면에 투영(project)해서 그리는 방식이라 GPU 래스터화와 궁합이 좋다.
  • 전체가 미분 가능해서, 렌더 결과와 정답 이미지의 차이(loss)를 가우시안 속성으로 역전파할 수 있다. → 학습이 곧 렌더링 파이프라인 안에서 돈다.
  • backward에서 그래디언트를 효율적으로 누적하기 위해 타일별 정렬 순서를 활용한다.

구현 시 함정: 2D conic(투영된 가우시안) 계산의 부호 규약, backward의 그래디언트 누적 방식이 어긋나면 크래시 없이 "그럴듯하게 틀린" 결과가 난다.
실제 경험: densify는 500 iter부터 돌지만, max_screen_size(기본 20px) 기반 prune은 opacity reset 주기(3,000)를 넘긴 뒤부터 활성화된다. 이때 화면상 너무 커진 가우시안을 쳐내는데, 타일/스케일 불일치가 있으면 멀쩡한 점까지 소멸할 수 있다.

4. 적응적 밀도 제어 (Adaptive Density Control)

처음엔 SfM(COLMAP)로 얻은 성긴 포인트 클라우드에서 시작한다. 이 상태로는 디테일이 부족하니, 학습 중에 가우시안 개수를 동적으로 조절한다:

  • Densification(밀도 증가) — 위치 그래디언트가 큰(=재구성이 덜 된) 영역을 찾아서:
    • Clone(복제): 작은 가우시안이 부족한 영역 → 복제해서 채움
    • Split(분할): 큰 가우시안이 디테일을 못 잡는 영역 → 쪼개서 세밀화
  • Pruning(제거) — 불투명도가 너무 낮거나(거의 투명) 화면에서 지나치게 커진 가우시안을 제거해 낭비를 줄임

이 과정을 주기적으로 반복하면서, "부족한 곳은 채우고 남는 곳은 쳐내며" 씬을 적응적으로 정밀화한다. 이게 3DGS 품질의 상당 부분을 담당한다.

5. 뷰 의존 색상: Spherical Harmonics

각 가우시안의 색을 단일 RGB가 아니라 SH 계수로 저장해서, 보는 각도에 따라 색이 달라지는 효과(반사, 하이라이트 등)를 표현한다. degree를 학습 중 점진적으로 올리며(coarse→fine) 안정적으로 수렴시킨다.

구현 시 함정: SH 계수의 저장 레이아웃(degree별 계수 개수, 채널 배치 순서)이 구현마다 달라서, 이식할 때 색이 깨지는 주요 원인이 된다.
실제경험: 실제로 무지개 색이 강해질 수도 있다.

6. 전체 파이프라인 정리

 

손실은 L1 + D-SSIM 조합을 쓴다.


7. 결과 & 의의

  • 실시간 렌더링: 고해상도에서 실시간(수십~수백 FPS)급 성능을 달성. NeRF 계열이 오래 풀지 못하던 지점.
  • 빠른 학습: 씬에 따라 수십 분 수준으로, 당시 고품질 방법 대비 크게 단축.
  • 품질: NeRF/Mip-NeRF급 화질을 유지하면서 위 속도를 확보 — 이 "동시 달성"이 핵심 기여.

실제 30,000iterations, 1,500,000points  기준으로  훈련을 돌려보았을때 대략 0.03~0.01까지도 움직인다.
실제 경험: 초반 대략 0.3에서 시작

의의 한 줄 요약: 래디언스 필드를 "암시적 MLP"에서 "명시적·편집 가능한 프리미티브"로 옮겨오면서, 실시간 렌더·후처리·편집·실무 통합의 문을 열었다. 이후 SLAM, 동적 씬, 압축, 에디팅 등 수많은 후속 연구의 출발점이 됐다.


8. 한계 (그리고 후속 연구가 파고든 지점)

  • 앨리어싱 / 스케일 민감성 — 확대·축소 시 화질 저하. → Mip-Splatting 등이 3D/2D 필터로 개선.
  • 메모리 — 수백만 개 가우시안이라 VRAM·저장 용량 부담. → 압축·양자화 연구들.
  • 기하 정확도 — 표면 재구성용으로는 부정확할 수 있음. → 2D Gaussian Splatting(2DGS) 등이 표면 표현을 개선.
  • floaters / 아티팩트 — 관측이 부족한 영역에서 떠다니는 가우시안 및 블랙계열 색상을 측정하지 못함.

9. 마무리

실제로 구현된 모델들로 INRIA에서 구현한 diff-gaussian-rasterization(gaussian-splatting) 나 nerfstudio에서 구현한 gsplat가 존재 한다. 해당 모델들의 차이는

 

INRIA:  diff-gaussian-rasterization은 논문 재현용 레퍼런스 커널이다. Kerbl et al. 2023 논문의 공식 구현이고, 이후 나오는 모든 개선 연구가 이걸 baseline으로 벤치마크한다. 그래서 "가장 높은 기준 품질"을 내는 대신 설치가 번거롭고(첫 설치 30~60분) 연구·품질 크리티컬한 용도에 맞다.

 

gsplat: 원본에 없는 게 꽤 붙어 있다. 배치 래스터화, N차원 피처 렌더링, 깊이 렌더링, 스파스 그래디언트, 멀티-GPU 분산 래스터화 같은 추가 기능이 있고, absgrad·안티앨리어싱·3DGS-MCMC 같은 기법이 통합돼 있다. 

특히 densification 쪽이 모듈화돼서 골라 쓸 수 있다. 원본의 Adaptive Density Control(ADC)뿐 아니라 Absgrad(Ye et al. 2024), MCMC(Kheradmand et al. 2024) 같은 최신 densification 전략을 모듈 API로 쉽게 교체할 수 있다. 앨리어싱도 Mip-Splatting이 제안한 2D 안티앨리어싱 모드를 지원한다. 원본에서 이런 걸 쓰려면 별도 포크나 수동 패치가 필요하다.

 

주의: diff-gaussian-rasterization 경우 순수 커널만 존재하기 때문에 needle 현상이 심해질 수 있다. absgrad 및 안티앨리어싱 등 기법을 통합 시키는 것을 추천한다.

 

라이선스 (실무에선 이게 제일 중요)
diff-gaussian-rasterization은 비상업(non-commercial) 라이선스이고, 이 제약은 코드를 수정해도 그대로 유지된다. 연구·개인 프로젝트엔 최고의 레퍼런스지만, 상업 배포를 노린다면 커널을 라이선스가 열린 구현으로 바꾸거나 별도 상업 라이선스를 받아야 한다. 반면 gsplat은 Apache 2.0이라 상업 배포·재배포가 자유롭고 특허 조항까지 포함한다. 그래서 프로덕션·제품화 관점에선 기능 차이 이전에 이 한 줄이 사실상 선택을 가른다.

 

실제 비교는 다음 포스팅에서 확인: https://codakcoo.tistory.com/55


최종 결과물 / 데모


참고 (Attribution)

  • 원 논문: Bernhard Kerbl, Georgios Kopanas, Thomas Leimkühler, George Drettakis, "3D Gaussian Splatting for Real-Time Radiance Field Rendering", ACM TOG (SIGGRAPH 2023). https://arxiv.org/abs/2308.04079
  • 공식 구현: GraphDeco-Inria (non-commercial license). https://github.com/graphdeco-inria /gaussian-splatting
  • 관련: NeRF (Mildenhall et al., 2020), Mip-Splatting, 2D Gaussian Splatting, gsplat (nerfstudio-project, Apache 2.0)

 

 

3D Gaussian Splatting for Real-Time Radiance Field Rendering

Radiance Field methods have recently revolutionized novel-view synthesis of scenes captured with multiple photos or videos. However, achieving high visual quality still requires neural networks that are costly to train and render, while recent faster metho

arxiv.org

 


 

GraphDeco - INRIA

GraphDeco - INRIA has 22 repositories available. Follow their code on GitHub.

github.com



 

 

반응형

+ Recent posts