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

扫一扫,访问微社区

开发者专栏

关注:2310

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

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

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

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

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

6796

主题

7320

帖子

2万

积分

Rank: 16

UID
1231
好友
185
蛮牛币
7210
威望
30
注册时间
2013-7-29
在线时间
3496 小时
最后登录
2018-9-19

社区QQ达人活力之星原创精华达人突出贡献奖财富之证游戏蛮牛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

知乎@谢刘斌

[发帖际遇]: 清风 乐于助人,奖励 3 蛮牛币. 幸运榜 / 衰神榜

跟我念“站长妹纸萌萌哒!”我说站长,你说YO!爱你们么么哒~
回复

使用道具 举报

7日久生情
1780/5000
排名
1494
昨日变化
4

2

主题

337

帖子

1780

积分

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

UID
151630
好友
4
蛮牛币
2066
威望
0
注册时间
2016-6-12
在线时间
649 小时
最后登录
2018-9-19
发表于 2018-9-6 15:14:22 | 显示全部楼层
这个很厉害啊啊

回复

使用道具 举报

6蛮牛粉丝
1304/1500
排名
1764
昨日变化
12

0

主题

377

帖子

1304

积分

Rank: 6Rank: 6Rank: 6

UID
87577
好友
0
蛮牛币
4267
威望
0
注册时间
2015-3-31
在线时间
225 小时
最后登录
2018-9-19
发表于 2018-9-7 08:25:15 | 显示全部楼层
too good too strong!

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1114/1500
排名
4467
昨日变化
49

0

主题

657

帖子

1114

积分

Rank: 6Rank: 6Rank: 6

UID
210390
好友
0
蛮牛币
1310
威望
0
注册时间
2017-3-7
在线时间
153 小时
最后登录
2018-9-19
发表于 2018-9-7 09:24:06 | 显示全部楼层
[发帖际遇]: wdongzyzr 乐于助人,奖励 3 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

4四处流浪
440/500
排名
5795
昨日变化
76

0

主题

117

帖子

440

积分

Rank: 4

UID
267103
好友
0
蛮牛币
790
威望
0
注册时间
2018-1-31
在线时间
103 小时
最后登录
2018-9-19
发表于 2018-9-7 10:05:28 | 显示全部楼层

回复

使用道具 举报

排名
45697
昨日变化
14

0

主题

8

帖子

16

积分

Rank: 1

UID
295092
好友
0
蛮牛币
28
威望
0
注册时间
2018-8-29
在线时间
4 小时
最后登录
2018-9-7
发表于 2018-9-7 17:04:05 | 显示全部楼层

回复

使用道具 举报

3偶尔光临
172/300
排名
37832
昨日变化
25

0

主题

133

帖子

172

积分

Rank: 3Rank: 3Rank: 3

UID
247666
好友
0
蛮牛币
12
威望
0
注册时间
2017-10-9
在线时间
33 小时
最后登录
2018-9-7
发表于 2018-9-7 18:06:00 | 显示全部楼层

too good too strong!

回复 支持 反对

使用道具 举报

5熟悉之中
740/1000
排名
3327
昨日变化
31

1

主题

97

帖子

740

积分

Rank: 5Rank: 5

UID
248064
好友
1
蛮牛币
1111
威望
0
注册时间
2017-10-10
在线时间
230 小时
最后登录
2018-9-19
发表于 2018-9-10 08:34:18 | 显示全部楼层
厉害 6666666

回复

使用道具 举报

7日久生情
2587/5000
排名
686
昨日变化
1

30

主题

550

帖子

2587

积分

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

UID
124569
好友
25
蛮牛币
6383
威望
0
注册时间
2015-10-4
在线时间
779 小时
最后登录
2018-9-19
发表于 2018-9-10 13:37:30 | 显示全部楼层
66666666666666666666

回复 支持 反对

使用道具 举报

7日久生情
1763/5000
排名
3270
昨日变化
32

0

主题

1054

帖子

1763

积分

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

UID
189581
好友
0
蛮牛币
2399
威望
0
注册时间
2016-12-5
在线时间
289 小时
最后登录
2018-9-19
发表于 2018-9-11 09:00:19 | 显示全部楼层
给力啊强大啊
[发帖际遇]: cs562981849 被钱袋砸中进医院,看病花了 2 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

6蛮牛粉丝
1427/1500
排名
3673
昨日变化
32

2

主题

761

帖子

1427

积分

Rank: 6Rank: 6Rank: 6

UID
209046
好友
0
蛮牛币
2084
威望
0
注册时间
2017-3-30
在线时间
290 小时
最后登录
2018-9-19
发表于 2018-9-11 16:26:11 | 显示全部楼层

回复

使用道具 举报

排名
21896
昨日变化
20

0

主题

32

帖子

75

积分

Rank: 2Rank: 2

UID
268041
好友
0
蛮牛币
41
威望
0
注册时间
2018-2-7
在线时间
23 小时
最后登录
2018-9-12
发表于 2018-9-11 17:08:25 | 显示全部楼层

回复

使用道具 举报

5熟悉之中
932/1000
排名
4831
昨日变化
6

14

主题

310

帖子

932

积分

Rank: 5Rank: 5

UID
63446
好友
3
蛮牛币
141
威望
0
注册时间
2014-12-25
在线时间
331 小时
最后登录
2018-9-19
发表于 2018-9-12 17:36:02 | 显示全部楼层
支持楼主

回复

使用道具 举报

3偶尔光临
236/300
排名
29868
昨日变化
30

1

主题

109

帖子

236

积分

Rank: 3Rank: 3Rank: 3

UID
192640
好友
0
蛮牛币
32
威望
0
注册时间
2016-12-15
在线时间
118 小时
最后登录
2018-9-13
发表于 2018-9-12 18:08:05 | 显示全部楼层
这个很厉害啊啊

回复

使用道具 举报

4四处流浪
317/500
排名
21896
昨日变化
20

0

主题

62

帖子

317

积分

Rank: 4

UID
38116
好友
0
蛮牛币
26
威望
0
注册时间
2014-8-5
在线时间
235 小时
最后登录
2018-9-19
QQ
发表于 7 天前 | 显示全部楼层
不错学习了~

回复

使用道具 举报

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

本版积分规则

关闭

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

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