首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Unity Mesh网格合并

Unity Mesh网格合并

作者头像
CoderZ
发布2022-08-29 16:04:09
发布2022-08-29 16:04:09
1.2K0
举报

Mesh网格合并通常是优化中常用的小手段,目的是为了减少drawcall,大量的drawcall会造成CPU的性能瓶颈。例如下图中船只里的钢材货物,由诸多钢材模型堆砌而成。

我们将其放在一个空场景里查看Stats信息,可见Batches指数为94

下面我们进行网格合并,将所有的钢材合并为一个Mesh,代码如下:

代码语言:javascript
复制
//绘制Button按钮
if (GUILayout.Button("Combine"))
{
    //用于存储材质球
    List<Material> materials = new List<Material>();
    List<CombineInstance> combineInstances = new List<CombineInstance>();
    for (int i = 0; i < Selection.objects.Length; i++)
    {
        GameObject gameObject = Selection.objects[i] as GameObject;
        //如果物体为空或物体不存在MeshFilter组件或Mesh网格为空则跳出
        if (gameObject == null) continue;
        MeshFilter filter = gameObject.GetComponent<MeshFilter>();
        if (filter == null || filter.sharedMesh == null) continue;
        //展示进度
        EditorUtility.DisplayProgressBar("Mesh Combine", "Combine " + filter.sharedMesh.name, (float)i + 1 / Selection.objects.Length);
        combineInstances.Add(new CombineInstance()
        {
            mesh = filter.sharedMesh,
            transform = filter.transform.localToWorldMatrix
        });
        MeshRenderer renderer = gameObject.GetComponent<MeshRenderer>();
        materials.AddRange(renderer.sharedMaterials);
    }
    EditorUtility.ClearProgressBar();
    //创建新的物体用于挂载合并后的网格
    GameObject combine = new GameObject("Combined Mesh");
    MeshFilter meshFilter = combine.AddComponent<MeshFilter>();
    meshFilter.mesh = new Mesh { name = $"Combined Mesh {Guid.NewGuid()}" };
    meshFilter.sharedMesh.CombineMeshes(combineInstances.ToArray(), mergeSubMeshes);
    MeshRenderer meshRenderer = combine.AddComponent<MeshRenderer>();
    meshRenderer.materials = materials.ToArray();
}

合并后的MeshRenderer只需要保留一个材质球:

再看一下Stats面板中的信息可以发现Batches指数已经由92变为42:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 当代野生程序猿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档