| 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
 
- }
 
 
  |