Unity CombineChildren和MeshCombineUtility

摘要:
原理Unity3D如何通过CombineChildren和MeshCombineUtility优化场景?首先,找到CombineChildren。cs和MeshCombineUtility位于IslandDemo cs中的资产/脚本下。将这两个脚本复制到您自己的项目文件中,然后将项目中的相同材质放入一个空对象,然后将CombineChildren cs粘贴到空对象中,然后完成!Unity3D中此脚本的缺陷和使用说明支持单个材质。因此,如果在MeshRenderer中使用多个材质,或者MeshRender中的子对象包含不同的材质,则无法工作。它将在父对象中生成多个名为CombinedMesh的对象,但不能将它们指定给父对象。

原理

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)

免责声明:文章转载自《Unity CombineChildren和MeshCombineUtility》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇QT 添加 lib库div拖拽, onmousedown ,onmousemove, onmouseup下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

自已编写C# DLL 绑定到unity进程进行单步调试

测试环境一:mac Catalina-10.15.4, vs2019 for mac, unity2019.3.6f1 for mac 要在VS2019的 【适用于UNITY的工具】中,将 【调试程序引擎】设置为 MONO,否则单步调试时会提示:Debugger operation failed : operation is not valid due t...

A星寻路算法入门(Unity实现)

最近简单学习了一下A星寻路算法,来记录一下。还是个萌新,如果写的不好,请谅解。Unity版本:2018.3.2f1 A星寻路算法是什么游戏开发中往往有这样的需求,让玩家控制的角色自动寻路到目标地点,或是让AI角色移动到目标位置,实际的情况可能很复杂,比如地图上有无法通过的障碍或者需要付出代价(时间或其他资源)才能通过的河流、沼泽等,想要让角色找到一条付出最...

Unity学习——纹理、材质&着色器

Unity渲染使用的是材质(Materials)、着色器(Shaders)和纹理(Textures),它们有着紧密的联系。 材质定义了表面是如何被渲染的,通过包含它使用的纹理的引用,颜色色调等等。材质可用的选项取决于它使用的着色器。 着色器就是包含数学计算和算法的小脚本,它根据灯光输入和材质配置来计算每个渲染像素的颜色。 纹理就是 bitmap图像。材质...

Three.js Demo源码分析1.MorphTargets与BufferGeometry

Three.js主页上有很多绚丽的Demo,是学习的极佳素材。我正利用闲暇时间学习这些Demo,并将心得体会记录下来。 老调重弹 先睹为快 空间中旋转的立方体板条箱,恐怕是主页上最简单的一个例子了。在WebGL原生API教程中就有这个例子,用Three.js实现起来更加方便了。但是,作为开始的开始,还是再重弹一遍老调吧。 较简单的例子多采用这种一目了然的结...

通过Unity导出的Android Studio和Google安卓原生工程的结构图对比

使用Unity导出Android Studio工程前建议查看我之前的文章《Unity2019及Unity2020打包android的环境配置》,替换或修改Unity安装目录下的baseProjectTemplate.gradle,把链接指向国内能加快下载速度。 说明:我把Android Studio简称为AS 本文记录一下Android Stuiod中原生...

tips

史上最全的Unity面试题(持续更新总结。。。。。。) 包含答案的Unity面试题 这个是我刚刚整理出的Unity面试题,为了帮助大家面试,同时帮助大家更好地复习Unity知识点,如果大家发现有什么错误,(包括错别字和知识点),或者发现哪里描述的不清晰,请在下面留言,我会重新更新,希望大家共同来帮助开发者 一:什么是协同程序? 在主线程运行的同时开启另...