Unity3D中UGUI及3D模型渲染的DrawCall优化

Unity3D中UGUI及3D模型渲染的DrawCall优化

DrawCall是指CPU准备各种数据送达到GPU进行渲染的过程,属于重度操作,DrawCall影响最大的是帧率!直接体验就是卡!
目前优化了大地图里面UI的DrawCall问题,由之前的数量相关,合并优化之后,DrawCall降为2个
同样,主界面的UI也是,原来杂乱无章的摆放,导致DrawCall数量太多,有意识的重新组织顺序,根据Unity 的渲染顺序,则可以保证在动态batch中,合并大量的DrawCall!目前主界面UI的DrawCall又30个下降到5个左右(包括一部分3D Mesh,所以无法直接降为2)                                                                                                                                                                                             
此外,主界面有3D的模型作为背景,经检查,此部分DrawCall多达150个,令人发指啊,简直不能忍!目前展开优化的方式有三种:1.直接将背景隐藏(影响原本效果),2.将所有的陨石背景合并(目测影响效果)3.由指定方式渲染(即修改顺序,修改参数,对效果的影响几乎可以忽略)
 
为了达到最低的DrawCall,又不过多损失效果,采取符合规则来进行Batch的策略。目前根据Unity渲染顺序,及官方文档提供的说明,整理出优化方案如下:
1.排列顺序:UGUI的渲染顺序为从上到下,即你所看到的Hierarchy上面的顺序,在使用同一图集的情况下,连续多次对图片(相同或者不同)的渲染,只占用一个DrawCall,对文字的渲染同理,只要不交叉渲染图片和文字,理论上讲,这样可以把整个UI的Draw降低到2!
 
2.渲染文字:最好使用同一字体,在使用多种字体的时候,最后如1所提示,按顺序来!
 
3.图集的是用,将图片打包成图集的时候,有可能因为图片的格式问题,或者通道之类的问题,导致明明设置在同一图集名称,却打包成了统一图集的两组。所以,尽量使用统一格式!
 
4.同材质模型:渲染许多使用相同材质的模型,有个最容易忽略的地方,Scale如果不一样不能Batch,此外还有对顶点数目,shader的pass数量等有限制,不符合会break batching!
                                                                                                                                                   
5.脚本对材质的访问:访问某个使用共享材质的mesh时,考虑使用render.sharedMaterial而不是render.material,后者会在内存中生成一份拷贝!
                                                                                                                                                                                                                            
6.静态batch:在制作场景的时候,如果能保证mesh本身不发生任何变化,可以使用,效果不错,就限制大!

你可能感兴趣的:(Unity3D中UGUI及3D模型渲染的DrawCall优化)