InTerra_TerrainLitBase.shader 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. //NOTE! This file is based on Unity file "TerrainLitBase.shader" which was used as a template for adding all the InTerra features.
  2. Shader "Hidden/InTerra/Lit (Base Pass)"
  3. {
  4. Properties
  5. {
  6. [MainColor] _BaseColor("Color", Color) = (1,1,1,1)
  7. _MainTex("Albedo(RGB), Smoothness(A)", 2D) = "white" {}
  8. _MetallicTex("Metallic, Occlusion, Splat01", 2D) = "black" {}
  9. _TriplanarTex("Triplanar Albedo(RGB), Smoothness(A)", 2D) = "black" {}
  10. _Triplanar_MetallicAO("Metallic, Occlusion", 2D) = "black" {}
  11. [HideInInspector] _TerrainHolesTexture("Holes Map (RGB)", 2D) = "white" {}
  12. }
  13. HLSLINCLUDE
  14. #pragma multi_compile_fragment __ _ALPHATEST_ON
  15. ENDHLSL
  16. SubShader
  17. {
  18. PackageRequirements { "com.unity.render-pipelines.universal":"[12.0,19.0]" }
  19. Tags { "Queue" = "Geometry-100" "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" "UniversalMaterialType" = "Lit" "IgnoreProjector" = "True"}
  20. LOD 200
  21. // ------------------------------------------------------------------
  22. // Forward pass. Shades all light in a single pass. GI + emission + Fog
  23. Pass
  24. {
  25. Name "ForwardLit"
  26. // Lightmode matches the ShaderPassName set in UniversalPipeline.cs. SRPDefaultUnlit and passes with
  27. // no LightMode tag are also rendered by Universal Pipeline
  28. Tags{"LightMode" = "UniversalForward"}
  29. HLSLPROGRAM
  30. #pragma target 2.0
  31. // -------------------------------------
  32. // Material Keywords
  33. #define _METALLICSPECGLOSSMAP 1
  34. #define _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A 1
  35. #include "InTerra_URP_DefinedGlobalKeywords.hlsl"
  36. // -------------------------------------
  37. // Universal Pipeline keywords
  38. #pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN
  39. #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS
  40. #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING
  41. #pragma multi_compile _ SHADOWS_SHADOWMASK
  42. #pragma multi_compile _ _LIGHT_LAYERS
  43. #pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS
  44. #pragma multi_compile_fragment _ _REFLECTION_PROBE_BLENDING
  45. #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION
  46. #pragma multi_compile_fragment _ _LIGHT_COOKIES
  47. #pragma multi_compile _ _CLUSTERED_RENDERING
  48. #ifndef UNITY_6000_1_OR_NEWER
  49. #pragma multi_compile _ _FORWARD_PLUS
  50. #pragma multi_compile_fragment _ _SHADOWS_SOFT
  51. #pragma multi_compile_fog
  52. #else
  53. #pragma multi_compile _ _CLUSTER_LIGHT_LOOP
  54. #pragma multi_compile_fragment _ _REFLECTION_PROBE_ATLAS
  55. #pragma multi_compile_fragment _ _SHADOWS_SOFT _SHADOWS_SOFT_LOW _SHADOWS_SOFT_MEDIUM _SHADOWS_SOFT_HIGH
  56. #endif
  57. // -------------------------------------
  58. // Unity defined keywords
  59. #pragma multi_compile _ DIRLIGHTMAP_COMBINED
  60. #pragma multi_compile _ LIGHTMAP_ON
  61. #pragma multi_compile _ DYNAMICLIGHTMAP_ON
  62. #pragma multi_compile_instancing
  63. #pragma instancing_options assumeuniformscaling nomatrices nolightprobe nolightmap
  64. #pragma vertex SplatmapVert
  65. #pragma fragment SplatmapFragment
  66. #define _NORMALMAP
  67. // Sample normal in pixel shader when doing instancing
  68. #pragma shader_feature_local _TERRAIN_INSTANCED_PERPIXEL_NORMAL
  69. #define TERRAIN_SPLAT_BASEPASS 1
  70. #pragma shader_feature_local __ _TERRAIN_TRIPLANAR_ONE _TERRAIN_TRIPLANAR
  71. #define INTERRA_TERRAIN
  72. #include "InTerra_TerrainLitInput.hlsl"
  73. #include "InTerra_TerrainLitPasses.hlsl"
  74. ENDHLSL
  75. }
  76. Pass
  77. {
  78. Name "ShadowCaster"
  79. Tags{"LightMode" = "ShadowCaster"}
  80. ZWrite On
  81. ColorMask 0
  82. HLSLPROGRAM
  83. #pragma target 4.5
  84. // Deferred Rendering Path does not support the OpenGL-based graphics API:
  85. // Desktop OpenGL, OpenGL ES 3.0, WebGL 2.0.
  86. #pragma exclude_renderers gles3 glcore
  87. #pragma multi_compile_instancing
  88. #pragma instancing_options assumeuniformscaling nomatrices nolightprobe nolightmap
  89. #pragma vertex ShadowPassVertex
  90. #pragma fragment ShadowPassFragment
  91. #define INTERRA_TERRAIN
  92. #include "InTerra_TerrainLitInput.hlsl"
  93. #include "InTerra_TerrainLitPasses.hlsl"
  94. ENDHLSL
  95. }
  96. // ------------------------------------------------------------------
  97. // GBuffer pass. Does GI + emission. All additional lights are done deferred as well as fog
  98. Pass
  99. {
  100. Name "GBuffer"
  101. Tags{"LightMode" = "UniversalGBuffer"}
  102. HLSLPROGRAM
  103. #pragma exclude_renderers gles
  104. #pragma target 2.0
  105. // -------------------------------------
  106. // Material Keywords
  107. #define _METALLICSPECGLOSSMAP 1
  108. #define _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A 1
  109. // -------------------------------------
  110. // Universal Pipeline keywords
  111. #pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN
  112. //#pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS
  113. //#pragma multi_compile _ _ADDITIONAL_LIGHT_SHADOWS
  114. #pragma multi_compile_fragment _ _REFLECTION_PROBE_BLENDING
  115. #pragma multi_compile _ _SHADOWS_SOFT
  116. #pragma multi_compile _ _MIXED_LIGHTING_SUBTRACTIVE
  117. #pragma multi_compile_fragment _ _LIGHT_LAYERS
  118. //#pragma multi_compile_fragment _ _WRITE_RENDERING_LAYERS
  119. #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl"
  120. // -------------------------------------
  121. // Unity defined keywords
  122. #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING
  123. #pragma multi_compile _ SHADOWS_SHADOWMASK
  124. #pragma multi_compile _ DIRLIGHTMAP_COMBINED
  125. #pragma multi_compile _ LIGHTMAP_ON
  126. #pragma multi_compile _ DYNAMICLIGHTMAP_ON
  127. #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT
  128. #pragma multi_compile_fragment _ _RENDER_PASS_ENABLED
  129. #pragma multi_compile_instancing
  130. #pragma instancing_options assumeuniformscaling nomatrices nolightprobe nolightmap
  131. #pragma vertex SplatmapVert
  132. #pragma fragment SplatmapFragment
  133. #define _NORMALMAP
  134. // Sample normal in pixel shader when doing instancing
  135. #pragma shader_feature_local _TERRAIN_INSTANCED_PERPIXEL_NORMAL
  136. #define TERRAIN_SPLAT_BASEPASS 1
  137. #define TERRAIN_GBUFFER 1
  138. #define INTERRA_TERRAIN
  139. #include "InTerra_TerrainLitInput.hlsl"
  140. #include "InTerra_TerrainLitPasses.hlsl"
  141. ENDHLSL
  142. }
  143. Pass
  144. {
  145. Name "DepthOnly"
  146. Tags{"LightMode" = "DepthOnly"}
  147. ZWrite On
  148. ColorMask R
  149. HLSLPROGRAM
  150. #pragma target 2.0
  151. #pragma vertex DepthOnlyVertex
  152. #pragma fragment DepthOnlyFragment
  153. #pragma multi_compile_instancing
  154. #pragma instancing_options assumeuniformscaling nomatrices nolightprobe nolightmap
  155. #define INTERRA_TERRAIN
  156. #include "InTerra_TerrainLitInput.hlsl"
  157. #include "InTerra_TerrainLitPasses.hlsl"
  158. ENDHLSL
  159. }
  160. Pass
  161. {
  162. Name "DepthNormals"
  163. Tags{"LightMode" = "DepthNormals"}
  164. ZWrite On
  165. HLSLPROGRAM
  166. #pragma target 2.0
  167. #pragma vertex DepthNormalOnlyVertex
  168. #pragma fragment DepthNormalOnlyFragment
  169. #pragma multi_compile_instancing
  170. #pragma instancing_options assumeuniformscaling nomatrices nolightprobe nolightmap
  171. #pragma shader_feature_local _NORMALMAP
  172. #include "Packages/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLitInput.hlsl"
  173. #include "Packages/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLitDepthNormalsPass.hlsl"
  174. ENDHLSL
  175. }
  176. // This pass it not used during regular rendering, only for lightmap baking.
  177. Pass
  178. {
  179. Name "Meta"
  180. Tags{"LightMode" = "Meta"}
  181. Cull Off
  182. HLSLPROGRAM
  183. #pragma vertex TerrainVertexMeta
  184. #pragma fragment TerrainFragmentMeta
  185. #pragma shader_feature EDITOR_VISUALIZATION
  186. #pragma multi_compile_instancing
  187. #pragma instancing_options assumeuniformscaling nomatrices nolightprobe nolightmap
  188. #define _METALLICSPECGLOSSMAP 1
  189. #define _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A 1
  190. #include "Packages/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLitInput.hlsl"
  191. #include "Packages/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLitMetaPass.hlsl"
  192. ENDHLSL
  193. }
  194. UsePass "Hidden/Nature/Terrain/Utilities/PICKING"
  195. UsePass "Universal Render Pipeline/Terrain/Lit/SceneSelectionPass"
  196. }
  197. FallBack "Hidden/Universal Render Pipeline/FallbackError"
  198. }