前言:
前段时间认识一位大牛,听他说Image Effect 很值得一看,这不,研究了一个星期,终于有所成果!发出来主要是分享给大家和以后复习更方面,如果小伙伴们有更好的做法,可以提出来哦,一起交流,谢谢大家!
进入主题:
原本打算用一个赛车的场景实现这个功能,方便大家理解,但是为了方面我就随便打了个环境,也实现模糊的功能。
首先我们要导入资源包Image Effects (Pro Only),注意只有专业能用这个功能。然后在摄像机上挂上Blur Effect这个脚本(只有挂在相机上才起作用),最后可以调整以下参数来获得很好的效果
(1).Iterations(迭代次数)-模糊操作重复的次数。越多迭代,模糊的效果越好,但同样也消耗更多的时间,同时会增加DC,也就是增加一次迭代,就会对应的增加一个DC,因为所用到的Shader-BlurEffectConeTaps里面只有一个Psaa.
(2).Blur Spread (模糊半径)-更大的数值可以让模糊在同样的迭代次数中蔓延的更广,但会带来额外的开销。一般来说选择0.6-0.7范围的数值可以在质量与速度之间达到一个比较好的平衡。
当然你也可以自己写Shader,我看了下,貌似不难,虽然我只是Shader菜鸟!很菜很菜。。。。。
附上代码,当然你可以将那个立方体换成赛车测试下效果如何。
<span style="font-family:Microsoft YaHei;font-size:18px;color:#660000;"></pre><pre name="code" class="csharp"><strong><span style="font-size:18px;color:#660000;">using UnityEngine;
using System.Collections;
public class Blur : MonoBehaviour {
private BlurEffect mBlurEffect;
void Start()
{
mBlurEffect = GetComponent<BlurEffect>();
mBlurEffect.enabled = false;
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Q))
{
StartCoroutine(BlurEffects());
}
}
IEnumerator BlurEffects()
{
mBlurEffect.enabled = true;
yield return new WaitForSeconds(3.0f);
mBlurEffect.enabled = false;
}
}</span></strong></span>
效果图如下:
只要按下键盘的Q键,相应的效果就会显示出来哦!我的Unity版本是4.6.0f3,这里还提供了一个优化的Blur Effect
,如下图所示:
这个脚本更适用于移动平台,同时他也提供了更多的属性来实现更好效果,但然相对于上面那个脚本也更耗性能,查看了其使用的Shader,多增加一次Iterations(迭代次数),就会增加两个DC.个人建议:当你在移动平台使用模糊效果,可以使用优化好的Blur Effect,反之则使用没优化的Blur Effect
最后的最后:
每种Shader都可能有平台的限制,当然这里所讲的模糊效果也有平台的限制,以下是翻译自Unity官网:
This effect requires a graphics card with pixel shaders (2.0) or OpenGL ES 2.0. PC: NVIDIA cards since 2003 (GeForce FX), AMD cards since 2004 (Radeon 9500), Intel cards since 2005 (GMA 900); Mobile: OpenGL ES 2.0; Consoles: Xbox 360, PS3.
这个特效需要显卡拥有像素着色器(2.0)或者OpenGL ES 2.0。台式机:2003年以后的NVIDIA显卡(GeForce FX),2004年以后的AMD显卡(Radeon 9500),2005年以后的Intel卡(GMA 900);移动设备:OpenGL ES 2.0;控制台: Xbox 360、 PS3。
All image effects automatically disable themselves when they can not run on end-users graphics card.
所有图像特效如果无法在用户显卡上运行时将会自动被关闭。