原理
Unity3D如何通过CombineChildren和MeshCombineUtility优化场景?
首先解释下联结的原理和意思:文档里说,显卡对于一个含100个面片的物体的和含1500个面片的物体的渲染消耗几乎是等价的。所以如果你有N个同一材质的东西,那么把他们联成同一个物体再统一用一个material那么对于显卡的渲染消耗就要降低N倍。
方法
1、直接在max等工具里联结好,贴上同一材质再导进来,这方法固然好却不灵活,而且通常不实用,因为项目里大量同一材质的东西都是Unity>系统的树花等。
2、就是在Unity里再联结,经常看Island Demo项目的人应该很早就注意到里面的石头这些都是连在一起的,原因就在这里,他提供了现成就脚本实现联结。
先到Island Demo的Assets/Script下找到CombineChildren.cs和MeshCombineUtility.cs两个脚本复制到自己的项目文件(我们要用的只是前者,但他会调用后者,没有后者unity会报错,所以把后者扔到项目里不管就好)
然后把你项目里那些用同一Materials的东西扔到一个空物体里面去,再把CombineChildren.cs贴到那个空物体上,搞定!
Unity3D中此脚本的缺陷和使用注意,支持单一material,所以如果在MeshRenderer里用多个materials或里面的子物体含有不同的material就不行了,它会在父物体里生成多个叫Combined Mesh的东西,却无法把他们赋给父物体。所以,如果发现运行游戏后父物体还是没带MeshRenderer,请仔细检查你子物体是否带了不同的 material!
其它建议
以上是官方文档里提主要改善方法,其他一些优化简要说下吧,
在人物模型方面,建议:
1、模型必须用一个Mesh Renderer(2个的渲染时间就翻倍)
2、1个Mesh Renderer尽量少用多个materials,一般2-3个就够了
3、每个模型使用30个左右的骨骼。
其他方面比如尽量不用像素光(Pixels Lights)啊、软阴影啊这些基本都可以通过调参数来解决。
文献资料
转载自: Unity3D如何通过CombineChildren和MeshCombineUtility优化场景
参考文档:http://game.ceeger.com/Manual/DrawCallBatching.html
论坛:http://forum.unity3d.com/threads/37721-Combine-Children-Extented-(sources-to-share)