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

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

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

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;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:

Unity Mesh网格合并相关推荐

  1. Unity中网格合并

    从优化角度,Mesh需要合并. 从换装的角度(这里指的是换形状.换组成部件的换装,而不是挂点型的换装),都需要网格合并.材质合并.如果是人物的换装,那么需要合并SkinnedMeshRenderer, ...

  2. [Unity] Mesh网格位置偏移

    需求: 在一个绘制好的mesh上面,在鼠标所指的那个六边形处,再画出来一个红色的六边形. 问题: 鼠标的位置是A,gameobject也被设置在A,但是六边形Mesh却画在了B 代码: private ...

  3. Unity网格合并_材质合并

    2019独角兽企业重金招聘Python工程师标准>>> 写在前面: 从优化角度,Mesh需要合并. 从换装的角度(这里指的是换形状.换组成部件的换装,而不是挂点型的换装),都需要网格 ...

  4. Unity Edior下合并场景 合并网格 合并贴图

    声明:这篇绝不是网上那些转来转去千篇一律的 合并方法 搜老半天看的都是同一篇博客 一点帮助都没有 还是自己写个吧 1.工程里面 合并场景主要是为了降低draw call 2.不同shader的尽量不要 ...

  5. 学习笔记:unity通过Mesh网格绘制图形:三角形正方体圆柱

    一,介绍 Mesh类:通过脚本创建或是获取网格的类,网格包含多个顶点和三角形数组.顶点信息包含坐标和所在面的法线. unity中3D的世界的所有图形全部都是由三角形构成的. 比如unity已经装配好的 ...

  6. Unity Mesh基础系列(一)生成网格(程序生成)

    目录 1 渲染事物 2 创建顶点网格 3 创建Mesh 4 生成附加顶点数据 本文主要内容: 1.创建一个点阵网格 2.用协程分析点阵网格的位置 3.用三角形定义表面 4.自动生成法线 5.增加纹理坐 ...

  7. 【Unity】Mesh网格编程(三)万能网格几何形体

    用一个通用代码,实现各种锥.柱.管状体的网格创建. 非原创的同系列.虽然总觉得代码上可以再优化,但是实现的功能已经超级屌了. 真是没有不能做的,只有想不到的. 原文: Mesh网格编程(二) 万能网格 ...

  8. unity中Mesh网格编程

    上图是效果 一.关于mesh的意义 有了mesh网格,物体才能被渲染出来. (1)mesh中包含顶点, mesh.vertices (2)顶点对应的uv(一张图的uv左下角00,右上角11) mesh ...

  9. 63 Three.js 将多个网格合并成一个网格

    简介 多数情况下使用组可以很容易地操纵和管理大量网格.但是当对象的数量非常多时,性能就会成为一个瓶颈.使用组,每个对象还是独立的,仍然需要对它们分别进行处理和渲染.通过THREE.Geometry.m ...

最新文章

  1. 设计模式C#实现(三)——外观模式
  2. Ubuntu 16.04 LTS界面美化
  3. python算法攻略_算法基础及python实现笔记一(堆和DFS)
  4. 运行Python程序的2种方式
  5. python远程执行shell 防止注入脚本_解决 window 上python远程执行shell paramiko 下令 Permission denied...
  6. 微信AI开放接口介绍
  7. javascript 日期时间函数(经典+完善+实用)
  8. python label字体_Matplotlib xlabel,Arial格式,带一个斜体字
  9. Google Chrome浏览器模拟设置不同分辨率
  10. 2022年低压电工考试题模拟考试题库及模拟考试
  11. 微导管行业调研报告 - 市场现状分析与发展前景预测
  12. ModbusRTU协议数据格式
  13. 华硕服务器主板装系统,装机高手教你华硕主板bios设置图解
  14. c语言杖举,形近字组词。直()植()杖()仗()提()题()漫()慢()
  15. [转]华为应对新劳动合同法 万名员工将自选去留[http://news.qq.com/a/20071027/002388.htm  21世纪经济报道]
  16. 【JS Web 前端知识库】6.说一说BFC
  17. Premiere Pro 常用快捷键
  18. 结合实例,直观理解正态分布、卡方分布、t分布、F分布和对应的Z检验、卡方检验、t检验、F检验
  19. python随机森林变量重要性_python机器学习之随机森林(七)
  20. 什么是Redis哨兵机制?

热门文章

  1. 【计算机毕业设计】基于微信小程序的美食食谱大全系统
  2. mysql使用什么替代like查询_mysql替代like模糊查询的最佳方法?????求赐教!!!!...
  3. 苍蓝钢铁Android界面,苍蓝钢铁战舰 Re:Birth
  4. ubuntu 16.04挂载2T机械硬盘
  5. 【每日新闻】欧盟委员会对华硕等4家公司处以1.3亿美元罚款;谷歌发布多款AI工具:帮大众更好地利用人工智能...
  6. Oracle ERP财务系统——固定资产
  7. 三连杆平面机器人的动力学
  8. saltstack自动化运维一键部署rpm安装httpd和源码安装nginx
  9. codeforce Gym 100685E Epic Fail of a Genie(MaximumProduction 贪心)
  10. 上海市高等学校计算机一级证书,上海市高等学校计算机等级考试(二级)