4 namespace UnityStandardAssets.ImageEffects
7 [RequireComponent (typeof(Camera))]
8 [AddComponentMenu (
"Image Effects/Blur/Blur (Optimized)")]
13 public int downsample = 1;
15 public enum BlurType {
21 public float blurSize = 3.0f;
24 public int blurIterations = 2;
26 public BlurType blurType= BlurType.StandardGauss;
28 public Shader blurShader = null;
29 private Material blurMaterial = null;
32 public override bool CheckResources () {
35 blurMaterial = CheckShaderAndCreateMaterial (blurShader, blurMaterial);
42 public void OnDisable () {
44 DestroyImmediate (blurMaterial);
47 public void OnRenderImage (RenderTexture source, RenderTexture destination) {
48 if (CheckResources() ==
false) {
49 Graphics.Blit (source, destination);
53 float widthMod = 1.0f / (1.0f * (1<<downsample));
55 blurMaterial.SetVector (
"_Parameter",
new Vector4 (blurSize * widthMod, -blurSize * widthMod, 0.0f, 0.0f));
56 source.filterMode = FilterMode.Bilinear;
58 int rtW = source.width >> downsample;
59 int rtH = source.height >> downsample;
62 RenderTexture rt = RenderTexture.GetTemporary (rtW, rtH, 0, source.format);
64 rt.filterMode = FilterMode.Bilinear;
65 Graphics.Blit (source, rt, blurMaterial, 0);
67 var passOffs= blurType == BlurType.StandardGauss ? 0 : 2;
69 for(
int i = 0; i < blurIterations; i++) {
70 float iterationOffs = (i*1.0f);
71 blurMaterial.SetVector (
"_Parameter",
new Vector4 (blurSize * widthMod + iterationOffs, -blurSize * widthMod - iterationOffs, 0.0f, 0.0f));
74 RenderTexture rt2 = RenderTexture.GetTemporary (rtW, rtH, 0, source.format);
75 rt2.filterMode = FilterMode.Bilinear;
76 Graphics.Blit (rt, rt2, blurMaterial, 1 + passOffs);
77 RenderTexture.ReleaseTemporary (rt);
81 rt2 = RenderTexture.GetTemporary (rtW, rtH, 0, source.format);
82 rt2.filterMode = FilterMode.Bilinear;
83 Graphics.Blit (rt, rt2, blurMaterial, 2 + passOffs);
84 RenderTexture.ReleaseTemporary (rt);
88 Graphics.Blit (rt, destination);
90 RenderTexture.ReleaseTemporary (rt);