高品质后处理渲染技术分享:十种图像模糊算法的总结与实现( 十 )
for (int j = 0; j < _Iteration; j++){r += 1.0 / r;angle = mul(rot, angle);half4 bokeh = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, float2(i.texcoord + _PixelSize * (r - 1.0) * angle));accumulator += bokeh * bokeh;divisor += bokeh;}return accumulator / divisor;}
即对于每一次迭代 , 让采样uv旋转一个角度 , 经过足够次数的迭代后 , 众多以圆形分散开来的点 , 将一起组成合适的Bokeh形状 。
完整的Runtime + Shader实现可见:
https://github.com/QianMo/X-PostProcessing-Library/tree/master/Assets/X-PostProcessing/Effects/BokehBlu
r
下图为最终实现的效果图:
文章图片
不同模糊半径(Blur Radius)变化 , 可以控制不同的Bokeh半径的变化:
文章图片
六、移轴模糊 (Tilt Shift Blur)
移轴模糊(Tilt Shift Blur
) , 又称镜头模糊(Lens Blur
) , 是源自摄影领域的一种模糊算法 。
在摄影领域 , 移轴摄影(Tilt-Shift Photography
)泛指利用移轴镜头创作的作品 , 所拍摄的照片效果就像是缩微模型一样 , 非常特别 。 移轴镜头的作用 , 本来主要是用来修正以普通广角镜拍照时所产生出的透视问题 , 但后来却被广泛利用来创作变化景深聚焦点位置的摄影作品 。 移轴镜摄影是将真实世界拍成像假的一样 , 使照片能够充分表现出“人造都市”的感觉 。
文章图片
图 移轴摄影作品
在后处理渲染中进行移轴摄影的模拟 , 可以采用Grident uv算法控制画面区域模糊强度 , 配合全屏模糊算法的方式来实现 。
采用Grident uv算法控制画面区域模糊强度的Shader核心实现如下:
float TiltShiftMask(float2 uv)
{
float centerY = uv.y * 2.0 - 1.0 + _Offset; // [0,1] -> [-1,1]
return pow(abs(centerY * _Area), _Spread);
}
得到的屏幕模糊强度的mask图如下:
文章图片
接着 , 配合合适的全屏图像模糊算法 , 如Bokeh Blur , 便可以营造出移轴摄影的画面感:
推荐阅读
- 违反违反医疗事故处理条例 青岛交通医院被警告
- 个税APP提示退税“国库处理”……原来是这么回事!
- 陕西榆林女子制止两插队者被打 打人者已被警方处理
- 教师有这些行为或被开除!广东首份违反师德处理办法征求意见
- 推荐警惕!厨房突发爆燃竟和煤气无关,只因他这样处理剩菜剩饭…...
- 厨房突发爆燃,竟和煤气无关!只因他这样处理剩菜剩饭…
- 公积金速看!漯河将清理公积金长期封存账户,请及时处理
- 牵出黄岛一起打架牵出贩卖“笑气”案 三人被依法处理
- 外媒:美明尼苏达州总检察长将领导处理弗洛伊德案
- 【各个】幸福触手可及各个人物结局 迪丽热巴细节上处理的很好
