uGUI学习篇: UI元素的渲染与性能

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/linxinfa/article/details/89431903

Draw Call

为将对象渲染到画面中,Unity的渲染引擎针对OpenGL、Direct3D等图形API发行了渲染调用 (Draw Call)

Unity引擎可按特定的顺序在一帧内渲染多个多边形网格。
由于多边形网格的渲染分别依靠材质、纹理等资源,需要依靠不同于当前渲染中使用的资源来渲染多边形时就要变更资源了。
由于变更资源的负荷较高,所以要将使用相同资源的多边形进行分组,尽量通过一次渲染调用来进行渲染,这样就可以完成高效率的渲染。我们将这样的处理称为批处理 (Batching)

材质变更

资源变更中,材质的变更伴随着着色器的变更,还需要重新构建内部的渲染状态,所以是非常缓慢的处理。这样的处理被称为SetPass

纹理变更

纹理的变更中着色器属性更新的部分其内部渲染状态没有改变,只是增加了一次渲染调用,因此并不像材质变更那样处理得较为缓慢。

提高渲染性能

要提高渲染的性能,重要的不是减少渲染调用(批处理)的次数,而是如何减少SetPass的次数。
A A A B B B 2次渲染调用,2次SetPass
材质变更
A A A B A A 3次渲染调用,3次SetPass
纹理变更
A A A a A AA 3次渲染调用,1次SetPass

UI元素的批处理是分别在其各自的画布单位中进行的。
使用相同材质、相同纹理的元素被批处理了。
如果各个元素没有重叠,可以通过批量排序 (Batch Sorting) 结构进行优化处理。批量排序是将可以集中渲染的没有重叠的UI元素的渲染顺序进行自动变更,以使材质和纹理最低限度的变更的一种优化批处理的结构。

A A B A B B 4次渲染调用
A A A B B B 2次渲染调用

小建议
1 仅为需要特殊处理的内容使用特别的材质
2 为众多UI元素使用一种材质
3 精灵尽量集中于一个纹理图集中
4 同一个界面尽量少使用不同字体
5 层级结构的变更也是一种负荷较高的处理,需要对画布上的所有图形元素进行重新计算,也伴随着批处理的重新计算,要尽量避免
6 图形元素在移动时每次都需要重新生成顶点,是负荷较高的处理,可以去掉包含移动图形元素的画布的Pixel Perfect属性的勾选,或者在图形元素开始移动前去掉,在移动结束后再勾选

猜你喜欢

转载自blog.csdn.net/linxinfa/article/details/89431903