Lux URP Terrain.shader 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. Shader "Lux URP/Terrain/Lit"
  2. {
  3. Properties
  4. {
  5. [HeaderHelpLuxURP_URL(tbg083mgl1iw)]
  6. // Lux specific properties
  7. [Toggle(_NORMALMAP)]
  8. _EnableNormalMap ("Enable Normal Map", Float) = 0.0
  9. [Space(5)]
  10. [Toggle(_TERRAIN_BLEND_HEIGHT)]
  11. _EnableHeightBlend ("Enable Height Blend", Float) = 0.0
  12. [NoScaleOffset] _HeightMaps (" Height Maps (RGBA)", 2D) = "grey" {}
  13. _HeightTransition (" Height Transition", Range(0, 1.0)) = 0.0
  14. [Toggle(_PARALLAX)]
  15. _EnableParallax (" Enable Parallax", Float) = 0.0
  16. _Parallax (" Parallax", Range(0.0, 0.1)) = 0.001
  17. [Toggle(_PROCEDURALTEXTURING)]
  18. _EnableProcedural ("Enable Procedural Texturing", Float) = 0.0
  19. _ProceduralBlend (" Blend", Range(0.0, 1.0)) = 0.6
  20. _ProceduralScale (" Scale", Range(0.5, 1.5)) = 1
  21. _ProceduralTiling (" Size in World Space", Float) = 5
  22. // Layer count is passed down to guide height-blend enable/disable, due
  23. // to the fact that heigh-based blend will be broken with multipass.
  24. [HideInInspector] [PerRendererData] _NumLayersCount ("Total Layer Count", Float) = 1.0
  25. // set by terrain engine
  26. [HideInInspector] _Control("Control (RGBA)", 2D) = "red" {}
  27. [HideInInspector] _Splat3("Layer 3 (A)", 2D) = "grey" {}
  28. [HideInInspector] _Splat2("Layer 2 (B)", 2D) = "grey" {}
  29. [HideInInspector] _Splat1("Layer 1 (G)", 2D) = "grey" {}
  30. [HideInInspector] _Splat0("Layer 0 (R)", 2D) = "grey" {}
  31. [HideInInspector] _Normal3("Normal 3 (A)", 2D) = "bump" {}
  32. [HideInInspector] _Normal2("Normal 2 (B)", 2D) = "bump" {}
  33. [HideInInspector] _Normal1("Normal 1 (G)", 2D) = "bump" {}
  34. [HideInInspector] _Normal0("Normal 0 (R)", 2D) = "bump" {}
  35. [HideInInspector] _Mask3("Mask 3 (A)", 2D) = "grey" {}
  36. [HideInInspector] _Mask2("Mask 2 (B)", 2D) = "grey" {}
  37. [HideInInspector] _Mask1("Mask 1 (G)", 2D) = "grey" {}
  38. [HideInInspector] _Mask0("Mask 0 (R)", 2D) = "grey" {}
  39. [HideInInspector][Gamma] _Metallic0("Metallic 0", Range(0.0, 1.0)) = 0.0
  40. [HideInInspector][Gamma] _Metallic1("Metallic 1", Range(0.0, 1.0)) = 0.0
  41. [HideInInspector][Gamma] _Metallic2("Metallic 2", Range(0.0, 1.0)) = 0.0
  42. [HideInInspector][Gamma] _Metallic3("Metallic 3", Range(0.0, 1.0)) = 0.0
  43. [HideInInspector] _Smoothness0("Smoothness 0", Range(0.0, 1.0)) = 0.5
  44. [HideInInspector] _Smoothness1("Smoothness 1", Range(0.0, 1.0)) = 0.5
  45. [HideInInspector] _Smoothness2("Smoothness 2", Range(0.0, 1.0)) = 0.5
  46. [HideInInspector] _Smoothness3("Smoothness 3", Range(0.0, 1.0)) = 0.5
  47. // used in fallback on old cards & base map
  48. [HideInInspector] _MainTex("BaseMap (RGB)", 2D) = "grey" {}
  49. [HideInInspector] _BaseColor("Main Color", Color) = (1,1,1,1)
  50. [Toggle(_TERRAIN_INSTANCED_PERPIXEL_NORMAL)]
  51. _EnableInstancedPerPixelNormal ("Enable Instanced per-pixel normal", Float) = 1.0
  52. }
  53. SubShader
  54. {
  55. Tags { "Queue" = "Geometry-100" "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" "IgnoreProjector" = "False"}
  56. Pass
  57. {
  58. Name "ForwardLit"
  59. Tags { "LightMode" = "UniversalForward" }
  60. HLSLPROGRAM
  61. // Required to compile gles 2.0 with standard srp library
  62. #pragma prefer_hlslcc gles
  63. #pragma exclude_renderers d3d11_9x
  64. #pragma target 3.0
  65. #pragma vertex SplatmapVert
  66. #pragma fragment SplatmapFragment
  67. //#define _METALLICSPECGLOSSMAP 1
  68. #define _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A 1
  69. // -------------------------------------
  70. // Universal Pipeline keywords
  71. #pragma multi_compile _ _MAIN_LIGHT_SHADOWS
  72. #pragma multi_compile _ _MAIN_LIGHT_SHADOWS_CASCADE
  73. #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS
  74. #pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS
  75. #pragma multi_compile_fragment _ _SHADOWS_SOFT
  76. #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING
  77. #pragma multi_compile _ SHADOWS_SHADOWMASK
  78. #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION
  79. #pragma multi_compile __ _ALPHATEST_ON
  80. // -------------------------------------
  81. // Unity defined keywords
  82. #pragma multi_compile _ DIRLIGHTMAP_COMBINED
  83. #pragma multi_compile _ LIGHTMAP_ON
  84. #pragma multi_compile_fog
  85. #pragma multi_compile_instancing
  86. #pragma instancing_options assumeuniformscaling nomatrices nolightprobe nolightmap
  87. #pragma shader_feature_local_fragment _TERRAIN_BLEND_HEIGHT
  88. #pragma shader_feature_local _NORMALMAP
  89. // #pragma shader_feature_local _MASKMAP
  90. // Sample normal in pixel shader when doing instancing
  91. #pragma shader_feature_local _TERRAIN_INSTANCED_PERPIXEL_NORMAL
  92. #pragma shader_feature_local _PARALLAX
  93. #pragma shader_feature_local _PROCEDURALTEXTURING
  94. #include "Includes/TerrainLitInput.hlsl"
  95. #include "Includes/TerrainLitPasses.hlsl"
  96. ENDHLSL
  97. }
  98. Pass
  99. {
  100. Name "ShadowCaster"
  101. Tags{"LightMode" = "ShadowCaster"}
  102. ZWrite On
  103. ColorMask 0
  104. HLSLPROGRAM
  105. // Required to compile gles 2.0 with standard srp library
  106. #pragma prefer_hlslcc gles
  107. #pragma exclude_renderers d3d11_9x
  108. #pragma target 2.0
  109. #pragma vertex ShadowPassVertex
  110. #pragma fragment ShadowPassFragment
  111. #pragma multi_compile_instancing
  112. #pragma instancing_options assumeuniformscaling nomatrices nolightprobe nolightmap
  113. #pragma multi_compile __ _ALPHATEST_ON
  114. #include "Includes/TerrainLitInput.hlsl"
  115. #include "Includes/TerrainLitPasses.hlsl"
  116. ENDHLSL
  117. }
  118. Pass
  119. {
  120. Name "DepthOnly"
  121. Tags{"LightMode" = "DepthOnly"}
  122. ZWrite On
  123. ColorMask 0
  124. HLSLPROGRAM
  125. // Required to compile gles 2.0 with standard srp library
  126. #pragma prefer_hlslcc gles
  127. #pragma exclude_renderers d3d11_9x
  128. #pragma target 2.0
  129. #pragma vertex DepthOnlyVertex
  130. #pragma fragment DepthOnlyFragment
  131. #pragma multi_compile_instancing
  132. #pragma instancing_options assumeuniformscaling nomatrices nolightprobe nolightmap
  133. #pragma multi_compile __ _ALPHATEST_ON
  134. #include "Includes/TerrainLitInput.hlsl"
  135. #include "Includes/TerrainLitPasses.hlsl"
  136. ENDHLSL
  137. }
  138. // This pass is used when drawing to a _CameraNormalsTexture texture
  139. Pass
  140. {
  141. Name "DepthNormals"
  142. Tags{"LightMode" = "DepthNormals"}
  143. ZWrite On
  144. HLSLPROGRAM
  145. #pragma exclude_renderers d3d11_9x
  146. #pragma target 2.0
  147. #pragma vertex DepthNormalOnlyVertex
  148. #pragma fragment DepthNormalOnlyFragment
  149. #pragma shader_feature_local _NORMALMAP
  150. #pragma multi_compile_instancing
  151. #pragma instancing_options assumeuniformscaling nomatrices nolightprobe nolightmap
  152. #pragma multi_compile __ _ALPHATEST_ON
  153. #include "Includes/TerrainLitInput.hlsl"
  154. #include "Includes/TerrainLitPasses.hlsl"
  155. ENDHLSL
  156. }
  157. UsePass "Hidden/Nature/Terrain/Utilities/PICKING"
  158. UsePass "Hidden/Nature/Terrain/Utilities/SELECTION"
  159. }
  160. Dependency "AddPassShader" = "Hidden/Lux URP/Lit (Add Pass)"
  161. Dependency "BaseMapShader" = "Lux URP/Terrain/Lit (Base Pass)"
  162. Dependency "BaseMapGenShader" = "Hidden/Lux URP/Terrain/Lit (Basemap Gen)"
  163. Fallback "Hidden/InternalErrorShader"
  164. }