No Description
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.

StencilDeferred.shader 17KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475
  1. Shader "Hidden/Universal Render Pipeline/StencilDeferred"
  2. {
  3. Properties {
  4. _StencilRef ("StencilRef", Int) = 0
  5. _StencilReadMask ("StencilReadMask", Int) = 0
  6. _StencilWriteMask ("StencilWriteMask", Int) = 0
  7. _LitPunctualStencilRef ("LitPunctualStencilWriteMask", Int) = 0
  8. _LitPunctualStencilReadMask ("LitPunctualStencilReadMask", Int) = 0
  9. _LitPunctualStencilWriteMask ("LitPunctualStencilWriteMask", Int) = 0
  10. _SimpleLitPunctualStencilRef ("SimpleLitPunctualStencilWriteMask", Int) = 0
  11. _SimpleLitPunctualStencilReadMask ("SimpleLitPunctualStencilReadMask", Int) = 0
  12. _SimpleLitPunctualStencilWriteMask ("SimpleLitPunctualStencilWriteMask", Int) = 0
  13. _LitDirStencilRef ("LitDirStencilRef", Int) = 0
  14. _LitDirStencilReadMask ("LitDirStencilReadMask", Int) = 0
  15. _LitDirStencilWriteMask ("LitDirStencilWriteMask", Int) = 0
  16. _SimpleLitDirStencilRef ("SimpleLitDirStencilRef", Int) = 0
  17. _SimpleLitDirStencilReadMask ("SimpleLitDirStencilReadMask", Int) = 0
  18. _SimpleLitDirStencilWriteMask ("SimpleLitDirStencilWriteMask", Int) = 0
  19. _ClearStencilRef ("ClearStencilRef", Int) = 0
  20. _ClearStencilReadMask ("ClearStencilReadMask", Int) = 0
  21. _ClearStencilWriteMask ("ClearStencilWriteMask", Int) = 0
  22. }
  23. SubShader
  24. {
  25. Tags { "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline"}
  26. // 0 - Stencil pass
  27. Pass
  28. {
  29. Name "Stencil Volume"
  30. // -------------------------------------
  31. // Render State Commands
  32. ZTest LEQual
  33. ZWrite Off
  34. ZClip false
  35. Cull Off
  36. ColorMask 0
  37. // -------------------------------------
  38. // Stencil Settings
  39. Stencil {
  40. Ref [_StencilRef]
  41. ReadMask [_StencilReadMask]
  42. WriteMask [_StencilWriteMask]
  43. CompFront NotEqual
  44. PassFront Keep
  45. ZFailFront Invert
  46. CompBack NotEqual
  47. PassBack Keep
  48. ZFailBack Invert
  49. }
  50. HLSLPROGRAM
  51. #pragma target 4.5
  52. // Deferred Rendering Path does not support the OpenGL-based graphics API:
  53. // Desktop OpenGL, OpenGL ES 3.0, WebGL 2.0.
  54. #pragma exclude_renderers gles3 glcore
  55. // -------------------------------------
  56. // Shader Stages
  57. #pragma vertex Vertex
  58. #pragma fragment FragWhite
  59. // -------------------------------------
  60. // Universal Pipeline keywords
  61. #pragma multi_compile_vertex _ _SPOT
  62. // -------------------------------------
  63. // Includes
  64. #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/Utils/StencilDeferred.hlsl"
  65. ENDHLSL
  66. }
  67. // 1 - Deferred Punctual Light (Lit)
  68. Pass
  69. {
  70. Name "Deferred Punctual Light (Lit)"
  71. // -------------------------------------
  72. // Render State Commands
  73. ZTest GEqual
  74. ZWrite Off
  75. ZClip false
  76. Cull Front
  77. Blend One One, Zero One
  78. BlendOp Add, Add
  79. // -------------------------------------
  80. // Stencil Settings
  81. Stencil {
  82. Ref [_LitPunctualStencilRef]
  83. ReadMask [_LitPunctualStencilReadMask]
  84. WriteMask [_LitPunctualStencilWriteMask]
  85. Comp Equal
  86. Pass Zero
  87. Fail Keep
  88. ZFail Keep
  89. }
  90. HLSLPROGRAM
  91. #pragma target 4.5
  92. // Deferred Rendering Path does not support the OpenGL-based graphics API:
  93. // Desktop OpenGL, OpenGL ES 3.0, WebGL 2.0.
  94. #pragma exclude_renderers gles3 glcore
  95. // -------------------------------------
  96. // Shader Stages
  97. #pragma vertex Vertex
  98. #pragma fragment DeferredShading
  99. // -------------------------------------
  100. // Defines
  101. #define _LIT
  102. // -------------------------------------
  103. // Universal Pipeline keywords
  104. #pragma multi_compile _POINT _SPOT
  105. #pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS
  106. #pragma multi_compile_fragment _ _SHADOWS_SOFT _SHADOWS_SOFT_LOW _SHADOWS_SOFT_MEDIUM _SHADOWS_SOFT_HIGH
  107. #pragma multi_compile_fragment _ LIGHTMAP_SHADOW_MIXING
  108. #pragma multi_compile_fragment _ SHADOWS_SHADOWMASK
  109. #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT
  110. #pragma multi_compile_fragment _ _DEFERRED_MIXED_LIGHTING
  111. #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION
  112. #pragma multi_compile_fragment _ _RENDER_PASS_ENABLED
  113. #pragma multi_compile_fragment _ _LIGHT_COOKIES
  114. #pragma multi_compile _ _LIGHT_LAYERS
  115. // -------------------------------------
  116. // Includes
  117. #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/Utils/StencilDeferred.hlsl"
  118. ENDHLSL
  119. }
  120. // 2 - Deferred Punctual Light (SimpleLit)
  121. Pass
  122. {
  123. Name "Deferred Punctual Light (SimpleLit)"
  124. // -------------------------------------
  125. // Render State Commands
  126. ZTest GEqual
  127. ZWrite Off
  128. ZClip false
  129. Cull Front
  130. Blend One One, Zero One
  131. BlendOp Add, Add
  132. // -------------------------------------
  133. // Stencil Settings
  134. Stencil {
  135. Ref [_SimpleLitPunctualStencilRef]
  136. ReadMask [_SimpleLitPunctualStencilReadMask]
  137. WriteMask [_SimpleLitPunctualStencilWriteMask]
  138. CompBack Equal
  139. PassBack Zero
  140. FailBack Keep
  141. ZFailBack Keep
  142. }
  143. HLSLPROGRAM
  144. #pragma target 4.5
  145. // Deferred Rendering Path does not support the OpenGL-based graphics API:
  146. // Desktop OpenGL, OpenGL ES 3.0, WebGL 2.0.
  147. #pragma exclude_renderers gles3 glcore
  148. // -------------------------------------
  149. // Shader Stages
  150. #pragma vertex Vertex
  151. #pragma fragment DeferredShading
  152. // -------------------------------------
  153. // Defines
  154. #define _SIMPLELIT
  155. // -------------------------------------
  156. // Universal Pipeline keywords
  157. #pragma multi_compile _POINT _SPOT
  158. #pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS
  159. #pragma multi_compile_fragment _ _SHADOWS_SOFT _SHADOWS_SOFT_LOW _SHADOWS_SOFT_MEDIUM _SHADOWS_SOFT_HIGH
  160. #pragma multi_compile_fragment _ LIGHTMAP_SHADOW_MIXING
  161. #pragma multi_compile_fragment _ SHADOWS_SHADOWMASK
  162. #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT
  163. #pragma multi_compile_fragment _ _DEFERRED_MIXED_LIGHTING
  164. #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION
  165. #pragma multi_compile_fragment _ _RENDER_PASS_ENABLED
  166. #pragma multi_compile_fragment _ _LIGHT_COOKIES
  167. #pragma multi_compile _ _LIGHT_LAYERS
  168. // -------------------------------------
  169. // Includes
  170. #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/Utils/StencilDeferred.hlsl"
  171. ENDHLSL
  172. }
  173. // 3 - Deferred Directional Light (Lit)
  174. Pass
  175. {
  176. Name "Deferred Directional Light (Lit)"
  177. // -------------------------------------
  178. // Render State Commands
  179. ZTest NotEqual
  180. ZWrite Off
  181. Cull Off
  182. Blend One SrcAlpha, Zero One
  183. BlendOp Add, Add
  184. // -------------------------------------
  185. // Stencil Settings
  186. Stencil {
  187. Ref [_LitDirStencilRef]
  188. ReadMask [_LitDirStencilReadMask]
  189. WriteMask [_LitDirStencilWriteMask]
  190. Comp Equal
  191. Pass Keep
  192. Fail Keep
  193. ZFail Keep
  194. }
  195. HLSLPROGRAM
  196. #pragma target 4.5
  197. // Deferred Rendering Path does not support the OpenGL-based graphics API:
  198. // Desktop OpenGL, OpenGL ES 3.0, WebGL 2.0.
  199. #pragma exclude_renderers gles3 glcore
  200. // -------------------------------------
  201. // Shader Stages
  202. #pragma vertex Vertex
  203. #pragma fragment DeferredShading
  204. // -------------------------------------
  205. // Defines
  206. #define _LIT
  207. #define _DIRECTIONAL
  208. // -------------------------------------
  209. // Universal Pipeline keywords
  210. #pragma multi_compile_fragment _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN
  211. #pragma multi_compile_fragment _ _DEFERRED_MAIN_LIGHT
  212. #pragma multi_compile_fragment _ _DEFERRED_FIRST_LIGHT
  213. #pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS
  214. #pragma multi_compile_fragment _ _SHADOWS_SOFT _SHADOWS_SOFT_LOW _SHADOWS_SOFT_MEDIUM _SHADOWS_SOFT_HIGH
  215. #pragma multi_compile_fragment _ LIGHTMAP_SHADOW_MIXING
  216. #pragma multi_compile_fragment _ SHADOWS_SHADOWMASK
  217. #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT
  218. #pragma multi_compile_fragment _ _DEFERRED_MIXED_LIGHTING
  219. #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION
  220. #pragma multi_compile_fragment _ _RENDER_PASS_ENABLED
  221. #pragma multi_compile_fragment _ _LIGHT_COOKIES
  222. #pragma multi_compile _ _LIGHT_LAYERS
  223. // -------------------------------------
  224. // Includes
  225. #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/Utils/StencilDeferred.hlsl"
  226. ENDHLSL
  227. }
  228. // 4 - Deferred Directional Light (SimpleLit)
  229. Pass
  230. {
  231. Name "Deferred Directional Light (SimpleLit)"
  232. // -------------------------------------
  233. // Render State Commands
  234. ZTest NotEqual
  235. ZWrite Off
  236. Cull Off
  237. Blend One SrcAlpha, Zero One
  238. BlendOp Add, Add
  239. // -------------------------------------
  240. // Stencil Settings
  241. Stencil {
  242. Ref [_SimpleLitDirStencilRef]
  243. ReadMask [_SimpleLitDirStencilReadMask]
  244. WriteMask [_SimpleLitDirStencilWriteMask]
  245. Comp Equal
  246. Pass Keep
  247. Fail Keep
  248. ZFail Keep
  249. }
  250. HLSLPROGRAM
  251. #pragma target 4.5
  252. // Deferred Rendering Path does not support the OpenGL-based graphics API:
  253. // Desktop OpenGL, OpenGL ES 3.0, WebGL 2.0.
  254. #pragma exclude_renderers gles3 glcore
  255. // -------------------------------------
  256. // Shader Stages
  257. #pragma vertex Vertex
  258. #pragma fragment DeferredShading
  259. // -------------------------------------
  260. // Universal Pipeline keywords
  261. #define _SIMPLELIT
  262. #define _DIRECTIONAL
  263. // -------------------------------------
  264. // Universal Pipeline keywords
  265. #pragma multi_compile _ _LIGHT_LAYERS
  266. #pragma multi_compile_fragment _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN
  267. #pragma multi_compile_fragment _ _DEFERRED_MAIN_LIGHT
  268. #pragma multi_compile_fragment _ _DEFERRED_FIRST_LIGHT
  269. #pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS
  270. #pragma multi_compile_fragment _ _SHADOWS_SOFT _SHADOWS_SOFT_LOW _SHADOWS_SOFT_MEDIUM _SHADOWS_SOFT_HIGH
  271. #pragma multi_compile_fragment _ LIGHTMAP_SHADOW_MIXING
  272. #pragma multi_compile_fragment _ SHADOWS_SHADOWMASK
  273. #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT
  274. #pragma multi_compile_fragment _ _DEFERRED_MIXED_LIGHTING
  275. #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION
  276. #pragma multi_compile_fragment _ _RENDER_PASS_ENABLED
  277. #pragma multi_compile_fragment _ _LIGHT_COOKIES
  278. // -------------------------------------
  279. // Includes
  280. #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/Utils/StencilDeferred.hlsl"
  281. ENDHLSL
  282. }
  283. // 5 - Legacy fog
  284. Pass
  285. {
  286. Name "Fog"
  287. // -------------------------------------
  288. // Render State Commands
  289. ZTest NotEqual
  290. ZWrite Off
  291. Cull Off
  292. Blend OneMinusSrcAlpha SrcAlpha, Zero One
  293. BlendOp Add, Add
  294. HLSLPROGRAM
  295. #pragma target 4.5
  296. // Deferred Rendering Path does not support the OpenGL-based graphics API:
  297. // Desktop OpenGL, OpenGL ES 3.0, WebGL 2.0.
  298. #pragma exclude_renderers gles3 glcore
  299. // -------------------------------------
  300. // Shader Stages
  301. #pragma vertex Vertex
  302. #pragma fragment FragFog
  303. // -------------------------------------
  304. // Defines
  305. #define _FOG
  306. // -------------------------------------
  307. // Universal Pipeline keywords
  308. #pragma multi_compile FOG_LINEAR FOG_EXP FOG_EXP2
  309. #pragma multi_compile_fragment _ _RENDER_PASS_ENABLED
  310. // -------------------------------------
  311. // Includes
  312. #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/Utils/StencilDeferred.hlsl"
  313. ENDHLSL
  314. }
  315. // 6 - Clear stencil partial
  316. // This pass clears stencil between camera stacks rendering.
  317. // This is because deferred renderer encodes material properties in the 4 highest bits of the stencil buffer,
  318. // but we don't want to keep this information between camera stacks.
  319. Pass
  320. {
  321. Name "ClearStencilPartial"
  322. // -------------------------------------
  323. // Render State Commands
  324. ColorMask 0
  325. ZTest NotEqual
  326. ZWrite Off
  327. Cull Off
  328. // -------------------------------------
  329. // Stencil Settings
  330. Stencil {
  331. Ref [_ClearStencilRef]
  332. ReadMask [_ClearStencilReadMask]
  333. WriteMask [_ClearStencilWriteMask]
  334. Comp NotEqual
  335. Pass Zero
  336. Fail Keep
  337. ZFail Keep
  338. }
  339. HLSLPROGRAM
  340. #pragma target 4.5
  341. // Deferred Rendering Path does not support the OpenGL-based graphics API:
  342. // Desktop OpenGL, OpenGL ES 3.0, WebGL 2.0.
  343. #pragma exclude_renderers gles3 glcore
  344. // -------------------------------------
  345. // Shader Stages
  346. #pragma vertex Vertex
  347. #pragma fragment FragWhite
  348. // -------------------------------------
  349. // Defines
  350. #define _CLEAR_STENCIL_PARTIAL
  351. // -------------------------------------
  352. // Includes
  353. #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/Utils/StencilDeferred.hlsl"
  354. ENDHLSL
  355. }
  356. // 7 - SSAO Only
  357. // This pass only runs when there is no fullscreen deferred light rendered (no directional light). It will adjust indirect/baked lighting with realtime occlusion
  358. // by rendering just before deferred shading pass.
  359. // This pass is also completely discarded from vertex shader when SSAO renderer feature is not enabled.
  360. Pass
  361. {
  362. Name "SSAOOnly"
  363. // -------------------------------------
  364. // Render State Commands
  365. ZTest NotEqual
  366. ZWrite Off
  367. Cull Off
  368. Blend One SrcAlpha, Zero One
  369. BlendOp Add, Add
  370. HLSLPROGRAM
  371. #pragma target 4.5
  372. // Deferred Rendering Path does not support the OpenGL-based graphics API:
  373. // Desktop OpenGL, OpenGL ES 3.0, WebGL 2.0.
  374. #pragma exclude_renderers gles3 glcore
  375. // -------------------------------------
  376. // Shader Stages
  377. #pragma vertex Vertex
  378. #pragma fragment FragSSAOOnly
  379. // -------------------------------------
  380. // Defines
  381. #define _SSAO_ONLY
  382. // -------------------------------------
  383. // Universal Pipeline keywords
  384. #pragma multi_compile _ _SCREEN_SPACE_OCCLUSION
  385. // -------------------------------------
  386. // Includes
  387. #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/Utils/StencilDeferred.hlsl"
  388. ENDHLSL
  389. }
  390. }
  391. FallBack "Hidden/Universal Render Pipeline/FallbackError"
  392. }