
가우시안 스플래팅을 표현법으로 사용한 SLAM 논문에서 이에 대한 수식을 간단히 짚고 넘어가는데, 한 번 깊게 이해하고 정리해둘 필요가 있어 해당 포스트를 적는다. 위 이미지의 (1),(2),(3)번 식을 이해해보자.
1. 중심 좌표 투영 공식
이 수식은 3차원 공간에 존재하는 Gaussian의 중심점인 평균(μ)을 2차원 이미지 평면상의 좌표(μI)로 투영하는 과정을 나타낸다. 3D Gaussian Splatting에서 제안된 핵심 렌더링 메커니즘을 기반으로 하며, 다음과 같이 각 항을 설명할 수 있다.
μI=π(P(Twcμhomogeneous))
- μI: 이미지 평면(Image Plane)에서의 2차원 좌표다. 최종적으로 화면에 그려질 픽셀 위치를 의미한다.
- π: 투영된 4차원 동차 좌표(Homogeneous Coordinates)를 2차원 픽셀 좌표로 변환하는 사영 함수다. 일반적으로 마지막 성분으로 앞의 성분들을 나누는 정규화 과정을 포함한다.
- P: OpenGL 스타일의 4×4 투영 행렬(Projection Matrix)이다. 카메라의 내부 파라미터를 반영하여 3차원 카메라 좌표계를 클립 공간(Clip Space)으로 변환한다.
- Twc: 세계 좌표계(World)에서 카메라 좌표계(Camera)로의 변환을 담당하는 SE(3) 행렬이다. 즉, 카메라의 위치와 자세를 나타내는 외재적 파라미터(Extrinsic Parameters)를 의미한다.
- μhomogeneous: 세계 좌표계에서의 3차원 Gaussian 중심점을 4차원 동차 좌표 형태로 표현한 것이다.
1.1. 예시
1.1.1. 좌표계 정의 및 점의 표현 (Pw,μhomogeneous)
- 월드 좌표계(W): 보편적인 그림인 Z 전방, X 오른쪽, Y 아래 방향을 향하도록 그린다.
- 점 Pw=(1,0,1)은 동차 좌표계로 다음과 같이 표현된다.
μhomogeneous=⎣⎢⎢⎢⎡1011⎦⎥⎥⎥⎤
1.1.2. World-to-Camera 변환 행렬 (Twc) 구성
Twc는 월드 좌표계의 점을 카메라 좌표계(C)로 변환하는 행렬이며, 회전 행렬 Rwc와 평행이동 벡터 twc로 구성된다.
회전 행렬 (Rwc):
- 카메라가 월드 Y축을 기준으로 90도 회전했다는 것은, 카메라의 Z축이 월드의 X축 방향을 향하게 됨을 의미한다.
- Y축 기준 90도 회전 행렬은 다음과 같다.
Rwc=⎣⎢⎡cos(90∘)0−sin(90∘)010sin(90∘)0cos(90∘)⎦⎥⎤=⎣⎢⎡00−1010100⎦⎥⎤
평행이동 벡터 (twc):
- 카메라가 월드 좌표계에서 Zw 방향으로 +1, Yw 방향으로 −1만큼 이동했다. 카메라의 월드상 위치 Cw=(0,−1,1)이다.
- World-to-Camera 평행이동 벡터 twc=−RwcCw로 계산된다.
twc=−⎣⎢⎡00−1010100⎦⎥⎤⎣⎢⎡0−11⎦⎥⎤=−⎣⎢⎡1−10⎦⎥⎤=⎣⎢⎡−110⎦⎥⎤
최종 변환 행렬 (Twc):
Twc=[Rwc0twc1]=⎣⎢⎢⎢⎡00−1001001000−1101⎦⎥⎥⎥⎤
이 행렬을 μhomogeneous에 곱하면 Pc=(0,1,1,1)T가 계산되어 그림의 상황과 일치한다.
1.1.3. 프로젝션 매트릭스 (Projection Matrix): P
이제 월드 좌표계의 점을 이미지 평면의 픽셀 좌표로 투영하는 최종 행렬 P를 구할 수 있다. P=K[R∣t]이다.
P=⎣⎢⎡80000080003202401⎦⎥⎤⎣⎢⎡001010−100110⎦⎥⎤
이 행렬을 곱하면 3x4 크기의 행렬이 나오며, 이를 통해 어떤 Pw값이든 이미지상의 픽셀 위치로 변환할 수 있다.
1.1.4. 수식 검증
실제로 Pw=(1,0,1)을 넣었을 때 Pc=(0,1,1)이 나오는지 확인해 보겠다.
Pc=RPw+t=⎣⎢⎡001010−100⎦⎥⎤⎣⎢⎡101⎦⎥⎤+⎣⎢⎡110⎦⎥⎤=⎣⎢⎡−101⎦⎥⎤+⎣⎢⎡110⎦⎥⎤=⎣⎢⎡011⎦⎥⎤
그림에 적어주신 값과 정확히 일치하는 것을 볼 수 있다.
이 점 Pc를 앞서 설정한 내부 파라미터 K를 이용해 이미지 픽셀 좌표 (u,v)로 바꾸면 다음과 같다.
1. x=0/1=0, y=1/1=1 (Zc로 나누어 정규 좌표계로 만드는 연산 π)
2. u=fx⋅x+cx=800⋅0+320=320
3. v=fy⋅y+cy=800⋅1+240=1040
결과적으로 이 점은 이미지의 (320,1040) 위치에 찍히게 된다.
1.1.5. 그림을 통한 이해

2. 투영시 공분산의 변화
3차원 가우시안 스플래팅에서 월드 좌표계의 가우시안을 2D 이미지 평면으로 투영하는 과정은 기하학적 변환과 선형 근사를 포함한다. 이 때, 입체 공간상의 가우시안을 2D 평면으로 투영할 시, 공분산 행렬 ΣI를 구하는 수식은 다음과 같다.
ΣI=JRwcΣRwcTJT
이 수식의 각 요소가 의미하는 바를 구체적인 예시와 함께 설명한다.
2.1. 공분산 행렬의 회전 변환과 좌표계 일치
2.1.1. 3차원 공분산의 회전: RwcΣRwcT
3차원 가우시안의 형상을 결정하는 공분산 행렬 Σ를 월드 좌표계에서 카메라 좌표계로 변환할 때, 위에서 살펴본 좌표 변환과 달리 회전 행렬 Rwc를 앞뒤로 곱하는 형식을 취한다. 이는 공분산 행렬이 벡터가 아닌 이차 형식(Quadratic form)을 갖는 텐서이기 때문이다.
월드 좌표계의 확률 변수 벡터를 Xw라고 할 때, 카메라 좌표계에서의 벡터는 Xc=RwcXw로 정의된다. 이때 카메라 좌표계에서의 공분산 Σc는 기대값 연산을 통해 다음과 같이 유도된다.
E[XcXcT]=E[(RwcXw)(RwcXw)T]=E[RwcXwXwTRwcT]=RwcE[XwXwT]RwcT=RwcΣRwcT
따라서 좌표계 변환처럼 단순히 RwcΣ만을 곱해서는 행렬의 대칭성과 공분산으로서의 성질을 유지할 수 없으며, 반드시 전치 행렬을 뒤에 곱해줘야 한다.
왜 공분산이 E[XcXcT]의 형태를 따르는지 이해하기 어렵다면 아래 링크를 통해 복습하자.
2.1.2. 좌표계 변환에 따른 형상 변화 예시
위에서 살펴본 좌표에 월드 좌표계 기준 Zw축 방향으로 길쭉한 가우시안이 있다고 가정한다. 이때 공분산 행렬은 다음과 같은 형태를 가질 수 있다.
Σ=⎣⎢⎡0.10000.10001.0⎦⎥⎤
카메라가 Y축을 기준으로 시계 방향으로 90도 회전했으니, 회전 행렬은 다음과 같다.
Rwc=⎣⎢⎡001010−100⎦⎥⎤
이를 적용하여 카메라 좌표계에서의 공분산 Σc를 계산하면 다음과 같다.
Σc=RwcΣRwcT=⎣⎢⎡001010−100⎦⎥⎤⎣⎢⎡0.10000.10001.0⎦⎥⎤⎣⎢⎡00−1010100⎦⎥⎤=⎣⎢⎡1.00000.10000.1⎦⎥⎤
계산 결과, 월드 좌표계에서 Zw축으로 길었던 성분(1.0)이 카메라 좌표계에서는 첫 번째 행 성분인 Xc축으로 옮겨갔다. 즉, 월드에서 앞뒤로 길었던 물체가 카메라 좌표계에서는 가로 방향으로 길게 놓인 것으로 해석된다.
이해를 돕기 위해 3차원 가우시안을 2차원 가우시안 분포로 차원을 내린 후 정리해둔 글이 있다. 한 번 읽어보자.
2.2. 이미지 투영을 위한 비선형 변환과 야코비안
2.2.1. 투영 과정의 비선형성
카메라 좌표계의 점 Pc=(x,y,z)를 이미지 평면의 픽셀 좌표 (u,v)로 투영하는 식은 다음과 같다.
u=fxzx+cx,v=fyzy+cy
편의상 Pc=(Xc,Yc,Zc)를 Pc=(x,y,z)로 간소화하여 표현한다.
이 식은 분모에 깊이 값인 z가 포함되어 있어 입력값 x,y,z에 대해 비선형적(Non-linear)이다. 가우시안의 공분산을 투영할 때는 이 비선형 함수를 직접 적용하기 어려우므로, 특정 점(가우시안의 중심)에서의 1차 미분인 야코비안 행렬(Jacobian matrix) J를 사용하여 선형 근사한다.
2.2.2. 야코비안 행렬 J의 유도
야코비안 행렬 J는 픽셀 좌표 (u,v)를 카메라 좌표 (x,y,z)로 각각 편미분하여 구성한다.
J=[∂x∂u∂x∂v∂y∂u∂y∂v∂z∂u∂z∂v]
각 성분을 미분하면 다음과 같은 결과를 얻는다.
-
u에 대한 미분:
-
∂x∂u=zfx
-
∂y∂u=0
-
∂z∂u=−z2fx⋅x
-
v에 대한 미분:
-
∂x∂v=0
-
∂y∂v=zfy
-
∂z∂v=−z2fy⋅y
이를 행렬 형식으로 정리하면 야코비안 행렬이 유도된다.
J=[fx/z00fy/z−fx⋅x/z2−fy⋅y/z2]
여기서 z2이 분모에 들어가는 항들은 카메라로부터 멀어지거나 가까워질 때(Z축 변화) 이미지상의 픽셀이 변화하는 비율이 거리의 제곱에 반비례하여 급격히 변함을 나타낸다.
2.2.3. 야코비안 행렬 J 계산
좌표계상의 점은 Pc=(0,1,1)이고, 내부 파라미터는 fx=fy=800이므로, 이 값을 야코비안 행렬식에 대입하면 다음과 같은 결과를 얻는다.
-
fx/z=800/1=800
-
−fx⋅x/z2=−800⋅0/12=0
-
fy/z=800/1=800
-
−fy⋅y/z2=−800⋅1/12=−800
이를 행렬로 나타내면 다음과 같다.
J=[800008000−800]
2.2.4. 최종 ΣI 도출 과정
이제 카메라 좌표계의 공분산 Σc=diag(1.0,0.1,0.1)와 야코비안 J를 결합하여 ΣI=JΣcJT를 계산한다.
먼저 JΣc를 계산하면 다음과 같다.
JΣc=[800008000−800]⎣⎢⎡1.00000.10000.1⎦⎥⎤=[80000800−80]
이어서 (JΣc)에 JT를 곱한다.
ΣI=[80000800−80]⎣⎢⎡800000800−800⎦⎥⎤
ΣI=[(800⋅800)+0+00+0+00+0+0(80⋅800)+(−80⋅−800)]
ΣI=[640,00000128,000]
2.3. 계산 결과의 기하학적 해석
도출된 2D 공분산 행렬 ΣI는 이미지 평면에서 가우시안이 어떤 형태로 맺히는지를 보여준다.
-
방향성: 공분산 행렬의 비대각 성분(Off-diagonal elements)이 0이므로, 이미지 평면의 u축과 v축에 정렬된 타원 형태를 띤다.
-
크기 비대칭: u 방향의 분산(640,000)이 v 방향의 분산(128,000)보다 약 5배 크다. 이는 월드 좌표계에서 Zw축으로 길었던 가우시안이 카메라의 90도 회전으로 인해 카메라 좌표계의 Xc축으로 정렬되었고, 이것이 이미지의 가로(u) 방향으로 길게 투영되었음을 의미한다.
-
깊이 영향: v 방향의 분산은 카메라 좌표계의 y 성분 분산뿐만 아니라 z 성분(깊이)의 분산도 함께 반영된 결과다. 야코비안의 세 번째 열 성분인 −800에 의해 깊이 방향의 불확실성이 픽셀 평면의 세로 방향 확산에 기여하게 된다.
3. 픽셀 색상 계산
3.1. 픽셀에서의 가우시안 영향력 계산
특정 픽셀 i에 대해 j번째 2D 가우시안이 미치는 실질적인 불투명도(Opacity) αj는 다음 수식들로 결정된다.
σj=21ΔjTΣj−1Δj
αj=oje−σj
여기서 Δj는 픽셀 중심과 가우시안의 2D 투영 중심 사이의 2차원 좌표 평면상 거리 벡터(Offset)이며, Σj−1는 앞서 투영을 통해 구한 2D 공분산 행렬 ΣI의 역행렬이다.
첫 번째 수식은 픽셀이 가우시안 중심으로부터 공분산 형태를 기준으로 얼마나 떨어져 있는지를 나타내는 마할라노비스 거리(Mahalanobis distance)의 절반을 계산한다. 두 번째 수식은 이 거리값을 기반으로 지수 감쇠(Exponential falloff)를 적용하여 픽셀에서의 불투명도를 구한다. oj는 해당 가우시안이 중심점에서 가지는 고유의 불투명도 최댓값이다.
예를 들어, 앞선 시나리오에서 투영된 가우시안을 G1이라 하고, 이것의 2D 중심이 픽셀 i와 정확히 일치하여 Δ1=[0,0]T라고 가정한다. 이때 σ1=0이 되므로 αj=e0=1이다. 만약 이 가우시안의 고유 불투명도 o1=0.8이라면, 이 픽셀에서의 최종 불투명도 α1은 0.8×1=0.8이 된다.
반면, 같은 픽셀을 덮고 있는 또 다른 가우시안 G2의 중심이 픽셀 i로부터 떨어져 있어 σ2=1로 계산되었다면, e−1≈0.368이 된다. G2의 고유 불투명도가 o2=0.9라면, 픽셀 i에서의 실질적인 불투명도는 α2=0.9×0.368≈0.33으로 중심점 대비 크게 감소한다.
3.2. 알파 블렌딩을 통한 최종 픽셀 색상 결정
하나의 픽셀을 통과하는 광선(Ray) 상에 존재하는 m개의 가우시안들을 카메라에 가까운 순서(Front-to-back)대로 정렬한 뒤, 최종 색상을 누적하는 볼륨 렌더링 방정식은 다음과 같다.
Cich=j≤m∑Cjchαjk<j∏(1−αk)
이 수식에서 Cjch는 구면 조화 함수(Spherical Harmonics)에 의해 방향 의존적으로 결정된 j번째 가우시안의 특정 색상 채널(예: Red) 값이다. 우측의 ∏k<j(1−αk) 부분은 투과도(Transmittance)를 의미하며, 광선이 카메라를 출발해 목표 가우시안 이전까지 존재하는 k개의 앞선 가우시안들을 통과하면서 흡수되지 않고 살아남은 빛의 비율을 나타낸다.
구체적인 예시로, 픽셀 i의 Red 채널 색상을 3개의 가우시안(G1,G2,G3)이 카메라와 가까운 순서대로 덮고 있다고 가정한다.
- G1 (가장 앞): C1=1.0, α1=0.8
- G2 (중간): C2=0.5, α2=0.5
- G3 (가장 뒤): C3=0.2, α3=1.0
수식에 따라 누적되는 색상은 다음과 같이 계산된다.
-
G1의 기여도: 가장 앞에 있어 빛을 가리는 객체가 없으므로 초기 투과도는 1이다.
1.0×0.8×1=0.8
(이후 남은 빛의 비율: 1−0.8=0.2)
-
G2의 기여도: 앞선 G1에 의해 20%의 빛만 뚫고 들어왔다.
0.5×0.5×0.2=0.05
(이후 남은 빛의 비율: 0.2×(1−0.5)=0.1)
-
G3의 기여도: 앞선 G1,G2를 거치며 10%의 빛만 남았다. 불투명도가 1.0이므로 도달한 남은 빛을 모두 반사(또는 차단)한다.
0.2×1.0×0.1=0.02
(이후 남은 빛의 비율: 0.1×(1−1.0)=0)
최종적으로 픽셀 i의 Red 채널 색상 CiRed는 세 기여도의 합인 0.8+0.05+0.02=0.87이 된다. 앞에 있는 G1이 최종 색상에 가장 지배적인 영향을 미치고, 뒤에 있는 가우시안일수록 누적된 투과도에 의해 영향력이 크게 줄어드는 것을 확인할 수 있다.
3.3. 공분산 행렬의 양의 준정부호 보존 분해
3D 가우시안 스플래팅은 경사 하강법(Gradient descent)을 통해 가우시안의 위치, 색상, 그리고 3D 공분산 Σ 파라미터들을 반복적으로 최적화한다. 이때 공분산 행렬은 수식적으로 다음과 같이 분해되어 학습 모델에 인코딩된다.
Σ=RSSTRT
이러한 분해를 사용하는 이유는 명확하다. 공분산 행렬이 공간상에서 유효한 물리적 타원체 형태를 지니기 위해서는 수학적으로 항상 대칭 행렬(Symmetric matrix)이자 양의 준정부호(Positive semi-definite) 행렬이라는 특성을 띠어야 한다. 최적화 과정에서 3x3 공분산 행렬의 성분을 직접 조작하며 업데이트할 경우, 그레디언트의 이동에 의해 행렬이 이 수학적 조건을 벗어나 타원체가 붕괴되는 치명적인 문제가 발생한다.
따라서 회전을 나타내는 쿼터니언 변수 배열(추후 회전 행렬 R로 변환됨)과, 각 축의 크기(Scale)를 나타내는 3D 벡터 s(대각 행렬 S를 구성)를 독립적인 최적화 파라미터로 두고 학습을 진행한다. 크기 벡터 s에 지수 함수(Exponential activation)를 씌워 항상 양수값을 갖도록 강제하면, SST는 대각 성분이 모두 양수인 유효한 양의 준정부호 행렬이 된다. 여기에 회전 행렬 R을 앞뒤로 곱하는 RSSTRT 연산을 거치면, 학습 과정에서 파라미터가 어떻게 업데이트되더라도 결과물인 Σ는 항상 유효한 공분산 행렬의 조건을 완벽하게 유지할 수 있다.