zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    非985、211毕业,却选择了拒接百度Android开发岗offer?
    第五章:Redis持久化-RDB持久化
    第一章:初识Redis
    第四章:虚拟机监控工具
    第三章:内存分配与回收策略
    第三章:垃圾回收器-参数总结
    第一章:Nginx安装
    第一章:Nginx介绍
    第三章:进程管理-进程描述符及任务结构
    4、跃进表
  • 原文地址:https://www.cnblogs.com/zhaoqingqing/p/3552557.html
Copyright © 2011-2022 走看看