unity 面试 准备

2019-07-03  本文已影响0人  Charon_ted

先上参考帖
Unity3D :关于UGUI的网格重建、动静分离
关于Unity中的UGUI优化,你可能遇到这些问题(干货很多)
UGUI DrawCall合并
https://www.jianshu.com/p/15e0f3b0a66b
https://www.jianshu.com/p/cacea8e30142

https://www.jianshu.com/p/7584033b61ed
https://www.jianshu.com/p/7584033b61ed

1 RectMask2D本身不占DrawCall
2 RectMask2D之间无法合并DrawCall
3 RectMask2D外的元素和RectMask2D内的元素,无法合批
4 RectMask2D完全裁剪的元素,不再占用DrawCall,也完全不参与Depth计算
5 Hierarchy中被RectMask2D分割的元素,如果Depth、Atlas与RectMask2D下的某元素相同,则无法合批。
6 RectMask2D裁剪掉的部分,依然参与Depth计算
7 如果RectMask2D上绑定了Image,那么多个RectMask2D的Image如果属于同一个Atlas可以合并

解释下第5条,如果同一个图集上可合批的元素,在Hierarchy中被一个RectMask2D分割在上下两部分,那么这些元素的合批有可能被打断。什么情况下会被打断呢?用N代表要合批元素所在的层,如果RectMask2D中第N层的元素和外面要合批的元素属于同一个图集(Atlas),那么这个合批就会被打断。

17 Mask 与 Rect Mask 2D 的区别 按照实际需求进行权衡
Rect Mask 2D 节省drawcall和

18 动静分离 将需要经常动态更新的组件(text等) 和不需要的UI 愤慨放到不同的canvas中 这样可以减少 Canvas.SendWillRenderCanvases的开销,避免发生过多的mesh重绘
在 UGUI 中,Batch是以Canvas为单位的,即在同一个Canvas下的UI元素最终都会被Batch到同一个Mesh中。而在Batch前,UGUI会根据这些UI元素的材质(通常就是Atlas)以及渲染顺序进行重排,在不改变渲染结果的前提下,尽可能将相同材质的UI元素合并在同一个SubMesh中,从而把DrawCall降到最低。而Batch的操作只会在UI元素发生变化时才进行,且合成的Mesh越大,操作的耗时也就越大。
因此,我们建议尽可能把频繁变化(位置,颜色,长宽等)的UI元素从复杂的Canvas中分离出来,从而避免复杂的Canvas频繁重建。

4 对于UI资源,关闭MipMaps。如果您正在使用 mipmap,那么将多出单个图像的三分之一。(我建议不使用 mipmap ui 相关的图像 mipmap是对于该贴图,生成一组缩小厚的纹理贴图。当相机距离较远时,使用小贴图二靠近后使用大的贴图,一种典型空间换时间的方法)

5

上一篇 下一篇

猜你喜欢

热点阅读