【3DGS (1) 】3D Gaussian Splatting全解 (原理+代码+公式) - 笔记


文章目录


本文为 B 站 3D GS 讲解视频 -【1】捏雪球的文字笔记,以及个人理解补充。

1-什么是 splatting?

  1. Splatting 是一种主动的**体渲染**方法,从 3D 物体渲染到 2D 平面
    1. 主动: 计算出每个发光粒子**如何影响像素点**
  2. Ray-casting 是被动的(NerF)
    1. 计算出每个像素点受到发光粒子的影响来生成图像
  • 在这个3D高斯渲染的上下文中,发光粒子指的是3D空间中的点每个点都具有一定的属性(如颜色、不透明度等),可以影响最终渲染图像上的像素。

    这些"发光粒子"可以理解为**空间中的采样点**,它们:

    • 在Splatting方法中,主动计算每个粒子如何影响2D平面上的像素
    • 而在Ray-casting(如NeRF)中,则是从像素出发,被动计算它们受到这些粒子的影响

2- Splatting 的流程

  1. 选择【雪球 / 核】

    • 选 3D 高斯椭球的原因:仿射变换后的高斯核仍然**封闭**

      在3D Gaussian Splatting中,"封闭"指的是**高斯核在经过仿射变换后仍然保持其数学特性和形状的封闭性**。这是选择使用3D高斯椭球的一个重要原因。

      具体来说,这种封闭性意味着:

      • 当我们对高斯核进行仿射变换(如旋转、缩放等)时,结果仍然是一个高斯核
      • 当从3D投影到2D平面时,结果依然保持高斯分布的特性

      这种数学上的封闭性质使得高斯核在图形渲染过程中具**有良好的可控性和可预测性**。

  2. 抛掷雪球:从3D投影到2D,得到足迹

  3. 将足迹加以合成,形成最后的图像

3-为什么3d gaussian: 是椭球?

  1. 2D 时是椭圆,3D 时是实心的椭球(一层层的椭球面套娃)

4-各向异性和各向同性是什么意思?

  1. 各向同性:在所有方向具有相同的扩散程度(梯度), 球
  2. 各向异性:在不同方向具有不同的扩散程度(梯度),椭球

5-协方差矩阵怎么就能控制椭球形状呢?

  • 任意高斯可以看作是标准高斯通过仿射变换得到
    • 任意椭球可以看作是通过仿射变换得到

6-协方差矩阵怎么就能用旋转和缩放矩阵表达?

python 复制代码
# mod 是一个缩放(另外的缩放

def computeConv3D(scale, mod, rot):
	# create scaling matrix
	S = np.array([[scale[0] * mod, 0, 0],
							 [0, scale[0] * mod, 0],
							 [0, 0, scale[0] * mod])
							 
	R = rot
	M = np.dot(R, S)
	conv3D = np.dot(M, M.T) # R S S^T R^T
	
	return conv3D

仿射变换是一种**线性变换加上平移**的组合,它可以:

  • w = A x + b (线性变化 + 平移)
  • A = RS (旋转 * 缩放)

转置的分配律:对于任意两个矩阵

( A ⋅ B ) ⊤ = B ⊤ ⋅ A ⊤ (A \cdot B)^\top = B^\top \cdot A^\top (A⋅B)⊤=B⊤⋅A⊤

  • 旋转和缩放 可以通过 协方差矩阵 通过 特征值分解得到

7-仿射变换

仿射变换是一个更大的概念,它包含两个部分:

  1. 线性变换 :包括旋转、缩放、切变等
    • 旋转:改变方向,但不改变形状大小
    • 缩放:改变大小,但不改变方向
    • 切变:使形状倾斜变形
  2. 平移:单纯的位置移动,不改变形状、大小或方向

这就是为什么仿射变换可以将球体转换成椭球体,因为它结合了这些基本变换来实现更复杂的形状变化,同时还能保持某些重要的几何特性,比如点的共线性和线段的比例。

  • 保持点的共线性(直线上的点变换后仍在一条直线上)
  • 保持线段的比例
  • 可以实现旋转、缩放、平移、切变等几何变换

在3D高斯椭球的上下文中,仿射变换的一个重要特性是它可以将球体变换为椭球体,同时保持**高斯分布的数学性质。这种变换后的结果仍然具有可预测性和可控性。

相关推荐
尸僵打怪兽12 分钟前
软考错题集
java·python·计算机网络·操作系统·c·软考·计算机组成原理
正经教主32 分钟前
【AI入门】CherryStudio入门4:创建知识库,对接思源笔记
笔记·ai·知识库·cherrystudio·思源笔记
香蕉可乐荷包蛋39 分钟前
Python学习之路(玖)-图像识别的实现
开发语言·python·学习
伊织code41 分钟前
PyTorch API 1 - 概述、数学运算、nn、实用工具、函数、张量
人工智能·pytorch·python·深度学习·ai·api
Ayanamii丶1 小时前
DAY 22 复习日kaggle泰坦里克号人员生还预测
人工智能·python·机器学习
狂奔solar1 小时前
TAPIP3D:持久3D几何中跟踪任意点
3d
11054654011 小时前
7、三维机械设计、装配与运动仿真组件 - /设计与仿真组件/3d-mechanical-designer
前端·javascript·3d
带刺的坐椅1 小时前
FastMCP(python)和 SolonMCP(java)的体验比较(不能说一样,但真的很像)
java·python·solon·mcp·fastmcp
笑鸿的学习笔记1 小时前
虚幻引擎5-Unreal Engine笔记之UE编辑器退出时的保存弹框
笔记·ue5·虚幻