NGUI界面Drawcall优化

来源:互联网 发布:汉口北淘宝商学院 编辑:程序博客网 时间:2024/06/01 23:59
游戏发包了,界面的卡顿成了一个问题,美术资源上是节省不下来了,所以导致图集的合并工作也几乎到了不可能优化的地步了,查看了一下drawcall,确实很吓人。于是就来分析一下,哪里造成的卡顿。
最为一个实用文档,先来讲述一下原理,再来结合工具调整,最后将这项工作以指标的形式下发给排界面的人员,恩就这样开始吧。
    首先的几个概念我就不解释了:NGUI、Panel、图集、drawcall、动态字体、深度值、渲染,不明白的童鞋自己搜索吧。
    界面渲染的原理:
    NGUI把界面元素排布在3D片中展现在摄像机的前面来完成界面的显示,经过引擎的优化,会把界面中引用一张图集的片绑在一起进行一次渲染。这就是一次drawcall,这就是一个性能的指标,那么结论就是drawcall数越少性能越好。
    然后有几点是需要注意的:
    1. 一个界面使用的图片尽量打到一个图集中去。那么界面的设计就会直接影响性能。毕竟1个图集就会使drawcall + 1.
    2. NGUI的界面drawcall计算是以Panel为独立单位进行计算的,就是说如果两个Panel都显示出来,深度设置得不同那么即使两个Panel实用的图集是一样的,那么drawcall也不会节省。
    3. 动态字体会对Panel的深度造成影响,这个可以结合后面的工具逐步调节来看。
    4. 动态字体的字号会造成动态字体的drawcall增加,多设置一个字号就会增加一个drawcall。(毕竟动态字体是把字渲染在图片上来完成渲染的)
    我们所能依赖的工具:
    1. NGUI -> Normalize Depth Heirarchy 正常化深度结构工具。
    2. U3d中自带的Profilter界面能直观地看到所使用的drawcall数。
    3. 点击Panel,Panel下有个组件叫UIPanel,点击按钮 Show Draw Calls,上面会罗列这个Panel所使用的Drawcall都是什么,引用了哪个图集。都哪个物体使用了,这里我们优化掉个数较少的就行了。
    最后的指标:
    1. 一个显示Panel的drawcall数不要超过5
    2. 一次性不要显示多个Panel
    3. 确保Panel的深度不重复
    4. 如果组件不移动,设置为静态
    这里不就动态字体做过多描述,纯属一个捣乱分子,本来设计的好好的界面加入一些字体就会乱七八糟,那么这也是考验拼界面人员的耐性和灵活思考的能力的地方了。 :)
0 0
原创粉丝点击