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


文章图片
, 其中M, N是需要进行滤波的图像的维数 , m、n是滤波器的维数 。


以下为一个Gaussian Kernel的线性分解过程:

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


而下图很好的对Gaussian Kernel的线性可分进行了描述:

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


实现方面 , 可以采用经过线性分解的高斯核的方案 , 且用乒乓RT交互blit的方法 。 高斯模糊对应的Fragment Shader的实现为:

float4 FragGaussianBlur(v2f i): SV_Target
{
half4 color = float4(0, 0, 0, 0);

color += 0.40 * SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv);
color += 0.15 * SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv01.xy);
color += 0.15 * SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv01.zw);
color += 0.10 * SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv23.xy);
color += 0.10 * SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv23.zw);
color += 0.05 * SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv45.xy);
color += 0.05 * SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv45.zw);

return color;
}

篇幅原因 , 在这里以及后文中 , 对应后处理的Runtime + Shader的完整的实现就不贴了 , 但会给出XPL中的实现链接 。

完整高斯模糊的Runtime + Shader实现可见:

https://github.com/QianMo/X-PostProcessing-Library/tree/master/Assets/X-PostProcessing/Effects/GaussianBlur


以下是开启高斯模糊后处理前后的对比图:

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

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


以及展示了BlurRadius为3 , Iteration为6 , RTDownScale为1的设置下 , 经过横纵线性分解的高斯模糊的渲染过程的动图:

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


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

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


推荐阅读