问题背景
渐变模糊 Progressive Blur,也叫可变模糊 Variable Blur,是一种针对每个像素做变半径高斯模糊的技术。 这种图像处理技术可以在图像中实现焦点实时变化,提升界面的细腻感。
渐变模糊有三个基本要求:
- 完整范围:每个像素都能独立指定 。
- 连续性:当 在空间或时间上连续变化时,最终图像不能出现跳变或闪烁。
- 性能开销:每个像素的计算量应当固定且可控,不能随目标模糊尺度显著增长。
Ground Truth
首先根据渐变模糊的定义建立 Ground Truth。设输入图像为 ,模糊控制图为 。对于图像中的每个位置 ,高斯核的标准差为
渐变模糊的结果可以表示为
本文所有参考图和 RMSE 都在线性光中计算:输入 PNG 先从 sRGB 解码,最终展示时才编码回 sRGB。Ground Truth 对每个 都执行半径 的离散 Gaussian, 不使用“小半径直接复制输入”的近似分支;普通 Pass 的边界行为为 Clamp。
因为 随位置变化,所以每个输出像素都会使用一个不同大小的高斯核。
移动指针选择像素σ(x) = 3.09 px
| 复杂度 | |
| 性能 |
常见优化方向和限制
逐级降采样是高斯模糊性能优化最常见的方向。这个技术能够同时降低图像尺寸和卷积核尺寸。
1. DxG Pair
- 根据 计算下采样层级 和 Gaussian Kernel ,二者配合拟合目标形状。
- 仍需逐像素动态计算 Gaussian Kernel。
2. 降采样后固定 Gaussian
- 根据 计算层级 、层间插值系数 ,再执行固定 Gaussian Kernel。
- 最终方差只能覆盖 ,无法从 连续起步。
3. Mip 动态插值
- 用固定核生成 ,运行时只计算层级和层间插值系数。
- 核形状不再天然等于标准 Gaussian,必须分析完整链路。
每个像素单独计算不同大小的 Gaussian Kernel 会产生不一致的循环边界和严重分支开销。因此本文选择第三条路径:把昂贵工作前移到共享 Mip 链,最终像素只读取相邻层级并插值。
方案设计
**技术结论先说在前面:**在统一的 27 次采样上限下,、、 三条 Gaussian Mip 链会收敛到几乎相同的单级实际方差。完整链形状误差相差小于 时,9 taps 的 核成本最低,因此成为后续默认生成核。Bicubic 不能共用一份经验 LOD:Cubic B-spline 与 Catmull–Rom 必须分别把 reconstruction 方差写进 sigma map。校准后,两套方案的相位平均尺度误差都降到 量级;B-spline 的最终线性 RGB RMSE 为 ,Catmull–Rom 为 。
下面六步始终使用同一张 输入图和同一张 sigma map:顶部 保持 ,中间按 smoothstep 增加,底部 达到 。工作纹理为 rgba16float;每级 Downsample 使用 Mirror,最终读取使用 Clamp。图中的方差是任一坐标轴上的二阶中心矩,RMSE 是线性 RGB 的逐通道误差。
1. 高斯下采样:固定完整二维核
这里把 Mip 生成限制为单个二维 Pass,不增加用于水平、垂直拆分的中间 RT。每个输出 texel 的预算最多是 27 次纹理采样,因此完整方形 footprint 只有 、、 三档,成本分别为 9、16、25 taps。
令边长为 ,采样坐标为
二维 Gaussian 权重直接写为
使用半整数 offset; 和 使用整数 offset,并保留 RasterUV 的统一半像素输出中心,所以实际二阶矩同时包含 linear sampler footprint。记这个实际单轴方差为 ,则逐级 Mip 的预滤波方差满足
接下来直接回答两个选择问题:尺寸选 、 还是 ?截断选 还是 ?
令核的最外层采样半径为 ,截断倍数为 。因此固定“ 截断”或“ 截断”,其实就是分别令
先看连续 Gaussian 的直觉:方形 support 在每个轴上覆盖 ,落在 support 外的能量比例为
会丢掉约 的二维能量, 只丢约 。离散核会重新归一化,所以能量不会真的消失,但 被裁掉的尾部会被重新压回中心,核形状偏差更大;它的好处是单级方差更大,通常可以少建一级 Mip。 的尾部更完整,但权重更集中,可能需要多一级 Mip 才能覆盖 。
下面表格先把选择严格限制在六种组合中。结果很明确:同一尺寸下 都优于 ;六种固定方案里, 的全链误差最低,为 。 如果产品规范只允许在 和 二选一,那么答案就是 ,代价是每级 16 taps。
但 和 只是两个经验点,不必强行二选一。本文继续把 当成连续变量,比较所有可达层级和层间位置的二维频率响应与同方差 Gaussian,并要求覆盖 。**注意下图横轴是截断倍数 ,不是 。**同一个横坐标下,、、 的 分别为 、、,所以实际 并不相同。例如 时三者的 分别为 、、。
连续搜索结果是:
- :最优截断 ,,9 taps;
- :最优截断 ,,16 taps;
- :最优截断 ,,25 taps。
与 的误差只差 。原因不是更大的核没有参与计算,而是当前半像素 Downsample 中, 整数 offset 经 linear sampler 展开后,几乎就是 半整数 offset 得到的同一组有效权重; 只是用 16 taps 重复表达了 9 taps 已经得到的 footprint。
那么,真正固定同一个 , 是否应该优于 ?答案取决于测量对象。取 时,单次 Downsample 的端点误差确实从 的 降到 的 :**大 support 对单级 Gaussian 的理论直觉成立。**但本文的全链指标还包含两个 Mip 之间的混合。对频率 ,中间 LOD 的响应是
它并不等于方差插值后的 Gaussian:
所以“整数 Mip 端点更准确”不保证“端点之间的混合也更准确”。在同一 下, 约 的质量落在 support 之外;它改善了单级端点,却让中间尺度的混合尾部略微偏离目标。完整链误差因此是 的 对 的 。
这个差值只有 ,约 ,应当视为误差相同,不能解读为“ 的 Gaussian 理论上比 更完整”。 连续最优解的最外圈最大权重也只有约 ,数值上退化成了 ;既然两者全链质量相同,最终按成本选择 9 taps。
因此本文的最终答案是:选择 ,截断不固定为 或 ,而使用数值最优的约 。 只有在截断倍数被规范锁死为二选一时,才改选 。三档连续最优解都需要五次 Downsample;默认核的 ,实际 。
先固定为 2σ 或 3σ:六个离散方案
E 越低越接近同方差 Gaussian;加粗项是这六种组合中的最低误差
| 尺寸 | 截断 | taps | σd | 实际 v | Mip 数 | 全链 E |
|---|---|---|---|---|---|---|
| 3×3 | 2σ | 9 | 0.50000 | 0.463014 | 4 | 0.067463 |
| 3×3 | 3σ | 9 | 0.33333 | 0.271735 | 5 | 0.052544 |
| 4×4 | 2σ | 16 | 0.75000 | 0.539156 | 4 | 0.076692 |
| 4×4 | 3σ | 16 | 0.50000 | 0.285972 | 5 | 0.050635 |
| 5×5 | 2σ | 25 | 1.00000 | 1.174312 | 4 | 0.134513 |
| 5×5 | 3σ | 25 | 0.66667 | 0.691619 | 4 | 0.094651 |
2σ、3σ 与数值最优截断
固定 2σ/3σ 只是两个采样点;曲线在同一截断倍数坐标中搜索完整 Mip 链误差
真正固定同一个 σd:单级核与完整 Mip 链不是同一指标
σd=0.39495;只比较同为整数相位的 3×3 与 5×5
| 尺寸 | 实际 v | 外圈质量 | 单级端点 E | 完整链 E |
|---|---|---|---|---|
| 3×3 | 0.32500129 | 0.000e+0 | 0.07122360 | 0.04827164 |
| 5×5 | 0.32502091 | 9.995e-6 | 0.07121005 | 0.04827378 |
整数 Mip 的一维等效 impulse response
每行按自身峰值归一化;横向位置始终使用原图像素尺度
这个结论并不表示 在所有抗混叠目标下都优于大核。它只适用于当前 RasterUV、linear sampler、 和“拟合同方差 Gaussian”的目标;如果把 stop-band 抑制或特定缩小倍率作为首要指标,尺寸与截断需要重新搜索。
2. 层间插值:先保证预滤波方差连续
如果只读取整数 Mip,目标尺度会被量化到 。即使 sigma map 连续,输出也会在切换层级时突然改变。第一步是用目标方差找到包围它的两层:
两层在同一输出坐标重建后,以 混合:
只看预滤波核时,两层均值相同,混合方差会随 线性变化。下图同时画出完整链路的相位平均 std 和一个 Mip 网格周期内的 min–max;结果图可以点击切换到八倍差分。
目标 σ 与完整链路标准差
实线为相位平均等效标准差,色带为完整 Mip 网格周期的 min–max



等方差插值把当前测试图的 RMSE 从硬切换的 降到 ,但图中的完整链路 std 仍显著高于目标。这不是公式算错,而是 只描述 Mip 生成:最终 bilinear reconstruction 还会引入与像素相位相关的额外方差。这里先保留这项偏差,第四、第五步再把它纳入模型。
3. 优化插值曲线:用 log2 消除控制斜率折点
精确匹配预滤波方差,却不是一条光滑的 LOD 控制曲线。在第 个区间中,
相邻 Mip 的方差增量相差四倍,因此导数会在整数 Mip 边界突然缩小。空间上缓慢变化的 sigma map 会把这个斜率折点转成可见的明暗带;动画中则表现为速度不均匀。
由 反解连续尺度,可以得到
整数部分选择 Mip,fract 部分作为层间混合权重。这个映射按尺度比推进,导数不会在每个整数层重新开始。下图把它与 对应的连续 LOD 放在一起。
sigma→LOD 插值曲线
等方差映射在整数 Mip 处改变斜率;log2 映射按尺度比连续推进



这是一个重要的负结果:log2 修复的是控制曲线连续性,不是完整链路尺度。使用 bilinear reconstruction 时,RMSE 反而从 回到 。因此不能看到 log2 曲线更平滑,就直接声称核更接近 Gaussian;它只是给后续校准提供一个更合理的尺度坐标。
4. 优化上采样瑕疵:Bicubic 去除十字网格
高层 Mip 的 texel 间距会放大到原图的 倍。Bilinear 只混合 邻域,权重的一阶导数在 texel 边界不连续;对高对比边缘或较平坦的大半径模糊,这种周期结构会表现为横竖方向更明显的十字网格。
这里比较三个 separable reconstruction footprint:
- Bilinear:每轴 2 个邻居,成本最低,但二阶矩随像素相位改变。
- Cubic B-spline:每轴 4 个邻居,权重非负、曲线平滑,不产生振铃,但会增加额外模糊。
- Catmull–Rom:每轴 4 个邻居,是插值核且更锐利,但负瓣可能产生过冲和振铃。
下面第一行固定读取同一个高层 Mip。grid phase energy 是整数 Mip 上方差随输出像素相位变化的归一化 RMS:bilinear 为 ,两种 cubic 在这个二阶矩指标上都降到数值零。第二行把三种 reconstruction 放回同一 log2 sigma map;差分图仍然以 Ground Truth 为基准。






网格指标归零不代表端到端误差自动下降。B-spline 额外增加的低通方差让未校准 RMSE 上升到 ;Catmull–Rom 的未校准 RMSE 是 。两种核都消除了二阶矩的相位周期,但它们需要不同的 Mip 切换点,不能继续共用第三步的 。
5. 优化连续性:把 reconstruction 写进 sigma map
令第 层在输出位置 的重建核均值、方差分别为 和 ,其中 表示 bilinear、B-spline 或 Catmull–Rom。连续 LOD 混合相邻两层时,完整链路均值为
完整方差必须通过二阶矩计算:
最后一项不能省略:只要两个 Mip 的重建均值因为网格相位或边界行为不重合,直接线性插值两层方差就会漏掉额外扩散。
对于每种 bicubic,参考生成器会在 上枚举相邻两层的联合像素周期,得到相位平均函数
新的整数 Mip 切换点定义为
运行时不再使用同一条解析近似,而是为 B-spline 和 Catmull–Rom 分别生成 1024 项单调 LUT,在 上数值反解
下图可以切换两种 bicubic,查看各自的新切换点、sigma→LOD map,以及校准前后的图像和误差。
完整链路 sigma→LOD map
1024 项 LUT 反解全部像素相位的平均完整链路方差;整数 LOD 即新的切换点



校准后,B-spline 的平均 从 降到约 ,RMSE 从 降到 ;Catmull–Rom 的平均 从 降到约 ,RMSE 从 降到 。B-spline 更低的 RMSE 来自更强的低通,而 Catmull–Rom 保留了更锐利的局部轮廓;本文保留两种模式,不用一个总分掩盖这个取舍。
6. 误差分析:方差正确之后还要检查形状
最终评估拆成两个互补维度。对每个目标 和全部 Mip 网格相位,记录
表格报告 的平均值、P95 和最大值;图像误差则直接比较完整输出与 Ground Truth:
下面的汇总表保留每一步,而不是只展示最终胜者。分桶图可以看出误差集中在哪些目标尺度;最终图片仍可切换到八倍差分。
| 阶段 | Reconstruction | mean |Δσ| | P95 |Δσ| | max |Δσ| | RMSE |
|---|---|---|---|---|---|
| 整数 Mip 硬切换 | Bilinear | 2.26098 | 4.83403 | 5.39653 | 0.027432 |
| 预滤波等方差插值 | Bilinear | 2.36847 | 4.27487 | 4.91222 | 0.022350 |
| log2 · Bilinear | Bilinear | 2.80960 | 4.81486 | 5.99000 | 0.025275 |
| log2 · B-spline | Cubic B-spline | 4.68398 | 7.08523 | 7.32389 | 0.029546 |
| log2 · Catmull–Rom | Catmull–Rom | 0.27860 | 0.53103 | 0.59261 | 0.023829 |
| 完整方差 · B-spline | Cubic B-spline | 0.00000 | 0.00000 | 0.00011 | 0.011323 |
| 完整方差 · Catmull–Rom | Catmull–Rom | 0.00000 | 0.00000 | 0.00111 | 0.021259 |
最终方案 RMSE 分布
每个点汇总对应 1σ 区间内的线性 RGB 逐通道误差



方差校准几乎消除了平均尺度误差,但 RMSE 没有同时归零,因为层间插值得到的是两个离散核的混合,不是新的标准 Gaussian。Catmull–Rom 的 RMSE 高于 B-spline,也不表示它在所有视觉任务中更差:前者保留更多局部对比度,后者更接近本文这张以 Gaussian 为 Ground Truth 的测试图。
性能边界
默认 Gaussian downsample 每个输出 texel 使用 9 次二维采样。构建到第 层时,Mip 像素总数小于 ,因此生成阶段采样数小于 ,并需要 个 Pass。
本文的 bicubic 参考实现使用完整 footprint。显式读取相邻两层需要每个输出像素 32 次 texel sample;硬件或 Shader 可以合并 cubic 权重以减少指令,但任何 fast bicubic 都必须重新测量等效方差,不能直接复用这里的 LUT。最终模式的真实 GPU 时间、带宽和功耗还需要在目标设备上补齐。
限制与下一步
- LUT 匹配的是完整像素周期的相位平均方差;min–max 色带仍然描述单个像素可能出现的残余尺度差异。
- 当前 RMSE 只使用一张 输入图和一条纵向 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:固定 的 dense 4/9/16 taps 最终 RMSE 都约为 ,而方差更大的四 tap 十字核能用更少 Mip 层将同一测试图 RMSE 降到 。后者同时改变了单级尺度和频率响应,因此不能当作“同方差 Gaussian 核”的直接胜利者。
下面保留可复算证书和非负权重 Pareto 结果,作为继续探索非 Gaussian 生成核的入口;它们不参与上面六步默认方案的参数选择。
展开 sparse support 搜索证书与结果
| 对比项 | ≤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.04742 | EG 0.38863 | EG 0.11907 | EG 0.04253 | EG 0.18331 | EG 0.13217 | EG 0.04253 | EG 0.18134 | EG 0.13217 |
| 混叠分析 | Astop 0.08039 | Astop 0.00357 | Astop 0.00886 | Astop 0.05255 | Astop 0.00219 | Astop 0.00300 | Astop 0.05255 | Astop 0.00075 | Astop 0.00300 |
| RMSE | 0.02634 | 0.02904 | 0.00925 | 0.01973 | 0.00934 | 0.00780 | 0.01973 | 0.00972 | 0.00780 |