3DGS向前传播 前向传播3DGS 前向传播Forward Pass逐层详解第1层可学习参数 → 几何实体3DGS 每个高斯椭球有7 组可学习参数参数符号维度含义位置/均值μ3×1椭球中心在 3D 空间的位置 (x,y,z)四元数q4×1椭球的旋转朝向用四元数避免万向锁缩放s3×1椭球三个主轴方向的缩放因子 (sx,sy,sz)不透明度α1椭球的不透明度经 sigmoid 激活球谐系数sh48×3视角相关的颜色编码3阶×16基×3通道四元数 q → 旋转矩阵 R给定四元数 q (w, x, y, z)单位化后转换为 3×3 旋转矩阵[ 1-2y²-2z² 2xy-2wz 2xz2wy ] R [ 2xy2wz 1-2x²-2z² 2yz-2wx ] [ 2xz-2wy 2yz2wx 1-2x²-2y² ]缩放向量 s → 缩放矩阵 S[ sx 0 0 ] S [ 0 sy 0 ] [ 0 0 sz ]协方差矩阵 Σ R·S·Sᵀ·Rᵀ3×3 矩阵Σ (RS)(RS)ᵀ 展开计算过程 1. M R·S — 3×3先将椭球旋转到正确朝向再缩放 2. Σ M·Mᵀ — 3×3 正定矩阵描述椭球的形状朝向综合信息Σ 的几何含义椭球的等密度面满足 (x-μ)ᵀ·Σ⁻¹·(x-μ) 1Σ 的特征向量 椭球主轴方向特征值 半轴长的平方。第2层3D 高斯投影到 2D 屏幕这是EWA Splatting的核心步骤论文 §3.2。透视投影设相机参数为视野 fov、近平面近裁剪距离三维点 μ 投影为μ project(μ) K · [Rcam|tcam] · μ 具体计算简化 u fx * X/Z cx ┐ v fy * Y/Z cy ├─ μ (u, v)即屏幕像素坐标投影雅可比 J3×3为了保证反向传播可微EWA 在投影点 μ 处用一阶泰勒展开做局部仿射近似J ∂(project(μ))/∂μ 计算针孔相机模型 [ fx/Z 0 -fx·X/Z² ] J [ 0 fy/Z -fy·Y/Z² ] [ 0 0 0 ]第一行u 坐标对 X, Y, Z 的偏导数第二行v 坐标对 X, Y, Z 的偏导数第三行投影后深度维退化为零2D 协方差矩阵Σ J · Σ · Jᵀ 维度变化 J(3×3) · Σ(3×3) · Jᵀ(3×3) → Σ(3×3) 实际只取左上角 2×2 子矩阵因为第三行/列为退化得到 2D 高斯协方差 [ σu² σuv ] Σ [ σuv σv² ]这个过程相当于把 3D 空间中的椭球先做仿射投影变换得到的 2D 椭圆用协方差矩阵 Σ’ 描述其屏幕上的形状。第3层2D 高斯计算像素贡献2D 高斯函数对屏幕上任意像素位置 p (u, v)G(p; μ, Σ) exp( -½ (p-μ)ᵀ · Σ⁻¹ · (p-μ) )直观理解像素越靠近投影中心 μ’值越接近 1越远离指数衰减越快。衰减方向由 Σ’ 决定椭圆形状。像素贡献alpha maskαᵢ(p) σ · G(p; μ, Σ) ┬ ┬ │ └─ 空间衰减该像素落在椭球内的位置 └─ 基础不透明度经 sigmoid 从 α 参数激活其中σ sigmoid(α)确保不透明度在 [0,1] 区间。实际实现中的关键优化3DGS 用CUDA tile-based rasterization不是逐像素计算——对每个 16×16 的 tile先按深度排序所有覆盖该 tile 的高斯椭球然后在 tile 内逐像素做 alpha blending。第4层Alpha 合成体积渲染所有高斯按从前往后的深度排序后合成像素颜色C Σᵢ₌₁ᴺ Tᵢ · αᵢ · cᵢ 其中 Tᵢ Πⱼ₌₁ⁱ⁻¹ (1 - αⱼ) ← 透射率transmittance αᵢ αᵢ(p) ← 该高斯在像素p的alpha值 cᵢ 球谐函数(sh, view_dir) ← 视角相关颜色逐项含义i1: C₁ α₁·c₁ 第1个高斯挡住后面全部 i2: C₁ α₁·c₁ (1-α₁)·α₂·c₂ 第1个留了一个缝第2个穿过去 i3: C₁ α₁·c₁ (1-α₁)·α₂·c₂ (1-α₁)(1-α₂)·α₃·c₃ ...每加一个高斯(1-α)的乘积Tᵢ不断变小透明度逐渐被用掉这叫α 饱和alpha saturation——这也是为什么优化的关键指标之一是 alpha 利用率。旁谐系数视角相关颜色# 简化对每个高斯给一个视角方向 dsh 系数展开为 RGB 三通道c(d)Σₗₘ sh_lm · Y_lm(d)# l0 是直流分量基础颜色l0 是高频分量高光、镜面反射# 3 阶球谐 → 16 个基函数 × 3 通道 48 个系数但 3DGS 中额外存不透明度所以总数为 48第5层损失函数渲染出的图像I_render与真实图像I_gt比较L (1-λ) · L₁ λ · L_SSIM 其中 L₁ Σₚ |I_render(p) - I_gt(p)| 逐像素平均绝对误差 L_SSIM 1 - SSIM(I_render, I_gt) 结构相似性损失 λ 0.2默认L₁保证颜色准确低频约束SSIM保证纹理、边缘等结构正确高频约束两者互补只用 L₁ → 模糊只用 SSIM → 瑕疵完整数据流维度追踪参数层: μ (N×3) q (N×4) s (N×3) α (N×1) sh (N×48) │ │ │ │ │ └─┬───────┴────┬────┘ │ │ ▼ ▼ │ │ R (N×3×3) S (N×3×3) │ │ └─┬─────────┘ │ │ ▼ │ │ Σ (N×3×3) │ │ │ │ │ ┌─────▼─────┐ │ │ │ EWA 投影 │ │ │ └─────┬─────┘ │ │ ▼ │ │ Σ (N×2×2) │ │ μ (N×2) │ │ │ │ │ ┌─────▼─────┐ │ │ │ 高斯评估 │◄───────────────────┘ │ └─────┬─────┘ │ ▼ │ α(N×H×W) 每个高斯在每个像素上的alpha │ │ │ ┌─────▼──────┐ │ │ Alpha合成 │◄──── 球谐颜色 c(N×H×W×3) ────┘ └─────┬──────┘ ▼ C (H×W×3) 渲染图像 │ ┌─────▼─────┐ │ 损失函数 │ └─────┬─────┘ ▼ L (标量)关键理解点为什么用 Σ 而非直接存椭球因为协方差形式便于投影只需乘 J也便于求导参数和几何中间有一个优雅的中间表示为什么用 EWA 而不是直接投影直接投影 3D 高斯 → 2D 不是高斯EWA 用一阶泰勒展开把投影变为线性变换从而 3D 高斯严格变为 2D 高斯为什么 sorted alpha blending 可行因为 16×16 tile 内高斯数量有限GPU 做基数排序快逐像素 α 合成也是并行的为什么 L1SSIM 组合有效这是 3DGS 区别于 NeRF 的重要创新——NeRF 只用 MSE而对高频纹理恢复较差