lcy
2025-01-02 c867ea92cce28ea0ceb312ef8e2f8e7e0888b1d6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
 
Shader "Environment/Water"
{
    Properties
    {
        _Distortion("Distortion", Range(0, 0.02)) = 0.01
        _NormalSpeed("Ripples: UV Speed (xy), UV Speed (zw)", Vector) = (1.3,-1.4,-1.5,1.6)
        _WaterNorms("Water Normals", 2D) = "white" { }
        _WaterColor("Water Color", 2D) = "white" {}
        _Color("Vexter Color",Color) = (1,1,1,1)
    }
 
        SubShader{
 
            LOD 100
 
            Tags {
                "Queue" = "Transparent"
                "IgnoreProjector" = "True"
                "LightMode" = "Always"
            }
 
            Pass {
 
                Blend SrcAlpha OneMinusSrcAlpha
                Cull Back
                Fog {Mode Off}
 
                CGPROGRAM
                #pragma target 3.0
                #pragma vertex vert
                #pragma fragment frag
 
                #pragma fragmentoption ARB_precision_hint_fastest
                #pragma exclude_renderers flash 
 
                #include "UnityCG.cginc"
                #include "SnxxzCG.cginc"
 
                struct vertInput
                {
                    float4 vertex : POSITION;
                    float4 color : COLOR;
                    float2 texcoord : TEXCOORD0;
                    float2 texcoord1 : TEXCOORD1;
                };
 
                struct vertShader {
                    float4 pos : SV_POSITION;
                    float4 color : COLOR;
                    float2 uv0 : TEXCOORD0;
                    float2 uv1 : TEXCOORD1;
                    float2 uv2 : TEXCOORD2;
                    float2 uv3 : TEXCOORD3;
                };
 
                // resources
                uniform sampler2D _WaterNorms;
                uniform float4 _WaterColor_ST;
                uniform sampler2D _WaterColor;
                uniform float4 _Color;
                uniform float4 _WaterNorms_ST;
 
                // properties
                uniform float _Distortion;
                uniform float3 _WaterColTemp;
                uniform float4 _NormalSpeed;
                uniform float _Reflect;
 
                vertShader vert(appdata_full v)
                {
                    vertShader o;
                    float3 worldVertex = mul(unity_ObjectToWorld, v.vertex).xyz;
 
                    // pos and uv tex coord
                    o.pos = UnityObjectToClipPos(v.vertex);
                    o.color = v.color*_Color;
 
                    o.uv0 = v.texcoord;
                    // texcoord Ground
                    o.uv1 = v.texcoord * _WaterColor_ST.xy + _WaterColor_ST.zw;
 
                    // texcoord Water
                    float4 waveSpeed = _NormalSpeed * _Time.x * 0.1;
                    o.uv2 = v.texcoord1 * _WaterNorms_ST + waveSpeed.xy;
                    o.uv3 = v.texcoord1 * _WaterNorms_ST * 1.2 + waveSpeed.zw;
 
                    return o;
                }
 
                fixed4 frag(vertShader i) : COLOR
                {
                    // normal calc
                    fixed3 norms = tex2D(_WaterNorms, i.uv2) - tex2D(_WaterNorms, i.uv3);
                    // water
                    fixed4 c = tex2D(_WaterColor, i.uv1 + norms.rb * _Distortion)*i.color;
 
                    return c;
            }
            ENDCG
        }
        }
            Fallback "Diffuse"
}