unity float转int_[译] 实现Unity 后处理特效 (4)_变焦模糊

接着上篇文章,今天想给大家分享一下如何实现操作简单、效果佳的变焦模糊(Zoom blur)效果。(Photoshop中径向模糊的一个选项)

在实现变焦模糊之前,我先说一下模糊的原理。先看下如何在Photoshop中不用模糊功能,来实现模糊。

打开Photoshop。

2c0cd43a82ad3820f7b3accf8d1ed5ad.png

上图是我准备好的源图像,在原始图像上创建10个复制图层,并把透明度设置为10%。

把10个图层依次向左移动5个像素,向右移动5个像素。

47c60404eabb8846ec2076dd7189acc1.png

上图右边标记的数字代表我移动的像素数。

b521618e2ed520097417e8168ccfd6d8.png

哦哈!看上去好像有一丢丢模糊的感觉了呢!

实现模糊主要有两种方法。

1.按uv偏移的次数来重复采样,然后把采样结果相加再除以采样数。(某位大佬指点:作者使用的方法,详细解释是uv偏移时就重复采样一次(如果偏移10次就重复采样了10次),从-5到5有10个值,这10个采样结果对最终结果贡献都是10%,嗯!)

2.有四个方向的位移,uv偏移后进行下采样再把结果叠加,以增加模糊范围。

方法2虽然性能开销小些,但只能用于高斯模糊或定向模糊,不能用于变焦模糊。从这里也可以看出,变焦模糊要比其他方法更耗性能一些。

刚刚我试了左右偏移的效果,这次我稍微放大下中央区域的大小(大概101%),是不是有点变焦模糊的感觉了?

b36dea8848d532295d4252aaf3a47cd5.png

挺不错的!

我们也可以用这个方法加点淡淡的alpha来做毛发,得到层层堆叠的效果。这样子的毛看上去也有点模糊的感觉。

3a1f2797e22b159ce2ecabd3bab12f25.png

我们按原理来做一下吧。

基于前文内容得到RadialBlurImageEffect.cs和RadialBlurImageEffect.shader,先看下shader。

1b8f7282d0986ebbcb80e97b91bb0d9d.png

如果我们不需要特殊顶点的计算,调用vert_img函数的话,可删除vert函数定义,来提高代码的可读性。如不用在vert中添加其他东西的话,这样就ok了。

3dc1f3cb4802effc336cd0b8611d6924.png

如上图所示,我添加了 _ BlurCenterPos,_ Samples和_BlurSize变量。

_ MainTex_TexelSize是一个变量,占用一个像素点。本文中_ MainTex = ScreenSize,所以若长是1024的话,那么值就为1/1024。_ BlurCenterPos是模糊的中心位置(默认值是0.5,我设为0.5),_ Samples是采样数,_ BlurSize是为了得到模糊效果而偏移的距离。

在frag函数中,我们用for语句来一次性实现它吧!

98c2aba253c96723fd8124087127678f.png

重复采样( tex2D)足够的样本数,但要基于中心位置来缩放uv。(UV中的缩放是“乘法”)

unity中的uv左下角是(0,0),中央是(0.5,0.5),所以默认uv乘以缩放距离的话,那缩放就是基于左下角为标准进行的。

19c20cfeeabaaec435de75723bf1a75d.png

效果图如上。

那么,用(-0.5, -0.5)把画面中心移到(0,0),设置缩放值后,再加上(0.5,0.5)让它重回原始位置,这样一来中央区域就产生了模糊效果。看下图可方便理解。

2e2cfec8bb771158aa10a96c4a47cd29.png
图片文字说明:1.偏移uv,使得图像的中心位于(0,0);2.用一个很小的值做缩放;3.重新还原uv。

通过重复采样得到模糊值。现在我们只需要把结果加起来再相除就可以了。

RadialBlueImageEffect.cs也一样。

由于采样数用在for语句中,用int()来装载和传递的小数点可能会稍有不同。(用float也行,因为unity会自动舍弃小数点)

另外,当blurSize为0时,为了让source直接成为结果值,我优化了代码。

a166d9bd160caa505622e28c9b20799f.png

31c1974e5bea0e11e98d0ef59b4d78a1.png

酱紫,模糊效果就搞定了!

放上动图感受下~

谢谢!bye!

76bd669b14bf2047d799889752d9bbc5.png

[原文来源] 유니티 포스트 프로세싱 이펙트 만들기 (4) - 줌 블러|作者 Madumpa

本文仅限于学习参考交流,请勿做商业用途和随意转载。


译者碎碎念:句子理不清楚也不懂,干烦恼TT,感谢纯一大佬帮忙赐教解救,很多谢谢~

这个系列4篇文章终于搞定!oyeah!!!

最近在思考文章怎么样翻译最佳,好像直译一遍后,再加以意译,效果会比较好。hmmm,如果我都能大概理解的话,各位应该都能明白,嗯?噗嗤嗤笑~

闲时翻译的初衷?想想...师夷长技以制夷,算吗?hhhhhhh日常练手翻译技能+1

也不知道能坚持多久,努力生长叭~

Qinfei

2020/8/30

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值