本系列旨在幫助無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中自定義反向傳播的方法。