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

扫一扫,访问微社区

开发者专栏

关注:1764

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

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

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

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

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

202

主题

212

帖子

2305

积分

Rank: 9Rank: 9Rank: 9

UID
36308
好友
0
蛮牛币
5099
威望
0
注册时间
2014-7-25
在线时间
67 小时
最后登录
2017-6-13

专栏作家

发表于 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

评分

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

查看全部评分


回复

使用道具 举报

排名
2835
昨日变化

21

主题

123

帖子

1067

积分

Rank: 9Rank: 9Rank: 9

UID
178893
好友
11
蛮牛币
2215
威望
0
注册时间
2016-10-28
在线时间
461 小时
最后登录
2017-7-21

专栏作家

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

Mark下, 多谢雨松分享~~

回复 支持 反对

使用道具 举报

4四处流浪
435/500
排名
4747
昨日变化
1

0

主题

64

帖子

435

积分

Rank: 4

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

回复 支持 1 反对 0

使用道具 举报

1

主题

16

帖子

69

积分

Rank: 2Rank: 2

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

回复 支持 1 反对 0

使用道具 举报

3偶尔光临
273/300
排名
5725
昨日变化

0

主题

17

帖子

273

积分

Rank: 3Rank: 3Rank: 3

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

回复 支持 反对

使用道具 举报

7日久生情
1579/5000
排名
16285
昨日变化
5

2

主题

1340

帖子

1579

积分

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

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

回复 支持 反对

使用道具 举报

7日久生情
2036/5000
排名
1084
昨日变化
1

22

主题

386

帖子

2036

积分

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

UID
123323
好友
20
蛮牛币
9860
威望
0
注册时间
2015-9-21
在线时间
698 小时
最后登录
2017-7-21

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

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

回复 支持 反对

使用道具 举报

5熟悉之中
651/1000
排名
3481
昨日变化
17

1

主题

135

帖子

651

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

4四处流浪
322/500
排名
5364
昨日变化

0

主题

39

帖子

322

积分

Rank: 4

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

回复 支持 反对

使用道具 举报

5熟悉之中
580/1000
排名
4133
昨日变化
2

2

主题

64

帖子

580

积分

Rank: 5Rank: 5

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

回复 支持 反对

使用道具 举报

排名
48491
昨日变化
120

0

主题

11

帖子

13

积分

Rank: 1

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

回复

使用道具 举报

7日久生情
1844/5000
排名
668
昨日变化
3

1

主题

500

帖子

1844

积分

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

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

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1285/1500
排名
1849
昨日变化
1

13

主题

165

帖子

1285

积分

Rank: 6Rank: 6Rank: 6

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

回复

使用道具 举报

3偶尔光临
169/300
排名
11748
昨日变化
3

2

主题

96

帖子

169

积分

Rank: 3Rank: 3Rank: 3

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

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1134/1500
排名
1236
昨日变化
1

2

主题

71

帖子

1134

积分

Rank: 6Rank: 6Rank: 6

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

回复 支持 反对

使用道具 举报

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

本版积分规则

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