Home 渲染优化 手动合批
Post
Cancel

渲染优化 手动合批

手动合批方法

  1. 生成新的合批后的模型后要隐藏原有的模型,以免两个模型重叠显示。
1
2
3
4
5
6
7
8
9
10
// CombineInstances 承载了所有需要合并的数据,包括网格,子网格,世界坐标矩阵等...
CombineInstance[] combineInstances = new CombineInstance[meshFiltersToCombine.Count];
for(int i = 0 ; i< meshFiltersToCombine.Count ; i++)
{
    // combineInstance 是个 struct,可以直接赋值,不需要new
    combineInstances[i].mesh = meshFiltersToCombine[i].sharedMesh;
    combineInstances[i].transform = meshFiltersToCombine[i].transform.localToWorldMatrix;
    combineInstances[i].subMeshIndex = i; // 标识Material的索引位置,可以为0、1、2等
}
meshFilterCombined.sharedMesh.CombineMeshes(combineInstances, true, true);

手动合批需要满足的条件

  1. 需要合并的模型需要选中 [[read/write]]。
  2. 合批的模型距离不要太远,不能太大,以防CPU裁剪失效。
  3. 要求模型使用相同的材质球。
  4. 手动合并网格之后,Unity不能单独 Cull 其中的子网格;如果合并之后的网格有一部分在屏幕上,则Unity会绘制整个合并的Mesh。

手动拼接网格的缺点

  1. 拼接网格时可能会有卡顿的情况。
This post is licensed under CC BY 4.0 by the author.
Contents