如何优化DrawCall

来源:互联网 发布:网络空间安全专业排名 编辑:程序博客网 时间:2024/05/17 22:47
Draw calls是基本的参考数值,但并不是绝对的。有时候DC很低,依然FPS上不来,原因就是有某个shader或script太耗时了。

我只作Mobile,通常测试设备2个:1、小米1;2、iPod Touch4;所以,我非常关注DC数量,以及最终的FPS表现。我的测试设备太差了,导致我无法使用太多高级效果,这是一个弊病。当然,我们还是回过来说DC吧。

基本上,我可以实现DC=50的时候,iPod Touch4能跑到30 FPS。我用NGUI+一些粒子+一些骨骼人物模型(同屏10个左右)。

在我们实际设计游戏的时候,时刻关注DC是好习惯。而关注DC实际上是服务于FPS的。这是目的。

简单的说,shader消耗对fps影响最多。shader显示面积也对fps影响很多。可以理解为,一个较为消耗的shader,但是面积比较小,那么就可以继续使用了,但尽力控制面积,别太大。控制数量,别太多。

对于高效的shader而言,比如NGUI的默认shader,因为效率高,即便DC达到100依然可以顺利的跑起来。所以么,经验就是,对于你要使用的shader进行压力测试,1、2、3、10、20、30、100、200、300的GO,看最终效果。

我说的不是假话,我真的作了很多测试,采用相同的GameObject、Script、Camera,Device,并通过更高shader来测试,然后记录下来。。。。。那个文件很大,有些内部内容无法分享。。。。sorry。。。。

这就是个体力活儿,测试+记录Log吧,对shader有了充分的理解后,就能明白哪些DC是必须控制的,哪些DC是可以容忍的了。

最后,你肯定看了很多文章。DC的增加就是因为OpenGL要进行一次新的绘制。基本上都是Texture和Material引起的,所以,减少Texture的数量,减少Material的数量,会很有效。

前面我推荐过Mesh Baker,目的是实现运行状态中的模型合并。事实上,这个插件也能有效的减少DC,值得考虑使用,原理就是,这个插件因为把多个模型合并了,所以他也会合并多个模型的Texture&Material,也就导致了对DC的减少。。。

啰嗦的有点儿多了,多测试多实验,然后研究一下Mesh Baker,祝Luck!
0 0
原创粉丝点击