高性能渐变模糊

August 05

问题背景

渐变模糊 Progressive Blur,也叫可变模糊 Variable Blur,是一种针对每个像素做变半径高斯模糊的技术。 这种图像处理技术可以在图像中实现焦点实时变化,提升界面的细腻感。

渐变模糊有三个基本要求:

  1. 完整范围:每个像素都能独立指定 σ(x)[0,σmax]\sigma(\mathbf x)\in[0,\sigma_{max}]
  2. 连续性:当 σ(x)\sigma(\mathbf x) 在空间或时间上连续变化时,最终图像不能出现跳变或闪烁。
  3. 性能开销:每个像素的计算量应当固定且可控,不能随目标模糊尺度显著增长。

Ground Truth

首先根据渐变模糊的定义建立 Ground Truth。设输入图像为 II,模糊控制图为 MM。对于图像中的每个位置 x\mathbf{x},高斯核的标准差为

σ(x)=σmaxM(x).\sigma(\mathbf{x}) = \sigma_{max} M(\mathbf{x}).

渐变模糊的结果可以表示为

B(x)=δGσ(x)(δ)I(x+δ).B(\mathbf{x}) = \sum_{\boldsymbol{\delta}} G_{\sigma(\mathbf{x})}(\boldsymbol{\delta}) I(\mathbf{x}+\boldsymbol{\delta}).

本文所有参考图和 RMSE 都在线性光中计算:输入 PNG 先从 sRGB 解码,最终展示时才编码回 sRGB。Ground Truth 对每个 σ>0\sigma>0 都执行半径 3σ\lceil3\sigma\rceil 的离散 Gaussian, 不使用“小半径直接复制输入”的近似分支;普通 Pass 的边界行为为 Clamp。

因为 σ(x)\sigma(\mathbf{x}) 随位置变化,所以每个输出像素都会使用一个不同大小的高斯核。

原图
I(x) · 64²
正在计算…
模糊结果
B(x)
正在计算…
采样范围
r = 10 px

移动指针选择像素σ(x) = 3.09 px

复杂度O(WHKmax2)O(WHK_{\max}^2)
性能

常见优化方向和限制

逐级降采样是高斯模糊性能优化最常见的方向。这个技术能够同时降低图像尺寸和卷积核尺寸。

STEP #1
三种方案都先生成 Mip
GTVariable Gaussian
x1x2x3DIRECT G(σ(x)) / pixel
01D × G Pair
GENERATED MIPSKernel↓ / level
02L+t × 固定 G
GENERATED MIPSKernel↓ / level
03Raw Mip
GENERATED MIPSKernel↓ / level
STEP #2
按真实执行顺序继续处理
01D × G Pair
整数 Lσ → (L, G)PLAIN MIPSKernel↓ / level
02L+t × 固定 G
L+1Ln×n samplesz = L + tₖ(示意)PLAIN MIPSKernel↓ / level
03Raw Mip
L+1Ln×n samplesz = L + tPLAIN MIPSKernel↓ / level
STEP #3
完成该方案的剩余步骤
01D × G Pair
G1G2G3G4动态 G(σ)每像素重算权重
02L+t × 固定 G
固定 G同一组 n×n taps
03Raw Mip
无 Gaussian直接进入输出

1. DxG Pair

  • 根据 σt\sigma_t 计算下采样层级 NN 和 Gaussian Kernel G(σ)G(\sigma),二者配合拟合目标形状。
  • 仍需逐像素动态计算 Gaussian Kernel。

2. 降采样后固定 Gaussian

  • 根据 σt\sigma_t 计算层级 N(σ)N(\sigma)、层间插值系数 αt\alpha_t,再执行固定 Gaussian Kernel。
  • 最终方差只能覆盖 σchain[σK,σmax]\sigma_{chain} \in [\sigma_K, \sigma_{max}],无法从 σ=0\sigma=0 连续起步。

3. Mip 动态插值

  • 用固定核生成 {D0,D1,,Dn}\{D_0,D_1,\ldots,D_n\},运行时只计算层级和层间插值系数。
  • 核形状不再天然等于标准 Gaussian,必须分析完整链路。

每个像素单独计算不同大小的 Gaussian Kernel 会产生不一致的循环边界和严重分支开销。因此本文选择第三条路径:把昂贵工作前移到共享 Mip 链,最终像素只读取相邻层级并插值。

方案设计

**技术结论先说在前面:**在统一的 27 次采样上限下,3×33\times34×44\times45×55\times5 三条 Gaussian Mip 链会收敛到几乎相同的单级实际方差。完整链形状误差相差小于 10510^{-5} 时,9 taps 的 3×33\times3 核成本最低,因此成为后续默认生成核。Bicubic 不能共用一份经验 LOD:Cubic B-spline 与 Catmull–Rom 必须分别把 reconstruction 方差写进 sigma map。校准后,两套方案的相位平均尺度误差都降到 10510^{-5} 量级;B-spline 的最终线性 RGB RMSE 为 0.011320.01132,Catmull–Rom 为 0.021260.02126

下面六步始终使用同一张 512×512512\times512 输入图和同一张 sigma map:顶部 8%8\% 保持 σ=0\sigma=0,中间按 smoothstep 增加,底部 8%8\% 达到 σ=6\sigma=6。工作纹理为 rgba16float;每级 Downsample 使用 Mirror,最终读取使用 Clamp。图中的方差是任一坐标轴上的二阶中心矩,RMSE 是线性 RGB 的逐通道误差。

1. 高斯下采样:固定完整二维核

这里把 Mip 生成限制为单个二维 Pass,不增加用于水平、垂直拆分的中间 RT。每个输出 texel 的预算最多是 27 次纹理采样,因此完整方形 footprint 只有 3×33\times34×44\times45×55\times5 三档,成本分别为 9、16、25 taps。

令边长为 s{3,4,5}s\in\{3,4,5\},采样坐标为

Ps={is12i=0,1,,s1}.P_s=\left\{i-\frac{s-1}{2}\mid i=0,1,\ldots,s-1\right\}.

二维 Gaussian 权重直接写为

qs,σd(x,y)=exp ⁣[(x2+y2)/(2σd2)](u,v)Ps2exp ⁣[(u2+v2)/(2σd2)].q_{s,\sigma_d}(x,y) =\frac{\exp\!\left[-(x^2+y^2)/(2\sigma_d^2)\right]} {\sum_{(u,v)\in P_s^2}\exp\!\left[-(u^2+v^2)/(2\sigma_d^2)\right]}.

4×44\times4 使用半整数 offset;3×33\times35×55\times5 使用整数 offset,并保留 RasterUV 的统一半像素输出中心,所以实际二阶矩同时包含 linear sampler footprint。记这个实际单轴方差为 vdv_d,则逐级 Mip 的预滤波方差满足

V0=0,Vn+1=Vn+4nvd=vd4n+113.V_0=0, \qquad V_{n+1}=V_n+4^n v_d =v_d\frac{4^{n+1}-1}{3}.

接下来直接回答两个选择问题:尺寸选 3×33\times34×44\times4 还是 5×55\times5?截断选 2σ2\sigma 还是 3σ3\sigma

令核的最外层采样半径为 R=(s1)/2R=(s-1)/2,截断倍数为 k=R/σdk=R/\sigma_d。因此固定“2σ2\sigma 截断”或“3σ3\sigma 截断”,其实就是分别令

σd=R/2σd=R/3.\sigma_d=R/2 \qquad\text{或}\qquad \sigma_d=R/3.

先看连续 Gaussian 的直觉:方形 support 在每个轴上覆盖 [kσ,kσ][-k\sigma,k\sigma],落在 support 外的能量比例为

1erf2 ⁣(k2).1-\operatorname{erf}^2\!\left(\frac{k}{\sqrt2}\right).

2σ2\sigma 会丢掉约 8.89%8.89\% 的二维能量,3σ3\sigma 只丢约 0.54%0.54\%。离散核会重新归一化,所以能量不会真的消失,但 2σ2\sigma 被裁掉的尾部会被重新压回中心,核形状偏差更大;它的好处是单级方差更大,通常可以少建一级 Mip。3σ3\sigma 的尾部更完整,但权重更集中,可能需要多一级 Mip 才能覆盖 σ=6\sigma=6

下面表格先把选择严格限制在六种组合中。结果很明确:同一尺寸下 3σ3\sigma 都优于 2σ2\sigma;六种固定方案里,4×4+3σ4\times4+3\sigma 的全链误差最低,为 0.0506350.050635 如果产品规范只允许在 2σ2\sigma3σ3\sigma 二选一,那么答案就是 4×4+3σ4\times4+3\sigma,代价是每级 16 taps。

2σ2\sigma3σ3\sigma 只是两个经验点,不必强行二选一。本文继续把 kk 当成连续变量,比较所有可达层级和层间位置的二维频率响应与同方差 Gaussian,并要求覆盖 σ[0,6]\sigma\in[0,6]。**注意下图横轴是截断倍数 k=R/σdk=R/\sigma_d,不是 σd\sigma_d。**同一个横坐标下,3×33\times34×44\times45×55\times5RR 分别为 111.51.522,所以实际 σd\sigma_d 并不相同。例如 k=2k=2 时三者的 σd\sigma_d 分别为 0.50.50.750.751.01.0

连续搜索结果是:

  • 3×33\times3:最优截断 2.532σ2.532\sigmaE=0.04827164E=0.04827164,9 taps;
  • 4×44\times4:最优截断 2.702σ2.702\sigmaE=0.04827163E=0.04827163,16 taps;
  • 5×55\times5:最优截断 5.065σ5.065\sigmaE=0.04827225E=0.04827225,25 taps。

3×33\times34×44\times4 的误差只差 10810^{-8}。原因不是更大的核没有参与计算,而是当前半像素 Downsample 中,3×33\times3 整数 offset 经 linear sampler 展开后,几乎就是 4×44\times4 半整数 offset 得到的同一组有效权重;4×44\times4 只是用 16 taps 重复表达了 9 taps 已经得到的 footprint。

那么,真正固定同一个 σd\sigma_d5×55\times5 是否应该优于 3×33\times3?答案取决于测量对象。取 σd=0.3949495\sigma_d=0.3949495 时,单次 Downsample 的端点误差确实从 3×33\times30.071223600.07122360 降到 5×55\times50.071210050.07121005:**大 support 对单级 Gaussian 的理论直觉成立。**但本文的全链指标还包含两个 Mip 之间的混合。对频率 ω\omega,中间 LOD 的响应是

(1α)eVnω2/2+αeVn+1ω2/2,(1-\alpha)e^{-V_n\lVert\omega\rVert^2/2} +\alpha e^{-V_{n+1}\lVert\omega\rVert^2/2},

它并不等于方差插值后的 Gaussian:

e[(1α)Vn+αVn+1]ω2/2.e^{-[(1-\alpha)V_n+\alpha V_{n+1}]\lVert\omega\rVert^2/2}.

所以“整数 Mip 端点更准确”不保证“端点之间的混合也更准确”。在同一 σd\sigma_d 下,5×55\times59.995×1069.995\times10^{-6} 的质量落在 3×33\times3 support 之外;它改善了单级端点,却让中间尺度的混合尾部略微偏离目标。完整链误差因此是 3×33\times30.048271640.048271645×55\times50.048273780.04827378

这个差值只有 2.14×1062.14\times10^{-6},约 0.0044%0.0044\%,应当视为误差相同,不能解读为“3×33\times3 的 Gaussian 理论上比 5×55\times5 更完整”。5×55\times5 连续最优解的最外圈最大权重也只有约 2.3×1062.3\times10^{-6},数值上退化成了 3×33\times3;既然两者全链质量相同,最终按成本选择 9 taps。

因此本文的最终答案是:选择 3×33\times3,截断不固定为 2σ2\sigma3σ3\sigma,而使用数值最优的约 2.53σ2.53\sigma 只有在截断倍数被规范锁死为二选一时,才改选 4×4+3σ4\times4+3\sigma。三档连续最优解都需要五次 Downsample;默认核的 σd=0.39495\sigma_d=0.39495,实际 vd=0.325001v_d=0.325001

先固定为 2σ 或 3σ:六个离散方案

E 越低越接近同方差 Gaussian;加粗项是这六种组合中的最低误差

尺寸截断tapsσd实际 vMip 数全链 E
3×32σ90.500000.46301440.067463
3×33σ90.333330.27173550.052544
4×42σ160.750000.53915640.076692
4×43σ160.500000.28597250.050635
5×52σ251.000001.17431240.134513
5×53σ250.666670.69161940.094651
3×39 taps · 默认
0.001410.034690.001410.034690.855620.034690.001410.034690.00141
σd
0.39495
截断半径
2.532σ
实际 v
0.325001
全链 E
0.048272
4×416 taps
0.000350.009020.009020.000350.009020.231600.231600.009020.009020.231600.231600.009020.000350.009020.009020.00035
σd
0.55511
截断半径
2.702σ
实际 v
0.325001
全链 E
0.048272
5×525 taps
0.000000.000000.000000.000000.000000.000000.001400.034660.001400.000000.000000.034660.855720.034660.000000.000000.001400.034660.001400.000000.000000.000000.000000.000000.00000
σd
0.39490
截断半径
5.065σ
实际 v
0.324963
全链 E
0.048272

2σ、3σ 与数值最优截断

固定 2σ/3σ 只是两个采样点;曲线在同一截断倍数坐标中搜索完整 Mip 链误差

3×34×45×5
0.000.001.500.043.000.084.500.126.000.16截断半径 R / σd全链形状误差

真正固定同一个 σd:单级核与完整 Mip 链不是同一指标

σd=0.39495;只比较同为整数相位的 3×3 与 5×5

尺寸实际 v外圈质量单级端点 E完整链 E
3×30.325001290.000e+00.071223600.04827164
5×50.325020919.995e-60.071210050.04827378

整数 Mip 的一维等效 impulse response

每行按自身峰值归一化;横向位置始终使用原图像素尺度

Mip 1σ 0.570
Mip 2σ 1.275
Mip 3σ 2.612
Mip 4σ 5.256
Mip 5σ 10.527

这个结论并不表示 3×33\times3 在所有抗混叠目标下都优于大核。它只适用于当前 RasterUV、linear sampler、σ6\sigma\le6 和“拟合同方差 Gaussian”的目标;如果把 stop-band 抑制或特定缩小倍率作为首要指标,尺寸与截断需要重新搜索。

2. 层间插值:先保证预滤波方差连续

如果只读取整数 Mip,目标尺度会被量化到 Vn\sqrt{V_n}。即使 sigma map 连续,输出也会在切换层级时突然改变。第一步是用目标方差找到包围它的两层:

N=min{n1Vnσt2},VN1σt2VN.N=\min\{n\ge1\mid V_n\ge\sigma_t^2\}, \qquad V_{N-1}\le\sigma_t^2\le V_N.

两层在同一输出坐标重建后,以 αV\alpha_V 混合:

B(x)=(1αV)DN1(x)+αVDN(x),B(\mathbf x) =(1-\alpha_V)D_{N-1}(\mathbf x)+\alpha_VD_N(\mathbf x), αV=σt2VN1VNVN1.\boxed{ \alpha_V =\frac{\sigma_t^2-V_{N-1}}{V_N-V_{N-1}} }.

只看预滤波核时,两层均值相同,混合方差会随 αV\alpha_V 线性变化。下图同时画出完整链路的相位平均 std 和一个 Mip 网格周期内的 min–max;结果图可以点击切换到八倍差分。

目标 σ 与完整链路标准差

实线为相位平均等效标准差,色带为完整 Mip 网格周期的 min–max

目标 σ整数 Mip 硬切换预滤波等方差插值
0.000.01.503.03.006.04.509.06.0012.0目标 σ完整链路 std
整数 Mip 硬切换RMSE 0.02743
整数 Mip 硬切换结果
预滤波等方差插值RMSE 0.02235
预滤波等方差插值结果
Ground Truthlinear RGB
Ground Truth结果

等方差插值把当前测试图的 RMSE 从硬切换的 0.027430.02743 降到 0.022350.02235,但图中的完整链路 std 仍显著高于目标。这不是公式算错,而是 VnV_n 只描述 Mip 生成:最终 bilinear reconstruction 还会引入与像素相位相关的额外方差。这里先保留这项偏差,第四、第五步再把它纳入模型。

3. 优化插值曲线:用 log2 消除控制斜率折点

αV\alpha_V 精确匹配预滤波方差,却不是一条光滑的 LOD 控制曲线。在第 nn 个区间中,

dαVdσt=2σtVnVn1.\frac{\mathrm d\alpha_V}{\mathrm d\sigma_t} =\frac{2\sigma_t}{V_n-V_{n-1}}.

相邻 Mip 的方差增量相差四倍,因此导数会在整数 Mip 边界突然缩小。空间上缓慢变化的 sigma map 会把这个斜率折点转成可见的明暗带;动画中则表现为速度不均匀。

Vn=vd(4n1)/3V_n=v_d(4^n-1)/3 反解连续尺度,可以得到

λ0(σt)=12log2(1+3σt2vd).\boxed{ \lambda_0(\sigma_t) =\frac12\log_2\left(1+\frac{3\sigma_t^2}{v_d}\right) }.

整数部分选择 Mip,fract 部分作为层间混合权重。这个映射按尺度比推进,导数不会在每个整数层重新开始。下图把它与 αV\alpha_V 对应的连续 LOD 放在一起。

sigma→LOD 插值曲线

等方差映射在整数 Mip 处改变斜率;log2 映射按尺度比连续推进

等方差 LODlog2 LOD
0.000.001.501.253.002.504.503.756.005.00目标 σ连续 LOD λ
等方差线性曲线RMSE 0.02235
等方差线性曲线结果
log2 曲线RMSE 0.02527
log2 曲线结果
Ground Truthlinear RGB
Ground Truth结果

这是一个重要的负结果:log2 修复的是控制曲线连续性,不是完整链路尺度。使用 bilinear reconstruction 时,RMSE 反而从 0.022350.02235 回到 0.025270.02527。因此不能看到 log2 曲线更平滑,就直接声称核更接近 Gaussian;它只是给后续校准提供一个更合理的尺度坐标。

4. 优化上采样瑕疵:Bicubic 去除十字网格

高层 Mip 的 texel 间距会放大到原图的 2n2^n 倍。Bilinear 只混合 2×22\times2 邻域,权重的一阶导数在 texel 边界不连续;对高对比边缘或较平坦的大半径模糊,这种周期结构会表现为横竖方向更明显的十字网格。

这里比较三个 separable reconstruction footprint:

  • Bilinear:每轴 2 个邻居,成本最低,但二阶矩随像素相位改变。
  • Cubic B-spline:每轴 4 个邻居,权重非负、曲线平滑,不产生振铃,但会增加额外模糊。
  • Catmull–Rom:每轴 4 个邻居,是插值核且更锐利,但负瓣可能产生过冲和振铃。

下面第一行固定读取同一个高层 Mip。grid phase energy 是整数 Mip 上方差随输出像素相位变化的归一化 RMS:bilinear 为 0.2530.253,两种 cubic 在这个二阶矩指标上都降到数值零。第二行把三种 reconstruction 放回同一 log2 sigma map;差分图仍然以 Ground Truth 为基准。

Bilinear
grid phase energy 2.53e-1
Bilinear 对高层 Mip 测试图的重建结果
Cubic B-spline
grid phase energy 0.00e+0
Cubic B-spline 对高层 Mip 测试图的重建结果
Catmull–Rom
grid phase energy 0.00e+0
Catmull–Rom 对高层 Mip 测试图的重建结果
log2 · BilinearRMSE 0.02527
log2 · Bilinear结果
log2 · B-splineRMSE 0.02955
log2 · B-spline结果
log2 · Catmull–RomRMSE 0.02383
log2 · Catmull–Rom结果

网格指标归零不代表端到端误差自动下降。B-spline 额外增加的低通方差让未校准 RMSE 上升到 0.029550.02955;Catmull–Rom 的未校准 RMSE 是 0.023830.02383。两种核都消除了二阶矩的相位周期,但它们需要不同的 Mip 切换点,不能继续共用第三步的 λ0\lambda_0

5. 优化连续性:把 reconstruction 写进 sigma map

令第 nn 层在输出位置 xx 的重建核均值、方差分别为 μn,m(x)\mu_{n,m}(x)Wn,m(x)W_{n,m}(x),其中 mm 表示 bilinear、B-spline 或 Catmull–Rom。连续 LOD λ=n+t\lambda=n+t 混合相邻两层时,完整链路均值为

μm(λ,x)=(1t)μn,m(x)+tμn+1,m(x),\mu_m(\lambda,x) =(1-t)\mu_{n,m}(x)+t\mu_{n+1,m}(x),

完整方差必须通过二阶矩计算:

Fm(λ,x)=(1t)[Wn,m(x)+μn,m2(x)]+t[Wn+1,m(x)+μn+1,m2(x)]μm2(λ,x).\begin{aligned} F_m(\lambda,x) ={}&(1-t)\left[W_{n,m}(x)+\mu_{n,m}^2(x)\right]\\ &+t\left[W_{n+1,m}(x)+\mu_{n+1,m}^2(x)\right] -\mu_m^2(\lambda,x). \end{aligned}

最后一项不能省略:只要两个 Mip 的重建均值因为网格相位或边界行为不重合,直接线性插值两层方差就会漏掉额外扩散。

对于每种 bicubic,参考生成器会在 λ[0,5]\lambda\in[0,5] 上枚举相邻两层的联合像素周期,得到相位平均函数

Fm(λ)=meanxFm(λ,x).\overline F_m(\lambda) =\operatorname{mean}_x F_m(\lambda,x).

新的整数 Mip 切换点定义为

σm,n=Fm(n).\sigma_{m,n}=\sqrt{\overline F_m(n)}.

运行时不再使用同一条解析近似,而是为 B-spline 和 Catmull–Rom 分别生成 1024 项单调 LUT,在 σ[0,6]\sigma\in[0,6] 上数值反解

Fm(λm)=σt2.\overline F_m(\lambda_m)=\sigma_t^2.

下图可以切换两种 bicubic,查看各自的新切换点、sigma→LOD map,以及校准前后的图像和误差。

完整链路 sigma→LOD map

1024 项 LUT 反解全部像素相位的平均完整链路方差;整数 LOD 即新的切换点

基础 log2Cubic B-spline LUT
0.000.001.501.253.002.504.503.756.005.00目标 σ连续 LOD λ
Mip 1 · σ 1.288Mip 2 · σ 2.638Mip 3 · σ 5.306Mip 4 · σ 10.628Mip 5 · σ 21.264
Cubic B-spline · 校准前RMSE 0.02955
Cubic B-spline · 校准前结果
Cubic B-spline · 完整方差 LUTRMSE 0.01132
Cubic B-spline · 完整方差 LUT结果
Ground Truthlinear RGB
Ground Truth结果

校准后,B-spline 的平均 Δσ|\Delta\sigma|4.683984.68398 降到约 1.4×1061.4\times10^{-6},RMSE 从 0.029550.02955 降到 0.011320.01132;Catmull–Rom 的平均 Δσ|\Delta\sigma|0.278600.27860 降到约 3.2×1063.2\times10^{-6},RMSE 从 0.023830.02383 降到 0.021260.02126。B-spline 更低的 RMSE 来自更强的低通,而 Catmull–Rom 保留了更锐利的局部轮廓;本文保留两种模式,不用一个总分掩盖这个取舍。

6. 误差分析:方差正确之后还要检查形状

最终评估拆成两个互补维度。对每个目标 σt\sigma_t 和全部 Mip 网格相位,记录

ΔV=Fm(λ,x)σt2,Δσ=Fm(λ,x)σt.\Delta V=F_m(\lambda,x)-\sigma_t^2, \qquad \Delta\sigma=\sqrt{F_m(\lambda,x)}-\sigma_t.

表格报告 Δσ|\Delta\sigma| 的平均值、P95 和最大值;图像误差则直接比较完整输出与 Ground Truth:

RMSE=13WHx,y,c(Bc(x,y)BGT,c(x,y))2.\operatorname{RMSE} =\sqrt{\frac1{3WH} \sum_{x,y,c} \left(B_c(x,y)-B_{GT,c}(x,y)\right)^2}.

下面的汇总表保留每一步,而不是只展示最终胜者。分桶图可以看出误差集中在哪些目标尺度;最终图片仍可切换到八倍差分。

阶段Reconstructionmean |Δσ|P95 |Δσ|max |Δσ|RMSE
整数 Mip 硬切换Bilinear2.260984.834035.396530.027432
预滤波等方差插值Bilinear2.368474.274874.912220.022350
log2 · BilinearBilinear2.809604.814865.990000.025275
log2 · B-splineCubic B-spline4.683987.085237.323890.029546
log2 · Catmull–RomCatmull–Rom0.278600.531030.592610.023829
完整方差 · B-splineCubic B-spline0.000000.000000.000110.011323
完整方差 · Catmull–RomCatmull–Rom0.000000.000000.001110.021259

最终方案 RMSE 分布

每个点汇总对应 1σ 区间内的线性 RGB 逐通道误差

B-splineCatmull–Rom
0.000.001.500.253.000.504.500.756.001.00目标 σ 分桶中心linear RGB RMSE
完整方差 · B-splineRMSE 0.01132
完整方差 · B-spline结果
完整方差 · Catmull–RomRMSE 0.02126
完整方差 · Catmull–Rom结果
Ground Truthlinear RGB
Ground Truth结果

方差校准几乎消除了平均尺度误差,但 RMSE 没有同时归零,因为层间插值得到的是两个离散核的混合,不是新的标准 Gaussian。Catmull–Rom 的 RMSE 高于 B-spline,也不表示它在所有视觉任务中更差:前者保留更多局部对比度,后者更接近本文这张以 Gaussian 为 Ground Truth 的测试图。

性能边界

默认 3×33\times3 Gaussian downsample 每个输出 texel 使用 9 次二维采样。构建到第 LL 层时,Mip 像素总数小于 WH/3WH/3,因此生成阶段采样数小于 3WH3WH,并需要 LL 个 Pass。

本文的 bicubic 参考实现使用完整 4×44\times4 footprint。显式读取相邻两层需要每个输出像素 32 次 texel sample;硬件或 Shader 可以合并 cubic 权重以减少指令,但任何 fast bicubic 都必须重新测量等效方差,不能直接复用这里的 LUT。最终模式的真实 GPU 时间、带宽和功耗还需要在目标设备上补齐。

限制与下一步

  • LUT 匹配的是完整像素周期的相位平均方差;min–max 色带仍然描述单个像素可能出现的残余尺度差异。
  • 当前 RMSE 只使用一张 512×512512\times512 输入图和一条纵向 sigma map,不能替代更多频谱、边界和动画测试。
  • Catmull–Rom 有负权重;HDR 或低精度格式下需要单独检查过冲、half-float 量化和颜色范围。
  • 下一步应把两套核与 LUT 放入真实 Shader,在移动端和桌面 GPU 上测量 Pass 时间、带宽,并用移动 sigma map 检查时间连续性。

附录:放宽固定 Gaussian 假设后的 kernel 搜索

主方案固定了“完整二维 Gaussian、最多 27 taps、同一个核生成所有 Mip”三条约束。此前的研究进一步放宽权重形状和稀疏 support:它分别优化完整 Mip 链的 Gaussian 形状误差、抽取阻带能量和最终图像 RMSE,并显式枚举整数/半像素相位、D4 对称 support、负权重与逐级 half-float 物化。

这组搜索说明了为什么正文不能只看单级 kernel:固定 v=0.25v=0.25 的 dense 4/9/16 taps 最终 RMSE 都约为 0.02640.0264,而方差更大的四 tap 十字核能用更少 Mip 层将同一测试图 RMSE 降到 0.010660.01066。后者同时改变了单级尺度和频率响应,因此不能当作“同方差 Gaussian 核”的直接胜利者。

下面保留可复算证书和非负权重 Pareto 结果,作为继续探索非 Gaussian 生成核的入口;它们不参与上面六步默认方案的参数选择。

展开 sparse support 搜索证书与结果
4 taps
5 supports
整数 4 · 半像素 1
9 taps
44 supports
整数 39 · 半像素 5
16 taps
607 supports
整数 524 · 半像素 83
对比项4 · 形状端点4 · 混叠端点4 · 图像端点9 · 形状端点9 · 混叠端点9 · 图像端点16 · 形状端点16 · 混叠端点16 · 图像端点
核心
1 taps · 整数 tap · linear
v 0.25000 · 5
4 taps · 整数 tap · linear
v 8.25000 · 2
4 taps · 整数 tap · linear
v 1.25000 · 4
5 taps · 整数 tap · linear
v 0.37788 · 5
9 taps · 整数 tap · linear
v 2.06429 · 3
9 taps · 整数 tap · linear
v 1.43855 · 4
5 taps · 整数 tap · linear
v 0.37788 · 5
16 taps · 整数 tap · linear
v 2.19211 · 3
9 taps · 整数 tap · linear
v 1.43855 · 4
结果EG 0.04742EG 0.38863EG 0.11907EG 0.04253EG 0.18331EG 0.13217EG 0.04253EG 0.18134EG 0.13217
混叠分析Astop 0.08039Astop 0.00357Astop 0.00886Astop 0.05255Astop 0.00219Astop 0.00300Astop 0.05255Astop 0.00075Astop 0.00300
RMSE0.026340.029040.009250.019730.009340.007800.019730.009720.00780