篇目 04 · 单篇论文精读

放大三倍也不糊:把高斯从 2D 拉回 3D,一帧到底

AAA-Gaussians: Anti-Aliased and Artifact-Free 3D Gaussian Rendering · 3DGS 满身伪影的病根,是"把三维高斯压扁成二维斑块再画";把它拉回 3D 一路评估到底,伪影和帧率可以同时解决

Michael Steiner*、Thomas Köhler*、Lukas Radl、Felix Windisch、Dieter Schmalstieg、Markus Steinberger Graz Univ. of Tech. / Univ. of Stuttgart / Huawei arXiv:2504.12811v2 · ICCV 2025 2025 年 8 月 · CC BY
12 章一级章节(按拆解点切)
12 式公式逐步重推,非引用
7 张配图(原文 7 / 自绘 0)
6 条边界与反例(独立成节)

图-段配对表 · 本稿 7 张

图角色档归属支撑的论断层次状态
图 7-1E§1三类伪影(畸变/走样/弹跳)同源于 2D 近似④引用 Fig. 1
图 7-2E§3变距导致过采样(变薄)/欠采样(变小)走样①②③引用 Fig. 2
图 7-3S§3体积缩放→过透明;改垂直射线方向面积缩放①②③引用 Fig. 3
图 7-4S§4屏幕空间包围丢 z 界外 Gaussian → 视图空间角度包围①②③引用 Fig. 5
图 7-5S§53D 视锥内找最大贡献点,整片/逐 tile 剔除①②③引用 Fig. 6
图 7-6E§6大 FOV 离分布视角:其它方法畸变、Ours 稳④引用 Fig. 7
图 7-7E§6多分辨率评估:AA 滤波保质量④引用 Fig. 8
角色档按 20 号票的裁决:E 类(承载可核对数值或作为唯一证据)禁止自绘,故 4 张证据图全部引用;S 类(纯几何/机制示意)允许自绘,本稿 3 张 S 类图(图 7-3 / 7-4 / 7-5)均直接引用原文示意,未走自绘准入。
许可:arXiv 全文非独占分发,本站站内托管并标注 arXiv;接受手稿版本已应用 CC BY public copyright license(见原文出处块)。所有图均为原文截图原样引用、未修改、逐图署名(图号 + 页码 + 版权 + 未修改声明)。
原文摘要 Abstract, p.1(英文原样引用)

"Although 3D Gaussian Splatting (3DGS) has revolutionized 3D reconstruction, it still faces challenges such as aliasing, projection artifacts, and view inconsistencies, primarily due to the simplification of treating splats as 2D entities. We argue that incorporating full 3D evaluation of Gaussians throughout the 3DGS pipeline can effectively address these issues while preserving rasterization efficiency. Specifically, we introduce an adaptive 3D smoothing filter to mitigate aliasing and present a stable view-space bounding method that eliminates popping artifacts when Gaussians extend beyond the view frustum. Furthermore, we promote tile-based culling to 3D with screen-space planes, accelerating rendering and reducing sorting costs for hierarchical rasterization. Our method achieves state-of-the-art quality on in-distribution evaluation sets and significantly outperforms other approaches for out-of-distribution views. Our qualitative evaluations further demonstrate the effective removal of aliasing, distortions, and popping artifacts, ensuring real-time, artifact-free rendering."

这一篇要讲清的四件事
  • 病根一句话:3DGS 的伪影来自"把 splat 当 2D 实体"这个简化,而不是参数没调好。
  • 三味药:自适应 3D 平滑滤波(治走样)、稳定的视图空间包围(治 pop)、视锥级 3D 剔除(提性能、顺带治 pop-in)。
  • 验证策略:分布内指标持平 SOTA 只是及格线,真正的胜负手在离分布视角(大 FOV、变分辨率)下显著胜出。
  • 代价与边界:全程绑针孔相机;去作弊手段后对 view-dependent 编码要求更高。

1距离越远越像玻璃,靠近就看碎:三类伪影,一个病根

 距离越远越像玻璃,靠近就看碎:三类伪影,一个病根

如果你盯着一帧 3DGS 渲染不动,慢慢把视角拉远又推近,你会看到三种"一帧一帧地不对劲"的现象:远处东西像蒙了一层薄玻璃,透明得能看见后面;靠近了边缘却像碎掉一样拉出细丝;镜头一转,本来该露出来的物体"啪"地弹出来。三样东西看着没什么关系,可这篇论文要讲的洞见是,它们其实来自同一个简化决定:把三维高斯压扁成二维斑块再去画。

这就是 AAA-Gaussians 的全篇力量:不当它三个独立的小 bug 去打补丁,而是怀疑根子上的那一步近似。我们先看这一页概览(图 7-1)。

AAA-Gaussians 首页概览:上排 3DGS 三类伪影(畸变、走样、弹跳),下排本方法四项对策(3D 评估、3D 平滑、视图空间包围、3D 剔除)
图 7-1 效果对照图(E 类 · 证据) · 原文 Fig. 1, p.1 怎么读 ①指认:上排三格是正版 3DGS 撞上的三种伪影(畸变、走样、弹跳各给一格),下排四格是本方法对应的解法(3D 评估、3D 平滑滤波、视图空间包围、3D 剔除)。②读法:上下对读,上排是病、下排是药;每一味药对应正文一章,整篇就是把这四格逐格重推一遍。 来源:AAA-Gaussians, Fig. 1, p.1 · © 2025 作者 · 原样引用,未修改

先记住这张图的分工:上面是病,下面是药。下面每一格会各占正文一章,我们把"为什么这么治"逐一重推出来。而这第一步先把病根钉死:病不在参数没调好,在 3DGS 从一开始就把 Gaussian 当二维斑块画。

一段历史:为什么当年要压扁

3DGS 前身的 NeRF 用神经网络逐像素算颜色,慢得没法实时。3DGS 把场景换成几万到几十万个三维高斯点,每个点带着位置、大小、朝向、透明度、颜色,然后一条条光栅化出来。可光栅化器的第一道坎是:三维高斯落在二维屏幕上,它投影后的形状并不保形。高斯在非线性投影下不再是高斯(EWA splatting 只在仿射变换下保形)。于是 Kerbl 等人用局部仿射近似在每点附近把投影当线性的,把每个 3D 高斯压扁成一个 2D 椭圆斑块去绘制。

这个"局部仿射"四个字,就是全部伪影的源头。我们留到第 2 章重推它到底在近似什么、误差从哪里来。

这里值得先把"保形"这个词拆开,不然后面几章容易绕晕。保形(shape-preserving)的意思是:一个形状经过变换,它的"类"不变。高斯经过仿射变换(平移 + 线性变换)仍然是高斯,均值跟着移、协方差跟着换基,函数形式原封不动。但相机投影是透视变换,它不是仿射:远处的东西变小、近处的东西变大,直线仍是直线,可"中间宽两边淡"的高斯轮廓在透视下会变成被压扁、被拉长的非对称形状,不再是一个标准椭圆。EWA splatting 是图形学里处理"纹理被透视投影后该采什么"的经典方案,它的成立前提就是仿射,在局部把透视当仿射处理。3DGS 沿用了同一套思维:每个 splat 附近,把相机投影局部线性化。

这条路的代价不是马上付的。训练时的相机通常绕着场景转圈、离物体保持差不多的距离,透视在每一帧局部看起来都接近线性,压扁的椭圆误差不大。于是模型在训练视图上收敛得很漂亮,伪影是留给"不在训练分布里的视角"的。VR 里 110° 大视场角、相机贴着物体表面掠过、分辨率突然放大三倍,这些都是训练时没见过的拍法,局部线性化在那一刻开始露馅。这就是为什么第 1 章要用"病根"而不是"三个 bug"来立论:三个 bug 共享一个偷懒决定,修法也必须共享一个方向。

三类伪影的具体长相,先认一认

为了让"一个病根"这句话不是空喊,我们把三种伪影的画面分别说清楚,这样后面每一章对号入座:

  1. 畸变(distortion):大视场角(比如 VR 里 110° 的视野)下,图像边缘的斑块被拉成细长的云丝,形状不再是物体本身的样子。它是 2D 仿射投影在"看得很斜"时的几何误差。
  2. 走样(aliasing):相机拉近或拉远时,物体的边缘不是变糊就是闪烁。拉近了采样过密,斑块过薄发虚;拉远了采样过疏,细节没滤掉,高频信息在低分辨率下混成摩尔纹。
  3. 弹跳(pop-in / popping):视角一变,本该连续出现的物体边缘"啪"地整个跳出来。它来自深度排序的近似,高不透明度的斑块排序一变,混合顺序突变,画面就跳。还有一种变体叫 pop-in:Gaussian 明明在屏幕上,却被错误的剔除判成"不在",一转头才补回来。

这里的关键观察:三种伪影的"可见度"都随视角离训练分布越远越严重。训练时相机走过的位置(原地转圈、固定距离)不会触发这些毛病,所以 3DGS 在标准评测集上分数漂亮,但它一离开舒适区就全线暴露。后面第 6 章专门用"离分布视角"来验收,原因就在这里:在标准集上比,谁都能及格;在没见过的拍法上比,才见真章。

而这第一步先把病根钉死:病不在参数没调好,在 3DGS 从一开始就把 Gaussian 当二维斑块画。后面每一章,就是把这个决定一步步推翻的过程。

怎么"推翻"?预告一下全篇的路线图,让读者心里有尺子:第 2 章先把"怎么画、在哪偷懒"的底摊开(3D 评估的地基);第 3 章治走样(滤波);第 4 章治弹跳的一半(包围);第 5 章治性能和弹跳的另一半(剔除);第 6 章用离分布实验验收;后面几章讲工程、边界和局限。 读的时候可以随时回看这条线:前三章是"换评估模型",四、五章是"改空间"(视图空间、体积),第六章是"换考卷"。读完这段,你已经拿到了整篇的导航。

2一座山切成四十万片:3DGS 到底怎么画,误差在哪

要把"拉回 3D 评估"讲清楚,得先把手里的素材摊开:3D 高斯长什么样、投影时哪一步偷了懒、为什么有人宁可绕开这一偷懒。

2.1 一个三维高斯是什么

场景就是一批三维高斯。每个高斯由三个量决定:三维均值 µ ∈ R³(它在哪)、缩放 s ∈ R³₊(三个方向多长)、旋转四元数 q ∈ R⁴(歪向哪)。它是一团"中间浓两边淡"的云,概率密度写成

(1) 𝒶(x) = exp(−½ ρ(x)²)、其中 ρ(x) = √((x−μ)ἱ Σ−1 (x−μ))

协方差 Σ 由缩放和旋转攒出来:

(2) Σ = RSSἱRἱ,S=diag(s)

ρ(x) 就是"点 x 离这团云中心的加权距离",ρ=0 是中心(最浓),ρ 越大越淡。后面所有的包围、剔除、求最大贡献点,其实都在算 ρ(x)。

给"云"补一个画面:高斯不是球壳也不是薄片,它是一团指数衰减的雾。中心浓度归一为 1,离开中心越远浓度按 ρ² 的指数衰减。ρ=1 的地方浓度掉到约 0.61,ρ=2 约 0.135,ρ=3 约 0.011,所以说"τ 截断"(level set)时,是在说"这团雾浓到 τ 的那一圈等值面"。论文里 τρ 取一个阈值(默认 τ=0.3 之类),凡浓度低于它的部分在数学上照旧存在、但工程上不再理会。理解这一点,第 4 章"截断椭球"、第 5 章"ρ_min² < τρ 就剔除"就都有了着落:一切包围和剔除,都是在和这团雾的某个等值面打交道,而不是和整团雾。

2.2 投影偷懒在哪

画到屏幕必须先投影。问题来了:高斯不保非线性投影的形。Kerbl 用局部仿射近似,把这个三维高斯在"相机看向它"的地方压成一个二维椭圆。这一步在相机距离变化大、视场角大的时候误差格外大,图像边缘的 Gaussian 被拉成细长丝,云一样的伪影就出来了。

把"局部仿射"这一步的代价说精确一点。做法是:对每个高斯,找它中心附近的雅可比矩阵 J,把 J 当成投影的局部线性化,于是 2D 协方差写成 Σ′ = J Σ Jᵀ,然后把它当成二维高斯去光栅化。这里有两处"偷懒"叠加:

  1. 投影被局部线性化:J 只在该高斯中心那一点精确成立,离中心越远越不准。视图边缘(大 FOV 下)的等高线间距变化剧烈,J 逐渐失效,椭圆被画成拉长的丝。
  2. 体积积分被退化:真正的渲染应该对体密度沿视线积分,或者至少对屏幕覆盖做更诚实的评估;2D splat 直接用"像素落在椭圆里的值"近似,把三维的贡献压成一个二维斑块的值。

这两个偷懒,第 3 章的 3D 评估要修掉第 2 个,第 4 章的包围要修掉第 1 个在"z 界外"的表现。但现在先记住一件事:2D splat 的优势是快,纯解析、可求导、GPU 友好;它的劣势是几何上不正。本方法没打算丢掉快,它找的是"既正、又一样快"的路径。

2.3 为什么要绕回 3D:屏幕平面把"每像素射线"变成平面交线

与其近似投影,Hahlbohm 等人提出干脆不投影,直接在 3D 里问:这条屏幕射线对这个高斯有多大贡献?屏幕上一个像素 (x,y),对应一条视线,可以被 两个屏幕空间的平面 唯一确定:πₓ=(1,0,0,−x)ᵀ 和 πᵧ=(0,1,0,−y)ᵀ。把这两个平面变换进每个高斯自己的归一化空间(那里离原点距离就是 ρ),交线到原点的距离就决定了这一像素处该高斯的贡献,而且绕开了 Σ⁻¹,而 Σ⁻¹ 在退化高斯(某个 sᵢ≈0)时会数值不稳定。

我们把变换写出来(原文 4,5):

(3) T′ = MvpPVT,其中 T = [[RS,μ],[0ἱ,1]]
(4) π′x/y = (T′−1)ἱ𝕙 πx/y = T′ἱ πx/y

逐步重推 2-3 → 2-4:屏幕平面 πₓ=(1,0,0,−x)ᵀ 表达的是"屏幕上 x 坐标为定值的点集"这个平面,它活在屏幕空间。要把"这个像素的视线"搬进某个高斯自己的坐标系,就得让平面跟着高斯一起换基。平面在变换 T′ 下按逆变换的转置变换(平面是余向量,contravariant 与 covariant 的差别),即 π′ = (T′⁻¹)ᐨᵀ π。而 (T′⁻¹)ᐨᵀ 的转置就是 T′ᵀ,所以第二行等式成立:π′ₓ/ᵧ = T′ᵀ πₓ/ᵧ。这一步不是耍代数把戏,它的实际意义是:把"哪个像素的哪条视线"变成一个高斯坐标系里可直接量化的问题(离原点多远 = 贡献多浓)。

参数释义表:

符号含义约束
M_vp视口矩阵(像素坐标)由视口尺寸定
P投影矩阵针孔相机
V视图矩阵相机位姿
T高斯空间→世界空间由 RS、µ 组装
πₓ, πᵧ两个屏幕空间平面由像素坐标 x,y 定
T′高斯空间→屏幕空间全程变换

注意这里有讲究:不再对射线做体积积分,只取"沿射线的最大贡献点"。这一个简化养活了一半的问题,也在第 3、7 章让我们吃亏。我们先按下。

把"为什么这一步可行"补完,读者才能信它不是黑魔法。传统体渲染沿射线积分整条路径的密度,得到的是"这条视线里所有雾的总和";3D 评估只取浓度最高的那一点当这一像素的贡献。这两者等价的前提是:场景由离散、半透明、不重叠的高斯组成,且混合顺序由深度序保证(第 8 章)。在这个前提下,沿射线的积分被"峰值采样"取代,每像素问"最浓的那团雾是谁",再把颜色按深度混合。它绕开 Σ⁻¹ 是白赚的数值红利,而"只取峰值"的近似代价留到第 7 章边界 3 里清算:不透明表面、重叠高斯、容积介质都会让它失真。

这一节在全文里的位置也值得标一下:第 2 章是整套方法的"地基",3D 评估(本节)、面积滤波(第 3 章)、角度包围(第 4 章)、视锥剔除(第 5 章)全部建立在一个统一动作上:把"二维斑块"换成"三维雾团在射线上的行为"。地基打对了,后面四章才各自成立。

3放大镜和望远镜都糊:变距走样,问题在"缩放因子算错了"

第一类药物是走样(aliasing):你拉近镜头、推远镜头,或者屏幕分辨率变了,画面就糊。分两种:拉近时每个像素盖子不够大,采到的高斯太薄(过采样,变稀、刺眼);拉远时像素盖子盖住太多,高斯显得太小(欠采样,糊成一片)。看原文 Fig.2(图 7-2)。

变距走样对照:左列 3DGS 在拉近(过采样变薄)与拉远(欠采样变小)时出错,右列本方法滤波后正常
图 7-2 问题演示(E 类 · 证据) · 原文 Fig. 2, p.4 怎么读 ①指认:每行一种失败模式:上、下分别是过采样(变薄、刺眼)和欠采样(变小、糊成一片)。②读法:左列是 3DGS 出事的样子,右列是本方法之后的样子,左右同场景同姿势,差别只在滤波方式。 来源:AAA-Gaussians, Fig. 2, p.4 · © 2025 作者 · 原样引用,未修改

3.1 前人的药方,一半用不上

Mip-Splatting(Yu 等)为治走样开了两味药:一味 3D 平滑滤波,给每个高斯加一层低通;一味 2D 屏幕空间 Mip filter,在图像空间近似一个二维盒式滤波。问题在于把评估搬回 3D 之后,那味 2D Mip filter 就没了,3D 评估对不上图像空间的滤波器。于是靠 3D 评估的方法只剩 3D 平滑滤波一味药,它治得好"拉近变稀",却治不了"拉远变糊":拉远时采样频率太低,不加 2D 滤波就高频细节没滤掉,画面闪。

"对不上"这一点值得拆开,它其实揭示了 3D 评估的一个结构性代价。2D Mip filter 的原理是:像素中心对 splat 采样时,用一个盒式核把高频压掉,等价于在图像空间做预滤波,它天然知道"这块屏幕有多少像素在盖这个 splat"。可一旦评估绕回 3D(第 2.3 节),像素射线已经变成了平面交线,图像空间的滤波核再无下手之处:3D 评估回答"这条射线上云多浓",它不回答"屏幕上周围那几像素有没有帮我平均"。这其实就是 2D Mip filter 想补的那件事。

于是方法设计上出现一个岔路:

  • 走 2D 评估 + 2D Mip filter(Mip-Splatting 的路):滤波顺手,但投影有几何误差(第 2.2 节),伪影还在。
  • 走 3D 评估 + 3D 平滑滤波(本方法的路):几何正,但滤波必须自己重造一个3D 版,这就是 3.3 节的自适应面积滤波。代价是滤波核本身要重新定义,麻烦就在这里。

这个取舍是理解本方法的一把钥匙:3D 评估把"走样的物理来源"从图像空间搬进了物体空间,滤波也必须跟着搬。不能只搬评估、不搬滤波,否则就变成第 3.2 节那种"滤波还按 2D/体积理解、评估却已在 3D"的不对称,结果过透明。

3.2 朴素重算为什么治不好:缩放因子数错

一个自然的想法是:对每个渲染视角重算一遍 3D 平滑滤波,让滤波跟着视距走。可这样做的后果是 Gaussian 变得过分透明,见原文 Fig.3 上层(图 7-3)。

自适应 3D 滤波示意:上一行按体积缩放调幅度导致高斯过透明,下一行按垂直于视线方向的面积缩放保持正确
图 7-3 方法示意(S 类 · 机制) · 原文 Fig. 3, p.4 怎么读 ①指认:上下两组对照,上一行是旧的按体积变化调幅度、高斯被放得过透明,下一行是本方法按垂直于视线方向的面积调幅度。②读法:看高斯的透明度差别,透明的地方就是幅度被低估的地方。 来源:AAA-Gaussians, Fig. 3, p.4 · © 2025 作者 · 原样引用,未修改

为什么?因为 3D 评估只取"沿射线的最大贡献点",不做全程积分。平滑滤波幅度缩放的式子是

(5) 𝒶̂(x) = √(|Σ|/|Σ̂|) · exp(−½(x−μ)ἱ Σ̂−1 (x−μ)),Σ̂=Σ+k/v̂² I

这里 √(|Σ|/|Σ̂|) 是幅度缩放因子。它的推导式子里,用的是体积的变化:

(6) √(|Σ|/|Σ̂|) = √(∏si² / ∏(si² + k/v̂²))

问题就在这:|Σ| 是三个方向体积的变化;可射线方向那一维的缩放,对整个"沿最大贡献点"的评估来说是过估的。对一个被拉得很长(很各向异性)的高斯,体积会明显放大,于是幅度判据被压得极小,看起来就过透明,哪怕垂直视线方向根本没变多少。

3.3 正解:只算垂直视线方向的面积

本方法的药:把幅度缩放因子从"体积"改成"垂直于视线方向 d 的平面上的面积"。d 是高斯中心指向相机的单位向量。决定"这道射线到底采到多浓的云"的,不是整团云的体积,而要看正对相机那一片的截面积。

(7) 𝒶̂perp(x) = √(|Σ⊥|/|Σ̂⊥|) · exp(−½(x−μ)ἱ Σ̂−1 (x−μ))

其中 Σ_⊥ 是 Σ 投影到垂直于 d 的子空间上的 2×2 协方差。逐步重推:怎么从 3D 的 Σ 得到 2D 的 |Σ_⊥|?构造一个以 d 为第一基向量的正交基 U,在 U 下对 Σ 做正交变换(保行列式),用 Schur 补把垂直块的行列式解出来,最终有个漂亮结论(原文 10):

(8) √(|Σ⊥|/|Σ̂⊥|) = √( |Σ|·dἱΣ−1d / |Σ̂|·dἱΣ̂−1d )

逐步重推(公式 3-3 → 3-4,补齐中间步):

我们想算的是"垂直于视线 d 的那片面积",即 |Σ_⊥|。Σ 是三维协方差,Σ_⊥ 是它投影到 d 的正交补上的 2×2 块。四步走完:

  1. 换到以 d 为轴的坐标系。 构造正交基 U = [d, u₂, u₃](u₂、u₃ 任意垂直 d,反正只关心面积大小)。对 Σ 做正交变换:Σ′ = Uᵀ Σ U。正交变换保行列式,所以 |Σ| = |Σ′|。
  2. 分块。 Σ′ 在 (1,1) 是 σ₁₁(沿 d 方向的分量),对角块 Σ_⊥ 就是我们要的垂直投影:Σ′ = [[σ₁₁, σ₁₂ᵀ],[σ₁₂, Σ_⊥]]。
  3. Schur 补。 对这块矩阵取行列式(公式 19):|Σ′| = |Σ_⊥| · (σ₁₁ − σ₁₂ᵀ Σ_⊥⁻¹ σ₁₂)。整理得 |Σ_⊥| = |Σ′| / (σ₁₁ − σ₁₂ᵀ Σ_⊥⁻¹ σ₁₂)。
  4. 把分母变漂亮。 用分块矩阵求逆公式,1/(σ₁₁ − σ₁₂ᵀ Σ₂₂⁻¹ σ₁₂) 恰是 Σ′⁻¹ 的 (1,1) 元素(公式 20)。而因为 U 正交,(1,1) 元素 = e₁ᵀ Σ′⁻¹ e₁ = e₁ᵀ (Uᵀ Σ U)⁻¹ e₁ = dᵀ Σ⁻¹ d(公式 21)。
  5. 合拢。 |Σ_⊥| = |Σ| · dᵀ Σ⁻¹ d。对 Σ̂ 同理(把 Σ 换成 Σ̂),两者一除开根就是公式 3-4。

这五步的含金量在最后:dᵀ Σ⁻¹ d 可用 Σ⁻¹ = R S⁻² Rᵀ 展开(公式 11):

(9) dἱ Σ−1 d = dἱ RS−2Rἱ d = ∑i d′i²/si²,d′ = Rἱ d

于是公式 3-4 的分母分子都变成"加权平方和"的比值(公式 12),不再需要显式矩阵求逆,数值稳定、实现还便宜。

伪码:自适应 3D 面积滤波

前提 1:d = normalize(µ − camera_origin)(视线方向)
前提 2:Σ̂ = Σ + k/v̂′² I(v̂′ 见公式 3-6)
输入:Σ, µ, d, v̂′, k, τρ

1  Σ_perp_area = |Σ| · (dᵀ Σ⁻¹ d)          # 公式 3-4 分子(= |Σ_⊥|)
2  Σhat_perp_area = |Σ̂| · (dᵀ Σ̂⁻¹ d)       # 分母
3  amp = sqrt(Σ_perp_area / Σhat_perp_area) # 幅度缩放
4  若 amp 过小(< 阈值)→ 该高斯不贡献,跳过
5  对像素射线 x:贡献 = amp · exp(−½ ρ̂(x)²),ρ̂ 用 Σ̂ 算

注意第 4 行的意义:面积滤波把"过透明"修掉了,但真不贡献的 Gaussian 还是要靠第 5 章的剔除来丢,两个机制各司其职。

参数释义表(第 3 章全表):

符号含义取值/约束
Σ原始协方差3×3 对称正定
Σ̂平滑后协方差 = Σ + k/v̂′² I3×3
Σ_⊥, Σ̂_⊥Σ / Σ̂ 投影到垂直 d 子空间2×2
d视线方向单位向量\d\=1
R, S旋转 / 缩放R 正交,S=diag(s)
sᵢ三个方向的缩放sᵢ>0

3.4 防"拉近过薄":锁住训练采样频率上限

最后还差一味防过薄的:拉近相机时,如果按当前采样频率 v̂ 缩放滤波,Gaussian 会缩得过分。本方法把有效采样频率钳位在训练期看到的上限:

(10) v̂′ = min(v̂train,v̂)

v̂_train 是训练期所有相机里采到的最大采样频率。拉近时用训练上限兜底,Gaussian 不会缩得过薄;拉远时 v̂ 下降,该滤波还滤波。

"钳位"这个动作为什么必要,值得单独解释。走样的物理来源是"屏幕采样频率 vs 高斯空间频率"的错配:拉近时,一个高斯在屏幕上摊开的像素变多,单像素对应的空间范围变小,等效采样频率 v̂ 上升;若不钳位,滤波核 1/v̂² 会随 v̂ 无限缩小,高斯被压成"针尖",透明度掉得离谱(第 3.2 节的过透明在拉近方向上还有一个对称的"过稀"版本)。可训练期已经给过上限 v̂_train 了:训练时相机离物体最远/最近的距离决定了合理采样频率的边界,超过这个边界的高频信息训练集里本来就不存在,去滤波它毫无意义。所以钳位并非妥协,它只是"只滤波训练集里真实存在过的频率"。这是防过薄的正确物理图像:它把"滤波"限制在"有信息可滤"的范围内。

参数释义表:

符号含义取值/约束
v̂当前采样频率 = f/d(焦距/视图空间 z)d>0
v̂_train训练期最大采样频率预计算,跨相机 max
k滤波核尺度0.3(论文默认,手工常数)
Σ_⊥Σ 在垂直 d 子空间投影2×2
τρ截断阈值(包围/剔除用)level set

4鼓出来的那一半被整个丢掉:视图空间包围

第二个伪影是弹跳(pop-in):一个本应在图像边缘露头的高斯,切换视角时突然"跳"出来。这其实是剔除给剔错了,它明明存在,只是包围它的框把它"判无效"给丢了。

4.1 旧法怎么算包围:投影空间的平面拟合

3D 评估要画,就得先知道"这个高斯投射到屏幕哪一块",否则逐像素去搜太贵。常规做法是对高斯椭球做平面拟合,得到它的屏幕包围盒。Hahlbohm 等人跟随 Sigg,对 Gaussians 在投影空间里的某个截断椭球 level set τρ 做精确平面拟合。麻烦出在这个拟合对"Gaussians 伸到图像平面之后"的情况会失效:一旦一个 Gaussian 的 z 范围越过近/远平面,这个拟合没有有效解,Hahlbohm 处理的办法是直接扔掉这个 Gaussian,于是它就"弹"了。看原文 Fig.5(图 7-4)。

Figure5.(Left)Hahlbohm etal . [ 11 ] computethescreenboundsofaGaussianbyfittingplanesinscreenspace.However,theydiscard Gaussianswhose z -bounds( z min , max )areoutsidethenear/far-planes,whichcanleadtopopping.(Right)Weinsteadcompute viewspaceangles θ 1 , 2 ,leadingtoamorerobustcomputationand bounding. Sincetheinversecovariancematrixisgivenby Σ − 1 = RS − 2 R ⊤ ,wecanexpressthedirectionalquadraticformas d ⊤ Σ − 1 d = d ⊤ RS − 2 R ⊤ d = 3 � i =1 d ′ 2 i s 2 i , (11) where d ′ = R ⊤ d .Usingthedeterminantfactorizationfrom Eq.( 8 ),wecansimplifyEq.( 10 )to � d ′ 21 s 22 s 23 + d ′ 22 s 21 s 23 + d ′ 23 s 21 s 22 d ′ 21 ˆs 2 ˆs 3 + d ′ 22 ˆs 1 ˆs 3 + d ′ 23 ˆs 1 ˆs 2 , (12) wheretheupdatedscalingfactorsaregivenby ˆs i = s 2 i + k / ˆ v 2 . Thisformulationenablesefficientcomputationwhileavoid- ingexplicitmatrixinversion,ensuringnumericalstability.ToaddressartifactswhenmovingthecameraclosetoaGaussian,weintegratethe3DsmoothingfilterofYu etal . [ 36 ] withourproposed3Dkernel:Westorethemaximumsamplingfrequencyobservedacrossalltrainingcameras ˆ v train .Duringrendering,theeffectivesamplingfrequencyis definedas ˆ v ′ =min(ˆ v train , ˆ v ) , (13) where ˆ v ′ correspondstothesamplingfrequencyusedforourfilter.ThisformulationensuresthatGaussiansdonot shrinkexcessivelywhenthecameramovescloser,whilestill providingeffectiveanti-aliasingwhenthecameramoves fartheraway. 3.3.PerspectiveCorrectBounding Efficientevaluationof3DGaussiansinasoftwareraster-izerrequiresaccurateboundinginscreenspacetoavoidunnecessaryevaluations.FollowingSigg etal . [ 30 ] ,Hahlbohm etal . [ 11 ] performexactplanefittingtotheellipsoid,definedbythe3DGaussian’slevelsetat τ ρ inprojectivespace,whichfailswhenaGaussian’sex-tentreachesbehindtheimageplane.Tomitigatethis,theydiscardtheseGaussians,leadingtonoticeablepop-ping( cf .Fig. 5 ).Instead,weperformtheplanefittingin viewspacewithplanes π θ =(cos( θ ) , 0 , − sin( θ ) , 0) ⊤ ,and Figure6.Ourfrustumcullingalgorithmfindsthemaximumcontri- butionpointinsidea3Dfrustum,viaprojectionoftheoriginonto thetransformedplanesandedgesinGaussianspace.Comparing ρ ( x ) atthismaximumpointagainstthethreshold τ ρ ,wecancull awayawholeGaussianagainsttheviewfrustum(Left),aswellas individualtilesforasingleGaussian(Right). π ϕ =(0 , cos( ϕ ) , − sin( ϕ ) , 0) ⊤ ,andsolvingfor θ and ϕ : θ 1 , 2 =tan − 1 s 1 , 3 ± � s 21 , 3 − s 1 , 1 s 3 , 3 s 3 , 3 , (14) ϕ 1 , 2 =tan − 1 s 2 , 3 ± � s 22 , 3 − s 2 , 2 s 3 , 3 s 3 , 3 , (15) with s i,j = ⟨ t , T ( view ,i ) ⊙ T ( view ,j ) ⟩ , t =( τ ρ ,τ ρ ,τ ρ , − 1) ⊤ , and T ( view ,i ) denotingthe i -throwoftransformationmatrix fromGaussianspacetoviewspace T view = VT ( cf .thesupplementarymaterialforaderivation).Weadditionally computetheangles θ µ ,ϕ µ oftheviewspaceGaussianmean in x/y -direction.Thisisfollowedbyarotationstep,where weensurethat ( θ µ − π ) <θ 1 <θ µ <θ 2 < ( θ µ + π ) , (16) andaboundingsteptotherange [ − ( π 2 − ϵ ) , π 2 − ϵ ] (witha small ϵ ∈ R + )totranslatethoseboundstothescreen θ 1 =max � − π 2+ ϵ,θ 1 � ,θ 2 =min � π 2 − ϵ,θ 2 � . (17) IfthecameracenterisinsidetheGaussian’sellipsoid,no validsolutionexists,inwhichcasewediscardthisGaussian. Additionally,iftheellipsoidintersectsthe x -axis,itcannot beboundedinthescreenspace y -axis,andvice-versa.In thesecases,theterminsidethesquarerootbecomesnegative, andweconservativelysettheboundstotheentirescreenfortheaffectedaxis.Inthenextstep,tile-basedcullingremovesalltilesthatreceivenegligiblecontributionfrom theGaussianorwheretheGaussian’sdepthremainscloser thanthenearplaneacrosstheentiretile. 3.4.Frustum-BasedCulling Accuratescreenspaceboundingwithaxis-alignedbounding boxes(AABBs)oftheellipsoidshelpstoreducetheper-pixelworkload,however,itdeliversbadboundsforhighly
图 7-4 方法示意(S 类 · 机制) · 原文 Fig. 5, p.4 怎么读 ①指认:左边是 Hahlbohm 的屏幕空间平面拟合,蓝圈标出 z 界越过近/远平面而被丢弃的高斯;右边是本方法改成视图空间的 θ₁,₂ 角度包围。②读法:看被丢弃区域的大小,旧法把它整个判无效,新法用角度补回来。 来源:AAA-Gaussians, Fig. 5, p.4 · © 2025 作者 · 原样引用,未修改

先想清楚"算包围"到底在算什么。对一个椭球,需要两样东西才够:它占据屏幕的哪一片(范围),以及这片里每一处它对屏幕的贡献能到多少(强度)。旧的平面拟合把这两件事都放在投影空间做:对截断椭球τρ在投影空间里取包络,得到一组屏幕矩形。这个做法有一半场景会失灵,问题出在"投影空间"这三个字上。

投影空间是四维齐次坐标,只有当我们把透视除法(除以 w)做完、落回三维欧氏坐标,才有"屏幕上 x 是多少"。一个 z 落在视锥近/远平面之外的高斯,投影之后 w 会变号或接近零,它的屏幕界在投影空间根本取不出来。这就是"没有有效解"的来源。应对办法在 Hahlbohm 那里是直接丢弃,代价就是:这种高斯明明有一部分该画在画面上(边缘露个角),却被当成"不存在",一转头相机到了能看见它的地方,它"啪"地蹦出来,这就是 pop-in。换句话说:旧法的失败点不在"包围算不准",而在"包围干脆放弃了某些高斯"。

4.2 新法:把拟合搬回视图空间,用角度当边界

本方法把平面拟合从投影空间搬回视图空间,用一对平面 πθ=(cosθ,0,−sinθ,0)ᵀ、πφ=(0,cosφ,−sinφ,0)ᵀ 解出高斯在水平/垂直两个方向的视张角 θ₁,₂ 和 φ₁,₂。

逐步重推(θ 的二次方程怎么来):我们要找"平面πθ相切于截断椭球"的两个切角。对水平平面 πθ,把它变换进高斯空间得 π′θ = T_viewᵀ πθ = cosθ·T₁ − sinθ·T₃(这里 Tᵢ 是 T_view 的第 i 行)。相切条件在齐次坐标下写作 π′ᵀ Q π′ = 0,Q = diag(τρ, τρ, τρ, −1)。把它展开:

π′ᵀ Q π′ = cos²θ·T₁ᵀQ T₁ − 2sinθcosθ·T₁ᵀQ T₃ + sin²θ·T₃ᵀQ T₃

两边同除 cos²θ,化成关于 tanθ 的二次方程(记 sᵢ,ⱼ = ⟨t, Tᵢ⊙Tⱼ⟩,t=(τρ,τρ,τρ,−1)ᵀ):

tan²θ·s₁,₁ − 2tanθ·s₁,₃ + s₃,₃ = 0

这是标准一元二次,解出 tanθ 再取 arctan:

(11) θ1,2 = tan−1( (s1,3 ± √(s1,3²−s1,1s3,3))/s3,3 ),φ 同理

(这个解和 Hahlbohm 的屏幕界属同一族,但放到了视图空间。差别就在时机的先后:它先在视图空间把角界定好,再去投射屏幕,而不是直接给屏幕矩形,所以不会被"图像平面在中间"这件事打断。)

算到的角度还要两步归一收拢:①保证 (θµ−π)<θ₁<θµ<θ₂<(θµ+π) 旋转排序(公式 16);②夹到 [−π/2+ϵ, π/2−ϵ](公式 17)。相机钻进椭球内部时无解就丢弃;椭球与某轴相交时对应 y 轴无法界定,就保守地把那一轴设为整屏,宁肯画多,不肯误丢。

把"为什么是角度而不是屏幕矩形"再讲直白一点。屏幕矩形是以像素为刻度的量:高斯离相机越远,同样几度视张角投影到屏幕上占的像素越少。如果我们拿"像素范围"当包围,就得先做完投影,而投影恰恰是第 4.1 节说"会失效"的那一步(z 界外没有有效投影)。角度是以相机为刻度的量:它只回答"这个高斯在相机看向它的锥形视野里占多宽的角",不依赖投影是否成功。因此角度包围天然绕开了"投影空间取不到界"的死穴,这是"搬回视图空间"的真正含义:换一个不会被投影打断的坐标系来量包围。

旋转排序(第①步)处理的是环绕情况:一个高斯可能横跨 180° 视张角(相机贴脸看一堵长墙),它的 θ₁ 和 θ₂ 若不按环绕序排,会得出"左边界在右边界右边"的荒谬结果。夹紧(第②步)处理的是越过 ±90° 的情况:相机已经转到高斯"身后",真实视张角超过半圈,此时把边界收进 [−π/2, π/2] 避免与"相机背后的空间"混淆。两处归一都是让角度始终是可比较的、无歧义的数,为后续 tile 分配提供干净输入。

伪码:视图空间角度包围

前提 1:高斯 level set τρ 已定
前提 2:T_view = V·T(视图矩阵 × 高斯空间→世界 → 高斯空间→视图空间)
输入:T_view, τρ, µ_view(视图空间中心)

1  对水平:由 T₁、T₃ 算 s₁,₁, s₁,₃, s₃,₃ = ⟨t, Tᵢ⊙Tⱼ⟩,t=(τρ,τρ,τρ,−1)
2  判别式 Δ = s₁,₃² − s₁,₁·s₃,₃
3  若 Δ < 0 → 高斯与 x 轴相交,y 方向无法界定 → θ 设整屏(保守)
4  否则 θ₁,₂ = atan2(s₁,₃ ± √Δ, s₃,₃)
5  旋转排序:确保 (θµ−π) < θ₁ < θµ < θ₂ < (θµ+π)
6  夹紧:θ₁ = max(−π/2+ϵ, θ₁),θ₂ = min(π/2−ϵ, θ₂)
7  对垂直方向同理算 φ₁,₂
8  若相机中心在高斯椭球内 → 无解,丢弃
9  输出水平/垂直视张角 → 供 tile 分配与剔除使用

参数释义表:

符号含义约束
θ,φ视图空间水平/垂直角[−π/2+ϵ,π/2−ϵ]
T_view高斯空间→视图空间变换含 view matrix
τρlevel set 阈值同前
ϵ微小夹紧量R₊

这步的价值一句话:包围框不再依赖"越界就丢",而是告诉光栅化器"它确实在屏幕上,范围是这几度",弹跳从根上消失。包围给出的视张角还有第二个用处,它在下一章成为逐 tile 剔除的输入:光知道"高斯占屏幕哪几度"还不够,还要问"它在某一块 tile 上够不够格",否则画面不跳了,性能却掉下去,这就是第 5 章要讲的事。

5每块屏幕先知道"这片没它的事":视锥剔除

第三个问题是性能。AABB 包围对"斜着放"的椭球包围得又松又差,且有些 Gaussian 有合法屏幕范围却一个像素都不贡献。与其事后浪费,不如把"这块屏幕没它的事"的判断提前、再做对。

先把"剔除"这件事拆成两个不同粒度,否则后面容易混:

  1. 全局视锥剔除(global culling):以"整帧"为单位,问"这个 Gaussian 该不该出现在这一帧里"。答案是否定的就直接丢出候选池,根本不用进光栅化。这是做 3D 渲染都有的基础操作。
  2. 逐 tile 剔除(per-tile culling):以"单个 tile"为单位,问"就算它在这一帧可见,这块 16×16 的 tile 上到底有没有它的一点贡献"。答案是否定的就把"这个 Gaussian × 这块 tile"这个组合丢掉,省下排序和评估。

本方法把第 2 类从 2D 升级成 3D。为什么这值得单开一章?因为逐 tile 是逐像素评估的前一站,每一组"Gaussian × tile"后来都可能演变成一个排序任务,而排序是整条管线最贵的部分(第 6 章会看到,去掉 culling 后帧耗时几乎翻倍),所以能不能早一步把这个组合砍掉,直接决定排序队列有多长。

5.1 从 2D 到 3D 的逐 tile 剔除

Radl 的分层栅格化里已有逐 tile 剔除(把投影后的 2D 椭圆按 tile 裁掉,大幅减少 Gaussian/tile 组合,也别做没必要的排序)。本方法把这个剔除提到 3D:对每个 tile 用四个屏幕空间平面造一个3D 视锥 F,然后在视锥内找高斯"贡献最大的那个点",若它都没达到阈值就整片不收这个 tile。

先补一段背景:Radl 的分层栅格化(hierarchical rasterization)解决的是 3DGS 的排序开销问题。传统 3DGS 对每个 tile 维护一个深度排序列表,Gaussian 重叠越多、列表越长、排序越贵。Radl 的骨架把屏幕划成多级(整帧 → 大块 → tile),先粗排、再精排,把排序成本压到接近线性。但即便有这套骨架,每个 Gaussian 还是会被分配给它覆盖的每一个 tile。一个横跨 32 个 tile 的大高斯,要进 32 个排序队列。如果这个大高斯其实在某块 tile 上浓度早已低于阈值,那 32 份排序里有相当一部分是白做的。

这就是"逐 tile 3D 剔除"的落点:在分配给 tile 之前问一句"它在你这块 tile 的 3D 视锥里,有没有可能贡献够格"。视锥由 tile 的四条屏幕边生成,每个 tile 就是一个从相机出发的四棱锥。把高斯(或它的均值/等值面)放进视锥里算 ρ 的最小值,若最小值仍超阈值 τρ,说明这块 tile 上它根本够不着贡献标准,直接把这个组合丢掉。

这一步的奇妙之处在于它和"分层排序"的协同:排序前先砍组合。Radl 骨架优化的是"给定组合,排序多快";本方法优化的是"组合本身就少",两件事叠加,排序开销呈乘积式下降,这就是第 6.4 节"去掉 culling 帧耗时翻倍"的来源。

(12) minx∈F ρ(x)² < τρ

看原文 Fig.6(图 7-5)。

Figure5.(Left)Hahlbohm etal . [ 11 ] computethescreenboundsofaGaussianbyfittingplanesinscreenspace.However,theydiscard Gaussianswhose z -bounds( z min , max )areoutsidethenear/far-planes,whichcanleadtopopping.(Right)Weinsteadcompute viewspaceangles θ 1 , 2 ,leadingtoamorerobustcomputationand bounding. Sincetheinversecovariancematrixisgivenby Σ − 1 = RS − 2 R ⊤ ,wecanexpressthedirectionalquadraticformas d ⊤ Σ − 1 d = d ⊤ RS − 2 R ⊤ d = 3 � i =1 d ′ 2 i s 2 i , (11) where d ′ = R ⊤ d .Usingthedeterminantfactorizationfrom Eq.( 8 ),wecansimplifyEq.( 10 )to � d ′ 21 s 22 s 23 + d ′ 22 s 21 s 23 + d ′ 23 s 21 s 22 d ′ 21 ˆs 2 ˆs 3 + d ′ 22 ˆs 1 ˆs 3 + d ′ 23 ˆs 1 ˆs 2 , (12) wheretheupdatedscalingfactorsaregivenby ˆs i = s 2 i + k / ˆ v 2 . Thisformulationenablesefficientcomputationwhileavoid- ingexplicitmatrixinversion,ensuringnumericalstability.ToaddressartifactswhenmovingthecameraclosetoaGaussian,weintegratethe3DsmoothingfilterofYu etal . [ 36 ] withourproposed3Dkernel:Westorethemaximumsamplingfrequencyobservedacrossalltrainingcameras ˆ v train .Duringrendering,theeffectivesamplingfrequencyis definedas ˆ v ′ =min(ˆ v train , ˆ v ) , (13) where ˆ v ′ correspondstothesamplingfrequencyusedforourfilter.ThisformulationensuresthatGaussiansdonot shrinkexcessivelywhenthecameramovescloser,whilestill providingeffectiveanti-aliasingwhenthecameramoves fartheraway. 3.3.PerspectiveCorrectBounding Efficientevaluationof3DGaussiansinasoftwareraster-izerrequiresaccurateboundinginscreenspacetoavoidunnecessaryevaluations.FollowingSigg etal . [ 30 ] ,Hahlbohm etal . [ 11 ] performexactplanefittingtotheellipsoid,definedbythe3DGaussian’slevelsetat τ ρ inprojectivespace,whichfailswhenaGaussian’sex-tentreachesbehindtheimageplane.Tomitigatethis,theydiscardtheseGaussians,leadingtonoticeablepop-ping( cf .Fig. 5 ).Instead,weperformtheplanefittingin viewspacewithplanes π θ =(cos( θ ) , 0 , − sin( θ ) , 0) ⊤ ,and Figure6.Ourfrustumcullingalgorithmfindsthemaximumcontri- butionpointinsidea3Dfrustum,viaprojectionoftheoriginonto thetransformedplanesandedgesinGaussianspace.Comparing ρ ( x ) atthismaximumpointagainstthethreshold τ ρ ,wecancull awayawholeGaussianagainsttheviewfrustum(Left),aswellas individualtilesforasingleGaussian(Right). π ϕ =(0 , cos( ϕ ) , − sin( ϕ ) , 0) ⊤ ,andsolvingfor θ and ϕ : θ 1 , 2 =tan − 1 s 1 , 3 ± � s 21 , 3 − s 1 , 1 s 3 , 3 s 3 , 3 , (14) ϕ 1 , 2 =tan − 1 s 2 , 3 ± � s 22 , 3 − s 2 , 2 s 3 , 3 s 3 , 3 , (15) with s i,j = ⟨ t , T ( view ,i ) ⊙ T ( view ,j ) ⟩ , t =( τ ρ ,τ ρ ,τ ρ , − 1) ⊤ , and T ( view ,i ) denotingthe i -throwoftransformationmatrix fromGaussianspacetoviewspace T view = VT ( cf .thesupplementarymaterialforaderivation).Weadditionally computetheangles θ µ ,ϕ µ oftheviewspaceGaussianmean in x/y -direction.Thisisfollowedbyarotationstep,where weensurethat ( θ µ − π ) <θ 1 <θ µ <θ 2 < ( θ µ + π ) , (16) andaboundingsteptotherange [ − ( π 2 − ϵ ) , π 2 − ϵ ] (witha small ϵ ∈ R + )totranslatethoseboundstothescreen θ 1 =max � − π 2+ ϵ,θ 1 � ,θ 2 =min � π 2 − ϵ,θ 2 � . (17) IfthecameracenterisinsidetheGaussian’sellipsoid,no validsolutionexists,inwhichcasewediscardthisGaussian. Additionally,iftheellipsoidintersectsthe x -axis,itcannot beboundedinthescreenspace y -axis,andvice-versa.In thesecases,theterminsidethesquarerootbecomesnegative, andweconservativelysettheboundstotheentirescreenfortheaffectedaxis.Inthenextstep,tile-basedcullingremovesalltilesthatreceivenegligiblecontributionfrom theGaussianorwheretheGaussian’sdepthremainscloser thanthenearplaneacrosstheentiretile. 3.4.Frustum-BasedCulling Accuratescreenspaceboundingwithaxis-alignedbounding boxes(AABBs)oftheellipsoidshelpstoreducetheper-pixelworkload,however,itdeliversbadboundsforhighly
图 7-5 方法示意(S 类 · 机制) · 原文 Fig. 6, p.4 怎么读 ①指认:左边是对整片视锥判断该 Gaussian 完全不贡献就整体丢,右边是对单个 Gaussian 逐 tile 判断。②读法:核心是找视锥内 ρ(x) 最大的那一点,它落在面或棱上,因为处理的是均值已在视锥外的高斯。 来源:AAA-Gaussians, Fig. 6, p.4 · © 2025 作者 · 原样引用,未修改

5.2 怎么找最大贡献点,还要快

若高斯均值已在视锥内,它自己就是最大贡献点,收工。否则最大点必落在视锥的面上或棱上。朴素做法是 4 个面 + 4 条棱全投影一遍;本方法只投影离均值最近的 2 个面 / 3 条棱,因为其余的面/棱上的点不可能比近的更有贡献。这步要跑很多 tile,省下来的每次调用都是纯利。

"为什么只看最近的面/棱就够"用一句话就能讲清:ρ(x) 是"离高斯中心的加权距离",高斯中心(均值 µ)离哪块边界最近,那块边界上的点就最可能贡献够格;远的面/棱上的点,加权距离只会更大,贡献只会更小。既然阈值 τρ 判的是"有没有任何一个点够格",那么只需检查"最有可能够格的那几个点",其余点再查也是白查。数学上这是"先验地知道最优候选在哪"的用法:均值在锥外时,锥内离均值最近的点一定在锥的边界上(内部点都能沿连线继续逼近均值方向),而边界上离均值最近的点只会出现在离均值最近的面或棱上。

这套"只查近的"推理有个前提必须说清:高斯是各向同性或已知各向异性的,即 ρ 的等高面是椭球面。本方法的高斯协方差 Σ 已知(第 2 章),ρ 就是椭圆度量下的距离,所以"最近的面"要用 Σ 的度量来量,不是欧氏距离,实现里是把视锥平面变换进高斯归一化空间再比距离(伪码第 3 步就是干这个)。这个细节是"正确性不变、工作量减半"的保证:换的是度量,不是近似。

伪码:逐 tile 3D 剔除(最大贡献点搜索)

前提 1:tile 的 4 个屏幕平面 π_x1, π_x2, π_y1, π_y2 已由 tile 边界 (xmin,xmax,ymin,ymax) 生成
前提 2:高斯已过全局视锥剔除,仍在本帧候选
输入:高斯 (µ, Σ, R, S), tile 平面集, τρ

1  若 µ 在视锥内 → 返回"不剔"(µ 即最大贡献点)
2  找出屏幕空间离 µ 最近的 2 个面(x 方向或 y 方向的对应面)
3  对这 2 个面各自:把面变换进高斯归一化空间,找离原点最近的点
4  对邻接的 3 条棱同理
5  候选点 = 上述 2 面 + 3 棱上的最近点并集
6  校验每个候选点确实在视锥内、且在相机前方
7  ρ_min² = min over 候选点 of ρ(x)²
8  若 ρ_min² < τρ → 剔除该 tile(该高斯不画这一片)
9  否则 → 保留,进入分层排序

复杂度注记:第 2 行的"只选 2 面 3 棱"把每次剔除从 4 面 4 棱的 8 次投影压到 5 次,且剔错概率不变,因为离均值远的面,其上的点贡献必然不如近的面。这是"正确性不变、工作量减半"的典型。

参数释义表:

符号含义约束
F每 tile 的 3D 视锥4 屏幕平面围成
x_min视锥内 ρ(x)² 最小点面上/棱上
τρ贡献阈值同前

6离分布视角见真章:一套指标、两张证据图

前面三章治的是三种具体伪影。这一章回答一个更毒的问题:这些改动到底把画面改好了,还是只是"看起来对"? 答案是看离分布(out-of-distribution)视角,那些训练时没见过、最容易露馅的拍法。

6.1 标准数据集:不输,且不靠"作弊"

先在常规数据集(Mip-NeRF 360 / Tanks & Temples / Deep Blending,共 13 场景)上比标准指标(PSNR/SSIM/LPIPS)。结果(原文 Tab.1):本方法在几乎所有指标上持平或超过现有方法。有个值得玩味的细节:Tanks & Temples 上本方法 PSNR 略低,论文的解释是:本方法不许优化器靠 pop-in"逐视角作弊"。MCMC 靠畸变的高斯和 pop 来补偿大规模光照变化,等于"假出一整套屏幕调整",指标上好看,但那是把病当补丁用;一到离分布视角(原文 Fig.7,图 7-6)就崩穿。

先把"为什么标准集上看不出强弱"这件事想透,否则读者容易误解作者"谁更强"的结论是含糊其辞。标准评测(Mip-NeRF 360 / T&T / Deep Blending)的测试视角是从训练视角里插值出来的,相机走的是一条覆盖场景的平滑路径,每个测试角度的"行为"都和训练时见过的高度相似。在这种视角下,三种方法都能收敛得不错:MCMC 靠 pop 和略畸变的高斯把光照变化"假装"出来,本方法靠 3D 评估把真实几何算对,两条路在分布内的误差都小,你分辨不出谁更"诚实"。这就解释了为什么整套方法的成败必须交给离分布视角(6.2、6.3 的 Tab.3/4)来裁决:只有在训练没见过的拍法上,靠作弊曲线救国的模型才会露出破绽,而老老实实做对几何的模型才站得住。

大 FOV 离分布视角定性对比:GT/3DGS/StopThePop/MCMC/Ours 五列、三个场景,Ours 视觉与 PSNR 都稳定
图 7-6 定性结果(E 类 · 证据) · 原文 Fig. 7, p.7 怎么读 ①指认:五列五种方法(GT / 3DGS / StopThePop / MCMC / Ours),三行三个场景,每格标 PSNR。②读法:横向同行比较,谁的数字往下掉、画面拉丝,谁就是被大 FOV 打崩的;竖直看 Ours 那列,数字和视觉都稳。 来源:AAA-Gaussians, Fig. 7, p.7 · © 2025 作者 · 原样引用,未修改

6.2 大 FOV 实验:焦距砍 3 倍、分辨率翻 3 倍

实验设定:人工把测试视角的焦距减小 3×、分辨率增大 3×,再从原图裁出逐像素对齐的 ground truth 对照。这样测的是"相机在训练分布外时,渲染还扛不扛得住"。结果(原文 Tab.3):本方法在三个数据集上几乎不掉,其它方法因畸变伪影显著劣化。MCMC 在 Tanks & Temples 上 PSNR 从 24.64 掉到 14.37,快腰斩;本方法 24.58→23.58,几乎无损。

这个实验设计值得拆开看,它其实同时测了两种"离分布":

  1. 焦距砍 3× = 视场角变大:同样的场景,视角从"标准镜头"变成"广角",画面边缘的投影曲率剧烈增大,恰好是第 2.2 节局部仿射最失效的地方。这个改动单独测"畸变伪影"。
  2. 分辨率翻 3× = 采样频率变高:像素变密,屏幕采样频率 v̂ 暴涨,高斯与像素的匹配关系全部重排,恰好是第 3 章走样的主场。这个改动单独测"抗锯齿"。

两个改动同时施加,等于把"畸变 + 走样"两个伪影源头同时推向极端,再去看谁崩。为什么 Ours 不掉?因为它两味药各治各的:视图空间包围(第 4 章)把广角下的边界界定正确,畸变不表现为弹跳;自适应面积滤波(第 3 章)把高采样频率下的滤波做对,走样不表现为糊。其它方法两样都缺,一测就穿。

6.3 多分辨率:抗锯齿滤波的真本事

再用 ½×/1×/2× 三档分辨率测抗锯齿,见原文 Fig.8(图 7-7)。

多分辨率评估:GT / MCMC / Ours / Ours w/o AA 四行 × ½/1/2× 三列分辨率,Ours 三档清楚,w/o AA 变厚变薄
图 7-7 定量结果(E 类 · 证据) · 原文 Fig. 8, p.13 怎么读 ①指认:四行方法(GT / MCMC / Ours / Ours w/o AA),三列分辨率(½ / 1 / 2×)。②读法:横向看某方法跨分辨率稳不稳:Ours 三档都清楚,Ours w/o AA 在低档变厚、高档变薄,就是走样签名。 来源:AAA-Gaussians, Fig. 8, p.13 · © 2025 作者 · 原样引用,未修改

复算一处(原文 Tab.4,Bonsai 场景 2× 档):MCMC PSNR 21.15,Ours 26.73,Ours w/o AA 20.99。三个数字摆一起:抗锯齿滤波把同分辨率质量抬了 5.7dB,而 MCMC 在分辨率变化面前崩得和"没滤波"差不多。这就是自适应面积滤波的价值,不是锦上添花。

把这三个数字再读一遍,有个反直觉的观察:Ours w/o AA 和 MCMC 在 2× 档几乎一样差(20.99 vs 21.15)。这说明两件事:其一,MCMC 的失败模式就是"没滤波"的失败模式:分辨率一高,采样频率和滤波核不匹配,走样照旧;其二,Ours 的 AA 滤波并非"锦上添花",它把 2× 档从 21 拉到 26.7,涨了关键 5.7dB。如果论文只报"Ours 全开",读者会以为高分来自 3D 评估本身;有了 w/o AA 这组对照,才看清"3D 评估负责几何正确,AA 滤波负责分辨率正确"的分工。缺了后者,前者在变分辨率下也白搭。这就是第 3 章"评估和滤波必须一起搬"(3.1 节)在数据上的印证。

数据复算表(口径:全部为原文表格直读,跨数据集/跨方法对比):

对比项数据来源数字读法
大 FOV 下 MCMC 的崩法Tab.3, T&TPSNR 24.642→14.369(−10.27dB)离分布视角让"靠 pop 作弊"的模型露馅
大 FOV 下 Ours 的稳法Tab.3, T&TPSNR 24.582→23.583(−0.999dB)几乎不掉
大 FOV 下 Deep BlendingTab.3, DBOurs 30.488 vs MCMC 18.315(+12.17dB)非针孔视角同样碾压
AA 的价值(2× 档 Bonsai)Tab.4Ours 26.73 − Ours w/o AA 20.99 = +5.74dB纯 AA 滤波的收益
AA 的价值(2× 档 Bicycle)Tab.4Ours 24.52 − Ours w/o AA 21.90 = +2.62dB另一场景同向
分辨率变化下 MCMC 的脆弱Tab.4, Bicycle1× 25.69 → 2× 22.13(−3.56dB)分辨率一变就走样
culling 的性能杠杆Tab.5, M360 IndoorOurs 10.66ms vs Ours w/o culling 22.98ms(2.16×)剔除削掉排序大半开销
3D 评估不是税Tab.5, DBOurs 5.81ms vs Ours w/o 3D 6.32ms3D 评估比 2D 变体还快

注意口径:以上为论文报告的表格数字(RTX 4090、插值相机路径、多场景平均),本站不做独立复现;不可复现原因:无对应权重与训练环境,仅作读数说明。

6.4 性能账:3D 评估不慢,culling 是杠杆

性能(原文 Tab.5,RTX 4090):Ours 平均帧耗时 7.72/10.66/7.03/5.81ms(四数据集),与 MCMC 持平(6.79/8.81/8.28/4.43)甚至 Tanks & Temples 更快。拆开看:去掉 culling,耗时从 7.72 跳到 14.40ms(≈1.9×),说明分层排序极度依赖前置剔除来削排序开销;去掉分层排序,4.11ms 更快但引入弹跳;去掉 3D 评估则类似或更慢,证明3D 评估在性能上和 2D splat 相当,不是为质量付的"税"。

这三组消融,每一组都值得单独读:

  • 去掉 culling → 1.9× 变慢:这是"排序是瓶颈"的实证。没有 3D 剔除,每个 Gaussian 仍被分配给所有覆盖的 tile,排序队列暴涨。别小看这个数字,它同时是第 5 章"逐 tile 剔除"的验收证据:这套剔除绝非可有可无的优化,它是整条管线的性能支柱。
  • 去掉分层排序 → 变快但弹跳:分层排序比朴素排序略慢,换来的是一致性(第 4 章包围提供正确深度序)。没有它,帧快了但 pop 回来,这组消融证明"排序的慢"是值得付的,和第一组消融正好形成互补:一个证明"排序贵,要砍组合",一个证明"排序不能省,只能砍前置"。
  • 去掉 3D 评估 → 类似或更慢:这是全篇最反直觉的一个数字。3D 评估(第 2.3 节)几何上比 2D splat 正,性能却还更快,原因在实现细节:3D 评估绕开了 Σ⁻¹(退化高斯下数值不稳、要额外分支处理),且它天然提供逐 tile 剔除所需的 ρ 结构。也就是说:3D 并非拿性能换质量,它是"又正又快",质量收益是白赚的。

性能账合起来回应了读者最大的一个疑虑:"这么一套几何正解,帧率得掉多少?"答案是不掉,甚至略赚。三味药里两味(包围、剔除)本来就是性能手段,一味(3D 评估)不增负但正几何。这就是本篇主线"伪影和帧率可以同时解决"的落地。而这句话的另一面,就是下一章边界清单要泼的冷水:性能不掉的承诺是有适用范围的。

7边界与反例

作为读图/读文的兜底,把"什么情况下这套东西不成立"独立列成一章,逐条讲清楚触发条件。读这一章的正确姿势不是"找它的错",正确的读法是把这套方法当成一把工具,弄清楚它的适用面在哪里。每一条边界,都对应一个"换一种场景就失效"的明确触发条件。

  1. 离分布时指标可能反降。 标准指标在分布内(原文 Tab.2):去掉单个组件后 PSNR 甚至可能微涨,因为模型能更好地过拟合数据集视图。所以"指标涨了"不能当成效验证据,只有离分布视图(Tab.3/4)才见功力。失效条件:如果你的验收只看标准分布内 PSNR,这套改动的收益几乎看不见。
  2. 绑定 pinhole 模型。 视图空间包围的推导强依赖针孔相机几何(角度 θ/φ 是针孔投影下的概念)。失效条件:鱼眼、广角畸变、非 pin-hole 相机直接用会偏。
  3. "取最大贡献点"≠完整体积积分。 3D 评估只取射线上的 ρ(x) 峰值,不做全程积分。失效条件:高不透明度、高斯互相交叠、存在折射/散射介质时,单一峰值近似会错,论文自己承认(引用 EVER / Don't Splat 等容积率方案)。
  4. k 是手工常数。 滤波核尺度 k=0.3 是全篇固定,没按内容自适应。失效条件:场景尺度差异极大时,单一 k 很难最优。
  5. culling 对画质零贡献。 它是纯性能手段,移除后重建质量不变(原文 Tab.2 确认),只是排序拖慢。失效条件:若你不在乎帧率,这一步可有可无。
  6. Hybrid Transparency 的反面教材。 它没有经典 pop,但仍有 pop-in(边缘错误剔除)和固定 2D 滤波欠采样,说明"只治一项或治一半"不够,这就是本方法要"全部一起治"的理由。

这六条里,前三条是"换场景就失效",后三条是"换需求就失效",两类要分开读:

  • 换场景就失效(1–3):失效的根源都在于这套方法的假设条件:针孔投影、高斯介质、单峰贡献。场景不满足假设,药就失灵。这不是 bug,它是适用范围问题。
  • 换需求就失效(4–6):失效的根源在于验收标准变了:只认分布内指标、只要帧率不要质量、只修单个伪影。需求变了,这套改动的定位就变了,它不是万金油。

怎么判断你的场景适不适用?给三个自查问题:

  1. 我的相机是针孔模型吗?(第 2 条边界)
  2. 我的场景是"不透明表面为主"还是"半透明/容积介质为主"?(第 3 条边界)
  3. 我验收时看的是分布内 PSNR,还是真去渲染离分布视角?(第 1 条边界)

三条都答"是"(针孔 + 不透明表面 + 看离分布),这套方法就是为你准备的;任何一条答"否",就要先想清楚哪味药会失灵,再决定要不要整建制采用。

再补一层更细的边界辨析:"走样"和"弹跳"这两类伪影的边界其实不对称。走样是几何级的(缩放因子算错、采样密度不匹配),弹跳是离散级/排序级的(剔除误判、排序突变)。本方法把走样交给滤波、把弹跳交给包围+剔除,两者互不越界。这也解释了为什么第 6 条里 Hybrid Transparency 治了 pop 却治不了 pop-in。它动的层级不对,等于在一个层级上打补丁,另一个层级的病根还留着。边界不是"哪里会错",而要问"哪一层在哪一层上会错"。

8把三个动作拼成一帧:管线总装

把前面分开讲的三味药,按一帧渲染的时间顺序拼起来,你会看到它们环环相扣,不是三个独立补丁:

  1. 预处理阶段,全局视锥剔除:整片不贡献的 Gaussian 先丢(第 5 章),为后面省下大量无效评估。
  2. 视图空间包围,每个留下的 Gaussian 算出它的 θ₁,₂/φ₁,₂ 视张角,知道它会落在屏幕哪几度(第 4 章),同时也是后续 tile 分配的边界。
  3. 逐 tile 3D 剔除,按 tile 造视锥,找最大贡献点,贡献不足的 tile 直接不收(第 5 章)。这一步削掉了分层排序的大半负担。
  4. 分层排序 + 3D 评估,对保留下来的 Gaussian(已按深度分级入队),每条射线取沿线的最大贡献点,配合自适应面积滤波输出颜色(第 2+3 章)。

扣得最紧的一环是:有序评估依赖正确的 culling。排序要高效,前提是先知道哪些 Gaussian 根本不用排;而 culling 要正确,前提是包围(第 4 章)不出错。包围出错就会把该画的 Gaussian 误丢,弹出的还是那个老问题。这就是为什么三味药必须一起上,不是三选一。

顺着帧的推进,把每一帧里数据到底流经了哪些检查,走一遍清单:

阶段输入干什么输出谁在等它
全局视锥剔除全部 Gaussian + 相机整帧级"有没有可能可见"存活集视图空间包围
视图空间包围存活集解 θ/φ 视张角每高斯屏幕范围tile 分配
tile 分配视张角 + 屏幕分块高斯 → 覆盖的 tile 列表(高斯, tile) 组合逐 tile 剔除
逐 tile 3D 剔除(高斯, tile) 组合视锥内找最大贡献点,不足就丢存活组合分层排序
分层排序存活组合按深度分桶入队,桶内排序有序渲染队列3D 评估
3D 评估 + 面积滤波有序队列 + 像素逐射线取最大贡献点、调幅度颜色混合输出

这张表值得停留一下:每一阶段的输出都是下一阶段的输入,而且每两级之间都有一道"丢弃"闸门。闸门开得越早,后面的队列越短。这也解释了论文里那个反直觉的性能结论:3D 评估本身不慢(时间账见下),慢的是排序;排序省下来的时间,全来自前面三道闸门把队列砍短。

把 Tab. 5 的时间账摊开,前面的结论就看得更实。论文用 RTX 4090、沿插值相机路径取平均,四个数据集上的每帧耗时(毫秒)如下:

配置M360 IndoorM360 OutdoorTanks & TemplesDeep Blending
Ours(完整)7.7210.667.035.81
Ours 去掉剔除14.4022.9812.788.88
Ours 去掉分层排序4.116.293.693.47
Ours 去掉 3D 评估7.6410.307.526.32
MCMC(基线)6.798.818.284.43

三个读数值得记下来。第一,去掉剔除的那一行几乎翻倍,Indoor 从 7.72 涨到 14.40,说明分层排序的负担大半靠剔除在扛,这正是"闸门开得越早、队列越短"的量化版本。第二,去掉分层排序反而最快,可它同时把 pop 弹了回来,等于拿质量换速度,不能算赢。第三,去掉 3D 评估的那一行和完整版几乎持平,论文据此下结论:3D 评估本身不比 2D splat 近似慢,甚至更快。慢的地方从来不是评估,是排序。

还有个对不上的地方值得说一句:去掉 3D 评估的配置比 MCMC 基线还慢一点,M360 Indoor 一个是 7.64、一个是 6.79。论文的解释是,新的包围和剔除比标准的 2D 包围略重,省下的那点评估时间不够填,整套配置只在排序上赚回了差价。3D 评估不慢是真的,可整条管线的账要合起来算,不能只盯一行。

还有一个常被忽略的细节:第 4 步的分层排序是整个管线的"底线"。表里它排在剔除之后、评估之前,看起来只是中间一步,可它同时承载了第 1 章说的第三种伪影:弹跳的最后一个来源:深度序错误。3D 评估(第 2 章)正确回答了"这条射线上哪团雾最浓",但颜色混合还需要"哪团雾在前、哪团在后",这个顺序由分层排序保证。所以第 4 步不是"排个序就行",它和第 2 步(包围)共享同一个目标:不许排序出错。包围错了,高斯被误丢,弹跳;排序错了,前后颠倒,弹跳的另一个变体。这也是第 8 章把它俩绑在一起讲的原因:它们合起来才是"弹跳"的完整解药。

把整帧走一遍,用一句人话收束:先砍掉看不见的(剔除),再圈定可见的(包围),再按远近排队(排序),最后逐射线问浓度(3D 评估 + 滤波)。四步里任何一步错了,画面上都会出现第 1 章那三种"一帧一帧不对劲"的某一种。

到这一步,读者已经理解"方法干成了什么"。可工程上还有一个老读者的习惯性问题:这套东西动的是谁的代码、有没有复用现成骨架? 前面每一章都提到了三次"Radl 的分层栅格化底座",这不算是重复,只是铺垫。下一章我们就把"换了哪几块零件、留了哪几块"摊成一张工程账。

9改动打包:换了几块零件、动了谁的代码

把本方法对 Radl 的分层栅格化底座到底改了什么、留了什么,摊成一张账:

管线件底座(Radl)本方法替换为类型
bounding投影空间平面拟合视图空间角度包围换
culling2D 逐 tile 椭圆剔除3D 逐 tile 视锥剔除 + 全局视锥换
depth evaluation2D splat 深度3D 评估(取最大贡献点)换
contribution2D splat 贡献3D 贡献换
anti-aliasing2D Mip filter3D 自适应面积滤波换
per-ray 排序保留保留留
入队策略保留保留留
稠密化MCMC 参数一致沿用留

实现细节里有四个数字和取舍,单独拎出来讲,因为它们直接决定能不能复现:

实现选择数值/做法出处
滤波核尺度 k0.3,沿用前作 [14,36,39]§4 Implementation Details
稠密化MCMC,参数与 [16] 完全一致同上
训练/评测图Mip-NeRF 360 预降采样图同上
训练基准所有方法优化到相同 primitive 数同上
Hybrid Transparency训练码不可得,重评估其原图指标同上

第一个数字是 k=0.3。它说明滤波强度是手工定的,不是从数据里学出来的,这和第 7 章边界 4 是同一条信息的两处落点:一个在说它没自适应,一个在说它到底取了什么值。第二个选择是稠密化沿用 MCMC 的原参数,好处是能把变量锁在包围、剔除、评估、抗锯齿四块上,坏处是它没法回答换一种稠密化这套药还灵不灵。第三个选择是预降采样图,它把训练和评测都钉在固定分辨率上,第 6 章的多分辨率测试(图 7-7)之所以能干净地暴露走样,前提就是这里。第四个选择是统一 primitive 数,它保证了比较的对象是同规模模型,而不是靠多塞几万颗高斯堆出来的分数。

这张账有两种读法,对应两类读者:

  • 读"换"列(想做同类研究的读者):本方法真正动脑子的是四块:包围、剔除、深度评估、抗锯齿。前两块的改动本质是"把判断从 2D/投影空间挪到 3D/视图空间";后两块的改动本质是"把评估从近似换成正解"。
  • 读"留"列(想复用本方法的读者):Radl 的分层排序骨架完全没动。也就是说,只要你的底座也是分层栅格化(Radl 一脉),本方法的四块替换是可插拔的,不需要推倒重来,只是四块零件换装。

顺着"换"列再抠一层,四块改动其实共享同一个动作模式:在空间上"提前"。

替换件旧做法在哪一步"偷懒"新做法在哪一步"做正"换的是什么空间
包围投影空间做平面拟合,z 界外无解就丢视图空间解角度,z 界外照样界定投影空间 → 视图空间
剔除2D 椭圆按 tile 裁,判断在屏幕3D 视锥内找最大贡献点,判断在体积屏幕 2D → 3D 视锥
深度评估2D splat 近似深度3D 取沿射线最大贡献点2D 近似 → 3D 正解
抗锯齿2D Mip filter(3D 评估下失效)3D 自适应面积滤波2D 图像空间 → 3D 几何

"提前"这个词的妙处在于:它同时解释了质量变好(判断更早、更接近几何真相,所以不误丢、不错估)和速度变快(判断更早、队列更短,所以排序更少)。同一个动作,两条收益,这就是第 8 章那张流水线表想说的。

10留下的坑:它只能在针孔相机里左右横跳

读完第 7 章的六条边界,读者已经知道"什么时候不成立"。这一章再往深走一步:论文自己在结尾交代的三条局限,它们不是同一个量级的东西,第 7 章讲"什么场景会失效",这一章讲"作者承认还做不到什么"。两章的区别是:边界是客观规律(场景不满足假设就失效),局限是作者的主观取舍(明明能做的方向,论文没做或留给了后来者)。带着这个区分读,三条局限就各有了自己的位置。

论文把自己的局限讲得相当坦诚,主要在三点:

  1. 只能 pin-hole。 视图空间包围的角度推导是针孔相机的几何;换相机模型(鱼眼、畸变)就得重新推包围。这是当前最强的一条硬边界。
  2. 离分布审美没做成利。 在训练分布内的标准指标上,这套改造并没有显著涨分(第 7 章边界 1)。它的价值集中在离分布,而离分布不是主流验收标准。
  3. 视图一致性越强,越需要更强的 view-dependent encoding。 本方法不许靠 pop 弄虚作假,模型对视角的表示必须真实而均匀;相应地,它对 view-dependent 编码的表达力要求更高,而当前编码未必够,论文明说"这会不成比例地受益于更强的 view-dependent encoding"。即:去掉作弊手段之后,还得给足真正的手段。

把"该规模场景"说具体一点,就是第 8 章那张时间账的适用范围:RTX 4090 上,Mip-NeRF 360 室内每帧 7.72 ms、室外 10.66 ms,Tanks & Temples 7.03 ms,Deep Blending 5.81 ms,换算过来是每帧 90 到 170 FPS,"实时"这个说法站得住。可这四个数字背后是训练好的固定场景、固定分辨率、固定 primitive 数(第 9 章)。换更大的场景、更高的分辨率或者更密的稠密化,队列会变长,剔除和排序的账要重算,这份承诺不保证外推。

前两条是"场景不符",第三条是"能力不够",性质不一样,分开讲:

  • 第 1 条(只能 pin-hole):这是几何推导的绑定,不是实现偷懒。包围的整个数学(第 4 章的 θ/φ 二次方程)建立在"视线从针孔射出、在图像平面投影"这个模型上;换成鱼眼,投影函数变了,角度和屏幕坐标的换算关系就得重写。它不是"加个相机模型参数"能解决的,得重推一整套包围几何。
  • 第 2 条(离分布才见功):这是验收标准的错位,不是方法失效。方法本身在离分布视角下表现优异(第 6 章 Tab.3/4),但主流评测(标准集、分布内视角)不奖励这一点。对只想在标准集上刷分的团队,这套改动"看着没收益";对 VR、大 FOV 交互、动态视角这类真正离分布的应用,收益立竿见影。
  • 第 3 条(view-dependent encoding 要更强):这是一物换一物的代价。旧方法可以用 pop 来"假补"视角相关的光照变化(第 6 章对 MCMC 的批评),本方法把这条路堵死后,真实变化只能靠 view-dependent 特征来表达,编码的表达力就成了新瓶颈。论文的表述很克制:"不成比例地受益于更强的 view-dependent encoding",翻译成白话是:你堵住了作弊的门,就得把正门开得更宽。

这三条坑合起来的画面是:本方法并非"治好所有伪影"的终点,它只是把 3DGS 的伪影问题从"补丁时代"推进到"几何时代"的一站。针孔之外的相机、更强的 view-dependent 编码、更准的容积率评估(第 7 章边界 3),都是它给后来者留的位置。

11贡献块

这一篇的贡献(精读视角)
  • 本方法做了四件事,串成一条线:把 3DGS 光栅化管线的"2D 近似"一路换成"3D 评估"。① 自适应 3D 平滑滤波:取代在 3D 评估下失效的 2D Mip filter,按"垂直视线方向面积"而非体积调幅度,消除变距走样且不透。
  • ② 稳定的视图空间包围:把包围平面拟合从投影空间搬回视图空间(角解 θ/φ),Gaussian 越出视锥也能正确界定,弹跳消失。
  • ③ 视锥级 3D 剔除:逐 tile 3D 视锥 + 全局预处理剔除,提升性能并裁对(不再误丢有贡献的 Gaussian),为分层排序瘦身。
  • ④ 统一框架:首个在单一框架里同时消除三类伪影(畸变/走样/弹跳)的栅格化方案,标准指标持平 SOTA,离分布视角显著胜出,实时帧率不变。
  • 从这张贡献表读出来的不止是四个功能点,更是一个因果链:第 1 项治好走样,第 2 项治好弹跳的一半,第 3 项治好弹跳的另一半并提速,第 4 项是前三者的合题。它证明 3D 化的三块可以同时成立,把 3DGS 的伪影从"逐个修 bug"推进到"换掉底层假设"。

12原文出处块

原文出处
标题
AAA-Gaussians: Anti-Aliased and Artifact-Free 3D Gaussian Rendering
作者
Michael Steiner*、Thomas Köhler*、Lukas Radl、Felix Windisch、Dieter Schmalstieg、Markus Steinberger(*equal contribution)
机构
Graz University of Technology / University of Stuttgart / Huawei Technologies
发表
arXiv:2504.12811v2 [cs.GR], 1 Aug 2025(ICCV 2025)
许可
CC BY:open access,作者已对接受的手稿版本应用 CC BY public copyright license;arXiv 全文非独占分发,本站站内托管并标注 arXiv。
源码 / 补充材料
GitHub: DerThomy/AAA-Gaussians;补充材料含数学推导
使用说明:本站为非商业性技术内容分区,不挂咨询入口、广告与联盟链接。本稿引用的 7 张原图原样使用并逐图署名(图号 + 页码 + 版权 + 未修改声明),不做重绘、不加中文标注、不裁切拼接、不施滤镜。原文文字只做简短引用(摘要为原样引用并标注页码)。如需转载图片,请按 CC BY 条款署名原作者。