从EWA Splatting到3DGS:一阶泰勒展开如何保住高斯的“椭圆”形状?
从EWA Splatting到3DGS一阶泰勒展开如何保住高斯的“椭圆”形状在计算机图形学的演进历程中三维高斯分布3D Gaussian的投影问题一直是个既基础又关键的挑战。想象一下当你试图将一个完美的三维椭球投影到二维屏幕上时如果处理不当这个椭球可能会扭曲变形失去原有的优雅形状。这正是3D高斯泼溅3D Gaussian Splatting, 3DGS技术需要解决的核心问题之一。传统方法中EWA Volume Splatting提出了一种精妙的解决方案——局部仿射近似。这种思想后来被3DGS借鉴并发展通过一阶泰勒展开来近似非线性的投影变换从而在二维平面上保持高斯的椭圆特性。本文将深入探讨这一技术背后的数学原理和实现细节特别聚焦于雅可比矩阵如何扮演关键角色以及为什么这种线性近似能够如此有效地维持高斯的几何特性。1. 视图变换与投影变换的基础在三维图形渲染中将一个物体从世界坐标系转换到屏幕坐标系需要经过两个主要的变换步骤视图变换和投影变换。视图变换负责将物体从世界坐标系转换到相机坐标系而投影变换则负责将三维空间中的点映射到二维图像平面上。视图变换通常由相机的外参矩阵决定包括旋转和平移两部分。由于视图变换是仿射变换它不会改变三维高斯的本质特性——一个经过旋转或平移的椭球仍然是椭球。数学上这可以表示为\mu W \mu \Sigma W \Sigma W^T其中W是视图变换矩阵μ和Σ分别是原始高斯分布的均值和协方差矩阵。投影变换则更为复杂。在针孔相机模型中投影变换将三维点(x,y,z)映射到二维图像坐标(u,v)u f_x \frac{x}{z} c_x v f_y \frac{y}{z} c_y这种变换是非线性的直接应用会破坏高斯分布的性质。具体来说经过非线性变换后原本的椭球可能不再保持椭圆形状这就引出了我们需要解决的核心问题。2. 非线性问题的线性近似面对投影变换的非线性挑战EWA Splatting提出的局部仿射近似提供了一种巧妙的解决方案。其核心思想是在三维高斯分布的均值点附近用一阶泰勒展开来近似这个非线性变换。让我们将投影变换表示为函数FF\left(\begin{bmatrix}x\\y\\z\end{bmatrix}\right) \begin{bmatrix}f_x x/z c_x\\f_y y/z c_y\end{bmatrix}在点μ₀[x₀,y₀,z₀]ᵀ附近进行一阶泰勒展开F(μ) ≈ F(μ₀) J(μ - μ₀)其中J是雅可比矩阵包含了F在各个方向上的偏导数J \begin{bmatrix} \frac{∂F₁}{∂x} \frac{∂F₁}{∂y} \frac{∂F₁}{∂z}\\ \frac{∂F₂}{∂x} \frac{∂F₂}{∂y} \frac{∂F₂}{∂z} \end{bmatrix} \begin{bmatrix} f_x/z 0 -f_x x/z²\\ 0 f_y/z -f_y y/z² \end{bmatrix}这种近似的物理意义在于在三维高斯分布的均值点附近的小范围内我们可以把非线性的投影变换看作一个线性变换。这正是保持高斯形状不变的关键所在。3. 协方差矩阵的变换通过一阶泰勒近似我们得到了投影变换的线性表示。接下来需要计算变换后的二维协方差矩阵Σ。根据概率论知识线性变换后的协方差矩阵可以表示为Σ J Σ J^T这个结果的推导过程如下设变换后的点为F(μ) ≈ F(μ₀) J(μ - μ₀)变换后的协方差是E[(F(μ)-E[F(μ)])(F(μ)-E[F(μ)])ᵀ]代入线性近似后可以得到Σ J Σ Jᵀ在实际的3DGS实现中这个过程分为几个步骤应用视图变换Σ_view W Σ Wᵀ应用投影变换的线性近似Σ J Σ_view Jᵀ J W Σ Wᵀ Jᵀ以下是3DGS源码中计算2D协方差矩阵的关键部分// 应用视图变换 float3 t transformPoint4x3(mean, viewmatrix); // 计算雅可比矩阵 glm::mat3 J glm::mat3( focal_x / t.z, 0.0f, -(focal_x * t.x) / (t.z * t.z), 0.0f, focal_y / t.z, -(focal_y * t.y) / (t.z * t.z), 0, 0, 0 ); // 提取视图变换中的旋转部分 glm::mat3 W glm::mat3( viewmatrix[0], viewmatrix[4], viewmatrix[8], viewmatrix[1], viewmatrix[5], viewmatrix[9], viewmatrix[2], viewmatrix[6], viewmatrix[10] ); // 组合变换 glm::mat3 T W * J; // 原始3D协方差矩阵 glm::mat3 Vrk glm::mat3( cov3D[0], cov3D[1], cov3D[2], cov3D[1], cov3D[3], cov3D[4], cov3D[2], cov3D[4], cov3D[5] ); // 最终2D协方差 glm::mat3 cov glm::transpose(T) * glm::transpose(Vrk) * T;4. 实现细节与优化在实际的3DGS实现中有几个关键细节值得注意视锥体裁剪在投影前需要确保三维点位于相机视锥体内。代码中使用tan(HFOV/2)和tan(VFOV/2)来定义视锥边界并允许一定程度的超出乘以1.3系数const float limx 1.3f * tan_fovx; const float limy 1.3f * tan_fovy; const float txtz t.x / t.z; const float tytz t.y / t.z; t.x min(limx, max(-limx, txtz)) * t.z; t.y min(limy, max(-limy, tytz)) * t.z;GLM的列主序存储3DGS使用GLM数学库它采用列主序存储矩阵。这与常见的行主序习惯不同需要在代码中特别注意// GLM中矩阵构造是按列填充的 glm::mat3 A glm::mat3( 1.0f, 2.0f, 3.0f, // 第一列 4.0f, 5.0f, 6.0f, // 第二列 7.0f, 8.0f, 9.0f // 第三列 ); // 实际内存布局1,2,3,4,5,6,7,8,9协方差矩阵的对称性三维高斯的协方差矩阵是对称的因此只需要存储上三角部分的6个元素即可这在内存优化上很有价值。5. 数学验证与实例分析为了验证一阶泰勒近似的有效性我们可以通过一个具体例子来说明。考虑一个位于z2处的三维高斯球其协方差矩阵为Σ \begin{bmatrix} 0.1 0 0\\ 0 0.1 0\\ 0 0 0.1 \end{bmatrix}假设相机参数为f_xf_y1计算投影后的二维协方差计算雅可比矩阵在(0,0,2)处的值J \begin{bmatrix} 0.5 0 0\\ 0 0.5 0 \end{bmatrix}投影后的协方差Σ J Σ J^T \begin{bmatrix} 0.025 0\\ 0 0.025 \end{bmatrix}这个结果仍然是一个圆形各向同性的二维高斯分布验证了我们的方法能够保持高斯的形状特性。对于更一般的椭球情况这种方法同样能保持椭圆的形状只是会根据视角和位置进行适当的缩放和变形。6. 性能考量与工程实践在实际的3DGS系统中投影变换的高效实现至关重要。以下是几个关键的工程优化点并行计算每个高斯点的投影可以独立计算非常适合GPU并行处理。内存访问协方差矩阵的对称性减少了内存占用和访问次数。近似精度一阶泰勒展开在小范围内精度足够对于远离均值点的区域可以通过高斯分布的快速衰减自然忽略。在3DGS的原始实现中这些优化使得系统能够实时渲染数十万个高斯点实现了高质量的实时神经渲染效果。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2452402.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!