三筑煮、效果實(shí)現(xiàn):8绿满、水(5)實(shí)現(xiàn)岸邊邊界線

加入水岸線效果臂外,shader代碼如下

Shader "Customer/Water01"
{
    Properties
    {
        _Color("Color水顏色", color) = (0,0,0.8,0.5)
        _WaveNormalMap("Wave Normal Map", 2D) = "bump"{}
        _WaveHeight("Wave Height",Range(0,1)) = 0.1
        _WaveNormalScale("Wave Scale", float) = 10.0
        _WaveNormalSpeed("Wave Speed", float) = 1.0
        _waveNumber("Wave Number",float) = 4
        _BigWaveSpeed("Big Wave Speed",float) = 10
        _BigWaveHeight("Big Wave Height",float) = 0.5
        _BigWaveNumber("Big Wave Number",float) = 10
        _Opacity("不透明度", range(0, 1)) = 0.5

        _BowenTex("Bowen Texture", 2D) = "white" {}
        _BowenSpeed("Bowen",Range(-5,5)) = 0.1
        _BowenOpacity("擾動不透明度", range(0, 1)) = 0.5

         _dividHeight("分界線高度",Range(-1,1)) = -0.1
        _EdgeWidth("水岸線寬度",Range(0,1)) = 0.1
        _EdgeTex("水岸線形狀", 2D) = "black" {}
        _EdgeSpeed("水岸線擴(kuò)展速度",Range(1,10)) = 5
    }
    SubShader
    {
        Tags
        {
            "Queue" = "Transparent"
            "RenderType" = "Transparent"
        }
        GrabPass{
            "_GrabPassTex"
        }
        LOD 100

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"
            #include "Lighting.cginc" 
            #pragma multi_compile_fog

            float4 _Color;
            sampler2D _WaveNormalMap;
            float4 _WaveNormalMap_ST;
            fixed _WaveHeight;
            float _WaveNormalScale;
            fixed _WaveNormalSpeed;
            fixed _waveNumber;

            fixed _dividHeight;
            fixed _BigWaveSpeed;
            fixed _BigWaveHeight;
            fixed _BigWaveNumber;

            // 輸入?yún)?shù)
            float4 _MainTex_ST;
            uniform half _Opacity;

            sampler2D _GrabPassTex;//用于渲染透明物體
            uniform sampler2D_float _CameraDepthTexture;

            sampler2D _BowenTex;//波紋擾動噪聲
            float _BowenSpeed;//波紋擾動流動速度
            float4 _BowenTex_ST;//波紋擾動Tiling
            uniform half _BowenOpacity;// 波紋擾動透明度

            fixed _EdgeWidth;//岸線
            fixed _EdgeSpeed;//水岸下沖擊速度
            sampler2D _EdgeTex;
            // 輸入結(jié)構(gòu)
            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
                float3 normal:NORMAL;//法線通常都是必須的
                float4 tangent : TANGENT;
                float3 color:COLOR0;
            };
            // 輸出結(jié)構(gòu)
            struct v2f
            {
                float4 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;   // 由模型頂點(diǎn)信息換算而來的頂點(diǎn)屏幕位置
                float depth : TEXCOORD2;
                float3 normal:NORMAL;//法線通常都是必須的
                float4 lightDir_Tangent:TEXCOORD5;
                float4 screenuv:TEXCOORD1;
                float3 viewDir:TEXCOORD3;
                float4 vertex_Local : TEXCOORD4;
                float3 color:COLOR0;
            };

            // 輸入結(jié)構(gòu)>>>頂點(diǎn)Shader>>>輸出結(jié)構(gòu)
            v2f vert(appdata v)
            {
                //v2f o;
                v2f o = (v2f)0;
                UNITY_INITIALIZE_OUTPUT(v2f, o);
                //獲取自身深度值
                COMPUTE_EYEDEPTH(o.depth);

                float2 flow = float2(_Time.x * _WaveNormalSpeed, _Time.z * 1.215 * _WaveNormalSpeed);

                fixed3 n = UnpackNormal(tex2Dlod(_WaveNormalMap, float4(v.uv.xy * _WaveNormalScale + flow, 0, 0))).xyz;
                //float tempN = tex2Dlod(_WaveNormalMap, float4(v.uv.xy*_WaveNormalScale + flow, 0, 0)).g;這種寫法也可以,當(dāng)然下面的高度也要用下面這句
                //v.vertex.y = v.vertex.y + tempN * _WaveHeight + height;

                float height = 0;

                fixed wavebevel = 5;

                fixed attenuation = (1.0 - v.uv.y);

                //1喇颁、波浪效果
                fixed b = 0.8;
                fixed x = v.uv.y + b * sin(v.uv.y);
                if (v.vertex.y > _dividHeight)
                {
                    height = (cos(x * _BigWaveNumber - _Time.z * _BigWaveSpeed + v.uv.x * wavebevel) + 1) * 0.5 * _BigWaveHeight * attenuation;
                    height += (cos(x * _BigWaveNumber - _Time.z * _BigWaveSpeed + (1.0 - v.uv.x) * wavebevel) + 1) * 0.5 * _BigWaveHeight * attenuation;
                }
                v.vertex.y = v.vertex.y + n * _WaveHeight + height;


                if (v.vertex.y > _dividHeight)
                    v.vertex.z -= height * 0.1;

                o.vertex = UnityObjectToClipPos(v.vertex);
                //rotation
                TANGENT_SPACE_ROTATION;
                o.lightDir_Tangent.xyz = mul(rotation, ObjSpaceLightDir(v.vertex));
                o.normal = v.normal;//得到法線漏健,很重要

                //屏幕UV
                o.screenuv = ComputeScreenPos(o.vertex);// 背景紋理采樣坐標(biāo)
                o.viewDir = normalize(_WorldSpaceCameraPos.xyz - mul(unity_ObjectToWorld, v.vertex).xyz);
                o.viewDir = mul(rotation, mul(o.viewDir, unity_ObjectToWorld));//得到視方向
                    //本地空間位置
                o.vertex_Local = v.vertex;
                o.color = v.color;

                //UV
                o.uv.xy = TRANSFORM_TEX(v.uv, _BowenTex);//擾動波紋紋理Tilling
                o.uv.zw = TRANSFORM_TEX(v.uv, _WaveNormalMap);
                //UNITY_TRANSFER_FOG(o, o.vertex);
                return o;
            }

            fixed4 texCross(sampler2D tex, float2 uv, float speed)
            {
                float4 col1 = tex2D(tex, uv + float2(-_Time.x*speed, -_Time.x*speed));

                float4 col2 = tex2D(tex, uv + float2(_Time.x*speed*0.5, _Time.x*0.15*speed));

                float4 col3 = tex2D(tex, uv + float2(_Time.x*speed*0.84, -_Time.x*0.11*speed));

                float4 col4 = tex2D(tex, uv + float2(_Time.x*speed*0.105, -_Time.x*0.3515*speed));

                return (col1 + col2 + col3 + col4) / 4;
            }

            // 輸出結(jié)構(gòu)>>>像素
            fixed4 frag(v2f i) : SV_Target
            {
                //屏幕深度Z
                float ScreenZ = LinearEyeDepth(SAMPLE_DEPTH_TEXTURE_PROJ(_CameraDepthTexture, UNITY_PROJ_COORD(i.screenuv)));
                float halfWidth = _EdgeWidth * 0.5f;
                float diff = saturate(abs(i.depth - ScreenZ) / halfWidth);
                fixed mask = dot(i.normal, float3(0, -1, 0)) + 0.5;
                mask = mask > 0.2 ? 0 : 1;

                //4、Bowen Col
                fixed4 boWen = texCross(_BowenTex, i.uv, _BowenSpeed)*mask;
                boWen.a = 0;

                float2 flow = float2(_Time.x * _WaveNormalSpeed, _Time.z * 1.215 * _WaveNormalSpeed);
                fixed3 tangentNormal = UnpackNormal(tex2D(_WaveNormalMap, i.uv.zw * _WaveNormalScale + flow)).xyz;
                tangentNormal.xy = tangentNormal.xy * 10;
                fixed3 normal = normalize(tangentNormal);//法線

                //越近越白
                fixed d = clamp(1.0 - (abs(i.depth - ScreenZ) * 0.5), 0, 1);
                //越遠(yuǎn)越白
                fixed d1 = clamp(abs(i.depth - ScreenZ)*0.1 + 0.1, 0, 1.0);

                //燈光方向
                fixed3 world_lightDir = normalize(-_WorldSpaceLightPos0.xyz);
                fixed3 world_normal = normalize(mul(unity_ObjectToWorld, normal));//
                fixed3 world_normal_self = normalize(mul((float3x3)unity_ObjectToWorld, i.normal));
                fixed3 n = mask > 0 ? world_normal : world_normal_self;
                fixed3 diffuse = dot(world_lightDir, n) * 0.5 + 0.5;


                //白沫以及流動效果橘霎,因為法線貼圖隨時間變動蔫浆,所以有了流動的白沫
                //計算燈光反射
                fixed3 reflectDir = reflect(i.lightDir_Tangent, normal);
                //高光,15是高光程度,這個參數(shù)也可以開放出去
                fixed3 specular = max(pow(max(0, dot(i.viewDir, reflectDir)), 15), 0) * (1.0 - d);

                //5姐叁、岸線
                //岸線顔色
                fixed4 edgeCol = mask > 0 ? lerp(_EdgeWidth, _Color, diff) : _Color;
                //水岸線
                fixed edge = mask > 0 ? abs(lerp(_EdgeWidth, 0, diff)) : 0;

                float4 finalCol = fixed4(diffuse, 0);
                //2瓦盛、透明水
                //Grab Tex
                fixed4 grabCol;//水的主體透明顏色值
                
                grabCol = tex2D(_GrabPassTex, i.screenuv.xy / i.screenuv.w);
                //深色
                grabCol = lerp(grabCol + boWen * _BowenOpacity, lerp(grabCol, _Color, _Color.a) + boWen *0.1, _Opacity);

                //水岸線最終輸出
                fixed mm = (d - edge) * 2;
                fixed2 edgeUV = i.uv.xy / _BowenTex_ST.xy;
                fixed4 edgeColFinal = tex2D(_EdgeTex, edgeUV + float2(0.5 + sin(_Time.x), d*0.5 - _Time.x*_EdgeSpeed)).r*mm;
                edgeColFinal *= tex2D(_EdgeTex, edgeUV + float2(0.5 - sin(_Time.x), d*0.5 - _Time.x*_EdgeSpeed)).r*mm;
                edgeColFinal *= edgeCol.r*0.8;

                finalCol = grabCol;
                if (mask > 0)
                    finalCol.rgb += specular * 2;

                return finalCol * _LightColor0 + edgeColFinal * mask;
            }
        ENDCG
        }
    }
}

水岸線關(guān)鍵代碼:
//水岸線最終輸出
fixed mm = (d - edge) * 2;
fixed2 edgeUV = i.uv.xy / _BowenTex_ST.xy;
fixed4 edgeColFinal = tex2D(_EdgeTex, edgeUV + float2(0.5 + sin(_Time.x), d0.5 - _Time.x_EdgeSpeed)).rmm;
edgeColFinal = tex2D(_EdgeTex, edgeUV + float2(0.5 - sin(_Time.x), d0.5 - _Time.x
_EdgeSpeed)).r*mm;
edgeColFinal = edgeCol.r0.8;

最終效果圖:


2.gif

面板參數(shù):


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市外潜,隨后出現(xiàn)的幾起案子原环,更是在濱河造成了極大的恐慌,老刑警劉巖处窥,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嘱吗,死亡現(xiàn)場離奇詭異,居然都是意外死亡滔驾,警方通過查閱死者的電腦和手機(jī)谒麦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哆致,“玉大人弄匕,你說我怎么就攤上這事」敛t!?“怎么了迁匠?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我城丧,道長延曙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任亡哄,我火速辦了婚禮枝缔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蚊惯。我一直安慰自己愿卸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布截型。 她就那樣靜靜地躺著趴荸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宦焦。 梳的紋絲不亂的頭發(fā)上发钝,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天,我揣著相機(jī)與錄音波闹,去河邊找鬼酝豪。 笑死,一個胖子當(dāng)著我的面吹牛精堕,可吹牛的內(nèi)容都是我干的孵淘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼歹篓,長吁一口氣:“原來是場噩夢啊……” “哼夺英!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起滋捶,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤痛悯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后重窟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體载萌,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年巡扇,在試婚紗的時候發(fā)現(xiàn)自己被綠了扭仁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡厅翔,死狀恐怖乖坠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情刀闷,我是刑警寧澤熊泵,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布仰迁,位于F島的核電站,受9級特大地震影響顽分,放射性物質(zhì)發(fā)生泄漏徐许。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一卒蘸、第九天 我趴在偏房一處隱蔽的房頂上張望雌隅。 院中可真熱鬧,春花似錦缸沃、人聲如沸恰起。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽检盼。三九已至,卻和暖如春武氓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背仇箱。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工县恕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人剂桥。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓忠烛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親权逗。 傳聞我的和親對象是個殘疾皇子美尸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容