TerrainMesh.shader 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. // Upgrade NOTE: commented out 'float4 unity_LightmapST', a built-in variable
  2. // Upgrade NOTE: commented out 'sampler2D unity_Lightmap', a built-in variable
  3. // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
  4. // Upgrade NOTE: replaced tex2D unity_Lightmap with UNITY_SAMPLE_TEX2D
  5. Shader "M/Terrain Mesh" {
  6. Properties {
  7. _SplatTex ("Splat (RGBA)", 2D) = "white" {}
  8. _Layer1("Layer 1 (RGB)", 2D) = "white" {}
  9. _Layer2("Layer 2 (RGB)", 2D) = "white" {}
  10. _Layer3("Layer 3 (RGB)", 2D) = "white" {}
  11. _Layer4("Layer 4 (RGB)", 2D) = "white" {}
  12. }
  13. SubShader {
  14. Tags { "Queue"="Geometry" "RenderType"="Opaque"}
  15. LOD 200
  16. Pass {
  17. CGPROGRAM
  18. #pragma vertex vert
  19. #pragma fragment frag
  20. #include "UnityCG.cginc"
  21. sampler2D _SplatTex;
  22. sampler2D _Layer1;
  23. sampler2D _Layer2;
  24. sampler2D _Layer3;
  25. sampler2D _Layer4;
  26. // sampler2D unity_Lightmap; //Far lightmap.
  27. // float4 unity_LightmapST; //Lightmap atlasing data.
  28. float4 unity_LightmapIndST;
  29. float4 _Layer1_ST;
  30. float4 _Layer2_ST;
  31. float4 _Layer3_ST;
  32. float4 _Layer4_ST;
  33. struct appdata {
  34. float4 vertex : POSITION;
  35. float4 normal : NORMAL;
  36. float4 texcoord : TEXCOORD0;
  37. float4 texcoord1 : TEXCOORD1;
  38. };
  39. struct v2f {
  40. float4 pos : SV_POSITION;
  41. float2 uv : TEXCOORD0;
  42. float2 lightmapUV : TEXCOORD1;
  43. float2 uvLayer1 : TEXCOORD2;
  44. float2 uvLayer2 : TEXCOORD3;
  45. float2 uvLayer3 : TEXCOORD4;
  46. float2 uvLayer4 : TEXCOORD5;
  47. };
  48. v2f vert (appdata v)
  49. {
  50. v2f o;
  51. o.pos = UnityObjectToClipPos (v.vertex);
  52. o.uv = v.texcoord.xy;
  53. o.lightmapUV = v.texcoord1.xy * unity_LightmapST.xy + unity_LightmapST.zw;
  54. o.uvLayer1 = TRANSFORM_TEX(v.texcoord, _Layer1);
  55. o.uvLayer2 = TRANSFORM_TEX(v.texcoord, _Layer2);
  56. o.uvLayer3 = TRANSFORM_TEX(v.texcoord, _Layer3);
  57. o.uvLayer4 = TRANSFORM_TEX(v.texcoord, _Layer4);
  58. return o;
  59. }
  60. float4 getLayerColor(sampler2D layer, float2 uv, float weight)
  61. {
  62. return tex2D(layer, uv) * weight;
  63. }
  64. fixed4 frag (v2f i) : COLOR
  65. {
  66. float4 weights = tex2D(_SplatTex, i.uv);
  67. float4 layersColor = getLayerColor(_Layer1, i.uvLayer1.xy, weights.x);
  68. layersColor += getLayerColor(_Layer2, i.uvLayer2.xy, weights.y);
  69. layersColor += getLayerColor(_Layer3, i.uvLayer3.xy, weights.z);
  70. layersColor += getLayerColor(_Layer4, i.uvLayer4.xy, weights.w);
  71. fixed4 light = UNITY_SAMPLE_TEX2D (unity_Lightmap, i.lightmapUV);
  72. light.xyz = DecodeLightmap(light);
  73. light.w = 1;
  74. return (layersColor * light);
  75. }
  76. ENDCG
  77. }
  78. }
  79. }