高品质后处理渲染技术分享:十种图像模糊算法的总结与实现( 七 )




Kawase Blur渲染效果接近高斯模糊 , 但具有更好的性能:

高品质后处理渲染技术分享:十种图像模糊算法的总结与实现
文章图片


以下是在初始RT DownScale为1、Iteration为6的设置下 , Dual Kawase Blur的渲染步骤:

高品质后处理渲染技术分享:十种图像模糊算法的总结与实现
文章图片


同样 , 对模糊半径(Blur Radius)参数的调节 , 可以控制Kawase模糊的程度:

高品质后处理渲染技术分享:十种图像模糊算法的总结与实现
文章图片


四、双重模糊(Dual Blur)


Dual Kawase Blur , 简称Dual Blur , 是SIGGRAPH 2015上ARM团队提出的一种衍生自Kawase Blur的模糊算法 。 其由两种不同的Blur Kernel构成 , 如下图所示 。

高品质后处理渲染技术分享:十种图像模糊算法的总结与实现
文章图片


相较于Kawase Blur在两个大小相等的纹理之间进行乒乓blit的的思路 , Dual Kawase Blur的核心思路在于blit过程中进行降采样和升采样,即对RT进行了降采样以及升采样 。 如下图所示:

高品质后处理渲染技术分享:十种图像模糊算法的总结与实现
文章图片


由于灵活的升降采样带来了blit RT所需计算量的减少等原因 ,Dual Kawase Blur相较于上文中提到的Gauusian Blur、Box Blur、Kawase Blur等Blur算法 , 有更好的性能 , 下图是相同条件下的性能对比 。

高品质后处理渲染技术分享:十种图像模糊算法的总结与实现
文章图片


可以看到 , Dual Kawase Blur具有最佳的性能表现 。

为了带来更好的性能表现 , 可以将uv的偏移放在Vert Shader中进行 , 而Fragment Shader中基本上仅进行采样即可 。

Dual Kawase Blur的Fragment Shader实现为:

half4 Frag_DownSample(v2f_DownSample i): SV_Target
{
half4 sum = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv) * 4;
sum += SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv01.xy);
sum += SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv01.zw);
sum += SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv23.xy);
sum += SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv23.zw);

return sum * 0.125;


推荐阅读