📄

3D Gaussian Splatting for Real-Time Radiance Field Rendering

Introduction & 그걸 읽었을 때 드는 의문들

장점
Unbounded and complete scenes
1080p resolution rendering
Evaluation
기법
1.
3차원 scene을 3D 가우시안으로 표현
a.
생성: 카메라 캘리브레이션 및 sparse point cloud 복원 과정 중 생성
b.
특징: scene 최적화에 좋음
i.
Continuous volumetric radiance field의 장점들은 가져오면서
ii.
~의 단점은 보완 = 비어있는 공간은 연산 X
2.
Interleaved optimization/density control of the 3D Gaussians
a.
Optimizing anisotropic covariance
b.
Achieve an accurate representation of the scene
3.
더 빠른 렌더링 알고리즘
a.
Visibility-aware
b.
Anisotropic splatting
c.
학습 시간 단축
d.
빠른 렌더링

용어 정의

Splat
= “철퍼덕”, “찰싹”
덩어리 진 무언가가 표면에 철썩 달라붙으면서 퍼지는 것을 묘사하는 의태어
e.g. 눈덩이를 뭉쳐서 창문에 철썩 던짐, 진흙을 뭉쳐서 벽에다 던짐 ⇒ “Splat!”
Splatting
볼륨 렌더링 관점에서
3차원 공간에 떠 있는 가우시안 덩어리가 관찰자 시점 2차원 평면으로 날아와 철썩 달라붙으며 퍼지는 걸 묘사
타격점?에 제일 많이 뭍고, 타격점에서 멀어질 수록 옅어짐
그 분포가 가우시안 분포로 퍼져서 가우시안
3분 설명
Westover, Lee Alan (July 1991). "SPLATTING: A Parallel, Feed-Forward Volume Rendering Algorithm”
Texture splatting
Surface splatting
Anisotropic splatting
가우시안 덩어리가 방향성이 있음
Continuous volumetric radiance field
NeRF는 연속적인 볼륨으로 구성 (=Continuous volumetric radiance field)
NeRF의 장점은 가져오면서, 단점은 개선했다고 비교하기 위해 언급한 단어
실제 3D Gaussian splatting은 discontinuous하고 sparse한 가우시안들로 scene을 표현
Anisotropic covariance
방향에 따라 가우시안의 스케일이 다르기 때문에 anisotropic

거인의 어깨들

1. Gaussian Splatting is pretty cool! (그래픽스 관점)

Gaussian Splats
3차원 공간을 입자들로 표현 (메시, 복셀, distance field)
입자 = 3D Gaussian
파라미터
3차원 위치
3차원 방향
3차원 non-uniform scale
불투명도
색 = 3rd order Spherical Harmonics coefficients : 보는 방향에 따라 달라지는 색상
16개 파라미터
이 사람이 생각하는 논문의 contribution
1.
3차원 공간을 수 백만 개의 덩어리(=3D 가우시안)으로 만들어내는 방법을 찾아냄
제일 핵심이라고 생각하는 부분
경사하강법, differentiable rendering 하는 부분은 이 사람도 잘 이해 못 함 (AI 하는 사람이 아니라서…)
불연속적인 3차원 덩어리들을 어떻게 경사하강법으로 최적화를 했을까?
원래는 연속적인 것들만 잘 되지 않나?
2.
수 백만 개의 덩어리들을 빠르게 렌더링하는 방법을 찾아냄
그런데 이 사람은 이건 기존 GPU rasterizer로도 충분히 빠르게 할 수 있다고 생각
3.
기존 기법들을 적당히 잘 섞음
a.
Gaussian splatting, spherical harmonics
4.
AI가 아님
녹여진 기존 그래픽스 연구들에 대한 짧은 설명
Gaussian Splatting
Spherical Harmonics
Point-Based Rendering
Representing images or scenes with a bunch of “primitive shapes”
Tiled Rasterization

2. Gaussian Splatting explorations (CLIP loss로 style transfer까지)

앞 부분 설명만으로도 논문 쉽게 요약
살짝 코드를 변경하여, 복원한 scene을 style transfer도 가능함 보여줌
원래 L1 + SSIM 을 loss로 GT 이미지랑 비교하며 복원 최적화
복원 후, 내가 바꾸기로 원하는 스타일의 prompt에 대한 CLIP loss 로 변경해서 다시 최적화
e.g. ”반 고흐 스타일의 사과 그림”
⇒ 3차원 style transfer!!

Code 검증

환경 설치

논문 주요 내용 확인

3D Gaussians

gaussians 안에 하나의 gaussian 마다 이 만큼 파라미터가 들어있음 (아래 예시에서는 공간 전체를 1313415 개의 가우시안으로 표현)
xyz
파라미터 개수: 3
3차원 공간 상의 좌표
feature_dc
파라미터 개수: [1, 3]
DC : 전자공학에서 DC(direct current)의 약자가 맞음
상수 전압 + 교류 전압의 관점에서 상수 전압
⇒ 상수, 기본 색상 RGB 값
⇒ SH(Spherical Harmonics) 급수의 0차 항
feature_rest 와 형태 맞추려고 [1,3]으로 늘림
feature_rest
파라미터 개수: [15, 3]
SH(Spherical Harmonics) 급수의 1~3차 항
self.max_sh_degree 가 3이고, (3+1)2=16(3+1)^2 = 16 에서 DC 빼고 나면 15개 필요
⇒ 결과적으로 가우시안마다 16개의 RGB 값 필요
⇒ RGB 값은 3개의 float으로 표현하니까, 16 *3 = 48개의 float 필요
방향에 따른 색상 변화 표현 가능! e.g. 이쪽에서 볼 때는 반사되어 비치는 붉은 색 때문에 살짝 붉게, 저쪽에서 볼 때는 비치는 게 없어서 그냥 무채색으로
← 기존 Photogrammetry 나 Nerf 약점 보완!!
반사되는 색상까지는 반영할 수 있으나, 빛 반사에 의해 밝게 빛나는, cd 값이 올라가는 것까지 제대로 표현하려면 HDR로 해야하지 않나?
scaling
파라미터 개수: 3
rotation
파라미터 개수: 4
너프처럼 2개 라디안 값만 있으면 되는 거 아닌가? 왜 4개나 필요하지? 이미 scale 파라미터가 xyz 3축으로 다 있으니 구 형태가 아니라 elongated 된 원형 덩어리일 것이고, 2개 라디안 값으로 방향만 정해주면 anisotropic 하지 않나?
opacity
파라미터 개수: 1
직관적으로는 [-1,1] 일 거 같은데, 실제로 값을 보면 최소 -6.xx 부터 최대 19.xx 까지 올라감
음수 opacity는 무슨 뜻이지? 최적화하는 과정에서 거의 투명한 가우시안은 제거한다고 했는데, 그러면 음수인 가우시안들은 왜 남아있지? 0 근처의 opacity인 가우시안만 없애고 아예 음수 opacity면 남겨두나?