3D Gaussian Splatting部分原理介绍和CUDA代码解读
本系列旨在帮助无CUDA代码经验的读者、以及3DGS的初学者理解代码逻辑。
3D GS论文原文链接:https://arxiv.org/abs/2308.04079
论文笔记链接:【论文笔记】3D Gaussian Splatting for Real-Time Radiance Field Rendering
【论文笔记】A Survey on 3D Gaussian Splatting 这篇综述的第3章也有详细介绍3D GS的方法。
官方代码链接:可微栅格化的CUDA代码(本系列文章介绍的代码均在此repo内);3D GS完整代码
系列文章地址及简介(点击蓝色文字即可跳转原文;内容均为本人原创,有误之处敬请指出):
- 3D Gaussian Splatting部分原理介绍和CUDA代码解读(一)——3D/2D协方差和高斯颜色的计算
- 介绍了3D和2D协方差矩阵的计算原理,以及通过球面谐波系数计算2D高斯颜色的过程。
- 涉及
forward.cu
文件中的computeCov3D
,computeCov2D
,computeColorFromSH
三个主要函数。
- 3D Gaussian Splatting部分原理介绍和CUDA代码解读(二)——栅格化开始时的预处理
- 介绍了3DGS渲染前的预处理步骤,主要包括计算2D高斯坐标、逆协方差、以及与每个高斯相交的tile数量等操作。
- 涉及
forward.cu
文件中的preprocessCUDA
函数,以及裁剪空间与NDC坐标等概念。
- 3D Gaussian Splatting部分原理介绍和CUDA代码解读(三)——栅格化
- 介绍了栅格化中高斯投影后的渲染准备流程,包括高斯的复制、排序和tile范围确定。
- 涉及
rasterizer_impl.cu
文件中CudaRasterizer::Rasterizer::forward
函数。
- 3D Gaussian Splatting部分原理介绍和CUDA代码解读(四)——渲染(栅格化的核心)
- 介绍了3DGS渲染的原理和细节。
- 涉及
forward.cu
文件中的renderCUDA
函数,以及线程、线程块和线程网格的相关知识。
- 3D Gaussian Splatting部分原理介绍和CUDA代码解读(五)——渲染部分的反向传播
- 介绍了反向传播梯度计算方式,以及渲染时的反向传播解析梯度计算。
- 涉及
backward.cu
文件中的renderCUDA
函数。
- 3D Gaussian Splatting部分原理介绍和CUDA代码解读(六)——高斯协方差投影与求逆的反向传播
- 推导了损失函数对2D/3D协方差的梯度,以及通过2D协方差对3D均值的梯度公式。
- 涉及
backward.cu
文件中的computeCov2DCUDA
函数,以及标量函数在求导过程中,矩阵为中间变量时的常用公式及证明方法。
- 3D Gaussian Splatting部分原理介绍和CUDA代码解读(七)——高斯均值投影与2D高斯颜色计算的反向传播
- 推导了损失函数通过2D均值和SH函数对高斯3D均值的梯度,以及对SH系数的梯度。
- 涉及
backward.cu
文件中的preprocessCUDA
和computeColorFromSH
两个主要函数。
- 3D Gaussian Splatting部分原理介绍和CUDA代码解读(八)——3D协方差计算的反向传播 & 其它知识
- 推导了损失函数对高斯3D尺度向量和归一化旋转四元数的梯度,并介绍了python与CUDA代码的连接相关知识。
- 涉及
backward.cu
文件中的computeCov3D
函数,以及pytorch中自定义反向传播的方法。