Unity3D游戏优化之头顶UI
来源:互联网 发布:cms模板下载 编辑:程序博客网 时间:2024/04/26 12:51
效率低因为:
1,渲染上每块文字、图片都要用一次drawcall,图片文字又可能是交替出现的没法利用dynamic batching,UGUI的渲染顺序是hierachy从上到下,基本上必然交替出现。一个角色头顶UI就可能要1至5+个drawcall,比角色自身的还多。
2,UGUI的元素都要放到canvas节点下,同步位置、朝向、缩放是很大的消耗,同时会触发canvas重新刷新UI的vertex buffer,虽然是在其他线程上刷新的,但仍然很慢。如果每个头顶UI都配一个canvas挂载角色节点下,实测发现性能更差。下图是100个角色头顶有图标和名字的profiling,可以看到同步pose比整个游戏的渲染还高
遮挡不正确因为:头顶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的脚本消耗有数量级的降低。
策划想要的图文基本都能搞定。国内挺多游戏在优化的时候都会发现是UI的瓶颈,UWA的专家们也说见怪不怪了:D
- Unity3D游戏优化之头顶UI
- Unity3D学习之(NPC头顶文字的实现)
- Unity3D游戏内存瘦身 UI优化是关键
- Unity3D游戏场景优化之批处理
- Unity3D游戏场景优化之批处理
- Unity3D游戏游戏化之DrawCall优化过程分析详解
- Unity3D游戏游戏化之DrawCall优化过程分析详解
- Unity3D 人物头顶名称显示
- [unity3D]游戏优化方法
- unity3d游戏优化规范
- Unity3D游戏优化方案
- 人物头顶UI (RectTransformUtility.ScreenPointToLocalPointInRectangle)
- 游戏开发优化之路 之 Unity3D 渲染统计窗口
- 游戏开发优化之路 之 Unity3D 渲染统计窗口
- 游戏开发优化之路 之 Unity3D 渲染统计窗口
- Unity3D研究院之人物头顶名称与血条更新与绘制一(转)
- Unity3D之人物头顶名称与血条更新与绘制
- Unity3D研究院之人物头顶名称与血条更新与绘制(二十六)
- Ubuntu系统下如何导入根证书
- mui单页面,指定跳转到单页面的那个子页面。获取当时显示的那个单页面的id
- window:系统查看端口被哪个进程占用了
- Could not locate getter method for property [com.itcast.domain.Linkman#linkMans]
- idea 使用tomcat运行web项目乱码
- Unity3D游戏优化之头顶UI
- 如何让笔记本电脑更省电
- tensorflow27《TensorFlow实战Google深度学习框架》笔记-10-04 异步更新模式样例程序 code
- 非对称加密技术
- Java中的简单回调Callback
- 入错行,悔断肠子也回不了头……吗
- 谢希仁计算机网络4
- Spring Boot使用@SpringBootApplication解惑
- iis8.5下wordpress 404问题