⾼品质后处理:⼗种图像模糊算法的总结与实现
本⽂由@浅墨_⽑星云 出品,转载请注明出处
后处理(Post-Processing),在图形学和游戏开发等领域是提升最终画⾯呈现品质的重要渲染技术。后处理渲染技术的好坏,往往决定了游戏画⾯是否能够达到令⼈惊艳的级别。
图像模糊算法在后处理渲染领域中占据着重要的地位。很多产品级后处理的实现,都会直接或间接依赖于图像模糊算法中的⼀种或多种。⽆论是基于⾼斯模糊(Gaussian Blur)或其改进算法的Bloom特效,还是基于径向模糊(Radial Blur)的Sun Shaft(God Ray),或是基于⽅向模糊(Directional Blur)的镜头眩光光晕(Glare Lens Flare),抑或是景深(Depth of Field)特效中摄影级失焦感的散景模糊(Bokeh Blur),都以模糊算法作为重要的⽀撑。所以说,后处理中所采⽤模糊算法的优劣,决定了后处理管线最终的渲染品质和消耗性能的多少。
本⽂将对后处理管线中会使⽤到的如下⼗种模糊算法进⾏总结、对⽐和盘点,以及提供了这⼗种模糊算法以及其衍⽣算法对应的Unity Post Processing Stack v2版本的实现:
⾼斯模糊(Gaussian Blur)
⽅框模糊(Box Blur)
Kawase模糊(Kawase Blur)
双重模糊(Dual Blur)
散景模糊(Bokeh Blur)
移轴模糊(Tilt Shift Blur)
光圈模糊(Iris Blur)
粒状模糊(Grainy Blur)
径向模糊(Radial Blur)
⽅向模糊(Directional Blur)
另外,本⽂暂不涉及运动模糊(Motion Blur),因为其主要作⽤于帧之间的运动变化,不属于静态型模糊。还有⼀些其他的模糊算法由于不太适⽤于实时渲染,本⽂也暂不涉及,如Moving Averages filter。
下⾯先放⼀组使⽤了依赖于模糊算法的后处理特效的实时渲染截图,然后开始我们的正⽂。
图《巫师2》 中基于径向模糊(Radial Blur)的Sun Shaft
单人开发选ue4还是unity
图 UE4场景中,间接基于⾼斯模糊(Gaussian Blur)的Bloom特效给画⾯带了更好的光感 @ UE4 CyberNeon @Junliang Zhang
图 Sun Shaft Forest @UE4
图 《⿁泣5》中的镜头眩光光晕(Glare Lens Flare)
图 Tom Clancys The Division中的基于散景模糊(Bokeh Blur)的景深
其中对于赛博朋克风夜中国风城市的展现,如果缺少了Bloom和Glare Lens Flare等依赖于本⽂讲到的模糊算法的后处理特效,展现出来
的品质将少了很多韵味:
⼗种图像模糊算法横向对⽐
在展开全⽂,对这⼗种图像模糊算法进⾏分别介绍之前,这⼀节中先做⼀个总览,即⼀个横向的对⽐。要评判⼀种模糊算法的好坏,主要有三个标准:
模糊品质(Quality) 。模糊品质的好坏是模糊算法是否优秀的主要指标。
模糊稳定性(Stability) 。模糊的稳定性决定了在画⾯变化过程中,模糊是否稳定,不会出现跳变或者闪烁。
性能(Performance) 。性能的好坏是模糊算法是否能被⼴泛使⽤的关键所在。
以下是本⽂涉及的⼗种模糊算法在标准情况下以上述三个指标作为评判标准的横向对⽐:
从上表的对⽐可以看到,除了Grainy Blur因其模糊质感的特殊性获得了“⼀般”的模糊品质评级之外,另外九种模糊算法在模糊品质和稳定性这两⽅⾯都获得了不错的评级。这是因为给到⾜够的迭代次数,且不做RT的DownSample,他们都可以收敛到⼀个⾼品质的模糊质感。
最终的分化在于性能,这才是评判⼀种算法性价⽐是否⾼,能否⼴泛⽤于实时渲染的关键因素。其中,可以看到仅双重模糊(Dual Blur)和粒状模糊(Grainy Blur)两种算法,获得了⾼的性能评级。当然,这是针对标准的算法⽽⾔,其他⼋种算法如果进⾏进⼀步的性能优化,也能具有更佳的性能。
关于X-PostProcessing Libray
X-PostProcessing Libray,简称XPL,是本⼈开发的Unity引擎下的⾼品质开源后处理算法库,旨在提供业界主流的⾼品质后处理特效的完整解决⽅案,⽬前已完美⽀持Unity Post-processing Stack v2。后续也将提供对Unity引擎URP/LWRP/HDRP的兼容⽀持。