找回密码
 注册帐号

扫一扫,访问微社区

士郎 Unity仿海岛奇兵海洋效果

52
回复
7479
查看
[ 复制链接 ]
排名
1
昨日变化

7846

主题

8404

帖子

3万

积分

Rank: 16

UID
1231
好友
186
蛮牛币
11088
威望
30
注册时间
2013-7-29
在线时间
4025 小时
最后登录
2019-6-19

活力之星原创精华达人突出贡献奖财富之证游戏蛮牛QQ群会员蛮牛妹VIP

2018-9-6 12:29:25 显示全部楼层 阅读模式

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

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

x
第一篇文章想分享一下使用Unity来制作海岛奇兵海洋效果, 最终的实现效果如下
1.jpg
制作这种效果,需要如下几步
1, 首先要准备一个Mesh, 我使用的是10 x 10 的Mesh, 一共100个格子,这样的Mesh顶点相对比较多,最后shader计算的时候效果比较好。
2.jpg

2, 然后来看看shader的具体实现
首先看一下需要传入的属性,需要传入3张贴图,一张_SeaNormal 法线图,一张亮色的海洋图_LightSea , 一张暗色的海洋图_DarkSea ,u_time 是时间变化参数,u_uvFactor 是uv缩放参数
[AppleScript] 纯文本查看 复制代码
Properties
        {
                _SeaNormal ("SeaNormal", 2D) = "white" {}
                _LightSea ("LightSea", 2D) = "white" {}
                _DarkSea ("DarkSea", 2D) = "white" {}
                u_time ("u_time", float) = 83.36153
                u_uvFactor ("u_uvFactor", float) = 0.7735959
        }

接下来看下vertshader的具体实现
[AppleScript] 纯文本查看 复制代码
struct appdata
{
        float4 vertex : POSITION0;
        float2 uv : TEXCOORD0;
};

struct v2f
{
        float4 vertex : POSITION0;
        float2 uv : TEXCOORD0;
        float2 normaluv : TEXCOORD1;
        float v_result : TEXCOORD2;
        float v_reflectionPower : TEXCOORD3;
};

v2f vert (appdata v)
{
        v2f o;

        o.vertex = UnityObjectToClipPos(v.vertex);
        o.uv = v.uv;

        float ystretch = 0.2;
        o.v_reflectionPower = clamp((1.0 - length(float2(v.vertex.x * 0.7 + (v.uv.x - 0.5) * 1.5, v.vertex.z * ystretch) - float2(0.0, ystretch))) * 3.0, 1.5, 4.0);
        
        float x = v.uv.x;
        float y = v.uv.y * u_uvFactor;
        float mov1 = y / 0.04 * 5.0 + u_time;
        float mov2 = x / 0.02 * 5.0;
        float c1 = abs((sin(mov1 + u_time) + mov2) * 0.5 - mov1 - mov2 + u_time);
        float c4 = 0.5 * sin(sqrt(x * x + y * y) * 150.0 - u_time) + 0.5;
        c1 = 0.5 * sin(c1) + 0.5;
        o.v_result = c4;

        o.normaluv = v.uv * 25.0;
        o.normaluv.x -= 0.01 * u_time * 0.5;
        o.normaluv.y += 0.02 * u_time * 0.5;

        o.normaluv = float2(o.normaluv.x + c1 * 0.01, (o.normaluv.y + c1 * 0.01) * u_uvFactor) * 1.5;

        return o;
}

vertexshader传入到pixelshader的参与有5个
a, vertex参数不传入pixelshader, 直接由引擎计算出屏幕空间的位置
b, uv就是模型的uv, 直接传入pixelshader
c, normaluv是计算出来的法线uv, 来采样法线图, 法线uv是动态的,来模拟海洋的海浪变化
d, v_reflectionPower是计算的高光强度
e, v_result参数也是用来影响法线uv的变化的

然后看下pixelshader
[AppleScript] 纯文本查看 复制代码
float4 custommix(float4 x, float4 y, float a)
{
        return (x * (1 - a) + y * a);
}

fixed4 frag (v2f i) : SV_Target
{
        float4 normalMapValue = tex2D(_SeaNormal, i.normaluv);
        float4 lightseacol = tex2D(_LightSea, i.uv);
        float4 darkseacol = tex2D(_DarkSea, i.uv);

        float4 fragcol = custommix(lightseacol, darkseacol, (normalMapValue.x * i.v_result) + (normalMapValue.y * (1.0 - i.v_result)));
        float4 fragspeccol = min(0.4, exp2(log2(((normalMapValue.z * i.v_result) + (normalMapValue.w * (1.0 - i.v_result))) * i.v_reflectionPower) * 5.0));
        fragcol += fragspeccol;

        return fragcol;
}

通过vertexshader传入的参数,采样出亮色海洋贴图,暗色海洋贴图颜色以及动态的法线图
通过函数计算得到diffuse颜色fragcol, 然后根据vertexshader传入的v_reflectionPower高光参数,计算出高光值fragspeccol, 然后计算出最终的颜色fragcol并输出
,Adreno Profiler是用来分析手机游戏的渲染比较好用的工具,原则上可以用来分析任意发布在手机上游戏的渲染实现
截图效果如下
3.jpg

4.jpg

知乎@谢刘斌

参与人数 1鲜花 +1 收起 理由
动力二七1 + 1 很给力!

查看全部评分总评分 : 鲜花 +1

回复

使用道具 举报

7日久生情
2236/5000
排名
1109
昨日变化

4

主题

380

帖子

2236

积分

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

UID
151630
好友
5
蛮牛币
927
威望
0
注册时间
2016-6-12
在线时间
838 小时
最后登录
2019-6-13
2018-9-6 15:14:22 显示全部楼层
这个很厉害啊啊
回复

使用道具 举报

7日久生情
1876/5000
排名
1192
昨日变化

0

主题

551

帖子

1876

积分

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

UID
87577
好友
0
蛮牛币
7014
威望
0
注册时间
2015-3-31
在线时间
347 小时
最后登录
2019-6-19

锦衣玉食

2018-9-7 08:25:15 显示全部楼层
too good too strong!
回复 支持 反对

使用道具 举报

7日久生情
1535/5000
排名
3443
昨日变化

0

主题

895

帖子

1535

积分

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

UID
210390
好友
0
蛮牛币
1835
威望
0
注册时间
2017-3-7
在线时间
206 小时
最后登录
2019-5-23
2018-9-7 09:24:06 显示全部楼层
回复

使用道具 举报

5熟悉之中
900/1000
排名
3155
昨日变化

0

主题

204

帖子

900

积分

Rank: 5Rank: 5

UID
267103
好友
0
蛮牛币
3334
威望
0
注册时间
2018-1-31
在线时间
226 小时
最后登录
2019-6-19
2018-9-7 10:05:28 显示全部楼层
回复

使用道具 举报

2初来乍到
102/150
排名
14497
昨日变化

0

主题

22

帖子

102

积分

Rank: 2Rank: 2

UID
295092
好友
0
蛮牛币
187
威望
0
注册时间
2018-8-29
在线时间
24 小时
最后登录
2019-3-11
2018-9-7 17:04:05 显示全部楼层
回复

使用道具 举报

4四处流浪
448/500
排名
31430
昨日变化
1

0

主题

311

帖子

448

积分

Rank: 4

UID
247666
好友
0
蛮牛币
132
威望
0
注册时间
2017-10-9
在线时间
127 小时
最后登录
2019-5-1
2018-9-7 18:06:00 显示全部楼层

too good too strong!
回复 支持 反对

使用道具 举报

5熟悉之中
906/1000
排名
2783
昨日变化

2

主题

105

帖子

906

积分

Rank: 5Rank: 5

UID
248064
好友
1
蛮牛币
1358
威望
0
注册时间
2017-10-10
在线时间
274 小时
最后登录
2019-3-19
2018-9-10 08:34:18 显示全部楼层
厉害 6666666
回复

使用道具 举报

7日久生情
2750/5000
排名
664
昨日变化

30

主题

577

帖子

2750

积分

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

UID
124569
好友
25
蛮牛币
7553
威望
0
注册时间
2015-10-4
在线时间
817 小时
最后登录
2019-5-24
2018-9-10 13:37:30 显示全部楼层
66666666666666666666
回复 支持 反对

使用道具 举报

7日久生情
2303/5000
排名
2248
昨日变化

0

主题

1285

帖子

2303

积分

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

UID
189581
好友
0
蛮牛币
3512
威望
0
注册时间
2016-12-5
在线时间
392 小时
最后登录
2019-6-5
2018-9-11 09:00:19 显示全部楼层
给力啊强大啊
回复

使用道具 举报

7日久生情
2238/5000
排名
2612
昨日变化

2

主题

1114

帖子

2238

积分

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

UID
209046
好友
0
蛮牛币
3102
威望
0
注册时间
2017-3-30
在线时间
568 小时
最后登录
2019-6-19
2018-9-11 16:26:11 显示全部楼层
回复

使用道具 举报

排名
22152
昨日变化

0

主题

40

帖子

96

积分

Rank: 2Rank: 2

UID
268041
好友
0
蛮牛币
28
威望
0
注册时间
2018-2-7
在线时间
34 小时
最后登录
2019-6-17
2018-9-11 17:08:25 显示全部楼层
回复

使用道具 举报

6蛮牛粉丝
1083/1500
排名
4414
昨日变化

15

主题

345

帖子

1083

积分

Rank: 6Rank: 6Rank: 6

UID
63446
好友
3
蛮牛币
150
威望
0
注册时间
2014-12-25
在线时间
391 小时
最后登录
2019-6-13
2018-9-12 17:36:02 显示全部楼层
支持楼主
回复

使用道具 举报

3偶尔光临
252/300
排名
28926
昨日变化

1

主题

113

帖子

252

积分

Rank: 3Rank: 3Rank: 3

UID
192640
好友
0
蛮牛币
50
威望
0
注册时间
2016-12-15
在线时间
126 小时
最后登录
2019-4-22
2018-9-12 18:08:05 显示全部楼层
这个很厉害啊啊
回复

使用道具 举报

4四处流浪
356/500
排名
21326
昨日变化

0

主题

66

帖子

356

积分

Rank: 4

UID
38116
好友
0
蛮牛币
19
威望
0
注册时间
2014-8-5
在线时间
266 小时
最后登录
2019-6-19
QQ
2018-9-13 15:48:31 显示全部楼层
不错学习了~
回复

使用道具 举报

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

本版积分规则