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