高品质后处理渲染技术分享:十种图像模糊算法的总结与实现( 六 )
}
Box Blur完整的Runtime + Shader实现可见:
https://github.com/QianMo/X-PostProcessing-Library/tree/master/Assets/X-PostProcessing/Effects/BoxBlur
另外也可以考虑将uv计算放到vertex层 。
Box Blur的渲染效果接近高斯模糊 , 但性价比并不高 , 需要较多的迭代次数才能达到高品质的模糊效果:
文章图片
以下是Box Blur在BlurRadius为1.6 , Iteration为6 , RTDownScale为1的设置下模糊过程的动图:
文章图片
三、Kawase模糊(Kawase Blur)
Kawase Blur于Masaki Kawase 在GDC2003的分享《Frame Buffer Postprocessing Effects in DOUBLE-S.T.E.A.L (Wreckless)》中提出 。 Kawase Blur最初用于Bloom后处理特效 , 但其可以推广作为专门的模糊算法使用 , 且在模糊外观表现上与高斯模糊非常接近 。 Kawase Blur的思路是对距离当前像素越来越远的地方对四个角进行采样 , 且在两个大小相等的纹理之间进行乒乓式的blit 。 创新点在于 , 采用了随迭代次数移动的blur kernel , 而不是类似高斯模糊 , 或box blur一样从头到尾固定的blur kernel 。
文章图片
文章图片
实践数据表明 , 在相似的模糊表现下 , Kawase Blur比经过优化的高斯模糊的性能约快1.5倍到3倍 。
具体思路是在runtime层 , 基于当前迭代次数 , 对每次模糊的半径进行设置 , 而Shader层实现一个4 tap的Kawase Filter即可:
half4 KawaseBlur(TEXTURE2D_ARGS(tex, samplerTex), float2 uv, float2 texelSize, half pixelOffset)
{
half4 o = 0;
o += SAMPLE_TEXTURE2D(tex, samplerTex, uv + float2(pixelOffset +0.5, pixelOffset +0.5) * texelSize);
o += SAMPLE_TEXTURE2D(tex, samplerTex, uv + float2(-pixelOffset -0.5, pixelOffset +0.5) * texelSize);
o += SAMPLE_TEXTURE2D(tex, samplerTex, uv + float2(-pixelOffset -0.5, -pixelOffset -0.5) * texelSize);
o += SAMPLE_TEXTURE2D(tex, samplerTex, uv + float2(pixelOffset +0.5, -pixelOffset -0.5) * texelSize);
return o * 0.25;
}
完整的Runtime + Shader实现可见:
https://github.com/QianMo/X-PostProcessing-Library/tree/master/Assets/X-PostProcessing/Effects/KawaseBlur
推荐阅读
- 违反违反医疗事故处理条例 青岛交通医院被警告
- 个税APP提示退税“国库处理”……原来是这么回事!
- 陕西榆林女子制止两插队者被打 打人者已被警方处理
- 教师有这些行为或被开除!广东首份违反师德处理办法征求意见
- 推荐警惕!厨房突发爆燃竟和煤气无关,只因他这样处理剩菜剩饭…...
- 厨房突发爆燃,竟和煤气无关!只因他这样处理剩菜剩饭…
- 公积金速看!漯河将清理公积金长期封存账户,请及时处理
- 牵出黄岛一起打架牵出贩卖“笑气”案 三人被依法处理
- 外媒:美明尼苏达州总检察长将领导处理弗洛伊德案
- 【各个】幸福触手可及各个人物结局 迪丽热巴细节上处理的很好
