| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 | 
							- Shader "Unlit/TerrainWater"
 
- {
 
-     Properties
 
-     {
 
-         
 
-         _MainTex ("Texture", 2D) = "white" {}
 
-         _WaterMask("WaterMask",2D) = "white" {}
 
-         _WaterCol("WaterCol",color) = (1,1,1,1)
 
-         //_WaterFarCol("WaterFarCol",color) = (1,1,1,1)
 
-         _DetailNormal("DetailNormal",2D) = "bump" {}
 
-         _NormalSpeed1("NormalSpeed1",Vector) = (1,1,2,0.5)
 
-         _NormalSpeed2("NormalSpeed2",Vector) = (1,1,2,0.5)
 
-         _NormalSpeed3("NormalSpeed3",Vector) = (1,1,2,0.5)
 
-     }
 
-     SubShader
 
-     {
 
-         Tags { "RenderType"="Opaque" }
 
-         LOD 100
 
-         Pass
 
-         {
 
-             CGPROGRAM
 
-             #pragma vertex vert
 
-             #pragma fragment frag
 
-             // make fog work
 
-             #pragma multi_compile_fog
 
-             #include "UnityCG.cginc"
 
-             struct appdata
 
-             {
 
-                 float4 vertex : POSITION;
 
-                 float2 uv : TEXCOORD0;
 
-                 float4 normal: NORMAL;
 
-                 float4 tangent: TANGENT;
 
-             };
 
-             struct v2f
 
-             {
 
-                 float4 uv : TEXCOORD0;               
 
-                 float4 vertex : SV_POSITION;
 
-                 float4 tangentToWorld1: TEXCOORD1;
 
-                 float4 tangentToWorld2: TEXCOORD2;
 
-                 float4 tangentToWorld3: TEXCOORD3;
 
-             };
 
-             sampler2D _MainTex, _DetailNormal, _WaterMask;
 
-             float4 _MainTex_ST, _DetailNormal_ST, _WaterMask_ST;
 
-             half4 _WaterCol/*, _WaterFarCol*/;
 
-             float4 _NormalSpeed1, _NormalSpeed2, _NormalSpeed3;
 
-             v2f vert (appdata v)
 
-             {
 
-                 v2f o;
 
-                 o.vertex = UnityObjectToClipPos(v.vertex);
 
-                 float3 worldPos = mul(unity_ObjectToWorld, float4(o.vertex.xyz, 1)).xyz;
 
-                 o.uv.xy = TRANSFORM_TEX(v.uv, _MainTex); 
 
-                 o.uv.zw = TRANSFORM_TEX(v.uv, _DetailNormal);
 
-                 float3 worldNormal = UnityObjectToWorldNormal(v.normal);
 
-                 float3 worldTangent = UnityObjectToWorldDir(v.tangent.xyz);
 
-                 float3 worldBinormal = cross(worldNormal, worldTangent) * v.tangent.w;
 
-                 o.tangentToWorld1 = float4(worldTangent.x, worldBinormal.x, worldNormal.x, worldPos.x);
 
-                 o.tangentToWorld2 = float4(worldTangent.y, worldBinormal.y, worldNormal.y, worldPos.y);
 
-                 o.tangentToWorld3 = float4(worldTangent.z, worldBinormal.z, worldNormal.z, worldPos.z);
 
-                 return o;
 
-             }
 
-             half4 frag (v2f i) : SV_Target
 
-             {
 
-                 // sample the texture
 
-                 fixed4 col = tex2D(_MainTex, i.uv.xy);
 
-                 fixed waterFactor = tex2D(_WaterMask, i.uv.xy).r;
 
-                 half3 MyNormal1 = UnpackNormal(tex2D(_DetailNormal, i.uv.wz * _NormalSpeed1.zw + _Time.y * normalize(_NormalSpeed1.xy) * 0.3));
 
-                 half3 worldMyNormal1 = half3(dot(i.tangentToWorld1.xyz, MyNormal1), dot(i.tangentToWorld2.xyz, MyNormal1), dot(i.tangentToWorld3.xyz, MyNormal1));
 
-                 half3 MyNormal2 = UnpackNormal(tex2D(_DetailNormal, i.uv.wz * _NormalSpeed2.zw + _Time.y * normalize(_NormalSpeed2.xy) * 0.3));
 
-                 half3 worldMyNormal2 = half3(dot(i.tangentToWorld1.xyz, MyNormal2), dot(i.tangentToWorld2.xyz, MyNormal2), dot(i.tangentToWorld3.xyz, MyNormal2));
 
-                 half3 MyNormal3 = UnpackNormal(tex2D(_DetailNormal, i.uv.wz * _NormalSpeed3.zw + _Time.y * normalize(_NormalSpeed3.xy) * 0.3));
 
-                 half3 worldMyNormal3 = half3(dot(i.tangentToWorld1.xyz, MyNormal3), dot(i.tangentToWorld2.xyz, MyNormal3), dot(i.tangentToWorld3.xyz, MyNormal3));
 
-                 half3 wNormal = worldMyNormal1 + worldMyNormal2 + worldMyNormal3;
 
-                 wNormal.xy *= 1;
 
-                 //wNormal.z *=0.5;
 
-                 wNormal = normalize(wNormal);
 
-                // wNormal = UnityObjectToWorldNormal(wNormal);
 
-                 float3 lightDir = normalize(_WorldSpaceLightPos0.xyz);
 
-                 float3 worldpos = float3(i.tangentToWorld1.w, i.tangentToWorld2.w, i.tangentToWorld3.w);
 
-                
 
-                 fixed3 viewDir = normalize(_WorldSpaceCameraPos - worldpos);
 
-                 /*fixed3 halfDir = normalize(viewDir+ lightDir);
 
-                 half3 HeightLingt = half3(2, 2, 2) *pow( saturate(dot(halfDir, wNormal)),20)* waterCol;*/
 
-                 /*float distance = length(_WorldSpaceCameraPos - worldpos);
 
-                 half3 waterBaseCol = lerp(_WaterCol.rgb, _WaterFarCol.rgb, pow(saturate((distance /12000)),5)); */
 
-                 half3 waterCol = saturate(dot(wNormal, lightDir)) * _WaterCol.rgb * 0.5 + _WaterCol.rgb * 0.5;
 
-                 float3 reflectDir = reflect(-viewDir, wNormal);
 
-                 float4 envSamlpe= UNITY_SAMPLE_TEXCUBE(unity_SpecCube0, reflectDir);
 
-                 half3 refecltCol = DecodeHDR(envSamlpe, unity_SpecCube0_HDR);
 
-                 half3 finalWaterCol = waterCol /*+ HeightLingt*/+ refecltCol*0.4;
 
-                
 
-                 half4 fnialCol = half4(lerp(col.rgb, finalWaterCol, waterFactor), 1);
 
-                 return fnialCol;
 
-             }
 
-             ENDCG
 
-         }
 
-     }
 
- }
 
 
  |