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



图 不同相机参数下得到的不同散景模糊(Bokeh Blur)


散景(Bokeh)在摄影学中被称为焦外成像 , 而在光学上被称为Circle of Confusion, CoC(弥散圆/散光圈/散射圆盘 ) , 即下图橙色Image Plane 中的蓝色C所示区域 。 由于不同的物距(物体到镜头的距离)投影到镜头所形成的焦点不同 , 但Image Plane 只能放在某个点上 , 所以就形成了Circle of Confusion, CoC(弥散圆) 。

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

图 散景(Bokeh)成因 (图片来自GPU Gems 1)


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

图 散景(Bokeh)大小不同的成因 , 即Circle of Confusion, CoC(弥散圆)的大小与人眼分辨率不同的区域 。


镜头本身的光圈叶片数不同(所形成的光圈孔形状不同) , 会让散景形状呈现不同的多角形变化 。 从最初的多边形 , 过渡到最终的圆形 。

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

图 不同光圈叶片数的镜头 , 决定了不同的散景形状


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

图 不同光圈叶片数的镜头 , 决定了不同的散景形状


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

图 不同光圈数值的镜头形态 , 决定了不同的散景形态


从上图可以看出 ,由于光圈大小和叶片数量的不同 , 散景(Bokeh)的形态各异 。

在图形学领域模拟散景(Bokeh)的方法有很多 , 本文将以最标准的圆形散景为例 , 采用Golden angle的思路进行散景模糊(Bokeh Blur)算法的实现 。

注:

https://en.wikipedia.org/wiki/Golden_angle



具体而言 , 算法思路是基于对大量离散螺旋型(spiral)分布的点的渲染 , 来模拟出圆形Bokeh的形状 。

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


核心的Shader算法实现为:

half4 BokehBlur(VaryingsDefault i)
{
half2x2 rot = half2x2(_GoldenRot);
half4 accumulator = 0.0;
half4 divisor = 0.0;

half r = 1.0;
half2 angle = half2(0.0, _Radius);


推荐阅读