本文由@唐三十胖子出品,转载请注明出处。
文章链接:https://blog.csdn.net/iceSony/article/details/83444170
这篇文章由唐三胖ヾ(•ω•`)o网络整理总结,针对DrawCall概念的系列优化教程。
通过这篇文章,你可以知道
1)动态/静态批处理的概念
2)什么时候会动态批处理
3)如何设置静态批处理
动态批处理
顾名思义:U3D自发的渲染批次处理
U3D会检测模型纹理,相同的放在一起渲染,此时DC仅为1,不需要我们做任何操作。
但是注意一点
动态批处理仅支持小于900顶点的网格物体。
再加上着色器使用顶点位置,法线和UV值三种属性,那么你只能批处理300顶点以下的物体
具体应用:一个对称的图片咱们只需要美术给一半就够了
静态批处理
上面动态批处理可以很好地修改游戏,那么当顶点个数大于900的呢???
动态处理不了的,咱们静态处理
原理:设置为static的物体相同材质的物体的网格会进行合并,你可以看作是多个物体变成1个大物体
未启动前设置所有静态物体为static,运行以后你会发现减少为
一定要运行,不然看不到效果
建议场景下的石子啊什么的咱们弄一个石头节点,所有的石头都放在节点下
如果你需要通过脚本来控制单个材质属性,需要注意改变Renderer.material将会造成一份材质的拷贝。因此,你应该使用Renderer.sharedMaterial来保证材质的共享状态。
有一个合并模型材质不错的插件叫Mesh Baker,大家可以考虑试下。
另外,用灯光将会取消(break)引擎的DRAW CALL BATCH,至于为什么,查看以下:
Forward Rendering Path Details:
http://docs.unity3d.com/Documentation/Components/RenderTech-ForwardRendering.html
好在手游由于性能原因不使用光照,所以一般不担心这个问题。
下一章将介绍剔除模型数量直接减少Draw Call数量的方法。