Pajama StudioGaussian Research Lab

THE MATHEMATICS OF DYNAMIC GAUSSIANS

让时间
进入高斯。

4D Gaussian Splatting / Mathematical Field Notes

从一个三维椭球到随时间变化的像素。
把关键数学、推导直觉与当前 renderer 的实现约定,放在同一条线上。

39 组核心公式10 个章节中文说明 · 可复制 LaTeX2026.09.17
00

READ THIS FIRST

先约定符号,再推公式。

基础

空间用三维列向量,时间用独立的标量。先理解共同的投影与合成,再选择具体动态表示。

𝛍(t)

世界坐标中的 Gaussian 中心,3×1

𝚺(t)

空间协方差,3×3;单位是长度平方

𝐂

屏幕协方差,2×2;单位是像素平方

t,τ,ρ

归一化时间、时间中心、时间核宽度

αi,Ti

像素处 alpha、到达该层前的透射率

𝐑,𝐉

旋转/线性变换、投影 Jacobian

  1. 参数与协方差
  2. 相机与投影
  3. 椭圆与合成
  4. 时间与运动
  5. 损失与梯度
01

THE PRIMITIVE

用协方差描述一个椭球。

必会

中心决定位置,协方差决定形状与方向,不透明度决定该基函数对图像的贡献。

(1.1)三维 Gaussian 核
G(𝐱)=e12(𝐱𝛍)T𝚺1(𝐱𝛍)

这里是未归一化的核,不是概率密度。Splat 的 opacity 单独学习,不能额外乘概率密度归一化系数后仍期待相同亮度。

(1.2)存储参数 → 有效参数
sk=eko=sigmoid(β)=11+eβ

log-scale 保证理论尺度为正;sigmoid 将基准 opacity 映射到 0–1。实际实现仍需防止溢出与下溢。

(1.3)协方差的安全参数化
𝚺=𝐑diag(s12,s22,s32)𝐑T𝚺=k=13𝐚k𝐚kT𝐚k=sk𝐫k

rₖ 是旋转矩阵的第 k 列。正尺度时 Σ 正定;轴向量外积求和与矩阵乘法等价,适合直接写进 shader。

(1.4)单位四元数与旋转矩阵
𝐑(𝐪)=[12(y2+z2)2(xywz)2(xz+wy)2(xy+wz)12(x2+z2)2(yzwx)2(xzwy)2(yz+wx)12(x2+y2)]

这里采用 q=(w,x,y,z)、右手系、主动旋转与列向量,且 ‖q‖=1。内存中的行/列布局和参考实现可能采用转置约定;最终应比较轴向量和 Σ,而非只比较名为 R 的数组。

02

WORLD → CAMERA → PIXELS

把三维不确定性投影到屏幕。

必推

本节推导采用 OpenCV 风格相机轴:x 向右、y 向下、z 向前。与 wgpu 的视图和裁剪空间衔接时,需要显式处理轴向和投影约定。

(2.1)世界 → 相机
𝐱c=𝐑cw𝐱w+𝐭cw𝐂w=𝐑cwT𝐭cw

下标 cw 明确表示 world→camera。相机中心不是平移项 t;camera→world 位姿需要先求逆。

(2.2)针孔投影
π(x,y,z)=[fxxz+cxfyyz+cy],z>0

fx、fy 是像素单位焦距;cx、cy 是主点。此处忽略镜头畸变,标定与缩放后的图像内参必须一致。

(2.3)对投影求偏导
𝐉=π𝐱c=[fxz0fxxz20fyzfyyz2]
(2.4)先证明线性变换的协方差
𝐘=𝐀𝐗+𝐛Cov(𝐘)=𝐀𝚺𝐀T

由 Y−E[Y]=A(X−μ),再对外积取期望得到。平移消去,因此不影响协方差。

(2.5)一阶线性化与屏幕协方差
π(𝐗)π(𝛍c)+𝐉(𝐗𝛍c)𝚺c=𝐑cw𝚺𝐑cwT𝐂=𝐉𝚺c𝐉T+ε𝐈2

J 在 Gaussian 中心处求值。ε 是像素方差;当前 shader 使用 0.3。透视是非线性的,所以这是一阶近似,不是任意透视变换都精确保留 Gaussian。

(2.6)与 WGSL 对齐的齐次坐标导数
D(𝐡xy𝐡w)(δ𝐡)=δ𝐡xy𝐡w𝐡xyδ𝐡w𝐡w2

h=PV[μ,1]ᵀ,δh=PV[aₖ,0]ᵀ。将导数按 viewport 尺寸换成像素,再对三条投影轴做外积求和。这个形式把视图坐标的符号差异包含在 P、V 中。

手算检查

fx=fy=100,中心为 (1,2,10),Σc=diag(1,4,9):

𝐉=[100-1010-2]𝐂=[109.31818436.3]

非零的交叉项来自离轴投影。即使三维协方差是对角矩阵,投影椭圆也可能发生旋转。

03

THE SCREEN FOOTPRINT

从协方差到一个像素的权重。

必会

协方差告诉我们形状;逆协方差定义到中心的“加权距离”。

(3.1)2×2 协方差的逆
𝐂=[abbc]𝐐=𝐂1=1acb2[cbba]

正定要求 a>0、ac−b²>0。接近奇异时,逆矩阵会放大误差;需要与 renderer 一致的滤波和数值下限。

(3.2)Mahalanobis 距离与像素 alpha
𝐝=𝐩𝛍2Dr2=𝐝T𝐐𝐝α(𝐩,t)=o(t)er22

空间核指数含 1/2。当前 fragment shader 另做 alpha≤0.99 和 alpha<1/255 的丢弃;以下训练推导先忽略这些分段操作。

(3.3)椭圆主轴与标准差
λ±=a+c±(ac)2+4b22r±=kλ±

特征向量是主轴方向,√λ 是对应方向的像素标准差。k=3 给出常用的 3σ 覆盖;当前实现对 sigma 额外设了 192px 上限。

(3.4)由 alpha 阈值推覆盖范围
r22log(o(t)αmin)

仅在 o(t)≥αmin 时有非空范围。固定 3σ quad 与阈值支持集不完全相同;“Gaussian 理论无限支持”与有限 GPU footprint 需要区分。

04

ORDER MATTERS

为什么透明度必须按顺序合成。

必推

下式按近→远排列。颜色与 alpha 的贡献受前面所有层的透射率影响。

(4.1)前向透射率
Ti=j<i(1αj),T1=1
(4.2)最终像素颜色,包含背景
𝐂pixel=i=1NTiαi𝐜i+TN+1𝐜bg
(4.3)远→近的预乘 over 操作
𝐜~out=αs𝐜s+(1αs)𝐜~dst

graphics pipeline 使用远→近顺序时,shader 输出 RGB×alpha,再配置 premultiplied blending。重复乘 SrcAlpha 会让颜色额外变暗。

红在前(0.50, 0, 0.25)
蓝在前(0.25, 0, 0.50)

红、蓝两层 alpha 都为 0.5,背景为黑。交换顺序改变结果,所以普通 atomic-add 不能代替有序透明合成。

(4.4)与体渲染的联系
T(s)=es0sσ(u)duαi=1eσiΔsi

第二式来自分段恒定密度的射线积分,帮助理解 transmittance。3DGS 通常直接学习 opacity 并评估投影核,不能把它说成对每个三维 Gaussian 都做了精确物理射线积分。

05

THIS VIEWER · STG-LITE

让位置、旋转和可见性随时间变化。

项目核心

下面采用本项目 PLY/WGSL 的实际参数化。归一化时间 t 不自动等于物理秒。

(5.1)物理秒与模型时间
t=ss0DΔt=tτ

D 是有来源的时间尺度。例如 loader 使用 frame/N 时,通常需与 N/fps 对齐,而不是擅自换成最后一帧时间。当前研究模型 PLY 不携带 fps/时长,播放器的 10 秒映射仍需追溯验证。

(5.2)STG-Lite 的时间核
ρ=eτw(t)=e(Δtρ)2o(t)=sigmoid(β)w(t)

注意指数没有 1/2。若用标准 Gaussian 的标准差 σt 表示同一核,则 σt=ρ/√2。论文写 exp(−sτ·Δt²),这里 sτ=ρ⁻²;代码对 ρ 还有最小值保护。

(5.3)三次运动轨迹
𝛍(t)=𝛍0+𝐦1Δt+𝐦2Δt2+𝐦3Δt3
(5.4)速度取决于时间单位
d𝛍dt=𝐦1+2𝐦2Δt+3𝐦3Δt2d𝛍ds=1Dd𝛍dt

m₁ 是相对模型时间的系数;只有空间单位与 D 都明确后,才能解释为米/秒。改变归一化规则时,多项式系数也必须对应变换。

(5.5)四元数的一阶时间模型
𝐮(t)=𝐪0+Δt𝛚𝐪(t)=𝐮(t)𝐮(t)

q₀ 与 ω 均为四维系数,且需 u(t)≠0。这里 ω 不是刚体公式中的三维角速度;该模型也不是一般意义上的 SLERP。

(5.6)归一化的 Jacobian
𝐪𝐮=𝐈4𝐪𝐪T𝐮d𝐪dt=𝐪𝐮𝛚

归一化会去掉沿 q 自身方向的变化分量;分母接近零时梯度不稳定。不要跳过零范数与有限值检查。

动一下,观察公式

同一条轨迹,不同的时间权重

这是二维示意:标记沿三次轨迹移动,亮度随时间核变化;不是完整的训练或 rasterizer。

时间权重 w(t) = 1.0000

x(t)y(t)τ = 0.5
06

TWO OTHER FORMULATIONS

“加上时间”,还有不同的数学方式。

理解差异

下面两种表示用于比较;当前 STG-Lite viewer 没有实现这两套 decoder。

形变网络:由规范空间预测动态参数

(6.1)参数形变的概念接口
𝚫𝐆i(t)=𝐅θ(𝐆i0,t)𝐆i(t)=Decode(𝐆i0,𝚫𝐆i(t))

这是方法族的接口表示。Wu et al. 使用时空特征编码与 deformation decoder;平移、尺度、旋转各 head 的增量域和激活规则必须按实现核对。

原生 4D Gaussian:联合分布 → 固定时刻的 3D 切片

(6.2)四维联合协方差的分块
𝚺4=[𝐀𝐛𝐛Tc]0

z=[xᵀ,t]ᵀ;均值 μ₄=[μxᵀ,μt]ᵀ。A 为 3×3 空间块,b 为 3×1 时空交叉项,c>0 为时间方差。四维旋转不等于一个三维四元数。

(6.3)条件 Gaussian:均值与 Schur 补
𝛍x|t=𝛍x+𝐛c1(tμt)𝚺x|t=𝐀𝐛c1𝐛T

第一式让空间中心随时间线性移动;第二式是条件协方差,不是直接拿 A。对单个固定的联合 Gaussian,条件协方差不随 t 变化。

(6.4)空间条件核 × 时间边缘核
G4(𝐱,t)=Gx|t(𝐱)e(tμt)22c

对二次型配方即可得到。这里均指未归一化核;时间边缘项必须保留,决定该 primitive 在该时刻的权重。条件化后再走三维投影与合成。

(6.5)一个可手算的条件化例子
𝐀=diag(2,1,1),𝐛=(1,0,0)T,c=1𝚺x|t=𝐈3

设 μ₄=0,条件中心是 (t,0,0),时间权重是 exp(−t²/2)。时空相关性 b 编码了这个简单运动。

07

APPEARANCE ≠ GEOMETRY

几何决定覆盖,外观决定颜色。

理解

不同 Gaussian 方法存储的颜色信息不同。相同字段名不一定有相同激活方式。

(7.1)静态 3DGS 常用的方向外观
𝐜i(𝐯)==0Lm=𝐚imYm(𝐯)

Yℓm 为球谐基,a 为 RGB 系数;v 必须是按实现约定的单位观察方向。不要把这条外观函数理解成可重光照的材质。

(7.2)先合成特征,再解码
𝐅(𝐩,t)=iTiαi𝐟i(t)𝐂=𝐃θ(𝐅,view inputs)

这是 STG 完整版特征渲染的概念式;特征组成与 decoder 输入要跟源码核对。当前 Lite 使用直接 RGB,没有在运行时调用这个 MLP。

08

PIXEL ERROR → PARAMETERS

渲染是前向过程,训练把误差传回来。

必推

先固定点集合、排序与可见性分支,理解局部梯度。完整训练还包含分段裁剪、离散的密度控制与具体实现的梯度路径。

(8.1)常见的 photometric 目标
=(1λ)I^I1M+λ(1SSIM(I^,I))+(θ)

M 为参与 L1 平均的像素通道数;R 为方法特定的正则,可能为零。这是常见目标结构,不是所有 4DGS 共享的一套固定 loss。训练相机、时间采样与 mask 必须记录。

(8.2)Gaussian 核对投影均值的梯度
𝛍2Dα=α𝐐𝐝

推导:d=p−μ,∂(−½dᵀQd)/∂μ=Qd,再乘指数本身。这里固定协方差,忽略 clamp/cutoff。

(8.3)对屏幕协方差的梯度
α𝐂=α2𝐐𝐝𝐝T𝐐

利用 d(C⁻¹)=−C⁻¹(dC)C⁻¹。这里固定投影中心且 C 对称;若只存独立的 (a,b,c),交叉项 b 的导数要合并两个对称元素的贡献。

(8.4)对 opacity logit 的梯度
αβ=α(1sigmoid(β))
(8.5)位置梯度不只有投影均值这一条路
𝛍c=𝐉T𝛍2D+(vec(𝐂)𝛍c)Tvec(𝐂)

本式固定外观与 opacity,只展开投影均值和协方差两条路径。J 随三维位置变化,C=JΣcJᵀ 也随位置变化;只乘 Jᵀ 会漏掉后者。SH/decoder 若使用位置相关的观察方向,还需补外观路径。转回世界坐标的梯度要乘对应旋转的转置。

(8.6)合成对 alpha 与颜色的梯度
𝐂αi=Ti(𝐜i𝐁i)𝐂𝐜i=Tiαi𝐈3

Bᵢ 是从第 i 层后面开始、按自身透射率合成的尾部颜色,包含背景。增加前景 alpha 会增加本层贡献,同时遮住后面颜色。此式假定排序固定。

(8.7)时间核与运动系数的导数
dwdt=2Δtρ2wwτ=2Δt2ρ2w𝛍𝐦k=Δtk𝐈3

这些是数学函数的局部导数。官方 STG 训练在部分时间路径上使用 detach;“纸面上可导”不等于实现对所有变量都传播该梯度。

(8.8)用有限差分检验一个梯度
θk(θ+h𝐞k)(θh𝐞k)2h

选 float64 的小例子,避开深度交换、near plane、cutoff 和 clamp 边界;比较多个 h 的误差趋势。单一 h 恰好接近不能证明整个 backward 正确。

09

FROM EQUATIONS TO CODE

会解释,也要能检查。

实践

建议先完成六个小练习,再沿同一顺序走读 renderer。

  1. 投影。从 u=fx·x/z+cx 推出 J 的第一行,说出单位。
  2. 协方差。从期望定义证明 Cov(AX+b)=AΣAᵀ,解释为什么透视需要近似。
  3. 混合。手算红蓝两层各 0.5 alpha,解释前后顺序的差别。
  4. 时间。把归一化轨迹改成秒,检查速度系数与时间核宽度。
  5. 条件化。完成第 6 节的 Schur 补例子,说清它与 STG 三次轨迹的差异。
  6. 梯度。固定排序,对 μ、C 或 opacity 做一次 finite difference。
阶段当前仓库位置核对什么
参数读入src/lib.rs · parse_stg_ply字段、log-scale、logit、wxyz
时间求值ResearchSplat::sample / vs_mainCPU 与 GPU 的同一运动和时间核
投影椭圆projected_axis / vs_main齐次导数、轴外积、像素单位
像素合成fs_main / blend state指数、cutoff、预乘、排序
原生宿主src/stg_pass.rs矩阵、viewport、时间契约
教学训练scripts/train_toy_stg.py前向、loss、backward、导出

PRIMARY SOURCES

继续读原始材料。

公式采用统一符号重新整理;涉及具体方法时,以上述论文与本项目实际代码约定为准。

本页使用原生 MathML 排版,公式和字体不依赖外部脚本。较长公式可在框内横向滚动;支持复制 LaTeX 与打印。建议使用现代 Chrome、Edge、Firefox 或 Safari。