游戏蛮牛学习群(纯技术交流,不闲聊):539178957
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:2236

当前位置:游戏蛮牛 技术专区 开发者专栏

__________________________________________________________________________________
开发者干货区版块规则:

  1、文章必须是图文形式。(至少2幅图)
      2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
      3、本版块只支持在游戏蛮牛原创首发,不支持转载。
      4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
      5、......
__________________________________________________________________________________
查看: 1280|回复: 22

[海莉zhe] 【每日一记】Unity3D 实战练习- 模拟湖水效果 Shader (十)【小白篇】

[复制链接]  [移动端链接]
排名
697
昨日变化

63

主题

226

帖子

2750

积分

Rank: 9Rank: 9Rank: 9

UID
76890
好友
77
蛮牛币
3943
威望
0
注册时间
2015-3-4
在线时间
982 小时
最后登录
2018-6-24

专栏作家

发表于 2018-6-6 20:56:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
        在游戏中,我们总有一些小需求,在环境中去模拟一些东西,例如水。所以小编就和大家一起来学习简单写一个有关水的小例子吧!

       1.新建Unity项目,首先先建一个WaterDemo.Shader  文件;

          WaterDemo.Shader   代码如下:

           
[C#] 纯文本查看 复制代码
Shader "Custom/Water"
{
        Properties
        {
                _WaterNormal("Water Normal", 2D) = "bump" {}
                _NormalScale("Normal Scale", Float) = 0
                _DeepColor("Deep Color", Color) = (0,0,0,0)
                _ShalowColor("Shalow Color", Color) = (1,1,1,0)
                _WaterDepth("Water Depth", Float) = 0
                _WaterFalloff("Water Falloff", Float) = 0
                _WaterSpecular("Water Specular", Float) = 0
                _WaterSmoothness("Water Smoothness", Float) = 0
                _Distortion("Distortion", Float) = 0.5
                _Foam("Foam", 2D) = "white" {}
                _FoamDepth("Foam Depth", Float) = 0
                _FoamFalloff("Foam Falloff", Float) = 0
                _FoamSpecular("Foam Specular", Float) = 0
                _FoamSmoothness("Foam Smoothness", Float) = 0
                [HideInInspector] _texcoord( "", 2D ) = "white" {}
                [HideInInspector] __dirty( "", Int ) = 1
        }

        SubShader
        {
                Tags{ "RenderType" = "Opaque"  "Queue" = "Transparent+0" }
                Cull Back
                GrabPass{ }
                CGPROGRAM
                #include "UnityStandardUtils.cginc"
                #include "UnityShaderVariables.cginc"
                #include "UnityCG.cginc"
                #pragma target 3.0
                #pragma surface surf StandardSpecular keepalpha 
                struct Input
                {
                        half2 uv_texcoord;
                        float4 screenPos;
                };

                uniform half _NormalScale;
                uniform sampler2D _WaterNormal;
                uniform float4 _WaterNormal_ST;
                uniform half4 _DeepColor;
                uniform half4 _ShalowColor;
                uniform sampler2D _CameraDepthTexture;
                uniform half _WaterDepth;
                uniform half _WaterFalloff;
                uniform half _FoamDepth;
                uniform half _FoamFalloff;
                uniform sampler2D _Foam;
                uniform float4 _Foam_ST;
                uniform sampler2D _GrabTexture;
                uniform half _Distortion;
                uniform half _WaterSpecular;
                uniform half _FoamSpecular;
                uniform half _WaterSmoothness;
                uniform half _FoamSmoothness;

                void surf( Input i , inout SurfaceOutputStandardSpecular o )
                {
                        float2 uv_WaterNormal = i.uv_texcoord * _WaterNormal_ST.xy + _WaterNormal_ST.zw;
                        float2 panner22 = ( uv_WaterNormal + 1.0 * _Time.y * float2( -0.03,0 ));
                        float2 panner19 = ( uv_WaterNormal + 1.0 * _Time.y * float2( 0.04,0.04 ));
                        float3 temp_output_24_0 = BlendNormals( UnpackScaleNormal( tex2D( _WaterNormal, panner22 ) ,_NormalScale ) , UnpackScaleNormal( tex2D( _WaterNormal, panner19 ) ,_NormalScale ) );
                        o.Normal = temp_output_24_0;
                        float4 ase_screenPos = float4( i.screenPos.xyz , i.screenPos.w + 0.00000000001 );
                        float eyeDepth1 = LinearEyeDepth( SAMPLE_DEPTH_TEXTURE_PROJ( _CameraDepthTexture, UNITY_PROJ_COORD(ase_screenPos) ) );
                        float temp_output_89_0 = abs( ( eyeDepth1 - ase_screenPos.w ) );
                        float temp_output_94_0 = saturate( pow( ( temp_output_89_0 + _WaterDepth ) , _WaterFalloff ) );
                        float4 lerpResult13 = lerp( _DeepColor , _ShalowColor , temp_output_94_0);
                        float2 uv_Foam = i.uv_texcoord * _Foam_ST.xy + _Foam_ST.zw;
                        float2 panner116 = ( uv_Foam + 1.0 * _Time.y * float2( -0.01,0.01 ));
                        float temp_output_114_0 = ( saturate( pow( ( temp_output_89_0 + _FoamDepth ) , _FoamFalloff ) ) * tex2D( _Foam, panner116 ).r );
                        float4 lerpResult117 = lerp( lerpResult13 , half4(1,1,1,0) , temp_output_114_0);
                        float4 ase_screenPos164 = ase_screenPos;
                        #if UNITY_UV_STARTS_AT_TOP
                        float scale164 = -1.0;
                        #else
                        float scale164 = 1.0;
                        #endif
                        float halfPosW164 = ase_screenPos164.w * 0.5;
                        ase_screenPos164.y = ( ase_screenPos164.y - halfPosW164 ) * _ProjectionParams.x* scale164 + halfPosW164;
                        ase_screenPos164.xyzw /= ase_screenPos164.w;
                        float4 screenColor65 = tex2D( _GrabTexture, ( half3( (ase_screenPos164).xy ,  0.0 ) + ( temp_output_24_0 * _Distortion ) ).xy );
                        float4 lerpResult93 = lerp( lerpResult117 , screenColor65 , temp_output_94_0);
                        o.Albedo = lerpResult93.rgb;
                        float lerpResult130 = lerp( _WaterSpecular , _FoamSpecular , temp_output_114_0);
                        half3 temp_cast_3 = (lerpResult130).xxx;
                        o.Specular = temp_cast_3;
                        float lerpResult133 = lerp( _WaterSmoothness , _FoamSmoothness , temp_output_114_0);
                        o.Smoothness = lerpResult133;
                        o.Alpha = 1;
                }
                ENDCG
        }
        Fallback "Diffuse"
}

        2.附在材质球上的一些参数设置;

             1_0.jpeg
   
         3.最后运行项目看效果哈!

             1_1.jpeg






回复

使用道具 举报

排名
59441
昨日变化
29

0

主题

7

帖子

19

积分

Rank: 1

UID
247889
好友
2
蛮牛币
18
威望
0
注册时间
2017-10-10
在线时间
8 小时
最后登录
2018-6-22
发表于 2018-6-6 22:49:04 | 显示全部楼层
发我一下,学习一下可好

回复 支持 反对

使用道具 举报

7日久生情
2153/5000
排名
3149
昨日变化

0

主题

1502

帖子

2153

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
185339
好友
0
蛮牛币
2990
威望
0
注册时间
2016-11-20
在线时间
235 小时
最后登录
2018-6-22
发表于 2018-6-7 09:18:24 | 显示全部楼层

回复

使用道具 举报

4四处流浪
353/500
排名
9384
昨日变化
105

0

主题

176

帖子

353

积分

Rank: 4

UID
279508
好友
0
蛮牛币
676
威望
0
注册时间
2018-5-2
在线时间
73 小时
最后登录
2018-6-24
发表于 2018-6-7 09:44:11 | 显示全部楼层
好东西,感谢分享

回复

使用道具 举报

7日久生情
2926/5000
排名
2631
昨日变化
14

0

主题

2024

帖子

2926

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
219676
好友
0
蛮牛币
2454
威望
0
注册时间
2017-7-12
在线时间
412 小时
最后登录
2018-6-24

活力之星

发表于 2018-6-7 10:25:20 | 显示全部楼层
谢谢分享

回复

使用道具 举报

7日久生情
1689/5000
排名
5185
昨日变化
38

0

主题

1227

帖子

1689

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
267381
好友
4
蛮牛币
2822
威望
0
注册时间
2018-2-1
在线时间
218 小时
最后登录
2018-6-25
发表于 2018-6-7 11:13:58 | 显示全部楼层
好有意思啊,学习了

回复 支持 反对

使用道具 举报

2初来乍到
135/150
排名
17784
昨日变化
2

0

主题

60

帖子

135

积分

Rank: 2Rank: 2

UID
4602
好友
1
蛮牛币
3
威望
0
注册时间
2013-9-26
在线时间
45 小时
最后登录
2018-6-7
发表于 2018-6-7 12:00:22 | 显示全部楼层
Thanks for this sharing

回复 支持 反对

使用道具 举报

7日久生情
2906/5000
排名
97
昨日变化

0

主题

21

帖子

2906

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
53732
好友
0
蛮牛币
14505
威望
0
注册时间
2014-11-6
在线时间
585 小时
最后登录
2018-6-24
发表于 2018-6-7 12:24:08 | 显示全部楼层
支持支持

回复

使用道具 举报

6蛮牛粉丝
1155/1500
排名
2536
昨日变化

0

主题

323

帖子

1155

积分

Rank: 6Rank: 6Rank: 6

UID
136635
好友
0
蛮牛币
1114
威望
0
注册时间
2016-2-15
在线时间
328 小时
最后登录
2018-6-22
发表于 2018-6-8 09:13:41 | 显示全部楼层
学习,感谢

回复

使用道具 举报

7日久生情
1929/5000
排名
1173
昨日变化

1

主题

587

帖子

1929

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
56496
好友
0
蛮牛币
5484
威望
0
注册时间
2014-11-19
在线时间
437 小时
最后登录
2018-6-20
发表于 2018-6-8 10:03:47 | 显示全部楼层
six six six = 6 6 6

回复

使用道具 举报

排名
28906
昨日变化
35

0

主题

56

帖子

98

积分

Rank: 2Rank: 2

UID
128268
好友
0
蛮牛币
72
威望
0
注册时间
2015-11-8
在线时间
32 小时
最后登录
2018-6-8
发表于 2018-6-8 10:24:01 | 显示全部楼层
学习一下~~感谢大佬

回复 支持 反对

使用道具 举报

排名
22236
昨日变化
6

0

主题

32

帖子

95

积分

Rank: 2Rank: 2

UID
77463
好友
0
蛮牛币
62
威望
0
注册时间
2015-3-6
在线时间
45 小时
最后登录
2018-6-15
发表于 2018-6-8 10:29:35 | 显示全部楼层
feichangbang

回复

使用道具 举报

3偶尔光临
199/300
排名
8001
昨日变化

0

主题

8

帖子

199

积分

Rank: 3Rank: 3Rank: 3

UID
244213
好友
0
蛮牛币
59
威望
0
注册时间
2017-9-18
在线时间
57 小时
最后登录
2018-6-23
发表于 2018-6-8 10:49:48 | 显示全部楼层
谢谢分享

回复

使用道具 举报

2初来乍到
111/150
排名
19615
昨日变化
775

0

主题

69

帖子

111

积分

Rank: 2Rank: 2

UID
272742
好友
0
蛮牛币
29
威望
0
注册时间
2018-3-16
在线时间
18 小时
最后登录
2018-6-23
发表于 2018-6-8 10:51:15 | 显示全部楼层
好东西,感谢分享
[发帖际遇]: qiupai 发帖时在路边捡到 1 蛮牛币,偷偷放进了口袋. 幸运榜 / 衰神榜

回复

使用道具 举报

3偶尔光临
203/300
排名
11489
昨日变化
3

2

主题

65

帖子

203

积分

Rank: 3Rank: 3Rank: 3

UID
138900
好友
0
蛮牛币
202
威望
0
注册时间
2016-3-9
在线时间
64 小时
最后登录
2018-6-22
发表于 2018-6-8 14:20:43 | 显示全部楼层
谢谢分享
[发帖际遇]: 一个袋子砸在了 huhu 头上,huhu 赚了 1 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

关闭

站长推荐 上一条 /1 下一条

快速回复 返回顶部 返回列表