关注

为什么静态批处理中断了,或者说没有按照预期的执行?

问题

  • 我在某些网格(Mesh)上调用了Combine,但它们并没按照期望的成为批处理。
  • 我在编辑器中把网格做了静态批处理,但是没有看到它们被批处理。

原因

导致您的网格无法被批处理可能有以下原因:

  1. 您试图组合的网格中存在与其他网格材质不同的网格。
  2. 在检视面板窗口中,存在没有被标记为静态的游戏对象。
  3. 组合的游戏对象上不存在网格实例。
  4. 批处理中的任一网格的渲染器是空或者禁用。
  5. 对象已经被组合到其他网格批处理上了。
  6. 存在使用了DisableBatching(禁用批处理)标签的材质着色器。
  7. 网格的顶点计数为零。
  8. 批次内的顶点的数量超过64000这个最大值。Unity仅处理64k或者更少的顶点的批次,例如128001(64000x2 + 1)个顶点将会创建3个批次。

解决方案

检查您的项目中是否存在上述问题。如果没有则按照如下步骤进行问题排查:

  1. 确保您在评估静态批处理时处于播放模式,静态批处理的工作机制是在构建或者运行时使用StaticBatchingUtility.Combine组合网格。
  2. 有可能您遇到了程序错误,我们之前也有过在不该分割批次的时候分割批次的错误。如果不是之前描述的那些问题,那么请备份您的项目并在新版本的Unity中试试。
  3. 在某些罕见情况下使用不同烘培光贴图的网格不会在一个批处理中,一般情况下这不会发生,因为光照贴图会用某种形式的封装来避免这种问题。某些情况下,使用多种不同的网格时,因为单独的细节层级可能有不同的光照贴图,这可能不会将不同的LOD放入同一个批处理中。
  4. 如果您仍然遇到静态批处理问题,请打开 Unity Frame Debugger(在播放模式中),并查看网格的每个单独的绘画调用。查看不同材质和渲染通道绘制调用的发生并尝试找到其不同之处。例如查看您期望在一个批处理中的两个网格,每个都是否通过不同的渲染通道?是否其中一个有光照贴图而另一个没有?

更多信息

更多信息请参阅下方链接: 

本文适用于Unity 5.x。

这篇文章有帮助吗?
1 人中有 1 人觉得有帮助
还有其它问题?提交请求

0 评论

登录写评论。