3D Gaussian Splatting的cuda code总结

总结视频来源:https://www.youtube.com/watch?v=1buFrKUaqwM

总结视频来源作者:AI葵

3D高斯分布投影到图像上,每个像素投影到该像素上的高斯数不同,因此不能用pytorch并行化处理

一、前向传播

前向传播

  1. 计算投影出来圆圈的半径
  2. 计算圆圈覆盖的像素数(把画面分成了很多个方块,记录圆与哪些方块相连)
  3. 计算每个高斯的前后顺序(alpha合成)
  4. 计算每个像素的颜色

1. preprocessCUDA

diff-gaussian-rasterization/cuda_rasterizer/forward.cu

预处理CUDA preprocessCUDA函数用于解决第一个第二个问题 

将3D投影到投影上

 计算三个轴的长度的过程

计算投影到二维后椭圆的样子

 计算长轴的半径

计算高斯的半径

有了圆心和半径16×16瓦片,计算圆覆盖的像素数

 保存后面所有用到的值

tilesTouch保存总共覆盖了几个 tile

2. rasterizer_impl.cu

解决第三个问题

将tile+高斯想象成一个组合,按照tile的数量,先排列。如果是同一个tile,按照每个高斯的顺序排列

一直到这里 

3. renderCUDA

解决第四个问题

一张图片分割成很多图块,图块中每个线程负责一个像素,计算颜色

把每个tile当时一个块,每个块里的线程其实就是一个图块中的一个像素

共享内存

更新变量 

把每个像素点对高斯的中心做一个距离计算,应用在高斯分布的概率计算中得到点的alpha

如果alpha<0.0001就会结束这个计算 

alpha合成

把颜色写在正确的位置

  • 13
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值