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




这里也有另一个版本的实现:

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


对模糊半径(Blur Radius)参数的调节 , 可以用于控制光圈Bokeh半径的变化:

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


同样 , 调节区域尺寸(Area Size)可以控制光圈模糊区域的变化:

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


八、粒状模糊(Grainy Blur)


粒状模糊(Grainy Blur)是一种低成本的模糊方法 , 在单pass下即可有合适的模糊表现 , 性能出色 , 且其模糊质感有点类似在画面上蒙了一层细碎的冰霜 。

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


其思路是基于随机uv进行采样的抖动 , 以对粗粒度的模糊进行模拟 。 核心算法的Shader实现如下:

float Rand(float2 n)
{
return sin(dot(n, half2(1233.224, 1743.335)));
}

half4 GrainyBlur(VaryingsDefault i)
{
half2 randomOffset = float2(0.0, 0.0);
half4 finalColor = half4(0.0, 0.0, 0.0, 0.0);
float random = Rand(i.texcoord);

for (int k = 0; k < int(_Iteration); k ++)
{
random = frac(43758.5453 * random + 0.61432);;
randomOffset.x = (random - 0.5) * 2.0;
random = frac(43758.5453 * random + 0.61432);
randomOffset.y = (random - 0.5) * 2.0;

finalColor += SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, half2(i.texcoord + randomOffset * _BlurRadius));
}
return finalColor / _Iteration;
}

这边是一个模糊半径更大的粒状模糊(Grainy Blur)的渲染效果:

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


粒状模糊(Grainy Blur)完整的Runtime + Shader实现可见:

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


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

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


推荐阅读