Unity CombineChildren和MeshCombineUtility

原理

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)

posted @ 2014-02-17 14:34  赵青青  阅读(1134)  评论(0编辑  收藏  举报