7     [RequireComponent (typeof(Camera))]
     8     [AddComponentMenu (
"Image Effects/Rendering/Screen Space Ambient Obscurance")]
    11         public float intensity = 0.5f;
    13         public float radius = 0.2f;
    15         public int blurIterations = 1;
    17         public float blurFilterDistance = 1.25f;
    19         public int downsample = 0;
    21         public Texture2D rand = null;
    22         public Shader aoShader= null;
    24         private Material aoMaterial = null;
    29             aoMaterial = CheckShaderAndCreateMaterial (aoShader, aoMaterial);
    38                 DestroyImmediate (aoMaterial);
    44             if (CheckResources () == 
false) {
    45                 Graphics.Blit (source, destination);
    49             Matrix4x4 P = GetComponent<Camera>().projectionMatrix;
    51             Vector4 projInfo = 
new Vector4
    52                 ((-2.0f / (
Screen.width * P[0])),
    53                  (-2.0f / (
Screen.height * P[5])),
    54                  ((1.0f - P[2]) / P[0]),
    55                  ((1.0f + P[6]) / P[5]));
    57             aoMaterial.SetVector (
"_ProjInfo", projInfo); 
    58             aoMaterial.SetMatrix (
"_ProjectionInv", invP); 
    59             aoMaterial.SetTexture (
"_Rand", rand); 
    60             aoMaterial.SetFloat (
"_Radius", radius);
    61             aoMaterial.SetFloat (
"_Radius2", radius*radius);
    62             aoMaterial.SetFloat (
"_Intensity", intensity);
    63             aoMaterial.SetFloat (
"_BlurFilterDistance", blurFilterDistance);
    65             int rtW = source.width;
    66             int rtH = source.height;
    68             RenderTexture tmpRt  = RenderTexture.GetTemporary (rtW>>downsample, rtH>>downsample);
    71             Graphics.Blit (source, tmpRt, aoMaterial, 0);
    74                 tmpRt2 = RenderTexture.GetTemporary (rtW, rtH);
    75                 Graphics.Blit(tmpRt, tmpRt2, aoMaterial, 4);
    76                 RenderTexture.ReleaseTemporary (tmpRt);
    83             for (
int i = 0; i < blurIterations; i++) {
    84                 aoMaterial.SetVector(
"_Axis", 
new Vector2(1.0f,0.0f));
    85                 tmpRt2 = RenderTexture.GetTemporary (rtW, rtH);
    86                 Graphics.Blit (tmpRt, tmpRt2, aoMaterial, 1);
    87                 RenderTexture.ReleaseTemporary (tmpRt);
    89                 aoMaterial.SetVector(
"_Axis", 
new Vector2(0.0f,1.0f));
    90                 tmpRt = RenderTexture.GetTemporary (rtW, rtH);
    91                 Graphics.Blit (tmpRt2, tmpRt, aoMaterial, 1);
    92                 RenderTexture.ReleaseTemporary (tmpRt2);
    95             aoMaterial.SetTexture (
"_AOTex", tmpRt);
    96             Graphics.Blit (source, destination, aoMaterial, 2);
    98             RenderTexture.ReleaseTemporary (tmpRt);
 void OnRenderImage(RenderTexture source, RenderTexture destination)
 
override bool CheckResources()