InTerra_TerrainLit_Basemap_2023_1.shader 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458
  1. //NOTE! This file is based on Unity file "TerrainLit_Basemap.shader" which was used as a template for adding all the InTerra features.
  2. Shader "Hidden/InTerra/HDRP/TerrainLit_Basemap_2023_1"
  3. {
  4. Properties
  5. {
  6. // Following are builtin properties
  7. // Stencil state
  8. // Forward
  9. [HideInInspector] _StencilRef("_StencilRef", Int) = 0 // StencilUsage.Clear
  10. [HideInInspector] _StencilWriteMask("_StencilWriteMask", Int) = 3 // StencilUsage.RequiresDeferredLighting | StencilUsage.SubsurfaceScattering
  11. // GBuffer
  12. [HideInInspector] _StencilRefGBuffer("_StencilRefGBuffer", Int) = 2 // StencilUsage.RequiresDeferredLighting
  13. [HideInInspector] _StencilWriteMaskGBuffer("_StencilWriteMaskGBuffer", Int) = 3 // StencilUsage.RequiresDeferredLighting | StencilUsage.SubsurfaceScattering
  14. // Depth prepass
  15. [HideInInspector] _StencilRefDepth("_StencilRefDepth", Int) = 0 // Nothing
  16. [HideInInspector] _StencilWriteMaskDepth("_StencilWriteMaskDepth", Int) = 8 // StencilUsage.TraceReflectionRay
  17. // Blending state
  18. [HideInInspector] _ZWrite ("__zw", Float) = 1.0
  19. [HideInInspector] _CullMode("__cullmode", Float) = 2.0
  20. [HideInInspector] _ZTestDepthEqualForOpaque("_ZTestDepthEqualForOpaque", Int) = 4 // Less equal
  21. [HideInInspector] _ZTestGBuffer("_ZTestGBuffer", Int) = 4
  22. [HideInInspector] _TerrainHolesTexture("Holes Map (RGB)", 2D) = "white" {}
  23. // Caution: C# code in BaseLitUI.cs call LightmapEmissionFlagsProperty() which assume that there is an existing "_EmissionColor"
  24. // value that exist to identify if the GI emission need to be enabled.
  25. // In our case we don't use such a mechanism but need to keep the code quiet. We declare the value and always enable it.
  26. // TODO: Fix the code in legacy unity so we can customize the behavior for GI
  27. _EmissionColor("Color", Color) = (1, 1, 1)
  28. _MetallicTex("Metallic (RGB)", 2D) = "white" {}
  29. _Triplanar_MetallicAO("Metallic AO (RGB)", 2D) = "white" {}
  30. // HACK: GI Baking system relies on some properties existing in the shader ("_MainTex", "_Cutoff" and "_Color") for opacity handling, so we need to store our version of those parameters in the hard-coded name the GI baking system recognizes.
  31. _MainTex("Albedo", 2D) = "white" {}
  32. _Color("Color", Color) = (1,1,1,1)
  33. [ToggleUI] _SupportDecals("Support Decals", Float) = 1.0
  34. [ToggleUI] _ReceivesSSR("Receives SSR", Float) = 1.0
  35. }
  36. HLSLINCLUDE
  37. #pragma target 4.5
  38. #pragma only_renderers d3d11 playstation xboxone xboxseries vulkan metal switch
  39. #pragma shader_feature_local _DISABLE_DECALS
  40. #pragma shader_feature_local _TERRAIN_INSTANCED_PERPIXEL_NORMAL
  41. #pragma multi_compile _ _ALPHATEST_ON
  42. #define UNITY_2022_2_OR_NEWER
  43. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/Material/TerrainLit/TerrainLit_Basemap_Includes.hlsl"
  44. ENDHLSL
  45. SubShader
  46. {
  47. PackageRequirements { "com.unity.render-pipelines.high-definition":"[15.0.0,19.0.0]" }
  48. // This tags allow to use the shader replacement features
  49. Tags{ "RenderPipeline" = "HDRenderPipeline" "RenderType" = "Opaque" }
  50. // Caution: The outline selection in the editor use the vertex shader/hull/domain shader of the first pass declare. So it should not bethe meta pass.
  51. Pass
  52. {
  53. Name "GBuffer"
  54. Tags { "LightMode" = "GBuffer" } // This will be only for opaque object based on the RenderQueue index
  55. Cull [_CullMode]
  56. ZTest [_ZTestGBuffer]
  57. Stencil
  58. {
  59. WriteMask [_StencilWriteMaskGBuffer]
  60. Ref [_StencilRefGBuffer]
  61. Comp Always
  62. Pass Replace
  63. }
  64. HLSLPROGRAM
  65. // InTerra Keywords
  66. #pragma shader_feature_local __ _TERRAIN_TRIPLANAR_ONE _TERRAIN_TRIPLANAR
  67. //enable GPU instancing support
  68. #pragma multi_compile_instancing
  69. #pragma instancing_options assumeuniformscaling nomatrices nolightprobe nolightmap
  70. #pragma vertex Vert
  71. #pragma fragment Frag
  72. #pragma multi_compile _ LIGHTMAP_ON
  73. #pragma multi_compile _ DIRLIGHTMAP_COMBINED
  74. #pragma multi_compile _ DYNAMICLIGHTMAP_ON
  75. #pragma multi_compile_fragment _ SHADOWS_SHADOWMASK
  76. #pragma multi_compile_fragment _ PROBE_VOLUMES_L1 PROBE_VOLUMES_L2
  77. // Setup DECALS_OFF so the shader stripper can remove variants
  78. #pragma multi_compile_fragment DECALS_OFF DECALS_3RT DECALS_4RT
  79. #pragma multi_compile_fragment _ RENDERING_LAYERS
  80. #define SHADERPASS SHADERPASS_GBUFFER
  81. #include "InTerra_HDRP_DefinedGlobalKeywords.hlsl"
  82. #include "InTerra_TerrainLitTemplate.hlsl"
  83. #include "InTerra_TerrainLit_Basemap.hlsl"
  84. ENDHLSL
  85. }
  86. // Extracts information for lightmapping, GI (emission, albedo, ...)
  87. // This pass it not used during regular rendering.
  88. Pass
  89. {
  90. Name "META"
  91. Tags{ "LightMode" = "META" }
  92. Cull Off
  93. HLSLPROGRAM
  94. //enable GPU instancing support
  95. #pragma multi_compile_instancing
  96. #pragma instancing_options assumeuniformscaling nomatrices nolightprobe nolightmap
  97. #pragma vertex Vert
  98. #pragma fragment Frag
  99. // Lightmap memo
  100. // DYNAMICLIGHTMAP_ON is used when we have an "enlighten lightmap" ie a lightmap updated at runtime by enlighten.This lightmap contain indirect lighting from realtime lights and realtime emissive material.Offline baked lighting(from baked material / light,
  101. // both direct and indirect lighting) will hand up in the "regular" lightmap->LIGHTMAP_ON.
  102. #define SHADERPASS SHADERPASS_LIGHT_TRANSPORT
  103. #include "InTerra_HDRP_DefinedGlobalKeywords.hlsl"
  104. #include "InTerra_TerrainLitTemplate.hlsl"
  105. #include "InTerra_TerrainLit_Basemap.hlsl"
  106. ENDHLSL
  107. }
  108. Pass
  109. {
  110. Name "ShadowCaster"
  111. Tags{ "LightMode" = "ShadowCaster" }
  112. Cull[_CullMode]
  113. ZClip [_ZClip]
  114. ZWrite On
  115. ZTest LEqual
  116. ColorMask 0
  117. HLSLPROGRAM
  118. //enable GPU instancing support
  119. #pragma multi_compile_instancing
  120. #pragma instancing_options assumeuniformscaling nomatrices nolightprobe nolightmap
  121. #pragma vertex Vert
  122. #pragma fragment Frag
  123. #define SHADERPASS SHADERPASS_SHADOWS
  124. #include "InTerra_HDRP_DefinedGlobalKeywords.hlsl"
  125. #include "InTerra_TerrainLitTemplate.hlsl"
  126. #include "InTerra_TerrainLit_Basemap.hlsl"
  127. ENDHLSL
  128. }
  129. Pass
  130. {
  131. Name "DepthOnly"
  132. Tags{ "LightMode" = "DepthOnly" }
  133. Cull[_CullMode]
  134. // To be able to tag stencil with disableSSR information for forward
  135. Stencil
  136. {
  137. WriteMask [_StencilWriteMaskDepth]
  138. Ref [_StencilRefDepth]
  139. Comp Always
  140. Pass Replace
  141. }
  142. ZWrite On
  143. HLSLPROGRAM
  144. //enable GPU instancing support
  145. #pragma multi_compile_instancing
  146. #pragma instancing_options assumeuniformscaling nomatrices nolightprobe nolightmap
  147. #pragma vertex Vert
  148. #pragma fragment Frag
  149. // In deferred, depth only pass don't output anything.
  150. // In forward it output the normal buffer
  151. #pragma multi_compile _ WRITE_NORMAL_BUFFER
  152. #pragma multi_compile _ WRITE_DECAL_BUFFER WRITE_RENDERING_LAYER
  153. #pragma multi_compile _ WRITE_MSAA_DEPTH
  154. #define SHADERPASS SHADERPASS_DEPTH_ONLY
  155. #include "InTerra_HDRP_DefinedGlobalKeywords.hlsl"
  156. #include "InTerra_TerrainLitTemplate.hlsl"
  157. #include "InTerra_TerrainLit_Basemap.hlsl"
  158. ENDHLSL
  159. }
  160. Pass
  161. {
  162. Name "Forward"
  163. Tags{ "LightMode" = "Forward" } // This will be only for transparent object based on the RenderQueue index
  164. Stencil
  165. {
  166. WriteMask [_StencilWriteMask]
  167. Ref [_StencilRef]
  168. Comp Always
  169. Pass Replace
  170. }
  171. // In case of forward we want to have depth equal for opaque mesh
  172. ZTest [_ZTestDepthEqualForOpaque]
  173. ZWrite [_ZWrite]
  174. Cull [_CullMode]
  175. HLSLPROGRAM
  176. //enable GPU instancing support
  177. #pragma multi_compile_instancing
  178. #pragma instancing_options assumeuniformscaling nomatrices nolightprobe nolightmap
  179. #pragma vertex Vert
  180. #pragma fragment Frag
  181. #pragma multi_compile _ LIGHTMAP_ON
  182. #pragma multi_compile _ DIRLIGHTMAP_COMBINED
  183. #pragma multi_compile _ DYNAMICLIGHTMAP_ON
  184. #pragma multi_compile_fragment _ SHADOWS_SHADOWMASK
  185. #pragma multi_compile_fragment _ PROBE_VOLUMES_L1 PROBE_VOLUMES_L2
  186. #pragma multi_compile_fragment SCREEN_SPACE_SHADOWS_OFF SCREEN_SPACE_SHADOWS_ON
  187. // Setup DECALS_OFF so the shader stripper can remove variants
  188. #pragma multi_compile_fragment DECALS_OFF DECALS_3RT DECALS_4RT
  189. // Supported shadow modes per light type
  190. #pragma multi_compile_fragment PUNCTUAL_SHADOW_LOW PUNCTUAL_SHADOW_MEDIUM PUNCTUAL_SHADOW_HIGH
  191. #pragma multi_compile_fragment DIRECTIONAL_SHADOW_LOW DIRECTIONAL_SHADOW_MEDIUM DIRECTIONAL_SHADOW_HIGH
  192. #pragma multi_compile_fragment AREA_SHADOW_MEDIUM AREA_SHADOW_HIGH
  193. #pragma multi_compile USE_FPTL_LIGHTLIST USE_CLUSTERED_LIGHTLIST
  194. #define SHADERPASS SHADERPASS_FORWARD
  195. #include "InTerra_HDRP_DefinedGlobalKeywords.hlsl"
  196. #include "InTerra_TerrainLitTemplate.hlsl"
  197. #include "InTerra_TerrainLit_Basemap.hlsl"
  198. ENDHLSL
  199. }
  200. UsePass "Hidden/Nature/Terrain/Utilities/PICKING"
  201. UsePass "HDRP/TerrainLit/SceneSelectionPass"
  202. }
  203. SubShader
  204. {
  205. PackageRequirements { "com.unity.render-pipelines.high-definition":"[15.0.0,19.0.0]" }
  206. Tags{ "RenderPipeline" = "HDRenderPipeline" "RenderType" = "Opaque" }
  207. Pass
  208. {
  209. Name "IndirectDXR"
  210. Tags{ "LightMode" = "IndirectDXR" }
  211. HLSLPROGRAM
  212. #pragma only_renderers d3d11 xboxseries ps5
  213. #pragma raytracing surface_shader
  214. #pragma multi_compile _ LIGHTMAP_ON
  215. #pragma multi_compile _ DYNAMICLIGHTMAP_ON
  216. #pragma multi_compile _ PROBE_VOLUMES_L1 PROBE_VOLUMES_L2
  217. #pragma multi_compile _ DIRLIGHTMAP_COMBINED
  218. #pragma multi_compile DECALS_OFF DECALS_3RT DECALS_4RT
  219. #pragma multi_compile _ DECAL_SURFACE_GRADIENT
  220. #define PATH_TRACING_CLUSTERED_DECALS
  221. #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
  222. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/ShaderPass/FragInputs.hlsl"
  223. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/ShaderPass/ShaderPass.cs.hlsl"
  224. #define SHADERPASS SHADERPASS_RAYTRACING_INDIRECT
  225. // multi compile that allows us to strip the recursive code
  226. #pragma multi_compile _ MULTI_BOUNCE_INDIRECT
  227. #define SHADOW_LOW
  228. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/Material/TerrainLit/TerrainLitTemplateRayTracing.hlsl"
  229. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/Material/TerrainLit/TerrainLit_Basemap.hlsl"
  230. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/ShaderPass/ShaderPassRaytracingIndirect.hlsl"
  231. ENDHLSL
  232. }
  233. Pass
  234. {
  235. Name "ForwardDXR"
  236. Tags{ "LightMode" = "ForwardDXR" }
  237. HLSLPROGRAM
  238. #pragma only_renderers d3d11 xboxseries ps5
  239. #pragma raytracing surface_shader
  240. #pragma multi_compile _ LIGHTMAP_ON
  241. #pragma multi_compile _ DYNAMICLIGHTMAP_ON
  242. #pragma multi_compile _ PROBE_VOLUMES_L1 PROBE_VOLUMES_L2
  243. #pragma multi_compile _ DIRLIGHTMAP_COMBINED
  244. #pragma multi_compile DECALS_OFF DECALS_3RT DECALS_4RT
  245. #pragma multi_compile _ DECAL_SURFACE_GRADIENT
  246. #define PATH_TRACING_CLUSTERED_DECALS
  247. #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
  248. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/ShaderPass/FragInputs.hlsl"
  249. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/ShaderPass/ShaderPass.cs.hlsl"
  250. #define SHADERPASS SHADERPASS_RAYTRACING_FORWARD
  251. // multi compile that allows us to strip the recursive code
  252. #define SHADOW_LOW
  253. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/Material/TerrainLit/TerrainLitTemplateRayTracing.hlsl"
  254. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/Material/TerrainLit/TerrainLit_Basemap.hlsl"
  255. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/ShaderPass/ShaderPassRaytracingForward.hlsl"
  256. ENDHLSL
  257. }
  258. Pass
  259. {
  260. Name "GBufferDXR"
  261. Tags{ "LightMode" = "GBufferDXR" }
  262. HLSLPROGRAM
  263. #pragma only_renderers d3d11 xboxseries ps5
  264. #pragma raytracing surface_shader
  265. #pragma multi_compile _ LIGHTMAP_ON
  266. #pragma multi_compile _ DYNAMICLIGHTMAP_ON
  267. #pragma multi_compile _ PROBE_VOLUMES_L1 PROBE_VOLUMES_L2
  268. #pragma multi_compile _ DIRLIGHTMAP_COMBINED
  269. #pragma multi_compile DECALS_OFF DECALS_3RT DECALS_4RT
  270. #pragma multi_compile _ DECAL_SURFACE_GRADIENT
  271. #define PATH_TRACING_CLUSTERED_DECALS
  272. #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
  273. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/ShaderPass/FragInputs.hlsl"
  274. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/ShaderPass/ShaderPass.cs.hlsl"
  275. #define SHADERPASS SHADERPASS_RAYTRACING_GBUFFER
  276. #pragma multi_compile _ MINIMAL_GBUFFER
  277. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/Material/TerrainLit/TerrainLitTemplateRayTracing.hlsl"
  278. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/Material/TerrainLit/TerrainLit_Basemap.hlsl"
  279. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/ShaderPass/ShaderPassRaytracingGBuffer.hlsl"
  280. ENDHLSL
  281. }
  282. Pass
  283. {
  284. Name "VisibilityDXR"
  285. Tags{ "LightMode" = "VisibilityDXR" }
  286. HLSLPROGRAM
  287. #pragma only_renderers d3d11 xboxseries ps5
  288. #pragma raytracing surface_shader
  289. #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
  290. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/ShaderPass/FragInputs.hlsl"
  291. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/ShaderPass/ShaderPass.cs.hlsl"
  292. #define SHADERPASS SHADERPASS_RAYTRACING_VISIBILITY
  293. #pragma multi_compile _ TRANSPARENT_COLOR_SHADOW
  294. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/Material/TerrainLit/TerrainLitTemplateRayTracing.hlsl"
  295. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/Material/TerrainLit/TerrainLit_Basemap.hlsl"
  296. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/ShaderPass/ShaderPassRaytracingVisibility.hlsl"
  297. ENDHLSL
  298. }
  299. Pass
  300. {
  301. Name "DebugDXR"
  302. Tags{ "LightMode" = "DebugDXR" }
  303. HLSLPROGRAM
  304. #pragma only_renderers d3d11 xboxseries ps5
  305. #pragma raytracing surface_shader
  306. #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
  307. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/ShaderPass/FragInputs.hlsl"
  308. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/ShaderPass/ShaderPass.cs.hlsl"
  309. #define SHADERPASS SHADERPASS_RAYTRACING_DEBUG
  310. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/RaytracingMacros.hlsl"
  311. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/ShaderVariablesRaytracing.hlsl"
  312. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/Material/Material.hlsl"
  313. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/RaytracingIntersection.hlsl"
  314. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/RayTracingCommon.hlsl"
  315. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/ShaderPass/ShaderPassRayTracingDebug.hlsl"
  316. ENDHLSL
  317. }
  318. Pass
  319. {
  320. Name "PathTracingDXR"
  321. Tags{ "LightMode" = "PathTracingDXR" }
  322. HLSLPROGRAM
  323. #pragma only_renderers d3d11 xboxseries ps5
  324. #pragma raytracing surface_shader
  325. #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
  326. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/ShaderPass/FragInputs.hlsl"
  327. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/ShaderPass/ShaderPass.cs.hlsl"
  328. #define SHADERPASS SHADERPASS_PATH_TRACING
  329. #pragma multi_compile DECALS_OFF DECALS_3RT DECALS_4RT
  330. #pragma multi_compile _ DECAL_SURFACE_GRADIENT
  331. #pragma multi_compile _ SENSORSDK_OVERRIDE_REFLECTANCE
  332. #ifdef SENSORSDK_OVERRIDE_REFLECTANCE
  333. #define SENSORSDK_ENABLE_LIDAR
  334. #endif
  335. // This is just because it needs to be defined, shadow maps are not used.
  336. #define SHADOW_LOW
  337. // For all single-sided, refractive materials, we want to force a thin refraction model.
  338. #if !defined(_DOUBLESIDED_ON) && (defined(_REFRACTION_PLANE) || defined(_REFRACTION_SPHERE))
  339. #undef _REFRACTION_PLANE
  340. #undef _REFRACTION_SPHERE
  341. #define _REFRACTION_THIN
  342. #endif
  343. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/Material/TerrainLit/TerrainLitTemplateRayTracing.hlsl"
  344. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/Material/TerrainLit/TerrainLit_Basemap.hlsl"
  345. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/ShaderPass/ShaderPassPathTracing.hlsl"
  346. ENDHLSL
  347. }
  348. }
  349. }