• 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)

  • 相关阅读:
    nginx反向代理前后端分离项目(后端多台)
    部署http访问SVN模式出现403问题
    The server quit without updating PID file
    guns开源项目数据库切换为oracle
    window环境下修改postgrep密码
    mybatis中怎样使用having?
    PostgreSQL时间段查询
    Java实现产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。
    Jenkins构建maven项目跳过测试用例的命令
    supervisord
  • 原文地址:https://www.cnblogs.com/zhaoqingqing/p/3552557.html
Copyright © 2020-2023  润新知