首页 / 文章 / Gaussian Point Splatting:随机点采样实现数亿高斯的实时渲染
← 返回
AI技术

Gaussian Point Splatting:随机点采样实现数亿高斯的实时渲染

✍️ zhirenhun 📅 2026/6/4 👁 137 阅读 ⏱ 10 分钟
Gaussian Point Splatting:随机点采样实现数亿高斯的实时渲染

背景:3D Gaussian Splatting 的规模困境

3D Gaussian Splatting(3DGS)自 2023 年提出以来,已成为神经渲染领域最具影响力的方法之一。其核心思想是用大量三维高斯函数表示场景,通过排序和基于瓦片的栅格化(tile-based rasterization)实现高质量的新视角合成。然而,随着场景规模的增长——从几十万高斯到数亿高斯——传统 3DGS 管线的瓶颈愈发突出:排序操作成为 GPU 上的串行化瓶颈,基于瓦片的渲染在大量高斯分布的场景中导致线程负载严重不均。当场景包含数亿个高斯时,即使是最先进的 GPU 也难以达到实时帧率。

SIGGRAPH 2026 上,来自代尔夫特理工大学(TU Delft)的 Joris Rijsdijk、Christoph Peters 等人发表了论文《Gaussian Point Splatting》,提出了一种全新的随机渲染方法,能够在消费级显卡上实时渲染数亿个高斯函数,同时保持与原始 3DGS 高度一致的渲染质量。

核心创新:随机点采样 + 64 位原子操作

Gaussian Point Splatting 的核心思想极其简洁且大胆:从每个高斯函数中采样像素大小的不透明点,然后用 64 位原子操作将这些点溅射(splat)到帧缓冲区中。这一方法从根本上绕过了传统 3DGS 管线中最耗时的两个环节——排序基于瓦片的栅格化

具体而言,对于视锥内的每一个高斯函数,算法会从其分布中独立同分布地采样若干像素大小的不透明点。这些点通过 GPU 的 64 位原子加法操作直接写入帧缓冲区。由于每个线程独立工作,多个线程可能同时向同一个像素位置写入数据,但 64 位原子操作保证了写操作的线程安全性。

该方法的理论基础在于:当每个像素的采样数量足够多时,这种随机过程的期望收敛于确定性方法的结果。因此,虽然每次渲染的结果存在随机噪声,但在足够样本下,最终图像与原始 3DGS 结果一致。

GPU 工作负载的完美分配

在实现层面,一个棘手的挑战是如何在 GPU 的数十万个线程之间均匀分配工作负载。不同高斯函数在屏幕上的投影面积和透明度差异巨大——有些高斯可能只需要采样 1 个点,而有些覆盖整个屏幕的高斯可能需要数百万个点。如果简单地为每个高斯分配一个 GPU 线程,会导致严重的负载不均:有的线程无事可做,有的线程不堪重负。

研究团队利用并行编程原语(parallel programming primitives)解决了这个问题。具体流程是:首先计算每个高斯需要溅射的点数(取决于该高斯的透明度和在视口中投影的大小),然后利用 GPU 的并行前缀和(prefix sum)和流压缩(stream compaction)原语,将"每个高斯的点数量列表"映射到"每个线程要处理的高斯 ID 列表"。这样,每个线程只需从列表中读取下一个高斯 ID 并溅射一个点即可,实现了完美的负载均衡。

这种方法的优雅之处在于:无论场景中高斯的分布如何复杂,每个 GPU 线程的工作量都完全均匀——每个线程恰好处理一个点。这与传统基于瓦片的渲染中某些瓦片需要处理数万个高斯而某些瓦片空空如也的情况形成了鲜明对比。

不透明度校正:一个微妙但关键的问题

研究过程中,团队发现了一个反直觉的问题:直接从高斯分布中采样点进行溅射,并不能产生正确的结果。原因在于,多个点可能溅射到同一个像素位置。当一个高斯的不透明度为 α 时,如果从该高斯采样 n 个独立同分布的点,这些点全部落在目标像素外的概率是 (1 - α)^n,而至少有一个点落在目标像素内的概率是 1 - (1 - α)^n。问题是,在 n 较大的情况下,这个概率会过度接近 1,导致不透明度被高估;而在 n 较小的情况下,由于点太少,不透明度又可能被低估。

研究团队推导出一种有效不透明度(effective opacity)的严格数学形式,保证了"一个像素上没有溅射到任何点的概率"恰好等于"1 减去该高斯在该像素处的真实不透明度"。这一校正确保了随机采样过程的期望结果与确定性渲染一致。团队在 Shadertoy 上提供了一个交互式演示,直观展示了有无校正的差异。

层次化视锥剔除与遮挡剔除

为了进一步加速渲染,算法引入了层次化视锥剔除(hierarchical frustum culling)和遮挡剔除(occlusion culling)。对于数亿高斯的场景来说,即使每个高斯的处理开销很小,完全不做剔除也会达到数百万次的不必要计算。层次化剔除结构能够在粗粒度上快速剔除大量不在视锥内或被遮挡的高斯,显著减少了需要参与渲染的高斯数量。

值得注意的是,该方法不需要任何近似手段或层次细节(LOD)机制。它没有对场景进行简化和降级处理,而是实打实地渲染所有可见的高斯。这一点对于保持大规模场景的视觉保真度至关重要。

实验结果:数亿高斯实时渲染

在 NVIDIA RTX 4070 Ti SUPER 上,Gaussian Point Splatting 能够交互式渲染包含 4.25 亿个高斯的场景(每像素 4 个样本,无时间复用),这是传统 3DGS 方法完全无法企及的规模。

与原始 3DGS 的比较显示,在收敛情况下,两种方法的渲染结果几乎一致,唯一可观察到的差异是轻微的噪声和锯齿特性的不同。这种噪声是无偏的(unbiased),可以通过时间累积和去噪技术有效消除。在每像素 4 个样本的低采样率下,该方法仍然能生成对 3DGS 的忠实近似,足以支持实时渲染应用。

与 SplatShop 的对比更能体现该方法的优势:SplatShop 为提升速度和降低内存,会剔除大量较小的高斯,这显著降低了视觉质量。而 Gaussian Point Splatting 的随机方法能够渲染视锥内的所有高斯,远远超越了传统基于瓦片的栅格化方法的能力边界。

总结与展望

Gaussian Point Splatting 为大规模 3DGS 场景的实时渲染提供了一条全新的技术路径。其核心贡献可以概括为三点:第一,通过随机点采样和 64 位原子操作,彻底绕过了排序和基于瓦片栅格化的瓶颈;第二,通过并行编程原语实现了 GPU 线程的完美负载均衡;第三,提出了严格的不透明度校正机制,保证了随机渲染结果与确定性方法一致。

该方法的论文、源代码(GitHub)和补充视频已全部公开。研究团队还在 Shadertoy 上提供了不透明度校正的交互式演示,对于有兴趣深入了解技术细节的开发者来说,这是非常好的学习资源。

论文链接:https://doi.org/10.1145/3811272
项目主页:https://jorisar.nl/gaussian_point_splatting/
GitHub:https://github.com/JorisAR/gaussian-point-splatting
Shadertoy 演示:https://www.shadertoy.com/view/WXdyWr

——

🧑‍💻

zhirenhun

一个热爱技术的程序员,喜欢分享前沿AI知识和开发经验。

← 上一篇
Capstone:多架构反汇编框架全面解读
下一篇 →
Let's Encrypt的后量子未来

📌 相关推荐

结构化输出 vs 工具使用 vs 预填充:2026年从Claude获取JSON
2026/7/11
在AWS Bedrock上构建生产级AI代理——值得关注的架构与代码决策
2026/7/11
如何为你的AI代理构建评估框架(确保其在生产环境中不崩溃)
2026/7/11
← 返回文章列表