DepthOfField.shader 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. Shader "Hidden/PostProcessing/DepthOfField"
  2. {
  3. // SubShader with SM 5.0 support
  4. // DX11+, OpenGL 4.3+, OpenGL ES 3.1+AEP, Vulkan, consoles
  5. // Gather intrinsics are used to reduce texture sample count.
  6. SubShader
  7. {
  8. Cull Off ZWrite Off ZTest Always
  9. Pass // 0
  10. {
  11. Name "CoC Calculation"
  12. HLSLPROGRAM
  13. #pragma target 3.5
  14. #pragma vertex VertDefault
  15. #pragma fragment FragCoC
  16. #include "DepthOfField.hlsl"
  17. ENDHLSL
  18. }
  19. Pass // 1
  20. {
  21. Name "CoC Temporal Filter"
  22. HLSLPROGRAM
  23. #pragma target 5.0
  24. #pragma vertex VertDefault
  25. #pragma fragment FragTempFilter
  26. #include "DepthOfField.hlsl"
  27. ENDHLSL
  28. }
  29. Pass // 2
  30. {
  31. Name "Downsample and Prefilter"
  32. HLSLPROGRAM
  33. #pragma target 5.0
  34. #pragma vertex VertDefault
  35. #pragma fragment FragPrefilter
  36. #include "DepthOfField.hlsl"
  37. ENDHLSL
  38. }
  39. Pass // 3
  40. {
  41. Name "Bokeh Filter (small)"
  42. HLSLPROGRAM
  43. #pragma target 3.5
  44. #pragma vertex VertDefault
  45. #pragma fragment FragBlur
  46. #define KERNEL_SMALL
  47. #include "DepthOfField.hlsl"
  48. ENDHLSL
  49. }
  50. Pass // 4
  51. {
  52. Name "Bokeh Filter (medium)"
  53. HLSLPROGRAM
  54. #pragma target 3.5
  55. #pragma vertex VertDefault
  56. #pragma fragment FragBlur
  57. #define KERNEL_MEDIUM
  58. #include "DepthOfField.hlsl"
  59. ENDHLSL
  60. }
  61. Pass // 5
  62. {
  63. Name "Bokeh Filter (large)"
  64. HLSLPROGRAM
  65. #pragma target 3.5
  66. #pragma vertex VertDefault
  67. #pragma fragment FragBlur
  68. #define KERNEL_LARGE
  69. #include "DepthOfField.hlsl"
  70. ENDHLSL
  71. }
  72. Pass // 6
  73. {
  74. Name "Bokeh Filter (very large)"
  75. HLSLPROGRAM
  76. #pragma target 3.5
  77. #pragma vertex VertDefault
  78. #pragma fragment FragBlur
  79. #define KERNEL_VERYLARGE
  80. #include "DepthOfField.hlsl"
  81. ENDHLSL
  82. }
  83. Pass // 7
  84. {
  85. Name "Postfilter"
  86. HLSLPROGRAM
  87. #pragma target 3.5
  88. #pragma vertex VertDefault
  89. #pragma fragment FragPostBlur
  90. #include "DepthOfField.hlsl"
  91. ENDHLSL
  92. }
  93. Pass // 8
  94. {
  95. Name "Combine"
  96. HLSLPROGRAM
  97. #pragma target 3.5
  98. #pragma vertex VertDefault
  99. #pragma fragment FragCombine
  100. #include "DepthOfField.hlsl"
  101. ENDHLSL
  102. }
  103. Pass // 9
  104. {
  105. Name "Debug Overlay"
  106. HLSLPROGRAM
  107. #pragma target 3.5
  108. #pragma vertex VertDefault
  109. #pragma fragment FragDebugOverlay
  110. #include "DepthOfField.hlsl"
  111. ENDHLSL
  112. }
  113. }
  114. // Fallback SubShader with SM 3.5
  115. // DX11+, OpenGL 3.2+, OpenGL ES 3+, Metal, Vulkan, consoles
  116. SubShader
  117. {
  118. Cull Off ZWrite Off ZTest Always
  119. Pass // 0
  120. {
  121. Name "CoC Calculation"
  122. HLSLPROGRAM
  123. #pragma target 3.5
  124. #pragma vertex VertDefault
  125. #pragma fragment FragCoC
  126. #include "DepthOfField.hlsl"
  127. ENDHLSL
  128. }
  129. Pass // 1
  130. {
  131. Name "CoC Temporal Filter"
  132. HLSLPROGRAM
  133. #pragma target 3.5
  134. #pragma vertex VertDefault
  135. #pragma fragment FragTempFilter
  136. #include "DepthOfField.hlsl"
  137. ENDHLSL
  138. }
  139. Pass // 2
  140. {
  141. Name "Downsample and Prefilter"
  142. HLSLPROGRAM
  143. #pragma target 3.5
  144. #pragma vertex VertDefault
  145. #pragma fragment FragPrefilter
  146. #include "DepthOfField.hlsl"
  147. ENDHLSL
  148. }
  149. Pass // 3
  150. {
  151. Name "Bokeh Filter (small)"
  152. HLSLPROGRAM
  153. #pragma target 3.5
  154. #pragma vertex VertDefault
  155. #pragma fragment FragBlur
  156. #define KERNEL_SMALL
  157. #include "DepthOfField.hlsl"
  158. ENDHLSL
  159. }
  160. Pass // 4
  161. {
  162. Name "Bokeh Filter (medium)"
  163. HLSLPROGRAM
  164. #pragma target 3.5
  165. #pragma vertex VertDefault
  166. #pragma fragment FragBlur
  167. #define KERNEL_MEDIUM
  168. #include "DepthOfField.hlsl"
  169. ENDHLSL
  170. }
  171. Pass // 5
  172. {
  173. Name "Bokeh Filter (large)"
  174. HLSLPROGRAM
  175. #pragma target 3.5
  176. #pragma vertex VertDefault
  177. #pragma fragment FragBlur
  178. #define KERNEL_LARGE
  179. #include "DepthOfField.hlsl"
  180. ENDHLSL
  181. }
  182. Pass // 6
  183. {
  184. Name "Bokeh Filter (very large)"
  185. HLSLPROGRAM
  186. #pragma target 3.5
  187. #pragma vertex VertDefault
  188. #pragma fragment FragBlur
  189. #define KERNEL_VERYLARGE
  190. #include "DepthOfField.hlsl"
  191. ENDHLSL
  192. }
  193. Pass // 7
  194. {
  195. Name "Postfilter"
  196. HLSLPROGRAM
  197. #pragma target 3.5
  198. #pragma vertex VertDefault
  199. #pragma fragment FragPostBlur
  200. #include "DepthOfField.hlsl"
  201. ENDHLSL
  202. }
  203. Pass // 8
  204. {
  205. Name "Combine"
  206. HLSLPROGRAM
  207. #pragma target 3.5
  208. #pragma vertex VertDefault
  209. #pragma fragment FragCombine
  210. #include "DepthOfField.hlsl"
  211. ENDHLSL
  212. }
  213. Pass // 9
  214. {
  215. Name "Debug Overlay"
  216. HLSLPROGRAM
  217. #pragma target 3.5
  218. #pragma vertex VertDefault
  219. #pragma fragment FragDebugOverlay
  220. #include "DepthOfField.hlsl"
  221. ENDHLSL
  222. }
  223. }
  224. }