3DGS 给一亿个高斯排队,其实每个像素只想找最近那一个
在 GPU 上跑过 3DGS 的人大多有一段相似的记忆:几百万个三维高斯,投影到屏幕,按 tile 分桶排序,再做 front-to-back 的 alpha 合成。数量级往亿级推时,一个很自然的直觉会冒出来:把逐高斯的投影做快一点,把排序做快一点,问题就解决了。
这篇专题想说的恰恰相反。真正卡住亿级 3DGS 的,是"必须按顺序算透明"这件事本身。我们把论证拆成六步推进:先钉住直觉的陷阱,再挖出根因,接着给出转向,然后补上让转向成立的数学关键,最后用亿级场景验证新扩展律并划清它的边界。全程的锚点是 SIGGRAPH 2026 的 Gaussian Point Splatting(下称 GPS)。
1. 为什么把投影和排序做得更快,也救不了亿级 3DGS?
先把坐标系钉住。Kerbl 等在 SIGGRAPH 2023 定下了标准 3DGS 的渲染流水线,它也正是后面所有 sort-free 工作要替换的对象。整条链路是:稀疏 SfM 点云输入,生成一组三维高斯,做自适应密度优化,最后走 tile 光栅化实时渲染。

图注:标准 3DGS 的完整流水线,从左到右依次是稀疏 SfM 点云、一组三维高斯、自适应密度控制优化、以及 tile 光栅化的实时渲染。这张图的意义是锚定"我们要替换的是什么",它本身不是 GPS 或任何 sort-free 管线。3DGS
渲染阶段的关键机制值得快速复述一遍,因为这决定了后面能改什么。屏幕被划成 16×16 像素的 tile。每个高斯按照它覆盖到的 tile 数被复制多份,每份拿到一个 64-bit 的 key,高 32 位编码它所属的 tile 编号、低 32 位编码投影深度。一次全局 radix sort 把所有副本按 key 排好,排序数组中 tile ID 相同的连续区间就是那个 tile 的工作清单,之后逐 tile 做 front-to-back 的 alpha 合成。tile 内不再有 per-pixel 的额外排序,所有混合都依赖这一次全局排序定下的先后。3DGS
问题就出在这套规则的扩张方式上。每个落在视锥内的高斯,无论多小,都至少被分配到 screen space 的一个 tile,占用那里的资源;装高斯特别多的 tile,其线程组会比别的 tile 跑得久得多,从而主导整帧时间。GPS 论文把这条诊断写得很直白:某些用于光栅化的 tile 含有超过 10,000 个高斯片元,3DGS 和 SplatShop 的负载均衡因此很差。GPS
这不是一句估计,而是有工程实测的。SplatShop 用热力图把每个 tile 里的 splat 数画了出来。

图注:三联图展示了 tile 负载的不均衡。左图是花园场景的渲染结果,中图是未剔除小 splat 时每个 tile 的 splat 数热力图,中心有明显的橙红高密度核,右图是剔除小 splat 后的同一视点,色调整体变浅、高密度核明显收敛。它直观说明了"装高斯多的瓦片决定整帧时间"。注意图中没有 colorbar,不能把颜色对应到具体 splat 数,右图变浅也不能换算成一个具体的加速比。SplatShop
所以瓶颈不在投影本身。工作量被"高斯数 × 覆盖瓦片数"放大,再被最挤的那一块瓦片卡住。你把单次投影和单次排序都做快一倍,被放大的那部分照样放大。这一章留下一个悬念:既然不是排序不够快,那到底该换掉哪一环?
2. 根因:为什么透明合成必须先排序,而更快排序又救不了?
要看清排序为什么躲不掉,先回到被排序的原语到底是什么。3DGS 存的不是点精灵,而是协方差写作 $\Sigma = R S S^{\top} R^{\top}$ 的各向异性椭球。下面这张图把优化后的椭球直接画了出来。

图注:优化后的三维高斯被缩小 60% 后可视化。左图是该区域的实际渲染结果,右侧上方是同一区域叠加的密集各向异性椭球,沿百叶结构拉长排布,右侧下方是未缩放的椭球融回几何。它证明了 3DGS 的高斯原语是各向异性的椭球,而不是点或球,因此每个原语都要单独投影、单独参与有顺序的混合。3DGS
既然原语是会覆盖多个像素、彼此重叠的椭球,颜色就只能靠 over 运算符一层层合成。over 是不可交换的:
$$c = c_f \alpha_f + c_b (1 - \alpha_f)$$
把前景 $c_f$ 和背景 $c_b$ 换个先后,结果就变了。这跟矩阵乘法是一回事,$a \times b$ 一般不等于 $b \times a$,所以合成之前必须先知道每个像素上谁在前、谁在后。这就把"排序"钉成了必选项,而不是一个可以省掉的优化。
还有一条常被忽略的连锁后果。因为所有高斯都是半透明的,"这个高斯被完全挡住、可以跳掉"这件事几乎无法在早期判定,遮挡剔除只能用得很晚或者根本用不上。你被迫把大量后来注定不可见的高斯也完整送进排序和混合。
代价因此与规模死死耦合。排序规模大致是高斯数乘以覆盖瓦片数,覆盖越广、重叠越密,复制出的副本越多。工程上压低这条成本的努力一直存在,SplatShop 把 48-bit 排序拆成 32-bit 深度排序加 16-bit tile-ID 排序,在千万级 splat 上把排序提速约 1.5× 到 1.9×。SplatShop
但这只是把常数压低。真正锁死扩展律的,是"必须按顺序算 alpha"这条规则本身,而不是排序实现得快不快。
3. 转向:把透明片元换成像素级不透明点,排序就消失了
既然排序躲不掉,那就换个思路:与其让每个半透明高斯产出一个必须被排序的片元,不如根本不产生透明片元,只产生"要么全占这个像素、要么完全不占"的不透明点,让概率去承担透明度。这正是 GPS 的做法,但它站在两条更早的血脉上。
第一条血脉是 Enderton 等 2010 年在 I3D 提出的随机透明(stochastic transparency)。它的做法是给每个像素的多个 sample 配一组随机的子像素 mask,mask 大小正比于该片元的不透明度;每个 sample 上仍然是普通的 z-buffer 比较,深度在前面的 fragment 胜出。换句话说,每个 sample 上发生的依旧是"谁在前面谁赢",而不是"alpha 累加加颜色乘加",所以没有任何 fragment 需要被排序。Enderton

图注:四幅并排的同一机械装置渲染,共享浅蓝背景。从左到右,画面主体上块状噪声的颗粒度逐渐细化,最右侧是最干净的参考渲染。它直观呈现了"随机子像素 mask 的 sample 数越多,画面越平滑"这条性质,同时提前埋下后面"随机化要付出噪声代价"这条线索。图中没有文字标记,sample 数与各幅画面的对应关系来自图外说明,不能从图里读。Enderton
第二条血脉是 Schütz 等 2022 年的原子点渲染,它提供了"无序写入下直接拿到每像素最近点"的机制。

图注:一个 compute workgroup 内部的流程。载入本批点的包围盒,做视锥剔除,把投影后的包围盒按大小决定用 10/20/30-bit 精度,载入对应精度的坐标缓冲,然后逐点把
(depth << 32) | pointIndex打包成一个 64-bit 整数,先做非原子的深度预比较,再对 framebuffer 做 atomicMin,最后在单独的 pass 里把索引解析成颜色。这张图早于 3DGS,它讲的是点云渲染,不是 3DGS 管线。Schütz
这套机制的关键是那个 64-bit 打包整数:高 32 位是深度,低 32 位是点索引。深度放在高位之后,一次 atomicMin 就自然选出深度最小的那个点,全程不需要任何排序。visibility buffer 让颜色带宽只花在真正可见的点上,而不是处理过的每一个点。Schütz

图注:两组内存布局对比。上方面板是常见的 AoS 布局,每个点连续存 x、y、z 和颜色,共 16 字节;下方面板是 SoA 布局,坐标按 10-bit 低精度、中精度、高精度分成独立的并行缓冲,投影小的批次只载入低精度缓冲。这正是 atomicMin 点渲染能把带宽压在可见点上的原因,说明为什么逐点做原子操作在带宽上仍然划算。Schütz
GPS 把这两条血脉合在一起。它仍然逐高斯估计屏幕 footprint,但是据此在像素上采样不透明点:每个采样点要么全占这个像素、要么完全不占,采样概率由该高斯在这一像素上的不透明度决定。framebuffer 里每像素是一个 64-bit 无符号整数,高 28 位存深度,剩下 3×12 位存 sRGB 颜色,写入时直接做 atomicMin。GPS
真正让这条路径落地的,是把点均匀铺给海量线程的工作分配。GPS 先对每个高斯算出它要发射多少个点,再用前缀和给每个线程批一块固定大小的活。

图注:6 个高斯、总量 8 个点的示例里,工作分配走四行数据结构:每个高斯的点数计数,排他前缀和(绿色格给出总点数),按前缀和把点的索引散射到的工作数组,以及对工作数组做包含前缀最大值后的单调序列。红色格表示该高斯的点数为 0,其索引不会被散射。三次扫描之后,每个线程都拿到一份固定大小的活,这就是 GPS 声称的完美负载均衡。GPS
到这里,结论可以收紧了:排序不是被做快了,而是被换掉了。管线里不再存在"透明片元"这种东西,每个像素只写最近的那一个不透明点。但这套方案立刻留下一个缺口。如果采样是独立的,同一个高斯的多个点有可能撞进同一个像素,那透明度还准吗?
4. 少了 Poisson 校正,这套免排序管线为什么会系统性偏暗?
缺口就在这里。对高斯逐点独立采样时,同一高斯的多个点可能随机地落进同一个像素,于是有些像素一个点都没接到。像素收到的点数服从 Poisson 分布,而"一个点都没接到"意味着这个像素被系统性地漏覆盖,估算出的不透明度因此被低估。漏得有多严重?论文给了一个干净的例子:当真实不透明度是 100% 时,不做校正的等效不透明度只剩约 63.2%。

图注:白底上一个不透明度为 100% 的黑色高斯,三联图从左到右依次是未校正的 1 SPP 渲染、校正后的 1 SPP 渲染、以及参考的高斯光栅化渲染。未校正时漏覆盖明显,校正后覆盖率被补回,逼近参考渲染。它钉死了"独立采样低估不透明度,校正补救"这条因果链,但图中没有可用于推断具体 SPP 或 α 数值的信息。GPS
校正的推导其实很直接。设某像素最终命中的点数为 $N$,高斯在该像素的采样强度为 $p$。独立采样下 $N$ 服从 Poisson 分布,要让"一次都没命中"的概率正好等于 $1 - \alpha(q)$,就得把采样强度从 $\alpha$ 改成:
$$P(N = 0) = 1 - \alpha(q) \quad \Rightarrow \quad p(q) = -\frac{1}{\lambda A} \ln!\big(1 - \alpha(q)\big)$$
也就是说,采样强度取 $- \ln(1 - \alpha)$,而不是直接取 $\alpha$。这样命中概率在统计上恰好还原真实不透明度,否则免排序换来的只是一幅系统性偏暗的画面。归一化常数 $\lambda = \frac{2\pi}{A}\sqrt{|\Sigma|},\mathrm{Li}_2(\alpha)$。为了让这个闭式解能实时算在 kernel 里,论文把二重对数 $\mathrm{Li}_2$ 用 degree-7 多项式拟合、把它的反函数 $\mathrm{Li}_2^{-1}$ 用 degree-10 的 minimax 拟合,绝对误差控制在 $7.3 \times 10^{-5}$ 以内。
这里值得跟小批量梯度估计做个对照,能更好理解"偏差"和"方差"的区别。小批量梯度天然带方差,多采一些样本就能把噪声压下去,但它没有系统性偏差。这里更糟:未校正时偏差是系统性的,画面一味偏暗,你采样再多也压不掉那个错位。校正做的是把偏差纠回来,而不是靠多采样把噪声磨平。这也是为什么采样密度还要向高斯中心偏移,用来补回落在同一像素的那些点。
没有这一步,整套免排序管线在数学上就是错的。校正才是让方法成立的引擎。
5. 新扩展律跑得有多大,换来的代价又是什么?
把校正装回去,就可以看新扩展律能跑多大了。GPS 在 RTX 4070 Ti SUPER 上交互渲染了 4.25 亿个高斯,1920×1080 下的三视图帧时分别为 65.6、37.5、24.3 毫秒,而且是未经时域复用的原始渲染时间。GPS
画质上,它收敛得也不错。论文报告的平均数据里,3DGS 参考的 PSNR 是 25.71,GPS 在 1024 SPP 下是 25.73,几乎持平;从 1 SPP 往上一路收敛的过程也很清楚,采样越多越接近参考。

图注:并排两张厨房台面场景渲染,左为 GPS 在 4 SPP 下的结果,右为 3DGS 参考。左图几何与材质已经忠实,但仍能看到可见的蒙特卡洛噪点纹理。它把"免排序的代价是噪声"落成了能看见的证据,但帧时和收敛数值都在论文正文里,不能从图里读。GPS
代价就是蒙特卡洛噪声。它靠两条路压下去:空间上做超采样(默认 $K = 4$,即 2×2 超采样),时域上做去噪与重投影,把跨帧的样本累积起来。论文也给出了这个取舍的量化:用 $K = 1$ 代替 $K = 4$ 会让帧时增加 37%,所以选择默认用 $K = 4$ 是划算的。
值得注意的是,"取消排序"并不是唯一的出路。同期还有一条保留 front-to-back alpha 合成的路径,HiGS 把负载在层级上摊平。

图注:HiGS 的粗到细分层渲染架构。整屏先按 macro-tile(8×4 个 render tile,即 64×32 像素)分组,binning 与深度排序在 macro-tile 这一级进行;每个 macro-tile 排好序的高斯列表再切成每批最多 1,024 个高斯,每一批交给一个 processing unit,密度越高的 macro-tile 生成越多的 processing unit;最后每个 worker 在 8×8 的 render tile 上做 front-to-back alpha 合成。它保留了 alpha 合成,只是把每个阶段放到各自的空间尺度上。HiGS
HiGS 对原始 3DGS 报到约 15.8× 的加速,说明把瓶颈摊平也能拿到量级提升,取消排序不是必经之路。HiGS
顺着同一主题,StochasticSplats 走的是子像素蒙特卡洛采样,用 OpenGL 实现换来可移植性,付出的是同一种随机化货币,1 SPP 下比 alpha 混合 3DGS 快 2× 到 4×。StochSplats
还有一条正交的轴值得点一句:抗锯齿。GPS 论文自己承认抗锯齿行为与 3DGS 不同,更接近 box filter 预滤波,而 Mip-Splatting 正是现代 3DGS 处理 zoom-in / zoom-out 失真的标准解。MipSplatting

图注:四面板示意同一个物体在不同采样率下的渲染病理。(a) 是规范的三维高斯投影加屏幕空间 2D dilation,(b) 是退化成近似 Dirac-δ 的高斯,因 dilation 仍渲染出相似的图,(c) 是 zoom-out,投影缩到亚像素但 dilation 仍扩散从而使能量过度累积,(d) 是 zoom-in,投影扩张而 dilation 不变,产生侵蚀与高频破洞。它交代了抗锯齿这条正交轴,是 GPS 自陈抗锯齿差异的参照,不是 Mip-Splatting 的滤波器本身。MipSplatting
所以这一章的账要算清楚:收益是真的,亿级场景能够交互;代价也是真的,瓶颈从排序变成了噪声,需要超采样叠加时域累积才能抹平。
6. 这条改写在哪里失效,又到底改写了什么?
收益和代价都摆清楚之后,边界同样要摆清楚。
第一条边界是小场景。论文自己承认,对小场景 3DGS 可能更快,因为此时 3DGS 已经足够快,GPS 额外的校正与蒙特卡洛噪声反而成了负担。GPS
第二条是近景大高斯。高斯离相机极近时屏幕 footprint 极大,需要采样的点数随之爆涨,优势会消失。缓解办法是把单个高斯的点数 clamp 住,并把近裁剪面放得足够远。第三条是更硬的能力边界:当前管线是 forward-only,论文明确表示它是否可用于可微渲染并不显然,因此用这套渲染器做场景优化目前不可行,它只做推理期渲染。
要理解"不放弃 alpha 合成"也能走多远,SplatShop 的剔除小 splat 是个好反衬。

图注:GardenF 同一视点的两联渲染图。左图未剔除小 splat,标注 9.7 毫秒;右图剔除后,标注 2.1 毫秒。两图构图与视角一致,只在 splat 密度上有细微差异。它说明传统 alpha 管线靠减少工作量也能大幅加速,代价是参与渲染的高斯从 5.79M/5.84M 降到 1.25M(约五分之一),画质有差异,且这些数字只适用于该场景与硬件,不能外推。SplatShop
最后一种哲学值得收口:改透明度并非只有随机化一条路。GS-WSR 用可学习权重的交换求和直接替代 alpha 合成,完全不做随机化,也不需要排序,但它放弃了无偏性。GS-WSR

图注:左右对照的架构图。左半是传统 3DGS 的 tile 切分、按 tile 复制高斯、按深度排序、front-to-back alpha 混合;右半是加权求和渲染,每个高斯的权重由深度算出,加权颜色与权重在每像素上独立求和后再归一化。它说明不做随机化、靠交换求和也能绕开排序。GS-WSR
于是,应对顺序依赖至少有四条不同的路线,而非清一色的 sort-free。GPS 把透明度随机化并用 atomicMin 拿无序可见性,StochasticSplats 用子像素蒙特卡洛采样,GS-WSR 用可学习权重做交换求和,这三条都真正拆掉了排序;HiGS 则属于另一支,它保留 alpha 与排序,只是把 tile 分出层级,走的是让排序本身更可扩展的路子。它们各自付出的货币不同,但都在回答同一个问题:怎样让顺序依赖不再主导整帧时间。
回到开头那个直觉。投影并没有消失,它仍然在做;消失的是排序、瓦片展开与透明混合这条结构性税链。GPS 不是一台更快的光栅器,而是一次把"顺序依赖"从渲染管线里去掉的结构改写,而它的边界同样清楚:小场景、近景大高斯、以及尚不支持的可微训练。
参考文献
本专题引用的核心资料如下,建议深入学习时阅读原文:
- Gaussian Point Splatting — Rijsdijk, Peters, Weinmann, Marroquim,SIGGRAPH 2026 / ACM TOG 45(4),DOI 10.1145/3811272 — https://jorisar.nl/gaussian_point_splatting/gaussian_point_splatting.pdf
- 3D Gaussian Splatting for Real-Time Radiance Field Rendering — Kerbl, Kopanas, Leimkühler, Drettakis,SIGGRAPH 2023 / ACM TOG 42(4),DOI 10.1145/3592433 — arXiv:2308.04079
- Stochastic Transparency — Enderton, Sintorn, Shirley, Luebke,I3D 2010,DOI 10.1145/1730804.1730830 — https://www.enderton.org/eric/pub/StochasticTransparency_I3D2010.pdf
- Software Rasterization of 2 Billion Points in Real Time — Schütz, Kerbl, Wimmer,arXiv:2204.01287 — https://arxiv.org/abs/2204.01287
- HiGS: A Hierarchical Rendering Architecture for Real-Time 3D Gaussian Splatting — Pająk, Bisson, Lima (NVIDIA),arXiv:2606.00352 — https://arxiv.org/abs/2606.00352
- StochasticSplats: Stochastic Rasterization for Sorting-Free 3D Gaussian Splatting — Kheradmand 等,ICCV 2025,pp. 26326–26335 — arXiv:2503.24366
- Sort-free Gaussian Splatting via Weighted Sum Rendering — Hou 等 (Qualcomm),ICLR 2025 — arXiv:2410.18931
- Splatshop: Efficiently Editing Large Gaussian Splat Models — Schütz, Peters, Hahlbohm, Eisemann, Magnor, Wimmer,CGF 44(8) 2025,DOI 10.1111/cgf.70214 — https://diglib.eg.org/server/api/core/bitstreams/b3aa98db-cd4d-4350-8cc6-df75144bc374/content
- Mip-Splatting: Alias-free 3D Gaussian Splatting — Yu, Chen, Huang, Sattler, Geiger,CVPR 2024 — arXiv:2311.16493