3D Gaussian Splatting 渲染过程

本文介绍了如何通过将三维高斯分布转化为二维形式,实现从相机空间到射线空间的转换,采用正投影避免光线求交,使用分块和深度排序优化渲染效率,并利用α-blending处理高斯的透明度。非仿射变换和雅可比矩阵在此过程中起到了关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给定一组三维高斯点,渲染步骤大致为:1.camera space转成ray space 2.对像平面进行分块,然后对高斯排序 3.正投影发出射线进行α-blending

1. camera space->ray space,3D Gaussian->2D Gaussian

这个步骤将NeRF中的投影过程变为了正投影,引入了ray space的概念,让3D Gaussian 变为2D Gaussian.

  • 透视投影和正投影                   

一般的渲染过程都是透视投影,所有发出的ray都从camera发出,故而有个交点。splatting的方法则是用正投影,发射的ray全部平行于像平面。

3D Gaussian splatting的前期步骤就是将camera space转成ray space,本质就是将透视投影转变为正投影,让3D Gaussian转变为2D Gaussian,这样就免去了一大堆光线求交的计算。

  • ray space

给定一个ray space的坐标点(x0,x1,x2),其中(x0,x1)代表该点透视投影到图像上的坐标点,x2代表视点即camera到该点的距离。

假如给定其对应的camera space坐标点为(u0,u1,u2),则两者转换为:

  • 3D Gaussian->2D Gaussian

 camera space->ray space 的变换有一个特点:非仿射变换。仿射变换是可以用一个统一的线性变换矩阵将所有点的坐标进行转换,而根据上面的两个式子可以发现,每个点的ray space坐标都是以自身的camera space坐标为自变量的非线性函数,故并没有一个统一的变换矩阵。

 为了解决这个问题,作者采用了一个近似的方法,即用每个三维高斯的中心点的变换矩阵近似为各自的变换矩阵,这样对于每个高斯来讲,都是仿射的变换。而这个矩阵被称为雅可比矩阵J。

当然这样也使得每个高斯的大小不能太大,否则就会产生精度问题。

结合上述,则对于每个给定的三维高斯的协方差矩阵V'',以及其world space下的中心点坐标(u0,u1,u2),我们可以求得ray space下的高斯协方差。由于给的是world space下的坐标,所以得先乘以旋转平移矩阵W转化为camera space坐标,然后通过中心点坐标求出雅可比矩阵J,ray space下的高斯协方差就如下:

由于是正投影,故直接取最后的三维高斯协方差的前两行两列就是投影到像平面上的二维高斯协方差矩阵。 

二维高斯的中心点坐标就是camera space下的u0,u1除以第三维u2,即(u0/u2,u1/u2)

这样就将空间中的三维高斯转化为像平面上的二维高斯。

2. 分块排序  

为了渲染时能正确考虑到高斯之间的遮挡关系,需要对高斯进行基于深度的升序排序。

算法中还采用了分块的策略,将像平面分为16*16,每一块选取投影到这一块的二维高斯,对于覆盖多个块的高斯,每个覆盖块都会选取到它。然后每一块将选取好的高斯基于深度进行基数排序,得到距离像平面从近到远的16*16个各自排序好的高斯列表 。

对于为什么要分块,笔者猜测应该是为了渲染时能够减少计算量,否则每个像素颜色值可能根据所有高斯继续计算。

3. α-blending 

3D Gaussian splatting 也是对每个像素发出一条射线。

首先根据高斯的sh参数,得到高斯的颜色c

接着,计算高斯的不透明度alpha,即f(p),alpha要根据高斯的不透明度参数α以及像素点坐标和二维高斯中心的距离得到。

### 实现 3D Gaussian Splatting 的准备工作 为了在 Ubuntu 上成功实现 3D Gaussian Splatting (3DGS),需要确保操作系统环境已经准备好并安装必要的依赖项。对于 Ubuntu 22.04 版本,建议按照以下指南操作。 #### 安装基础软件包 首先更新系统的软件源列表,并安装一些基本工具和库: ```bash sudo apt-get update && sudo apt-get upgrade -y sudo apt-get install build-essential cmake git wget unzip pkg-config libopencv-dev python3-pip -y ``` #### 设置 Python 和 PyTorch 环境 由于 3D Gaussian Splatting 需要使用到 PyTorch 进行模型训练与推理,因此需先确认 CUDA 版本再选择合适的 PyTorch 版本来安装[^1]。可以通过命令 `nvcc --version` 来查看当前 GPU 所支持的 CUDA 版本号。接着通过 pip 工具来安装对应版本的 PyTorch 及其扩展组件 torchvision: ```bash pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117 ``` 这里假设使用的 CUDA 是 11.7 版本;如果不是,则应调整 URL 中 cu 后面的部分以匹配实际的 CUDA 版本。 #### 获取项目代码 从 GitHub 下载官方提供的 3D Gaussian Splatting 源码仓库: ```bash git clone https://github.com/graphdeco-inria/gaussian-splatting.git cd gaussian-splatting ``` #### 编译 C++ 组件 进入克隆下来的目录后,编译所需的 C++ 插件模块: ```bash mkdir build && cd build cmake .. make -j$(nproc) ``` 这一步骤会生成执行文件和其他必需的支持文件。 #### 准备数据集 如果打算测试自采集的数据集,在此之前还需要做额外的工作来处理这些原始图像序列或者点云数据,使其能够被算法所接受。具体方法可以参见相关文档说明[^3]。 #### 测试运行 最后,尝试启动示例程序验证整个流程是否正常工作: ```bash python3 main.py --config configs/example.yaml ``` 以上就是在 Ubuntu 平台上部署 3D Gaussian Splatting 技术的大致过程概述。需要注意的是,不同硬件配置可能会遇到不同的兼容性和性能优化问题,所以在实践中可能还需进一步调试参数设置。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值