开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:1702

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

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

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

[雨松MOMO] Unity3D游戏优化之头顶UI

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

200

主题

210

帖子

2216

积分

Rank: 9Rank: 9Rank: 9

UID
36308
好友
0
蛮牛币
5059
威望
0
注册时间
2014-7-25
在线时间
66 小时
最后登录
2017-5-15

专栏作家

发表于 2017-4-11 10:13:26 | 显示全部楼层 |阅读模式

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

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

x

3D角色头顶会显示文字、图标、血条等,它会跟随角色移动,始终朝向相机,可能还有定制的缩放,一般情况下会考虑用UGUI来做,但完成后发现这样做的效率很低,而且遮挡正确性也保证不了。

效率低因为:

1,渲染上每块文字、图片都要用一次drawcall,图片文字又可能是交替出现的没法利用dynamic batching,UGUI的渲染顺序是hierachy从上到下,基本上必然交替出现。一个角色头顶UI就可能要1至5+个drawcall,比角色自身的还多。

2,UGUI的元素都要放到canvas节点下,同步位置、朝向、缩放是很大的消耗,同时会触发canvas重新刷新UI的vertex buffer,虽然是在其他线程上刷新的,但仍然很慢。如果每个头顶UI都配一个canvas挂载角色节点下,实测发现性能更差。下图是100个角色头顶有图标和名字的profiling,可以看到同步pose比整个游戏的渲染还高

1.png

遮挡不正确因为:头顶UI属于透明物体,需要从远到近渲染,但是UGUI是根据Hierachy从上到下的,没法根据远近排序,这就会造成远处角色的头顶UI挡住自己角色的,看着别扭,尤其在自由视角的游戏中。

想要效率高必须得在一个drawcall里渲染图文,且能用到dynamic batching,dynamic batching是在渲染线程上进行的还能省主线程时间。不用UI而是当作一般3D物体渲染就能用到引擎的透明排序正确遮挡。

Unity自带的TextMesh可以做到遮挡正确,但是没法同时渲染图文,也没代码可改,所以pass。

Asset Store上找下插件

TextMeshPro是很强大的插件,用SDF(signed distance field有向距离场)的方式使放大的文字锐利很多,但是不支持动态字体,只能是预先生成的bitmap里固定的字,无法满足常用汉字之外的显示,又pass。以后可以说下SDF渲染文字的原理。

SuperTextMesh:能渲染动态文字,富文本支持图文混排,缺点是支持atlas但很弱,资源管理、解析效率内存占用都算不上优秀。好在有源码可以改,就选这个了。

一个drawcall同时渲染图文的方式就是用混合,一个材质带文字和atlas两张贴图,用3套uv进行混合,uv1是文字的,uv2是图片的,uv3表示混合权重,显示文字的quad文字权重为1图片为0,显示图片的quad文字权重为0图片权重为1,sample两张图混合一下就行了。

性能比之前好很多,下面是2001个带图文的SuperTextMesh,2000个在时刻改变位置。合批到了4个drawcall,更新pose的脚本消耗有数量级的降低。

2.png

3.png

4.png

5.png

策划想要的图文基本都能搞定。国内挺多游戏在优化的时候都会发现是UI的瓶颈,UWA的专家们也说见怪不怪了:D

评分

参与人数 5鲜花 +22 收起 理由
纳兰幽鬼 + 5 赞一个!
nowhyz1234 + 5 很给力!
糊糊 + 2 很给力!
zhaoyu777 + 2 赞一个!
网虫虫 + 8 很给力!

查看全部评分


回复

使用道具 举报

排名
3461
昨日变化
2

17

主题

109

帖子

907

积分

Rank: 9Rank: 9Rank: 9

UID
178893
好友
10
蛮牛币
2179
威望
0
注册时间
2016-10-28
在线时间
401 小时
最后登录
2017-5-27

专栏作家

发表于 2017-4-11 10:37:07 | 显示全部楼层
本帖最后由 网虫虫 于 2017-4-11 10:53 编辑

Mark下, 多谢雨松分享~~

回复 支持 反对

使用道具 举报

4四处流浪
344/500
排名
5773
昨日变化
46

0

主题

59

帖子

344

积分

Rank: 4

UID
55444
好友
2
蛮牛币
569
威望
0
注册时间
2014-11-14
在线时间
127 小时
最后登录
2017-5-29
发表于 2017-4-11 15:39:19 | 显示全部楼层
以前提到公告栏,一般都直接想到UI做。。。
学到了,感谢momo

回复 支持 反对

使用道具 举报

1

主题

13

帖子

59

积分

Rank: 2Rank: 2

UID
210371
好友
0
蛮牛币
178
威望
0
注册时间
2017-3-7
在线时间
41 小时
最后登录
2017-5-27
发表于 2017-4-12 09:27:54 | 显示全部楼层
一直没想到这种UI怎么处理比较好,总感觉哪种方式都不好,谢谢分享。

回复 支持 反对

使用道具 举报

3偶尔光临
232/300
排名
6417
昨日变化
4

0

主题

17

帖子

232

积分

Rank: 3Rank: 3Rank: 3

UID
202886
好友
0
蛮牛币
386
威望
0
注册时间
2017-1-18
在线时间
79 小时
最后登录
2017-5-27
发表于 2017-4-12 09:30:40 | 显示全部楼层
mark,后面再看哈哈

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1340/1500
排名
17818
昨日变化
3

2

主题

1140

帖子

1340

积分

Rank: 6Rank: 6Rank: 6

UID
185807
好友
0
蛮牛币
1533
威望
0
注册时间
2016-11-22
在线时间
180 小时
最后登录
2017-5-27
发表于 2017-4-12 09:35:45 | 显示全部楼层
赞,学习了,谢谢分享
[发帖际遇]: 东坡肘子2010 被钱袋砸中进医院,看病花了 2 蛮牛币. 幸运榜 / 衰神榜

回复 支持 反对

使用道具 举报

7日久生情
1858/5000
排名
1211
昨日变化

21

主题

360

帖子

1858

积分

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

UID
123323
好友
19
蛮牛币
9055
威望
0
注册时间
2015-9-21
在线时间
631 小时
最后登录
2017-5-26

认证开发者活力之星锦衣玉食

发表于 2017-4-12 09:39:42 | 显示全部楼层
哎呦  最近来蛮牛更新的频率很高嘛。原来都是在微博看你的文章的。现在蛮牛也能看到了

回复 支持 反对

使用道具 举报

5熟悉之中
505/1000
排名
4421
昨日变化
2

1

主题

117

帖子

505

积分

Rank: 5Rank: 5

UID
194381
好友
0
蛮牛币
1099
威望
0
注册时间
2016-12-31
在线时间
163 小时
最后登录
2017-5-28
发表于 2017-4-12 09:41:39 | 显示全部楼层
有空再来细看

回复

使用道具 举报

3偶尔光临
287/300
排名
5773
昨日变化
46

0

主题

39

帖子

287

积分

Rank: 3Rank: 3Rank: 3

UID
138755
好友
0
蛮牛币
582
威望
0
注册时间
2016-3-8
在线时间
90 小时
最后登录
2017-5-29
QQ
发表于 2017-4-12 10:30:57 | 显示全部楼层
NGUI就很好的避免这个问题了,血条全放在一个UIpanel下面,图加文就两个drawcall

回复 支持 反对

使用道具 举报

5熟悉之中
536/1000
排名
4296
昨日变化
1

2

主题

59

帖子

536

积分

Rank: 5Rank: 5

UID
124478
好友
0
蛮牛币
388
威望
0
注册时间
2015-10-2
在线时间
241 小时
最后登录
2017-5-1
发表于 2017-4-12 10:48:33 | 显示全部楼层
感谢雨松大大的分享,撒花

回复 支持 反对

使用道具 举报

排名
46663
昨日变化
22

0

主题

11

帖子

13

积分

Rank: 1

UID
217344
好友
0
蛮牛币
5
威望
0
注册时间
2017-4-12
在线时间
0 小时
最后登录
2017-4-12
发表于 2017-4-12 13:48:43 | 显示全部楼层
为了学习

回复

使用道具 举报

7日久生情
1653/5000
排名
774
昨日变化
2

1

主题

448

帖子

1653

积分

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

UID
111260
好友
0
蛮牛币
6239
威望
0
注册时间
2015-6-30
在线时间
278 小时
最后登录
2017-5-29
发表于 2017-4-12 14:30:18 | 显示全部楼层
赞,学习了,谢谢分享

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1133/1500
排名
2125
昨日变化
1

13

主题

157

帖子

1133

积分

Rank: 6Rank: 6Rank: 6

UID
63249
好友
3
蛮牛币
7517
威望
0
注册时间
2014-12-24
在线时间
467 小时
最后登录
2017-5-27
发表于 2017-4-12 17:10:41 | 显示全部楼层
不明觉厉~

回复

使用道具 举报

2初来乍到
131/150
排名
14367
昨日变化
4

2

主题

85

帖子

131

积分

Rank: 2Rank: 2

UID
173814
好友
0
蛮牛币
206
威望
0
注册时间
2016-10-7
在线时间
14 小时
最后登录
2017-5-27
发表于 2017-4-12 22:38:46 | 显示全部楼层
而台湾啥第三款啊

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1072/1500
排名
1295
昨日变化
1

1

主题

69

帖子

1072

积分

Rank: 6Rank: 6Rank: 6

UID
133503
好友
0
蛮牛币
2978
威望
0
注册时间
2016-1-5
在线时间
292 小时
最后登录
2017-5-27
QQ
发表于 2017-4-13 08:10:50 | 显示全部楼层
游戏开发UI优化确实比较烦人,楼主的方法犀利

回复 支持 反对

使用道具 举报

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

本版积分规则

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