InTerra_Tracks.shader 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. Shader "InTerra/Tracks Material"
  2. {
  3. Properties
  4. {
  5. _HeightTex ("Heightmap Texture", 2D) = "black" {}
  6. _TerrainTrackContrast("Contrast", Range(0,1)) = 0.1
  7. _EdgeFading("Edge Fading", vector) = ( -0.1,0.6,-0.4,0.8)
  8. _TrackFadeTime("", float) = 30
  9. _TrackTime("", float) = 0
  10. }
  11. SubShader
  12. {
  13. Tags {"Queue" = "Transparent+100" "IgnoreProjector" = "True" "RenderType" = "Transparent"}
  14. ZWrite Off
  15. ZTest On
  16. Lighting Off
  17. Blend SrcAlpha OneMinusSrcAlpha
  18. Cull off
  19. Pass
  20. {
  21. CGPROGRAM
  22. #pragma vertex vert
  23. #pragma fragment frag
  24. #include "UnityCG.cginc"
  25. #pragma shader_feature_local _INVERT
  26. #pragma shader_feature_local _ORIENTATION
  27. #pragma shader_feature_local __ _TRACKS _FOOTPRINTS
  28. struct appdata
  29. {
  30. float4 vertex : POSITION;
  31. float4 color : COLOR;
  32. float2 uv : TEXCOORD0;
  33. float2 uv2 : TEXCOORD1;
  34. };
  35. struct v2f
  36. {
  37. float4 vertex : SV_POSITION;
  38. float4 color : COLOR;
  39. float2 uv : TEXCOORD0;
  40. float2 uv2 : TEXCOORD1;
  41. };
  42. sampler2D _HeightTex;
  43. float4 _HeightTex_ST;
  44. float _TerrainTrackContrast, _TrackFadeTime, _TrackTime;
  45. float4 _EdgeFading;
  46. v2f vert (appdata v)
  47. {
  48. v2f o;
  49. o.vertex = UnityObjectToClipPos(v.vertex);
  50. o.uv = TRANSFORM_TEX(v.uv.xy, _HeightTex);
  51. o.uv2 = v.uv2;
  52. o.color = v.color;
  53. UNITY_TRANSFER_FOG(o,o.vertex);
  54. return o;
  55. }
  56. fixed4 frag(v2f i) : SV_Target
  57. {
  58. float height = 1;
  59. float2 texUV = i.uv;
  60. #ifdef _ORIENTATION
  61. texUV.xy = float2(1-texUV.x, 1- texUV.y);
  62. #else
  63. texUV.xy = float2(texUV.y, 1 - texUV.x);
  64. #endif
  65. #if defined(_TRACKS) || defined(_FOOTPRINTS)
  66. height = tex2D(_HeightTex, texUV);
  67. #ifndef _INVERT
  68. height = 1 - height;
  69. #endif
  70. #endif
  71. float fading = (1 - ((_TrackTime - i.color.b) / _TrackFadeTime));
  72. if(fading > 1)
  73. {
  74. fading = (i.color.a);
  75. }
  76. else
  77. {
  78. fading = saturate(i.color.a * fading);
  79. }
  80. float2 uv = i.uv2;
  81. float strenght = 1;
  82. float2 uv2 = i.uv2;
  83. float alpha = 1.0;
  84. float2 center = float2(0.5, 0.5);
  85. float2 edgeNormals;
  86. float2 fadingUv = i.uv2;
  87. float2 distances;
  88. float normalsOffset = 0.01;
  89. #ifdef _TRACKS
  90. distances = distance(fadingUv.y, center.y);
  91. #else
  92. distances = distance(fadingUv, center);
  93. #endif
  94. alpha = 1 - smoothstep(_EdgeFading.x, _EdgeFading.y, distances);
  95. float alpha2 = 1-step(0.5, distances.xy) ;
  96. alpha *= alpha2 * fading;
  97. #if defined(_TRACKS) || defined(_FOOTPRINTS)
  98. height = (lerp(1, height, _TerrainTrackContrast ));
  99. #endif
  100. return float4(height.xxx,alpha) ;
  101. }
  102. ENDCG
  103. }
  104. }
  105. CustomEditor "InTerra.InTerra_TracksShaderGUI"
  106. }