Runtime Mesh Baker v1.1.3

介绍(English Version):

帮助你合并网格、材质和贴图,以减少DrawCall,提升你的Unity程序运行效率。 比Unity自有的静态和动态批处理要更加有效。 跟预先合并(非运行时合并)相比,不会产生冗余资源。

警告: 此工具不能合并那些单个网格已经超越了64k个顶点的网格单元,因为这是Unity的网格合并上限。也就是说当你的有两个或者两个以上的网格加起来的顶点数不超越64k时,使用此工具才会获得性能优化(正常而言,对于手机游戏的网格顶点不会如此复杂,绝大部分情况下应该都存在优化空间)。

主页地址:http://www.lonelywalker.cn
开发者Email: mailoflonelywalker@qq.com
CSDN博客: http://blog.csdn.net/andrewfan

版本历史:

Version 1.1.3 2017.11.15

Version 1.1.2 2017.9.18

Version 1.1.1 2017.9.10

下载地址:

Runtime Mesh Baker Of AssetStore

使用方法:

  1. 准备好你要合并的游戏对象,把它们放在同一个树状层次结构中,当前需要合并在一起的的对象应该拥有一个共同的父节点。

  2. 选择这个父节点,选择以下菜单三者之一进行即可,点击运行,即可看到合并结果。在运行时将自动进行相应模式的合并(后续将解释不通模式之间的差别)。

以上是手动添加组件的方式,如果你希望使用代码在你的游戏进行过程中调用合并功能,可以在您的工程添加以下调用代码:

    gameObject.AddComponent<BAT_DeepBaker>();//for static objects , eg stones,trees
    //or
    gameObject.AddComponent<BAT_MildBaker>();//for static objects , eg stones,trees
    //or
    gameObject.AddComponent<BAT_SkinnedMeshBaker>();//for motion objects , eg characters

Mild Baking 轻度合并组件的参数解释:

轻度合并,将根据材质进行分组合并,即在当前树状层次结构中,搜索所有的材质,按照不同类型的材质进行分组,然后将相同材质的网格全部合并到同一个目标网格。合并过程中,使用原有的材质和贴图,不产生新的材质和贴图。

Deep Baking 深度合并组件的参数解释:

深度合并,将根据Shader进行分组合并,即在当前的树状层次结构中,搜索所有的材质,按照所有材质使用的不同类型的Shader进行分组,将所有使用相同Shader(它们可能使用不同的材质)的网格全部合并到一个目标网格,同时,将相应合并那些属于同一组的网格单元所使用的贴图。合并过程中,几乎总会产生新的材质和贴图(除非所有的被合并单元均使用了相同的材质)。

Skinned-meshes Baking 皮肤网格合并组件的参数解释:

皮肤网格的合并,由于它本质上也是轻度合并,所以与Mild Baking的参数一致,只是本组件用于皮肤网格的合并,而Mild Baking和Deep Baking只能用于非皮肤网格的合并。

不同模式下的合并流程:

  1. 搜索目标父节点,检查所有的目标单元gameobject,收集它的MeshFilter 和 MeshRenderer信息。
  2. 整理所有的网格和材质信息,然后将目标单元分为不同类型的分组,轻度合并根据材质分组,深度合并根据Shader进行分组。
  3. 如果是深度合并,则需要构建新的材质,并且可能需要合并产生新的贴图。如果是轻度合并,则只使用原有的材质,不产生新的材质和贴图。
  4. 创建一个新的合并节点,开始网格的分组合并,如果本组网格的顶点书超越最大限制,则会将多余的网格合并到新的节点上。
  5. 为新合并的网格设置MeshFilters和MeshRenderers组件,它们使用当前分组的统一的材质。
  6. 执行清除操作,默认情况下,将移除被合并单元的MeshFilter和MeshRenderer属性。


三种合并模式之间的异同:

分组基础 合并贴图 合并网格 Draw call变化 多个子材质 合并目标
Mild 材质 不需要 需要 支持 静态物体
Deep shader 需要 需要 最少 支持 静态物体
Skinned 材质 不需要 需要 较少 不支持 可移动物体

故障排除

如果合并过程中发生了错误,检查以下条目:

  1. 使用深度合并的时候,确定你所有的GameObject没有被设置为static。
  2. 所有需要合并的贴图需要在导入属性中勾选readable选项,如果你使用的是深度合并的话。你可以点击组件上的"Fix troubles"按钮来快速完成这项设置。
  3. 如果你的材质有连续平铺的贴图,即在材质中的Tiling参数不为1的话,那么这类材质不能使用深度合并。你需要将这类目标移除出你的合并层次结构。
  4. 如果你使用BAT_SkinnedMeshBaker,那么注意那些目标skinned-mesh组件所位于的GameObject,它们的tranform变换信息须为0(相对于动画的Animation or Animator组件所在的对象),即局部坐标、缩放、旋转都为0,如果不是的话,可能会产生错误的骨骼动画。

视频教程:

将来的版本