- 1)drawcall是什么,降低drawcall对性能调优的意义
- 面试题: drawcall是什么?
- (1)我们的游戏,提交给GPU来绘制;
- (2)drawcall就是: 我们的整个场景里面,分几个批次提交给显卡绘制,整个就是drawcall
- (3)100个物体需要绘制,分多少次批次提交给我们的GPU,整个批次就算drawcall
- 面试题: 为什么降低drawcall对性能有好处?
- (1)对于cpu而言,一次提交给GPU,会比多次提交性能更好,省cpu
- (2)GPU: GPU吞吐量,一次性处理多少个面(三角形),每次提交的物体越多,GPU性能就更容易;
- 如: 每次开机,GPU本来可以处理1000个三角形-->但是你每次给它提交的只有10个面--》性能得到发挥
- 2)UGUI降低drawcall的方法
- (1)创建一个项目,来使用UGUI来搭建一个界面;
- (2)drawcall: Batches:20
- (3)如何来看UGUI到底占用了多少个drawcall:
- 当我们优化drawcall的时候,我们首先要看看,哪些物体占用了多少drawcall:
- 如果我把UGUI隐藏,那么这个时候,drawcall是2。 因此UGUI占用20-2=18个drawcall
- (4)当你优化drawcall的时候,一定要分析场景里面drawcall的消耗情况,你才能对症下药--》性能调优.
- 18个drawcall
- (5)剩下的这2个drawcall分别是谁?
- 天空盒一个drawcall;
- 背景;
- (6)UGUI如何降低drawcall呢?-->将UGUI里面使用的图片-->图集里面;
- 一般UGUI的drawcall能够合并,shader算法要一样,纹理对象要一样
- 我们的图片是单个的图,因此没办法合批
- 结论: 同样的纹理,同样的shader,因此可以合并;
- 图集: 将散图打到一个图集里面,然后我们在绘制UGUI物体的时候,根据纹理坐标,来找到小图;
- (7)UGUI优化drawcall时,就是将UGUI的图片打成图集
- 1:开启图集模式:Editor-->Editor设置-->Sprite Packer;
- 2:你要将哪些图片打入到一个图集里,
- 3:启动打包生成图集,window-->SpritePacker
- Sprite Packer-->Repack
- 2个Label 1个drawcall
- (8)UGUI drawcall打断
- Image + 图集 一堆节点-->drawcall--》1个drawcall
- Text肯定会打乱我们的drawcall
- 按道理应该是4个drawcall,但是为什么unity UGUI怎么是2个drawcall呢?
- unity会根据位置,对场景的影响,来改变物体的层级绘制顺序,能尽可能的降低drawcall:
- 如:unity检测到2个label绘制顺序不影响显示,因此会延后绘制;
- 如果:label的位置影响了绘制,unity则不会优化,drawcall从4-->6
- 3)Text的主要原理与drawcall的影响
- Text使用了UI/Default
- Text对于unity而言,底层用的是和Image是同样的shader
- Text使用了UI/Defaulthe Images是一样的,就是显示的纹理贴图
- Unity: Text的核心原理:
- 通过Text组件 + 矢量字库 + 字体大小 + 文本内容 生成一个--》文本内容显示的效果--》生成一个贴图;
- 底层 文本--》贴图来对待,只不过这个贴图不是Image, 而是通过Text组件 矢量字库,绘制到一个纹理贴图对象上的;
- 问题来了:
- 2个Label-->2个不同的纹理对象,drawcall合并,label应该是2个drawcall才对, Image + 2 = 3个drawcall 2个drawcall?
- 内容和大小
- unity在处理Label的时候,能够将文字--》尽可能的生成到一个纹理里面--》图集--》额定的大小。
- 别的游戏引擎: Label直接打断drawcall,几个Label几个drawcall. 因此unity对于Label这块还是优化的很好的。
- 4)RawImage对drawcall的影响;
- 面试问: RawImage和Image有什么区别?
- RawImage: Texture + Sprite
- Image: Sprite
- RawImage支持设置我们的uv坐标
- Image不支持
- RawImage: 单独占用一个drawcall,即时同一个图集的不同图片,也无法合并drawcall。除非: 同样图片是可以合并
- 性能没Image好,单色支持更多
- Image还可以做些其他的效果,比如:九宫格等
- 5)OnGUI对drawcall的影响
- OnGUI:做昵称,做血条?--》不行--》性能不好--》为什么呢?从drawcall的角度分析一下OnGUI
drawcall的角度性能调优
猜你喜欢
转载自blog.csdn.net/themagickeyjianan/article/details/107287139
今日推荐
周排行