Unity 网格合并
来源:互联网 发布:淘宝女装精品装修图片 编辑:程序博客网 时间:2024/05/05 23:01
从优化角度,Mesh需要合并。
从换装的角度(这里指的是换形状、换组成部件的换装,而不是挂点型的换装),都需要网格合并、材质合并。如果是人物的换装,那么需要合并SkinnedMeshRenderer,并重刷对应的骨骼列表。网格合并后对模型的渲染可以降低GPU的负担,但是经过测试发现,虽然网格合并了但是由于子物体网格的材质是不同的并没有降低DrawCall,如果把材质改成相同的,Unity自身会进行批处理合并,所以DrawCall就会减少!在MMO的游戏中,网格动态合并还是非常有必要的!
网格合并代码:
private void CombineMesh() { //获取自身和所有子物体中所有的 MeshRenderer 组件 MeshRenderer[] meshRenderers = GetComponentsInChildren<MeshRenderer>(); //材质球数组 Material[] materials = new Material[meshRenderers.Length]; for (int i = 0; i < meshRenderers.Length; i++) { materials[i] = meshRenderers[i].sharedMaterial; } // 合并 Mesh // 后去自身和子物体中所有 MsehFilter 组件 MeshFilter[] meshFilters = GetComponentsInChildren<MeshFilter>(); CombineInstance[] combines = new CombineInstance[meshRenderers.Length]; for (int i = 0; i < meshFilters.Length; i++) { combines[i].mesh = meshFilters[i].sharedMesh; // 矩阵(Matrix)自身空间坐标的点转换成世界空间坐标的点 combines[i].transform = meshFilters[i].transform.localToWorldMatrix; meshFilters[i].gameObject.SetActive(false); } //重新生成mesh MeshFilter meshFilter = transform.GetComponent<MeshFilter>(); if (meshFilter == null) { meshFilter = gameObject.AddComponent<MeshFilter>(); } // 给 MeshFilter 组件的 mesh 赋值 meshFilter.mesh = new Mesh(); //合并Mesh, 第二个参数 false,表示并不合并为一个网格,而是一个自网格列表 transform.GetComponent<MeshFilter>().mesh.CombineMeshes(combines, false); transform.gameObject.SetActive(true); //为合并后的新Mesh 指定材质 //transform.GetComponent<MeshRenderer>().sharedMaterials = materials; MeshRenderer meshRender = transform.GetComponent<MeshRenderer>(); if (meshRender == null) { meshRender = gameObject.AddComponent<MeshRenderer>(); } meshRender.sharedMaterials = materials; }
运行前:
合并之后:
发现合并之后,三个子物体的材质都在父物体上,材质合并到了一个MeshRender下。
工程地址:git@git.oschina.net:wuzhang/UnityCombineMeshRender.git
0 0
- Unity网格合并
- Unity -网格合并
- Unity -网格合并
- Unity 网格合并
- Unity 网格合并
- Unity 网格合并
- Unity 网格合并
- Unity 网格合并
- Unity 网格合并
- Unity 网格合并
- 【Unity】Unity Mesh 网格合并
- Unity换装之合并网格
- Unity合并网格和贴图
- Unity网格合并_材质合并
- Unity网格合并_材质合并
- Unity网格合并_材质合并
- Unity网格合并_材质合并
- Unity中网格合并示例研究。针对合并子网格列表后再合并网格
- web批量打印pdf
- VGG:VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION论文笔记
- Eclipse设置字符编码
- CodeForces 455A
- WebMagic(一)--抓取一个简单的页面
- Unity 网格合并
- 浙大模拟(1)问题 C: 还原二叉树
- 二叉搜索树的后续遍历
- Hoj 1412
- python 形参与实参及默认参数的性质
- POJ 2524
- Hibernate—检索策略
- struts-2.3登录设计
- matlab读取、显示.mat文件