NGUI drawcall优化
- UILable、UISprite、UITexture都是继承UIWidget,同一Panel上的UIWidget满足texture、shader、material都相同并且depth相同或连续可合批
- Drawcall多的主要原因是widget的depth相互穿插渲染时不连续,导致相同图集无法合批,建议把背景、字体、图片、特效的depth的分开。
如:一些通用的背景0-10,界面上的图片11-50,一些通用图集上的图片 51-100,字体 101-200,也要把不同字体进行分层,特效300+,避免不同图集和类型造成的穿插。
-
拼完ui使用Draw Call Tool选中界面查看drawcall是否存在可合批ui,通过调整widget的depth进行合并
像下面这种2个drawcall就可以解决,产生了5个drawcall
-
图集方面,如果存在一个界面上引用了其他图集一张图片,可以把那张图片打到当前界面的图集上来减少drawcall,可以使用动态图集,将UI上的图片动态缓冲到RanderTexture上。
-
尽量减少描边字体,最大描边不超过2,能不用描边就不用,字体描边会对字体进行多次绘制,会造成严重的overdraw,overdraw主要是因为UI元素的重叠引起的,像素填充率过高,GPU对画面进行多次绘制,增加GPU性能负担、能耗及发热,查看overdraw在scene窗口中选择Overdraw,越亮overdraw越严重。