内容提要
作者发现Blender“快速高斯”模糊在大半径下并不快,因此提出Smol Gaussian:先降采样,在小图上执行可分离高斯模糊,再重建图像;同时补偿降采样方差,使用三次B样条上采样,避免HDR高光闪烁。与Dual Kawase、Skia、递归高斯和Ryg模糊对比,Smol Gaussian性能与Skia相当,且半径越大越省时,已提交Blender合成器PR。
延伸解读
为什么“快速高斯”在大半径下并不快
Blender 的“快速高斯”基于递归滤波,计算量几乎不随半径增长,但这类算法源自 25 年前,并行度低,难以充分利用 GPU 或众核 CPU。因此尽管名字叫“快速”,在大半径或需要动画半径时,实际性能可能不如预期。作者正是发现这一点后,开始寻找更适合 GPU 的替代方案。
Smol Gaussian 的关键改进:降采样与方差补偿
Smol Gaussian 采用“降采样—小图高斯—重建”的思路,但相比 Skia 模糊做了几处调整:降采样时更精确地积分像素面积,避免孤立亮点随采样相位闪烁;在最终高斯核中减去降采样和重建引入的方差;核延伸到 sigma=4 并做权重衰减,减少高光截断感;重建使用三次 B 样条,避免双线性带来的斜率不连续。
性能对比:Smol Gaussian 与 Skia 相当,且半径越大越省时
在 Chrome 中测试,Smol Gaussian 与 Skia 模糊性能接近:RTX 3080Ti 上相同,M4 Max 上略慢,Intel Xe 上略快。两者都随模糊半径增大而变快,因为主要卷积在更小的图像上进行。Dual Kawase 在此实现中慢 2 到 3 倍,且动画半径时 HDR 高光过渡不够平滑。
对 Blender 的潜在影响与当前状态
作者已向 Blender 合成器提交 PR(164496),包含 CPU 和 GPU 实现。CPU 版本虽无成对双线性采样,但仍比现有 Fast Gaussian 快数倍,且无振铃伪影。目前尚未决定是替换现有模式还是新增模糊模式。若被采纳,Blender 用户在大半径模糊和动画半径场景下可能获得更稳定、更高效的结果。
Q&A
Smol Gaussian 模糊算法是如何工作的?
Smol Gaussian 先降采样到工作分辨率(可每轴不同),在小图上执行可分离高斯模糊,再重建到全分辨率。它补偿降采样和重建引入的方差,使用三次 B 样条上采样以避免 HDR 高光闪烁。
Smol Gaussian 与 Skia 高斯模糊相比有哪些改进?
相比 Skia,Smol Gaussian 在降采样奇数尺寸图像时进行更正确的像素面积积分,避免孤立亮像素闪烁;降采样级别为 ceil 半尺寸,在 sigma=6 时启用;最终高斯核扩展到 sigma=4 并渐变权重;重建使用三次 B 样条而非双线性,避免斜率不连续。
为什么 Blender 的“快速高斯”模糊在大半径下并不快?
Blender 的“快速高斯”基于递归高斯滤波,虽然计算成本与半径无关,但算法来自 25 年前,不是“ embarrassingly parallel”,不适合 GPU 并行,且可能有振铃伪影,在 HDR 高光下产生光晕或负色。
Smol Gaussian 的性能表现如何?
Smol Gaussian 性能与 Skia 模糊相当(在 RTX 3080Ti 上相同,M4 Max 上稍慢,Intel Xe 上稍快),且随着模糊半径增大反而更省时,因为主要计算在更小的图像上进行。Dual Kawase 比 Smol Gaussian 慢 2-3 倍。
Smol Gaussian 如何处理动画模糊半径?
Smol Gaussian 通过降采样到工作分辨率、补偿方差、使用三次 B 样条上采样,使模糊半径动画更平滑,避免 HDR 高光闪烁。作者还尝试过交叉淡化工作分辨率但最终放弃,因为性能开销大且视觉差异小。
Smol Gaussian 是否已集成到 Blender 中?
作者已提交一个 WIP 拉取请求(PR 164496)到 Blender 合成器节点,包含 CPU 和 GPU 实现,但尚未决定是替换现有“快速高斯”还是作为新模糊模式。CPU 实现比当前快速高斯快数倍且无振铃伪影。