这两天在优化项目发现了以前项目里面一个可以优化的地方,同步上来记录一下。
首先是发现项目里面同一个模型多次创建drawcall并不会合并,翻阅了一下官方文档找到了原因如下:
- 合并的GameObject模型有顶点数限制,小于900顶点属性或300个顶点
- GameObject的scale有镜像缩放的不可以
- 材质球使用不同的实例个体也不行
- 光照贴图参数不同的也不行
- shader里面写了多个pass的也是NO NO NO
还有这个:
这里说只有Mesh Renderers, Trail Renderers, Line Renderers, Particle Systems, 和 Sprite Renderers会合并。其他诸如Skinned Meshes,Cloth等都不会合并。
简单看下来就是合并drawcall条件相当严峻。我们项目的模型都是使用的Skinned Mesh Renderer,这就解释了为什么我同一个鱼模型复制了N份就有N倍的drawcall。目前还没有找到好的相关的优化,如果各位有好的建议欢迎留言,感谢!
接着我就对运行时修改renderer的材质做了对比测验
测试描述:
在一个新的空工程中拖入我的模型,并写了简单的脚本生成300个复制体并每一定时间间隔&