| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429 | Shader "Hidden/HBAO"{	Properties {		_MainTex ("", any) = "" {}		_HBAOTex ("", any) = "" {}        _TempTex("", any) = "" {}		_NoiseTex("", 2D) = "" {}		_DepthTex("", any) = "" {}		_NormalsTex("", any) = "" {}	}	CGINCLUDE    #pragma target 3.0    #pragma editor_sync_compilation    #include "UnityCG.cginc"            UNITY_DECLARE_SCREENSPACE_TEXTURE(_MainTex);    UNITY_DECLARE_SCREENSPACE_TEXTURE(_HBAOTex);    UNITY_DECLARE_SCREENSPACE_TEXTURE(_TempTex);    UNITY_DECLARE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture);    UNITY_DECLARE_SCREENSPACE_TEXTURE(_CameraGBufferTexture0); // diffuse color (RGB), occlusion (A)    UNITY_DECLARE_SCREENSPACE_TEXTURE(_CameraGBufferTexture2); // normal (rgb), --unused-- (a)    UNITY_DECLARE_SCREENSPACE_TEXTURE(_CameraMotionVectorsTexture);    UNITY_DECLARE_SCREENSPACE_TEXTURE(_NormalsTex);    UNITY_DECLARE_TEX2D(_NoiseTex);    UNITY_DECLARE_DEPTH_TEXTURE(_CameraDepthTexture);    UNITY_DECLARE_DEPTH_TEXTURE(_DepthTex);    CBUFFER_START(FrequentlyUpdatedUniforms)    float4 _Input_TexelSize;    float4 _AO_TexelSize;    float4 _DeinterleavedAO_TexelSize;    float4 _ReinterleavedAO_TexelSize;    float4 _TargetScale;	float4 _UVToView;	float4x4 _WorldToCameraMatrix;	float _Radius;	float _MaxRadiusPixels;	float _NegInvRadius2;	float _AngleBias;	float _AOmultiplier;	float _Intensity;	half4 _BaseColor;    float _MultiBounceInfluence;    float _OffscreenSamplesContrib;    float _MaxDistance;    float _DistanceFalloff;	float _BlurSharpness;	float _ColorBleedSaturation;	float _AlbedoMultiplier;	float _ColorBleedBrightnessMask;	float2 _ColorBleedBrightnessMaskRange;    float2 _TemporalParams;	CBUFFER_END    CBUFFER_START(PerPassUpdatedUniforms)    float4 _UVTransform;    float2 _BlurDeltaUV;    CBUFFER_END	CBUFFER_START(PerPassUpdatedDeinterleavingUniforms)	float2 _Deinterleave_Offset00;	float2 _Deinterleave_Offset10;	float2 _Deinterleave_Offset01;	float2 _Deinterleave_Offset11;	float2 _AtlasOffset;	float2 _Jitter;	CBUFFER_END    struct Attributes    {        float3 vertex : POSITION;        UNITY_VERTEX_INPUT_INSTANCE_ID    };    struct Varyings    {        float4 vertex : SV_POSITION;        float2 uv : TEXCOORD0;        //float2 uvStereo : TEXCOORD1;        //#if STEREO_INSTANCING_ENABLED        //uint stereoTargetEyeIndex : SV_RenderTargetArrayIndex;        //#endif        UNITY_VERTEX_OUTPUT_STEREO    };    float2 TransformTriangleVertexToUV(float2 vertex)    {        float2 uv = (vertex + 1.0) * 0.5;        return uv;    }    Varyings Vert_Default(Attributes input)    {        Varyings o;        UNITY_SETUP_INSTANCE_ID(input);        UNITY_INITIALIZE_OUTPUT(Varyings, o);        UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);        o.vertex = float4(input.vertex.xy, 0.0, 1.0);        o.uv = TransformTriangleVertexToUV(input.vertex.xy);        #if UNITY_UV_STARTS_AT_TOP        o.uv = o.uv * float2(1.0, -1.0) + float2(0.0, 1.0);        #endif        //o.uvStereo = TransformStereoScreenSpaceTex(o.uv, 1.0);        o.uv = TransformStereoScreenSpaceTex(o.uv, 1.0);        return o;    }    Varyings Vert_Atlas(Attributes input)    {        Varyings o;        UNITY_SETUP_INSTANCE_ID(input);        UNITY_INITIALIZE_OUTPUT(Varyings, o);        UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);        o.vertex = float4((input.vertex.xy + float2(-3.0, 1.0)) * (_DeinterleavedAO_TexelSize.zw / _ReinterleavedAO_TexelSize.zw) + 2.0 * _AtlasOffset * _ReinterleavedAO_TexelSize.xy, 0.0, 1.0);        o.uv = TransformTriangleVertexToUV(input.vertex.xy);        // flip triangle upside down        o.vertex.y = 1 - o.vertex.y;        //o.uvStereo = TransformStereoScreenSpaceTex(o.uv, 1.0);        o.uv = TransformStereoScreenSpaceTex(o.uv, 1.0);        return o;    }    Varyings Vert_UVTransform(Attributes input)    {        Varyings o;        UNITY_SETUP_INSTANCE_ID(input);        UNITY_INITIALIZE_OUTPUT(Varyings, o);        UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);        o.vertex = float4(input.vertex.xy, 0.0, 1.0);        o.uv = TransformTriangleVertexToUV(input.vertex.xy) * _UVTransform.xy + _UVTransform.zw;        //o.uvStereo = TransformStereoScreenSpaceTex(o.uv, 1.0);        o.uv = TransformStereoScreenSpaceTex(o.uv, 1.0);        //#if STEREO_INSTANCING_ENABLED        //o.stereoTargetEyeIndex = (uint)_DepthSlice;        //#endif        return o;    }	ENDCG	SubShader {        LOD 100		ZTest Always Cull Off ZWrite Off		// 0		Pass {            Name "HBAO - AO"			CGPROGRAM            #pragma multi_compile_local __ DEFERRED_SHADING ORTHOGRAPHIC_PROJECTION            #pragma multi_compile_local __ COLOR_BLEEDING            #pragma multi_compile_local __ OFFSCREEN_SAMPLES_CONTRIBUTION            #pragma multi_compile_local __ NORMALS_CAMERA NORMALS_RECONSTRUCT            #pragma multi_compile_local __ INTERLEAVED_GRADIENT_NOISE            #pragma multi_compile_local QUALITY_LOWEST QUALITY_LOW QUALITY_MEDIUM QUALITY_HIGH QUALITY_HIGHEST            #if QUALITY_LOWEST                #define DIRECTIONS  3                #define STEPS       2            #elif QUALITY_LOW                #define DIRECTIONS  4                #define STEPS       3            #elif QUALITY_MEDIUM                #define DIRECTIONS  6                #define STEPS       4            #elif QUALITY_HIGH                #define DIRECTIONS  8                #define STEPS       4            #elif QUALITY_HIGHEST                #define DIRECTIONS  8                #define STEPS       6            #else                #define DIRECTIONS  1                #define STEPS       1            #endif            #pragma vertex Vert_Default            #pragma fragment AO_Frag            #include "HBAO_AO.cginc"			ENDCG		}		// 1		Pass {            Name "HBAO - AO Deinterleaved"			CGPROGRAM            #pragma multi_compile_local __ DEFERRED_SHADING ORTHOGRAPHIC_PROJECTION            #pragma multi_compile_local __ COLOR_BLEEDING            #pragma multi_compile_local __ OFFSCREEN_SAMPLES_CONTRIBUTION            #pragma multi_compile_local QUALITY_LOWEST QUALITY_LOW QUALITY_MEDIUM QUALITY_HIGH QUALITY_HIGHEST            #if QUALITY_LOWEST                #define DIRECTIONS  3                #define STEPS       2            #elif QUALITY_LOW                #define DIRECTIONS  4                #define STEPS       3            #elif QUALITY_MEDIUM                #define DIRECTIONS  6                #define STEPS       4            #elif QUALITY_HIGH                #define DIRECTIONS  8                #define STEPS       4            #elif QUALITY_HIGHEST                #define DIRECTIONS  8                #define STEPS       6            #else                #define DIRECTIONS  1                #define STEPS       1            #endif            #define DEINTERLEAVED            #pragma vertex Vert_Default            #pragma fragment AO_Frag            #include "HBAO_AO.cginc"			ENDCG		}        // 2        Pass {            Name "HBAO - Deinterleave Depth"            CGPROGRAM            #pragma vertex Vert_Default            #pragma fragment DeinterleaveDepth_Frag            #include "HBAO_Deinterleaving.cginc"            ENDCG        }		// 3        Pass {            Name "HBAO - Deinterleave Normals"            CGPROGRAM            #pragma multi_compile_local __ ORTHOGRAPHIC_PROJECTION            #pragma multi_compile_local __ NORMALS_CAMERA NORMALS_RECONSTRUCT            #pragma vertex Vert_Default            #pragma fragment DeinterleaveNormals_Frag            #include "HBAO_Deinterleaving.cginc"            ENDCG		}		// 4		Pass {            Name "HBAO - Atlas Deinterleaved AO"			CGPROGRAM            #pragma vertex Vert_Atlas            #pragma fragment Frag            half4 Frag(Varyings input) : SV_Target            {                UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);                return UNITY_SAMPLE_SCREENSPACE_TEXTURE(_MainTex, input.uv);            }			ENDCG		}		// 5		Pass {            Name "HBAO - Reinterleave AO"			CGPROGRAM            #pragma vertex Vert_UVTransform            #pragma fragment ReinterleaveAO_Frag            #include "HBAO_Deinterleaving.cginc"			ENDCG		}		// 6		Pass {            Name "HBAO - Blur"			CGPROGRAM            #pragma multi_compile_local __ ORTHOGRAPHIC_PROJECTION            #pragma multi_compile_local __ COLOR_BLEEDING            #pragma multi_compile_local BLUR_RADIUS_2 BLUR_RADIUS_3 BLUR_RADIUS_4 BLUR_RADIUS_5            #if BLUR_RADIUS_2                #define KERNEL_RADIUS  2            #elif BLUR_RADIUS_3                #define KERNEL_RADIUS  3            #elif BLUR_RADIUS_4                #define KERNEL_RADIUS  4            #elif BLUR_RADIUS_5                #define KERNEL_RADIUS  5            #endif            #pragma vertex Vert_Default            #pragma fragment Blur_Frag            #include "HBAO_Blur.cginc"			ENDCG		}        // 7        Pass {            Name "HBAO - Temporal Filter"            CGPROGRAM            #pragma multi_compile_local __ COLOR_BLEEDING            #pragma multi_compile_local __ VARIANCE_CLIPPING_4TAP VARIANCE_CLIPPING_8TAP            #pragma vertex Vert_Default            #pragma fragment TemporalFilter_Frag            #include "HBAO_TemporalFilter.cginc"            ENDCG        }        // 8        Pass {            Name "HBAO - Copy"            CGPROGRAM            #pragma vertex Vert_Default            #pragma fragment Frag            half4 Frag(Varyings input) : SV_Target            {                UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);                return UNITY_SAMPLE_SCREENSPACE_TEXTURE(_MainTex, input.uv);            }            ENDCG        }        // 9        Pass {            Name "HBAO - Composite"            ColorMask RGB            CGPROGRAM            #pragma multi_compile_local __ COLOR_BLEEDING            #pragma multi_compile_local __ MULTIBOUNCE            #pragma multi_compile_local __ DEBUG_AO DEBUG_COLORBLEEDING DEBUG_NOAO_AO DEBUG_AO_AOONLY DEBUG_NOAO_AOONLY            #pragma vertex Vert_UVTransform            #pragma fragment Composite_Frag            #include "HBAO_Composite.cginc"            ENDCG        }        // 10        Pass {            Name "HBAO - Composite AfterLighting"            CGPROGRAM            #pragma multi_compile_local __ COLOR_BLEEDING            #pragma multi_compile_local __ MULTIBOUNCE            #pragma multi_compile_local __ LIGHTING_LOG_ENCODED            #pragma vertex Vert_Default            #pragma fragment Composite_Frag            #include "HBAO_Composite.cginc"            ENDCG        }        // 11        Pass {            Name "HBAO - Composite BeforeReflections"            CGPROGRAM            #pragma multi_compile_local __ COLOR_BLEEDING            #pragma multi_compile_local __ LIGHTING_LOG_ENCODED            #pragma vertex Vert_Default            #pragma fragment Composite_Lit_Frag            #include "HBAO_Composite.cginc"            ENDCG        }        // 12        Pass {            Name "HBAO - Debug ViewNormals"            ColorMask RGB            CGPROGRAM            #pragma multi_compile_local __ ORTHOGRAPHIC_PROJECTION            #pragma multi_compile_local __ NORMALS_CAMERA NORMALS_RECONSTRUCT            #pragma vertex Vert_UVTransform            #pragma fragment AO_Frag            #define DIRECTIONS		1            #define STEPS			1            #define DEBUG_VIEWNORMALS            #include "HBAO_AO.cginc"            ENDCG        }	}	FallBack off}
 |