Ei kuvausta
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ScreenSpaceAmbientOcclusion.shader 7.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. Shader "Hidden/Universal Render Pipeline/ScreenSpaceAmbientOcclusion"
  2. {
  3. HLSLINCLUDE
  4. #pragma editor_sync_compilation
  5. #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
  6. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
  7. #include "Packages/com.unity.render-pipelines.core/Runtime/Utilities/Blit.hlsl"
  8. ENDHLSL
  9. SubShader
  10. {
  11. Tags
  12. {
  13. "RenderType" = "Opaque"
  14. "RenderPipeline" = "UniversalPipeline"
  15. }
  16. Cull Off
  17. ZWrite Off
  18. ZTest Always
  19. // ------------------------------------------------------------------
  20. // Ambient Occlusion
  21. // ------------------------------------------------------------------
  22. // 0 - Occlusion estimation
  23. Pass
  24. {
  25. Name "SSAO_Occlusion"
  26. ZTest Always
  27. ZWrite Off
  28. Cull Off
  29. HLSLPROGRAM
  30. #pragma vertex Vert
  31. #pragma fragment SSAO
  32. #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT
  33. #pragma multi_compile_local_fragment _INTERLEAVED_GRADIENT _BLUE_NOISE
  34. #pragma multi_compile_local_fragment _SOURCE_DEPTH_LOW _SOURCE_DEPTH_MEDIUM _SOURCE_DEPTH_HIGH _SOURCE_DEPTH_NORMALS
  35. #pragma multi_compile_local_fragment _ _ORTHOGRAPHIC
  36. #pragma multi_compile_local_fragment _SAMPLE_COUNT_LOW _SAMPLE_COUNT_MEDIUM _SAMPLE_COUNT_HIGH
  37. #include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl"
  38. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SSAO.hlsl"
  39. ENDHLSL
  40. }
  41. // ------------------------------------------------------------------
  42. // Bilateral Blur
  43. // ------------------------------------------------------------------
  44. // 1 - Horizontal
  45. Pass
  46. {
  47. Name "SSAO_Bilateral_HorizontalBlur"
  48. HLSLPROGRAM
  49. #pragma vertex Vert
  50. #pragma fragment HorizontalBlur
  51. #include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl"
  52. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SSAO.hlsl"
  53. ENDHLSL
  54. }
  55. // 2 - Vertical
  56. Pass
  57. {
  58. Name "SSAO_Bilateral_VerticalBlur"
  59. HLSLPROGRAM
  60. #pragma vertex Vert
  61. #pragma fragment VerticalBlur
  62. #include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl"
  63. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SSAO.hlsl"
  64. ENDHLSL
  65. }
  66. // 3 - Final
  67. Pass
  68. {
  69. Name "SSAO_Bilateral_FinalBlur"
  70. HLSLPROGRAM
  71. #pragma vertex Vert
  72. #pragma fragment FinalBlur
  73. #include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl"
  74. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SSAO.hlsl"
  75. ENDHLSL
  76. }
  77. // 4 - After Opaque
  78. Pass
  79. {
  80. Name "SSAO_Bilateral_FinalBlur_AfterOpaque"
  81. ZTest Off
  82. ZWrite Off
  83. Cull Off
  84. Blend One SrcAlpha, Zero One
  85. BlendOp Add, Add
  86. HLSLPROGRAM
  87. #pragma vertex Vert
  88. #pragma fragment FragBilateralAfterOpaque
  89. #include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl"
  90. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SSAO.hlsl"
  91. half4 FragBilateralAfterOpaque(Varyings input) : SV_Target
  92. {
  93. half ao = FinalBlur(input).r;
  94. return half4(0.0, 0.0, 0.0, ao);
  95. }
  96. ENDHLSL
  97. }
  98. // ------------------------------------------------------------------
  99. // Gaussian Blur
  100. // ------------------------------------------------------------------
  101. // 5 - Horizontal
  102. Pass
  103. {
  104. Name "SSAO_Gaussian_HorizontalBlur"
  105. HLSLPROGRAM
  106. #pragma vertex Vert
  107. #pragma fragment HorizontalGaussianBlur
  108. #include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl"
  109. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SSAO.hlsl"
  110. ENDHLSL
  111. }
  112. // 6 - Vertical
  113. Pass
  114. {
  115. Name "SSAO_Gaussian_VerticalBlur"
  116. HLSLPROGRAM
  117. #pragma vertex Vert
  118. #pragma fragment VerticalGaussianBlur
  119. #include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl"
  120. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SSAO.hlsl"
  121. ENDHLSL
  122. }
  123. // 7 - After Opaque
  124. Pass
  125. {
  126. Name "SSAO_Gaussian_VerticalBlur_AfterOpaque"
  127. ZTest Off
  128. ZWrite Off
  129. Cull Off
  130. Blend One SrcAlpha, Zero One
  131. BlendOp Add, Add
  132. HLSLPROGRAM
  133. #pragma vertex Vert
  134. #pragma fragment FragGaussianAfterOpaque
  135. #include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl"
  136. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SSAO.hlsl"
  137. half4 FragGaussianAfterOpaque(Varyings input) : SV_Target
  138. {
  139. half ao = VerticalGaussianBlur(input);
  140. return half4(0.0, 0.0, 0.0, ao);
  141. }
  142. ENDHLSL
  143. }
  144. // ------------------------------------------------------------------
  145. // Kawase Blur
  146. // ------------------------------------------------------------------
  147. // 8 - Kawase Blur
  148. Pass
  149. {
  150. Name "SSAO_Kawase"
  151. HLSLPROGRAM
  152. #pragma vertex Vert
  153. #pragma fragment KawaseBlur
  154. #include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl"
  155. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SSAO.hlsl"
  156. ENDHLSL
  157. }
  158. // 9 - After Opaque Kawase
  159. Pass
  160. {
  161. Name "SSAO_Kawase_AfterOpaque"
  162. ZTest Off
  163. ZWrite Off
  164. Cull Off
  165. Blend One SrcAlpha, Zero One
  166. BlendOp Add, Add
  167. HLSLPROGRAM
  168. #pragma vertex Vert
  169. #pragma fragment FragKawaseAfterOpaque
  170. #include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl"
  171. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SSAO.hlsl"
  172. half4 FragKawaseAfterOpaque(Varyings input) : SV_Target
  173. {
  174. half ao = KawaseBlur(input);
  175. return half4(0.0, 0.0, 0.0, ao);
  176. }
  177. ENDHLSL
  178. }
  179. }
  180. }