4 namespace UnityStandardAssets.ImageEffects
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;
26 public override bool CheckResources () {
29 aoMaterial = CheckShaderAndCreateMaterial (aoShader, aoMaterial);
38 DestroyImmediate (aoMaterial);
43 void OnRenderImage (RenderTexture source, RenderTexture destination) {
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);