OverDraw就是指GPU对屏幕一片区域的重复绘制次数。举个例子,场景中只有一个Image,那么GPU只需要渲染这张Image就可以,但他需要渲染在背景上,所以会产生一层OverDraw。如果再在这张Image上添加一个Image,且两者有重叠。这时候按照Unity UGUI的渲染逻辑,从Hierarchy里最上面的物体开始逐个向下渲染,就需要先绘制父Image再绘制子Image,对重叠部分来说,既绘制了父Image又绘制了子Image,在这里产生重复绘制,所以出现了两层OverDraw。
所以优化OverDraw的方向就是尽可能的减少不同UI的重叠区域。
在制作UI时除了要注意减少不同UI的重叠区域之外,还需要注意一些内置的UI组件的影响:
1)Image Type 为Sliced、Tiled的Image 不需要填充九宫格的不要勾选Fill Center属性,例如头像边框这种,这可以将中间镂空减少重叠区域;
2)慎用Mask组件,它自带两层OverDraw;
3)慎用Text组件的OutLine和Shadow,Shadow会增加一层OverDraw,而OutLine是复制了四份Shadow实现的;
4)不使用空白或透明的Image,尽管alpha = 0,还是会渲染并增加一层OverDraw,可以重写脚本替代