MeshBaker插件动态网格合并

由于公司美术比较菜,模型制作方面不仅被客户各种吐槽,研发这边也是头疼不已。模型优化做的不够,随便一个小场景,Drallcall就飙到1200,比较无奈。好在网上找到了一个插件MeshBaker,简直是神器。做个记录,免得下次忘记。
由于我的项目场景是动态变化,随时加载的,所以需要在加载场景时,实时对场景模型进行网格的优化,处理方法如下,在bundel读取完场景后,获取场景预设中所有的包含MeshRender的物体,交给MeshBaker进行处理,我在处理的时候发现,网格合并完,原有的碰撞体还保留在原来的场景上,所以建议只对静态的场景做网格合并操作,动态的模型还没研究,后续有时间再研究一下



    /// <summary>

    /// 使用meshBaker处理静态基础场景

    /// </summary>

    /// <param name="_base">Base.</param>

    public static void BaseSceneBaker(GameObject _base)

    {

        GameObject _meshBaker = new GameObject ("MeshBaker");

        _meshBaker.AddComponent <MB3_MultiMeshBaker>();

        MB3_MultiMeshBaker _baker = _meshBaker.GetComponent<MB3_MultiMeshBaker> ();

        MeshRenderer[] _renders = _base.GetComponentsInChildren<MeshRenderer> ();

        List<GameObject> _toLoadObjects = new List<GameObject> ();

        for (int j = 0; j < _renders.Length; j++) {

            MeshFilter _filter = _renders [j].GetComponent<MeshFilter> ();

            if (_filter&&_filter.mesh) {

                _toLoadObjects.Add (_renders [j].gameObject);

            }

        }

        _baker.AddDeleteGameObjects (_toLoadObjects.ToArray(), null,true);

        _baker.Apply ();



    }



    /// <summary>

    /// 删除上次创建的meshBaker

    /// </summary>

    public static void DeleteMeshHandler()

    {

        GameObject _meshBaker = GameObject.Find ("MeshBaker");

        GameObject _meshBakerObject = GameObject.Find ("CombinedMesh-MeshBaker");

        if (_meshBaker) {

            Destroy (_meshBaker);

        }

        if (_meshBakerObject) {

            Destroy (_meshBakerObject);

        }

    }


使用MeshBaker处理后,监控一下Dc,果然有显著下降,我拿的示例场景Dc的降低比例大概达到60%,确实是个很好用的工具。

这里还要解释一下,为什么第一个方法里针对MeshFilter做了一个判断,是因为在实测的时候,发现如果包含MeshRender的物体,没有MeshFilter的时候,会合并失败,所以只好加了一层判断。

Unity网格合并插件是一种用于合并游戏场景中多个网格模型的工具。在游戏开发中,为了提高性能和优化资源的使用,常常需要将多个小块的网格模型合并成一个大块的模型。 使用Unity网格合并插件可以简化这一过程,减少开发者的工作量。它提供了一个用户友好的界面,让开发者可以轻松地选择需要合并网格模型,并设置合并后模型的属性。 Unity网格合并插件可以帮助开发者解决以下问题: 1. 减少渲染调用:将多个小块的网格合并成一个大块的模型,可以减少渲染调用次数,提高渲染性能。 2. 优化资源使用:合并网格模型可以减少游戏运行时的内存消耗,提高游戏性能。 3. 简化碰撞检测:合并网格模型后,只需对一个大块的模型进行碰撞检测,可以优化游戏的物理运算。 使用Unity网格合并插件的步骤通常包括: 1. 导入网格模型:将需要合并网格模型导入到Unity中。 2. 创建合并对象:在Unity中创建一个新的空游戏对象作为合并后模型的容器。 3. 设置合并属性:选择需要合并网格模型,并设置合并后模型的属性,如材质、碰撞体等。 4. 运行合并操作:点击合并按钮,将选择的网格模型合并成一个大块的模型,并将其添加到合并对象中。 通过使用Unity网格合并插件,开发者可以有效地优化游戏的性能和资源的使用,提高游戏的流畅度和体验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值