InTerra_TerrainLit_BasemapGen.shader 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. //NOTE! This file is based on Unity file "TerrainLit_BasemapGen.shader" which was used as a template for adding all the InTerra features.
  2. Shader "Hidden/InTerra/HDRP/TerrainLit_BasemapGen"
  3. {
  4. Properties
  5. {
  6. [HideInInspector] _DstBlend("DstBlend", Float) = 0.0
  7. }
  8. SubShader
  9. {
  10. PackageRequirements { "com.unity.render-pipelines.high-definition":"[12.1,19.0]" }
  11. Tags { "RenderPipeline" = "HDRenderPipeline" "SplatCount" = "16" }
  12. HLSLINCLUDE
  13. #pragma target 4.5
  14. #pragma only_renderers d3d11 playstation xboxone xboxseries vulkan metal switch
  15. #define SURFACE_GRADIENT // Must use Surface Gradient as the normal map texture format is now RG floating point
  16. #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
  17. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderVariables.hlsl"
  18. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/Material/Material.hlsl"
  19. #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/NormalSurfaceGradient.hlsl"
  20. #include "Packages/com.unity.render-pipelines.high-definition/Runtime/Material/TerrainLit/TerrainLitSurfaceData.hlsl"
  21. // Terrain builtin keywords
  22. #pragma shader_feature_local _TERRAIN_8_LAYERS
  23. #define _NORMALMAP
  24. #define _MASKMAP
  25. // InTerra Keywords
  26. #pragma shader_feature_local __ _TERRAIN_TRIPLANAR_ONE _TERRAIN_TRIPLANAR
  27. #pragma shader_feature_local_fragment _TERRAIN_DISTANCEBLEND
  28. #pragma shader_feature_local __ _LAYERS_TWO _LAYERS_EIGHT _LAYERS_SIXTEEN
  29. #define _TERRAIN_BASEMAP_GEN
  30. #if defined(_TERRAIN_TRIPLANAR) || defined(_TERRAIN_TRIPLANAR_ONE)
  31. #ifdef _TERRAIN_TRIPLANAR_ONE
  32. #define TRIPLANAR_TINT
  33. #endif
  34. #undef _TERRAIN_TRIPLANAR
  35. #undef _TERRAIN_TRIPLANAR_ONE
  36. #endif
  37. #include "InTerra_TerrainLit_Splatmap_Includes.hlsl"
  38. CBUFFER_START(UnityTerrain)
  39. UNITY_TERRAIN_CB_VARS
  40. float4 _Control0_ST;
  41. CBUFFER_END
  42. struct Varyings
  43. {
  44. float4 positionCS : SV_POSITION;
  45. float4 texcoord : TEXCOORD0;
  46. };
  47. #pragma vertex Vert
  48. #pragma fragment Frag
  49. float2 ComputeControlUV(float2 uv)
  50. {
  51. // adjust splatUVs so the edges of the terrain tile lie on pixel centers
  52. return (uv) ;
  53. }
  54. Varyings Vert(uint vertexID : SV_VertexID)
  55. {
  56. Varyings output;
  57. output.positionCS = GetFullScreenTriangleVertexPosition(vertexID);
  58. output.texcoord.xy = TRANSFORM_TEX(GetFullScreenTriangleTexCoord(vertexID), _Control0);
  59. output.texcoord.zw = ComputeControlUV(output.texcoord.xy);
  60. return output;
  61. }
  62. ENDHLSL
  63. Pass
  64. {
  65. Tags
  66. {
  67. "Name" = "_MainTex"
  68. "Format" = "ARGB32"
  69. "Size" = "1"
  70. }
  71. ZTest Always Cull Off ZWrite Off
  72. Blend One [_DstBlend]
  73. HLSLPROGRAM
  74. #include "InTerra_HDRP_DefinedGlobalKeywords.hlsl"
  75. #include "InTerra_TerrainLit_Splatmap.hlsl"
  76. float4 Frag(Varyings input) : SV_Target
  77. {
  78. TerrainLitSurfaceData surfaceData;
  79. InitializeTerrainLitSurfaceData(surfaceData);
  80. InTerraTerrainLitShade(input.texcoord.zw, surfaceData, float3(0, 0, 0), float3(0, 1, 0), float3(0, 0, 0));
  81. return float4(surfaceData.albedo, surfaceData.smoothness);
  82. }
  83. ENDHLSL
  84. }
  85. Pass
  86. {
  87. Tags
  88. {
  89. "Name" = "_MetallicTex"
  90. "Format" = "ARGB32"
  91. "Size" = "1"
  92. }
  93. ZTest Always Cull Off ZWrite Off
  94. Blend One [_DstBlend]
  95. HLSLPROGRAM
  96. #define OVERRIDE_SPLAT_SAMPLER_NAME sampler_Mask0
  97. #include "InTerra_HDRP_DefinedGlobalKeywords.hlsl"
  98. #include "InTerra_TerrainLit_Splatmap.hlsl"
  99. float3 Frag(Varyings input) : SV_Target
  100. {
  101. TerrainLitSurfaceData surfaceData;
  102. InitializeTerrainLitSurfaceData(surfaceData);
  103. InTerraTerrainLitShade(input.texcoord.zw, surfaceData, float3(0, 0, 0), float3(0, 1, 0), float3(0, 0, 0));
  104. float splatControl = SAMPLE_TEXTURE2D(_Control0, sampler_Control0, input.texcoord.zw).r;
  105. return float3(surfaceData.metallic, surfaceData.ao, splatControl);
  106. }
  107. ENDHLSL
  108. }
  109. Pass
  110. {
  111. Tags
  112. {
  113. "Name" = "_TriplanarTex"
  114. "Format" = "ARGB32"
  115. "Size" = "1"
  116. }
  117. ZTest Always Cull Off ZWrite Off
  118. Blend One [_DstBlend]
  119. HLSLPROGRAM
  120. #define _TERRAIN_BASEMAP_GEN_TRIPLANAR
  121. #include "InTerra_HDRP_DefinedGlobalKeywords.hlsl"
  122. #include "InTerra_TerrainLit_Splatmap.hlsl"
  123. float4 Frag(Varyings input) : SV_Target
  124. {
  125. TerrainLitSurfaceData surfaceData;
  126. InitializeTerrainLitSurfaceData(surfaceData);
  127. InTerraTerrainLitShade(input.texcoord.zw, surfaceData, float3(0, 0, 0), float3(0, 1, 0), float3(0, 0, 0));
  128. return float4(surfaceData.albedo, surfaceData.smoothness);
  129. }
  130. ENDHLSL
  131. }
  132. Pass
  133. {
  134. Tags
  135. {
  136. "Name" = "_Triplanar_MetallicAO"
  137. "Format" = "RG16"
  138. "Size" = "1"
  139. }
  140. ZTest Always Cull Off ZWrite Off
  141. Blend One [_DstBlend]
  142. HLSLPROGRAM
  143. #define _TERRAIN_BASEMAP_GEN_TRIPLANAR
  144. #define OVERRIDE_SPLAT_SAMPLER_NAME sampler_Mask0
  145. #include "InTerra_HDRP_DefinedGlobalKeywords.hlsl"
  146. #include "InTerra_TerrainLit_Splatmap.hlsl"
  147. float2 Frag(Varyings input) : SV_Target
  148. {
  149. TerrainLitSurfaceData surfaceData;
  150. InitializeTerrainLitSurfaceData(surfaceData);
  151. InTerraTerrainLitShade(input.texcoord.zw, surfaceData, float3(0, 0, 0), float3(0, 1, 0), float3(0, 0, 0));
  152. return float2(surfaceData.metallic, surfaceData.ao);
  153. }
  154. ENDHLSL
  155. }
  156. }
  157. Fallback Off
  158. }