当前位置:   article > 正文

3D Gaussian Splatting的cuda code总结_rendercuda

rendercuda

总结视频来源: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合成

把颜色写在正确的位置

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/904541
推荐阅读
相关标签
  

闽ICP备14008679号