InTerra_Base.shader 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. Shader "Hidden/InTerra/InTerra-Base" {
  2. Properties{
  3. _MainTex("Base (RGB) Smoothness (A)", 2D) = "white" {}
  4. _TriplanarTex("splat0", 2D) = "white" {}
  5. _MetallicTex("Metallic (R), A.Occlussion (B)", 2D) = "white" {}
  6. _Triplanar_MetallicAO("Metallic (R)", 2D) = "white" {}
  7. _NumLayersCount("", Float) = 0
  8. // used in fallback on old cards
  9. _Color("Main Color", Color) = (1,1,1,1)
  10. [HideInInspector] _TerrainHolesTexture("Holes Map (RGB)", 2D) = "white" {}
  11. [HideInInspector] _TerrainSizeXZPosY("", Vector) = (0,0,0)
  12. [HideInInspector] _TriplanarOneToAllSteep("", Float) = 0
  13. [HideInInspector] _TriplanarSharpness("Triplanar Sharpness", Range(3,10)) = 8
  14. _HT_distance_scale("Scale", Range(0,0.5)) = 0.25
  15. }
  16. SubShader{
  17. Tags {
  18. "RenderType" = "Opaque"
  19. "Queue" = "Geometry-100"
  20. }
  21. LOD 200
  22. CGPROGRAM
  23. #pragma surface surf Standard vertex:SplatmapVert addshadow fullforwardshadows
  24. #pragma instancing_options assumeuniformscaling nomatrices nolightprobe nolightmap forwardadd
  25. #pragma target 3.5
  26. #define _ALPHATEST_ON
  27. #pragma shader_feature_local _TERRAIN_TRIPLANAR_ONE
  28. #pragma shader_feature_local _TERRAIN_DISTANCEBLEND
  29. #define INTERRA_TERRAIN
  30. #define TERRAIN_BASE_PASS
  31. #define TERRAIN_INSTANCED_PERPIXEL_NORMAL
  32. #include "InTerra_DefinedGlobalKeywords.cginc"
  33. #include "InTerra_InputsAndFunctions.cginc"
  34. #include "InTerra_Mixing.cginc"
  35. #include "UnityPBSLighting.cginc"
  36. sampler2D _MainTex;
  37. sampler2D _MetallicTex;
  38. sampler2D _TriplanarTex;
  39. sampler2D _Triplanar_MetallicAO;
  40. void surf(Input IN, inout SurfaceOutputStandard o) {
  41. #ifdef _ALPHATEST_ON
  42. ClipHoles(IN.tc.xy);
  43. #endif
  44. half4 albedo = tex2D(_MainTex, IN.tc.xy);
  45. half4 metallicAO = tex2D(_MetallicTex, IN.tc.xy);
  46. #ifdef _TERRAIN_TRIPLANAR_ONE
  47. if (_NumLayersCount <= 4)
  48. {
  49. float3 weights;
  50. float3 flipUV = float3(1, 1, -1);
  51. #if defined(UNITY_INSTANCING_ENABLED) && !defined(SHADER_API_D3D11_9X)
  52. weights = abs(IN.terrainNormals);
  53. #else
  54. weights = abs(IN.worldNormal);
  55. #endif
  56. weights = pow(weights, _TriplanarSharpness);
  57. weights = weights / (weights.x + weights.y + weights.z);
  58. float2 frontUV = TerrainFrontUV(IN.worldPos, _MainTex_ST, IN.tc.xy, flipUV);
  59. float2 sideUV = TerrainSideUV(IN.worldPos, _MainTex_ST, IN.tc.xy, flipUV);
  60. half4 cFront = tex2D(_TriplanarTex, frontUV);
  61. half4 cSide = tex2D(_TriplanarTex, sideUV);
  62. TriplanarBase(albedo, cFront, cSide, weights, metallicAO.b, _TriplanarOneToAllSteep);
  63. half4 tint = tex2D(_TerrainColorTintTexture, IN.tc.xy * _TerrainColorTintTexture_ST.xy + _TerrainColorTintTexture_ST.zw);
  64. albedo.rgb = lerp(albedo.rgb, ((albedo.rgb) * (tint)), _TerrainColorTintStrenght).rgb;
  65. half4 mAoFront = tex2D(_Triplanar_MetallicAO, frontUV);
  66. half4 mAoSide = tex2D(_Triplanar_MetallicAO, sideUV);
  67. TriplanarBase(metallicAO, mAoFront, mAoSide, weights, metallicAO.b, _TriplanarOneToAllSteep);
  68. }
  69. #endif
  70. o.Albedo = albedo.rgb;
  71. o.Alpha = 1;
  72. o.Smoothness = lerp(albedo.a, 1.0f, _InTerra_GlobalWetness);
  73. o.Metallic = metallicAO.r;
  74. o.Occlusion = metallicAO.g;
  75. #if defined(INSTANCING_ON) && defined(SHADER_TARGET_SURFACE_ANALYSIS) && defined(TERRAIN_INSTANCED_PERPIXEL_NORMAL)
  76. o.Normal = float3(0, 0, 1); // make sure that surface shader compiler realizes we write to normal, as UNITY_INSTANCING_ENABLED is not defined for SHADER_TARGET_SURFACE_ANALYSIS.
  77. #endif
  78. #if defined(UNITY_INSTANCING_ENABLED) && !defined(SHADER_API_D3D11_9X) && defined(TERRAIN_INSTANCED_PERPIXEL_NORMAL)
  79. o.Normal = normalize(tex2D(_TerrainNormalmapTexture, IN.tc.zw).xyz * 2 - 1).xzy;
  80. #endif
  81. }
  82. ENDCG
  83. UsePass "Hidden/Nature/Terrain/Utilities/PICKING"
  84. UsePass "Hidden/Nature/Terrain/Utilities/SELECTION"
  85. }
  86. FallBack "Diffuse"
  87. }