Shader "Hidden/Post FX/Ambient Occlusion" 
 | 
{ 
 | 
    CGINCLUDE 
 | 
  
 | 
        #pragma target 3.0 
 | 
  
 | 
    ENDCG 
 | 
  
 | 
    SubShader 
 | 
    { 
 | 
        ZTest Always Cull Off ZWrite Off 
 | 
  
 | 
        // 0: Occlusion estimation with CameraDepthTexture 
 | 
        Pass 
 | 
        { 
 | 
            CGPROGRAM 
 | 
                #pragma vertex VertMultitex 
 | 
                #pragma fragment FragAO 
 | 
                #pragma multi_compile FOG_OFF FOG_LINEAR FOG_EXP FOG_EXP2 
 | 
                #define SOURCE_DEPTH 
 | 
                #include "AmbientOcclusion.cginc" 
 | 
            ENDCG 
 | 
        } 
 | 
  
 | 
        // 1: Occlusion estimation with CameraDepthNormalsTexture 
 | 
        Pass 
 | 
        { 
 | 
            CGPROGRAM 
 | 
                #pragma vertex VertMultitex 
 | 
                #pragma fragment FragAO 
 | 
                #pragma multi_compile FOG_OFF FOG_LINEAR FOG_EXP FOG_EXP2 
 | 
                #define SOURCE_DEPTHNORMALS 
 | 
                #include "AmbientOcclusion.cginc" 
 | 
            ENDCG 
 | 
        } 
 | 
  
 | 
        // 2: Occlusion estimation with G-Buffer 
 | 
        Pass 
 | 
        { 
 | 
            CGPROGRAM 
 | 
                #pragma vertex VertMultitex 
 | 
                #pragma fragment FragAO 
 | 
                #pragma multi_compile FOG_OFF FOG_LINEAR FOG_EXP FOG_EXP2 
 | 
                #define SOURCE_GBUFFER 
 | 
                #include "AmbientOcclusion.cginc" 
 | 
            ENDCG 
 | 
        } 
 | 
  
 | 
        // 3: Separable blur (horizontal pass) with CameraDepthNormalsTexture 
 | 
        Pass 
 | 
        { 
 | 
            CGPROGRAM 
 | 
                #pragma vertex VertMultitex 
 | 
                #pragma fragment FragBlur 
 | 
                #define SOURCE_DEPTHNORMALS 
 | 
                #define BLUR_HORIZONTAL 
 | 
                #define BLUR_SAMPLE_CENTER_NORMAL 
 | 
                #include "AmbientOcclusion.cginc" 
 | 
            ENDCG 
 | 
        } 
 | 
  
 | 
        // 4: Separable blur (horizontal pass) with G-Buffer 
 | 
        Pass 
 | 
        { 
 | 
            CGPROGRAM 
 | 
                #pragma vertex VertMultitex 
 | 
                #pragma fragment FragBlur 
 | 
                #define SOURCE_GBUFFER 
 | 
                #define BLUR_HORIZONTAL 
 | 
                #define BLUR_SAMPLE_CENTER_NORMAL 
 | 
                #include "AmbientOcclusion.cginc" 
 | 
            ENDCG 
 | 
        } 
 | 
  
 | 
        // 5: Separable blur (vertical pass) 
 | 
        Pass 
 | 
        { 
 | 
            CGPROGRAM 
 | 
                #pragma vertex VertMultitex 
 | 
                #pragma fragment FragBlur 
 | 
                #define BLUR_VERTICAL 
 | 
                #include "AmbientOcclusion.cginc" 
 | 
            ENDCG 
 | 
        } 
 | 
  
 | 
        // 6: Final composition 
 | 
        Pass 
 | 
        { 
 | 
            CGPROGRAM 
 | 
                #pragma vertex VertMultitex 
 | 
                #pragma fragment FragComposition 
 | 
                #include "AmbientOcclusion.cginc" 
 | 
            ENDCG 
 | 
        } 
 | 
  
 | 
        // 7: Final composition (ambient only mode) 
 | 
        Pass 
 | 
        { 
 | 
            Blend Zero OneMinusSrcColor, Zero OneMinusSrcAlpha 
 | 
  
 | 
            CGPROGRAM 
 | 
                #pragma vertex VertCompositionGBuffer 
 | 
                #pragma fragment FragCompositionGBuffer 
 | 
                #include "AmbientOcclusion.cginc" 
 | 
            ENDCG 
 | 
        } 
 | 
  
 | 
        // 8: Debug visualization 
 | 
        Pass 
 | 
        { 
 | 
            CGPROGRAM 
 | 
                #pragma vertex VertMultitex 
 | 
                #pragma fragment FragComposition 
 | 
                #define DEBUG_COMPOSITION 
 | 
                #include "AmbientOcclusion.cginc" 
 | 
            ENDCG 
 | 
        } 
 | 
    } 
 | 
} 
 |