Unity教程之-Unity3d移动平台上性能优化专题(一):减少DrawCall

 

本篇unity3d教程,我们来学习下Unity3d移动平台上性能优化,首先我们来讲下如何减少Unity中Draw Call

一次DrawCall都会造成cpu巨大的性能开销,所以减少drawcall可以说是所有的性能优化中最重要的一环。

常见的做法都是通过合并纹理,尽量让一个模型只消耗一个drawcall,其实大部分游戏都是这么做的。当然你会发现正常情况下你的drawcall不会超过50.

外国一个大牛的原文

       Draw calls are expensive.  Every time you tell OpenGL ES to draw a buffer of verts, that call itself has a cost.  Actually, on most devices I think it is the state switch involved in selecting the verts that you wish to draw that incurs the real cost; if you were to draw the same buffer multiple times, the first draw call would be more expensive than the subsequent calls.  But generally speaking, we try to keep the number of draw calls as low as possible.  In Wind-up Knight 2 we have about 100 – 120 per frame.  Dungeon Slots is less than 40 per frame.

然后我们发现,大部分游戏真正导致大量drawcall开销的一般是特效或者GUI的不正确使用。

特效为了能够更加华丽酷炫,大量的drawcall可能是无法避免的,这就需要进行折衷。我也强烈建议在一个场景中单独放这个特效,然后观察drawcall数,如果太过夸张,比如一个特效多达20个drawcall,那么我觉得就应该对这个特效进行优化, 再炫,也不要超过20个drawcall。

GUI就不多说了,希望好好去学习下NGUI的用法。

ok,然后我花了一个下午的时间,检查了所有的特效,发现不少特效其实都可以优化drawcall,而且还发现一个特效有多余的东西没删掉,峰值竟然到达了40个drawcall,处理后只剩12个,还算可以接受。

最后,针对drawcall的优化正常情况下不会有明显的性能提升,除非你让drawcall下降了整整一个数量级,不然几乎就是1ms甚至不到的性能提升,但这仍然是必要的。毕竟,10个1ms就是10ms,如果你能够切实的优化10个点,那么节省的10ms无疑会让你的性能大幅提升到一流水平。

好了,本篇unity3d教程到此结束,如果您喜欢,下篇我们再会!