InTerra_TerrainLit.shader 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396
  1. // NOTE! This file is based on Unity file "TerrainLit.shader" which was used as template for adding all the InTerra features.
  2. Shader "InTerra/URP/Terrain (Lit with Features)"
  3. {
  4. Properties
  5. {
  6. [HideInInspector] [ToggleUI] _EnableHeightBlend("EnableHeightBlend", Float) = 0.0
  7. _HeightTransition("Height Transition", Range(0, 60.0)) = 0.0
  8. // Layer count is passed down to guide height-blend enable/disable, due
  9. // to the fact that heigh-based blend will be broken with multipass.
  10. [HideInInspector] [PerRendererData] _NumLayersCount ("Total Layer Count", Float) = 1.0
  11. // set by terrain engine
  12. [HideInInspector] _Control("Control (RGBA)", 2D) = "red" {}
  13. [HideInInspector] _Control1("Control1 (RGBA)", 2D) = "black" {}
  14. [HideInInspector] _Splat3("Layer 3 (A)", 2D) = "grey" {}
  15. [HideInInspector] _Splat2("Layer 2 (B)", 2D) = "grey" {}
  16. [HideInInspector] _Splat1("Layer 1 (G)", 2D) = "grey" {}
  17. [HideInInspector] _Splat0("Layer 0 (R)", 2D) = "grey" {}
  18. [HideInInspector] _Normal3("Normal 3 (A)", 2D) = "bump" {}
  19. [HideInInspector] _Normal2("Normal 2 (B)", 2D) = "bump" {}
  20. [HideInInspector] _Normal1("Normal 1 (G)", 2D) = "bump" {}
  21. [HideInInspector] _Normal0("Normal 0 (R)", 2D) = "bump" {}
  22. [HideInInspector] _Mask3("Mask 3 (A)", 2D) = "grey" {}
  23. [HideInInspector] _Mask2("Mask 2 (B)", 2D) = "grey" {}
  24. [HideInInspector] _Mask1("Mask 1 (G)", 2D) = "grey" {}
  25. [HideInInspector] _Mask0("Mask 0 (R)", 2D) = "grey" {}
  26. [HideInInspector][Gamma] _Metallic0("Metallic 0", Range(0.0, 1.0)) = 0.0
  27. [HideInInspector][Gamma] _Metallic1("Metallic 1", Range(0.0, 1.0)) = 0.0
  28. [HideInInspector][Gamma] _Metallic2("Metallic 2", Range(0.0, 1.0)) = 0.0
  29. [HideInInspector][Gamma] _Metallic3("Metallic 3", Range(0.0, 1.0)) = 0.0
  30. [HideInInspector] _Smoothness0("Smoothness 0", Range(0.0, 1.0)) = 0.5
  31. [HideInInspector] _Smoothness1("Smoothness 1", Range(0.0, 1.0)) = 0.5
  32. [HideInInspector] _Smoothness2("Smoothness 2", Range(0.0, 1.0)) = 0.5
  33. [HideInInspector] _Smoothness3("Smoothness 3", Range(0.0, 1.0)) = 0.5
  34. // used in fallback on old cards & base map
  35. [HideInInspector] _MainTex("BaseMap (RGB)", 2D) = "grey" {}
  36. [HideInInspector] _BaseColor("Main Color", Color) = (1,1,1,1)
  37. [HideInInspector] _TriplanarTex("Triplanar Albedo(RGB), Smoothness(A)", 2D) = "black" {}
  38. [HideInInspector] _Triplanar_MetallicAO("Metallic, Occlusion", 2D) = "black" {}
  39. [HideInInspector] _TerrainHolesTexture("Holes Map (RGB)", 2D) = "white" {}
  40. [ToggleUI] _EnableInstancedPerPixelNormal("Enable Instanced per-pixel normal", Float) = 1.0
  41. //inTerra
  42. _HT_distance("Distance", vector) = (3,10,0,25)
  43. _HT_distance_scale("Scale", Range(0,0.5)) = 0.25
  44. _HT_cover("Cover strenght", Range(0,1)) = 0.6
  45. _Distance_HeightTransition("Distance Height blending Sharpness ", Range(0,60)) = 10
  46. _TriplanarSharpness("Triplanar Sharpness", Range(4,10)) = 9
  47. _ParallaxAffineStepsTerrain("", Float) = 3
  48. _MipMapFade("Parallax MipMap fade", vector) = (3,15,0,35)
  49. _MipMapLevel("Parallax MipMap level", Float) = 0
  50. _TriplanarOneToAllSteep("", Float) = 0
  51. _TerrainColorTintTexture("Color Tint Texture", 2D) = "white" {}
  52. _TerrainColorTintStrenght("Color Tint Strenght", Range(0, 1)) = 0
  53. _TerrainNormalTintTexture("Additional Normal Texture", 2D) = "bump" {}
  54. _TerrainNormalTintStrenght("Additional Normal Strenght", Range(0, 1)) = 0.0
  55. _TerrainNormalTintDistance("Additional Normal Distance", vector) = (3,10,0,25)
  56. [HideInInspector] _TerrainSizeXZPosY("", Vector) = (0,0,0)
  57. _HeightmapBlending("", Float) = 1
  58. _Terrain_Parallax("", Float) = 0
  59. _Tracks("", Float) = 0
  60. _GlobalWetness("", Range(0,1)) = 0
  61. _TrackAO("", Range(0,1)) = 0.8
  62. _TrackTessallation("", Range(0,1)) = 0
  63. _TrackEdgeNormals("Track Edge Normals", Float) = 2
  64. _TrackDetailTexture("Track Color Detail Texture", 2D) = "white" {}
  65. [Normal] _TrackDetailNormalTexture("Track Normal Detail Texture", 2D) = "bump" {}
  66. _TrackDetailNormalStrenght("Track Detail Normal Strenght", Float) = 1
  67. _TrackNormalStrenght("Track Normal Strenght", Float) = 1
  68. _TrackEdgeSharpness("Track Edge Normals", Range(0.001,4)) = 1
  69. _TrackHeightOffset("Track Heightmap Offset", Range(-1,1)) = 0
  70. _TrackMultiplyStrenght("Track Multiply strenght", Float) = 3
  71. _TrackHeightTransition("Track Normal Strenght", Range(0, 60)) = 20
  72. _ParallaxTrackAffineSteps("", Float) = 3
  73. _ParallaxTrackSteps("", Float) = 5
  74. _Gamma("", Float) = 0
  75. _WorldMapping("", Float) = 0
  76. }
  77. HLSLINCLUDE
  78. #pragma multi_compile_fragment __ _ALPHATEST_ON
  79. ENDHLSL
  80. SubShader
  81. {
  82. PackageRequirements { "com.unity.render-pipelines.universal":"[12.0,19.0]" }
  83. Tags { "Queue" = "Geometry-100" "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" "UniversalMaterialType" = "Lit" "IgnoreProjector" = "False" "TerrainCompatible" = "True"}
  84. Pass
  85. {
  86. Name "ForwardLit"
  87. Tags { "LightMode" = "UniversalForward" }
  88. HLSLPROGRAM
  89. #pragma target 4.5
  90. #pragma vertex SplatmapVert
  91. #pragma fragment SplatmapFragment
  92. #define _METALLICSPECGLOSSMAP 1
  93. #define _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A 1
  94. #include "InTerra_URP_DefinedGlobalKeywords.hlsl"
  95. // -------------------------------------
  96. // Universal Pipeline keywords
  97. #pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN
  98. #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS
  99. #pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS
  100. #pragma multi_compile_fragment _ _REFLECTION_PROBE_BLENDING
  101. #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION
  102. #pragma multi_compile_fragment _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3
  103. #pragma multi_compile_fragment _ _LIGHT_LAYERS
  104. #pragma multi_compile_fragment _ _LIGHT_COOKIES
  105. #pragma multi_compile _ SHADOWS_SHADOWMASK
  106. #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING
  107. #ifdef UNITY_6000_1_OR_NEWER
  108. #pragma multi_compile _ _CLUSTER_LIGHT_LOOP
  109. #pragma multi_compile_fragment _ _REFLECTION_PROBE_ATLAS
  110. #pragma multi_compile_fragment _ _SHADOWS_SOFT _SHADOWS_SOFT_LOW _SHADOWS_SOFT_MEDIUM _SHADOWS_SOFT_HIGH
  111. #pragma multi_compile _ EVALUATE_SH_MIXED EVALUATE_SH_VERTEX
  112. #include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl"
  113. #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Fog.hlsl"
  114. #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl"
  115. #else
  116. #pragma multi_compile _ _CLUSTERED_RENDERING
  117. #pragma multi_compile _ _FORWARD_PLUS
  118. #pragma multi_compile_fragment _ _SHADOWS_SOFT
  119. #pragma multi_compile_fog
  120. #endif
  121. #ifdef UNITY_2022_2_OR_NEWER
  122. #pragma multi_compile _ EVALUATE_SH_MIXED EVALUATE_SH_VERTEX
  123. #if (!defined(UNITY_COMPILER_DXC) && (defined(UNITY_PLATFORM_OSX) || defined(UNITY_PLATFORM_IOS))) || defined(SHADER_API_PS5)
  124. #if defined(SHADER_API_PS5) || defined(SHADER_API_METAL)
  125. #define SUPPORTS_FOVEATED_RENDERING_NON_UNIFORM_RASTER 1
  126. #pragma warning (disable : 3568) // unknown pragma ignored
  127. #pragma never_use_dxc metal
  128. #pragma dynamic_branch _ _FOVEATED_RENDERING_NON_UNIFORM_RASTER
  129. #pragma warning (default : 3568) // restore unknown pragma ignored
  130. #endif
  131. #endif
  132. #pragma multi_compile_fragment _ _WRITE_RENDERING_LAYERS
  133. #pragma target 4.5 _WRITE_RENDERING_LAYERS
  134. #endif
  135. // -------------------------------------
  136. // Unity defined keywords
  137. #pragma multi_compile _ DIRLIGHTMAP_COMBINED
  138. #pragma multi_compile _ LIGHTMAP_ON
  139. #pragma multi_compile _ DYNAMICLIGHTMAP_ON
  140. #pragma multi_compile_instancing
  141. #pragma instancing_options assumeuniformscaling nomatrices nolightprobe nolightmap
  142. #define _NORMALMAP
  143. // -------------------------------------
  144. // InTerra Keywords
  145. #pragma shader_feature_local __ _TERRAIN_TRIPLANAR_ONE _TERRAIN_TRIPLANAR
  146. #pragma shader_feature_local_fragment _TERRAIN_DISTANCEBLEND
  147. #pragma shader_feature_local_fragment __ _LAYERS_TWO _LAYERS_EIGHT
  148. #define INTERRA_TERRAIN
  149. // Sample normal in pixel shader when doing instancing
  150. #pragma shader_feature_local _TERRAIN_INSTANCED_PERPIXEL_NORMAL
  151. #include "InTerra_TerrainLitInput.hlsl"
  152. #include "InTerra_TerrainLitPasses.hlsl"
  153. ENDHLSL
  154. }
  155. Pass
  156. {
  157. Name "ShadowCaster"
  158. Tags{"LightMode" = "ShadowCaster"}
  159. ZWrite On
  160. ColorMask 0
  161. HLSLPROGRAM
  162. #pragma target 2.0
  163. #pragma vertex ShadowPassVertex
  164. #pragma fragment ShadowPassFragment
  165. #pragma multi_compile_instancing
  166. #pragma instancing_options assumeuniformscaling nomatrices nolightprobe nolightmap
  167. // -------------------------------------
  168. // Universal Pipeline keywords
  169. // This is used during shadow map generation to differentiate between directional and punctual light shadows, as they use different formulas to apply Normal Bias
  170. #pragma multi_compile_vertex _ _CASTING_PUNCTUAL_LIGHT_SHADOW
  171. #define INTERRA_TERRAIN
  172. #include "InTerra_TerrainLitInput.hlsl"
  173. #include "InTerra_TerrainLitPasses.hlsl"
  174. ENDHLSL
  175. }
  176. Pass
  177. {
  178. Name "GBuffer"
  179. Tags{"LightMode" = "UniversalGBuffer"}
  180. HLSLPROGRAM
  181. #pragma exclude_renderers gles
  182. #pragma target 3.0
  183. #pragma vertex SplatmapVert
  184. #pragma fragment SplatmapFragment
  185. #define _METALLICSPECGLOSSMAP 1
  186. #define _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A 1
  187. #include "InTerra_URP_DefinedGlobalKeywords.hlsl"
  188. // -------------------------------------
  189. // Universal Pipeline keywords
  190. #pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN
  191. //#pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS
  192. //#pragma multi_compile _ _ADDITIONAL_LIGHT_SHADOWS
  193. #pragma multi_compile_fragment _ _REFLECTION_PROBE_BLENDING
  194. #pragma multi_compile_fragment _ _LIGHT_LAYERS
  195. #pragma multi_compile_fragment _ _SHADOWS_SOFT
  196. #pragma multi_compile _ _MIXED_LIGHTING_SUBTRACTIVE
  197. #pragma multi_compile_fragment _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3
  198. #ifdef UNITY_6000_1_OR_NEWER
  199. #pragma multi_compile _ _CLUSTER_LIGHT_LOOP
  200. #pragma multi_compile_fragment _ LIGHTMAP_BICUBIC_SAMPLING
  201. #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl"
  202. #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ProbeVolumeVariants.hlsl"
  203. #else
  204. #pragma multi_compile_fragment _ _WRITE_RENDERING_LAYERS
  205. #pragma target 4.5 _WRITE_RENDERING_LAYERS
  206. #endif
  207. // -------------------------------------
  208. // Unity defined keywords
  209. #pragma multi_compile _ DIRLIGHTMAP_COMBINED
  210. #pragma multi_compile _ LIGHTMAP_ON
  211. #pragma multi_compile _ DYNAMICLIGHTMAP_ON
  212. #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT
  213. #pragma multi_compile_fragment _ _RENDER_PASS_ENABLED
  214. //#pragma multi_compile_fog
  215. #pragma multi_compile_instancing
  216. #pragma instancing_options assumeuniformscaling nomatrices nolightprobe nolightmap
  217. #define _NORMALMAP
  218. #define TERRAIN_GBUFFER 1
  219. // -------------------------------------
  220. // InTerra Keywords
  221. #pragma shader_feature_local __ _TERRAIN_TRIPLANAR_ONE _TERRAIN_TRIPLANAR
  222. #pragma shader_feature_local_fragment _TERRAIN_DISTANCEBLEND
  223. #pragma shader_feature_local_fragment __ _LAYERS_TWO _LAYERS_EIGHT
  224. #define INTERRA_TERRAIN
  225. #include "InTerra_TerrainLitInput.hlsl"
  226. #include "InTerra_TerrainLitPasses.hlsl"
  227. ENDHLSL
  228. }
  229. Pass
  230. {
  231. Name "DepthOnly"
  232. Tags{"LightMode" = "DepthOnly"}
  233. ZWrite On
  234. ColorMask 0
  235. HLSLPROGRAM
  236. #pragma target 2.0
  237. #pragma vertex DepthOnlyVertex
  238. #pragma fragment DepthOnlyFragment
  239. #pragma multi_compile_instancing
  240. #pragma instancing_options assumeuniformscaling nomatrices nolightprobe nolightmap
  241. #define INTERRA_TERRAIN
  242. #include "InTerra_TerrainLitInput.hlsl"
  243. #include "InTerra_TerrainLitPasses.hlsl"
  244. ENDHLSL
  245. }
  246. // This pass is used when drawing to a _CameraNormalsTexture texture
  247. Pass
  248. {
  249. Name "DepthNormals"
  250. Tags{"LightMode" = "DepthNormals"}
  251. ZWrite On
  252. HLSLPROGRAM
  253. #pragma target 2.0
  254. #pragma vertex DepthNormalOnlyVertex
  255. #pragma fragment DepthNormalOnlyFragment
  256. #pragma shader_feature_local_fragment __ _LAYERS_TWO _LAYERS_EIGHT
  257. #pragma shader_feature_local_fragment _DEPTH_NORMALS_MAPS
  258. #define INTERRA_TERRAIN
  259. #include "InTerra_URP_DefinedGlobalKeywords.hlsl"
  260. #ifdef UNITY_6000_1_OR_NEWER
  261. #pragma multi_compile _ _CLUSTER_LIGHT_LOOP
  262. #pragma multi_compile_fragment _ LIGHTMAP_BICUBIC_SAMPLING
  263. #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl"
  264. #else
  265. #pragma multi_compile_fragment _ _WRITE_RENDERING_LAYERS
  266. #endif
  267. #pragma multi_compile_instancing
  268. #pragma instancing_options assumeuniformscaling nomatrices nolightprobe nolightmap
  269. #include "InTerra_TerrainLitInput.hlsl"
  270. #include "InTerra_TerrainLitDepthNormalsPass.hlsl"
  271. ENDHLSL
  272. }
  273. Pass
  274. {
  275. Name "SceneSelectionPass"
  276. Tags { "LightMode" = "SceneSelectionPass" }
  277. HLSLPROGRAM
  278. #pragma target 2.0
  279. #pragma vertex DepthOnlyVertex
  280. #pragma fragment DepthOnlyFragment
  281. #pragma multi_compile_instancing
  282. #pragma instancing_options assumeuniformscaling nomatrices nolightprobe nolightmap
  283. #define SCENESELECTIONPASS
  284. #define INTERRA_TERRAIN
  285. #include "InTerra_TerrainLitInput.hlsl"
  286. #include "InTerra_TerrainLitPasses.hlsl"
  287. ENDHLSL
  288. }
  289. // This pass it not used during regular rendering, only for lightmap baking.
  290. Pass
  291. {
  292. Name "Meta"
  293. Tags{"LightMode" = "Meta"}
  294. Cull Off
  295. HLSLPROGRAM
  296. #pragma vertex TerrainVertexMeta
  297. #pragma fragment TerrainFragmentMeta
  298. #pragma multi_compile_instancing
  299. #pragma instancing_options assumeuniformscaling nomatrices nolightprobe nolightmap
  300. #pragma shader_feature EDITOR_VISUALIZATION
  301. #define _METALLICSPECGLOSSMAP 1
  302. #define _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A 1
  303. #define INTERRA_TERRAIN
  304. #include "InTerra_TerrainLitInput.hlsl"
  305. #include "Packages/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLitMetaPass.hlsl"
  306. ENDHLSL
  307. }
  308. UsePass "Hidden/Nature/Terrain/Utilities/PICKING"
  309. }
  310. Dependency "AddPassShader" = "Hidden/InTerra/Lit (Add Pass)"
  311. Dependency "BaseMapShader" = "Hidden/InTerra/Lit (Base Pass)"
  312. Dependency "BaseMapGenShader" = "Hidden/InTerra/Lit (Basemap Gen)"
  313. CustomEditor "InTerra.InTerra_TerrainShaderGUI"
  314. Fallback "Hidden/Universal Render Pipeline/FallbackError"
  315. }