Unity中网格合并
从优化角度,Mesh需要合并。
从换装的角度(这里指的是换形状、换组成部件的换装,而不是挂点型的换装),都需要网格合并、材质合并。如果是人物的换装,那么需要合并SkinnedMeshRenderer,并重刷对应的骨骼列表。网格合并后对模型的渲染可以降低GPU的负担,但是经过测试发现,虽然网格合并了但是由于子物体网格的材质是不同的并没有降低DrawCall,如果把材质改成相同的,Unity自身会进行批处理合并,所以DrawCall就会减少!在MMO的游戏中,网格动态合并还是非常有必要的!
代码:
using UnityEngine;
using System.Collections;/// <summary>
/// 网格合并
/// </summary>
public class Combine_Test : MonoBehaviour
{void Start(){//---------------- 先获取材质 -------------------------//获取自身和所有子物体中所有MeshRenderer组件MeshRenderer[] meshRenderers = GetComponentsInChildren<MeshRenderer>();//新建材质球数组Material[] mats = new Material[meshRenderers.Length];for (int i = 0; i < meshRenderers.Length; i++){//生成材质球数组 mats[i] = meshRenderers[i].sharedMaterial;}//---------------- 合并 Mesh -------------------------//获取自身和所有子物体中所有MeshFilter组件MeshFilter[] meshFilters = GetComponentsInChildren<MeshFilter>();//新建一个合并组,长度与meshfilter长度相同CombineInstance[] combine = new CombineInstance[meshFilters.Length];for (int i = 0; i < meshFilters.Length; i++){//获取共享材质mats[i] = meshRenderers[i].sharedMaterial;//获取共享meshcombine[i].mesh = meshFilters[i].sharedMesh;//矩阵(Matrix)自身空间坐标的点转换成世界空间坐标的点 combine[i].transform = meshFilters[i].transform.localToWorldMatrix;meshFilters[i].gameObject.SetActive(false);//除了根物体,其他物体统统销毁if (meshFilters[i].gameObject.name != gameObject.name){Destroy(meshFilters[i].gameObject);}}//为新的整体新建一个meshtransform.GetComponent<MeshFilter>().mesh = new Mesh();//合并Mesh. 第二个false参数, 表示并不合并为一个网格, 而是一个子网格列表transform.GetComponent<MeshFilter>().mesh.CombineMeshes(combine, false);transform.gameObject.SetActive(true);//为合并后的新Mesh指定材质 ------------------------------transform.GetComponent<MeshRenderer>().sharedMaterials = mats;}
}
注:同材质合并使用统一Material可以节省性能,使用materials并不能节省性能。
transform.GetComponent<MeshFilter>().mesh.CombineMeshes(combine);
gameObject.AddComponent<MeshRenderer>().material = mats[0];
运行前效果图:
运行后效果图:
Unity中网格合并相关推荐
- Unity Mesh网格合并
Mesh网格合并通常是优化中常用的小手段,目的是为了减少drawcall,大量的drawcall会造成CPU的性能瓶颈.例如下图中船只里的钢材货物,由诸多钢材模型堆砌而成. 我们将其放在一个空场景里查 ...
- Unity网格合并_材质合并
2019独角兽企业重金招聘Python工程师标准>>> 写在前面: 从优化角度,Mesh需要合并. 从换装的角度(这里指的是换形状.换组成部件的换装,而不是挂点型的换装),都需要网格 ...
- Unity Edior下合并场景 合并网格 合并贴图
声明:这篇绝不是网上那些转来转去千篇一律的 合并方法 搜老半天看的都是同一篇博客 一点帮助都没有 还是自己写个吧 1.工程里面 合并场景主要是为了降低draw call 2.不同shader的尽量不要 ...
- 蒙皮骨骼动画 unity_在Unity中沿航路点设置蒙皮网格动画
蒙皮骨骼动画 unity This post is a guide to importing a skinned mesh with a looping animation and then anim ...
- 关于Unity中的UGUI优化,你可能遇到这些问题
一.界面制作 Q1:UGUI里的这个选项 ,应该是ETC2拆分Alpha通道的意思,但是在使用中并没起作用?请问有没有什么拆分的标准和特别要求呢? 据我们所知,alpha split 的功能最初只对 ...
- echart 实例显示位置_技术分享:如何在Unity中使用实例化渲染?
编者按 在日常开发中,通常说到优化.提高帧率时,总是会提到批量渲染.之前简单总结了静态合批(点此查看全文)以及动态合批(点此查看全文),这次作者将和大家聊聊实例化渲染. 作者:枸杞忧天 (本文内容由公 ...
- ugui unity 取消选择_关于Unity中的UGUI优化,你可能遇到这些问题
关键字 界面制作 网格重建 界面切换 加载相关 字体 一.界面制作 Q1:UGUI里的这个选项 ,应该是ETC2拆分Alpha通道的意思,但是在使用中并没起作用?请问有没有什么拆分的标准 ...
- Unity中Light Probe详解
本文节选自洪流学堂公众号专栏<郑洪智的Unity2018课>,未经允许不可转载. 洪流学堂公众号回复光照探头,获取本文对应的视频实战教程. 洪流学堂,让你快人几步.你好,我是郑洪智. Un ...
- Unity教程之再谈Unity中的优化技术
这是从 Unity教程之再谈Unity中的优化技术 这篇文章里提取出来的一部分,这篇文章让我学到了挺多可能我应该知道却还没知道的知识,写的挺好的 优化几何体 这一步主要是为了针对性能瓶颈中的" ...
最新文章
- 浅析SEO优化怎样打好企业新站优化基础稳步提升排名
- 【EntityFramework Core】实体实例化注入
- idea 两次运行同一main方法 开启两个进程
- 【Linux】一步一步学Linux——pmap命令(145)
- 任务调度框架Quartz基本介绍
- MySQL调优(六):分区设计,分区优化案例
- matlab函数包_Matlab论文插图绘制的270种补充颜色
- 程序员爬虫竟构成犯罪?
- 【Python实例第5讲】Pipeline与GridSearchCV降维法
- cvAddWeighted 进行图片融合
- 什么软件可以测试网络的稳定性,手机怎么测试网络稳定性
- 优秀的java程序员怎么写注释的
- Bluemix开发作品——魔芋相机、小沃、Etrans-Bluemix-专题视频课程
- Android实现涂鸦功能
- iOS-马甲包审核以及常见审核问题
- 客户端表单验证_客户端的表单验证
- ActionScript 3.0 学习(十七) away3D学习2 away3d的贴图原理
- Shell脚本文件头介绍
- oracle 跨平台adg,oracle ADG 跨版本跨平台搭建实测
- 积分制管理系统:其它可增加积分的功能
热门文章
- 手把手教python project_《手把手教你》系列练习篇之9-python+ selenium自动化测试 -番外篇 - 最后一波啊!!!(详细教程)...
- piwik 访客跟踪(一)
- 字节跳动青训营--前端day5
- MBR每个分区不超过2T
- 想在Python中将Excel文件转换为PDF?来看看这份Aspose.Cells指南
- 水库雨水情自动测报系统-设备介绍
- 如何在win7建网站服务器,win7系统下利用iis如何进行web服务器搭建
- Sql Server数据库由于未知原因丢失的恢复方法
- 14.1智能体的概念和结构: 反应式体系结构, 慎思式体系结构, 复合式体系结构
- Android Q自动背光曲线调节