Unity DrawCall优化
Unity DrawCall优化
一 Mesh Renderer
二 Skinned Mesh Renderer
三 合并要求对比
四 总结
五 场景制作建议
DrawCall优化合并,也叫批处理,即DrawCall Batching. 通过减少Draw call数提高性能。
一 Mesh Renderer
分为Dynamic Batching和 Static Batching
Dynamic Batching
不需要任何操作,只要共享材质(即使是不同的Mesh模型也可以),就会自动被合并。可以自由移动旋转。但有以下使用要求:
(1)单个Mesh的vertex attribute总数不超过900.
即 vertex* attributeCount < 900
例如一个Mesh有pos,uv,normal,那么attributeCount为3,
也就是顶点数量不超过300个。
(2)游戏对象使用相同模型和材质时,只有相同缩放(即xyz等比缩放,浮点尾数可以有细微差)的会被合并。
如
(1,1,1)与(1,1,1)
(2,2,2)与(2,2,2)
(0.5,0.5,0.5)与 (0.5,0.5,0.5)
(2,2,2)与(2,2,2.0001)
(3)场景烘焙:烘焙后同材质将不会被烘焙。lightmap 有隐藏的材质参数:offset/scale, 所以使用lightmap的物体不会被合并
(4)Shader不能使用多Pass:多Pass的Shader会破坏Dynamic Batching
Static Batching
原理:
运行游戏后将一组游戏对象的多个模型会被动态合并为1个。这组游戏对象所有使用同一材质的在一个DrawCall来完成。这些游戏对象运行后无法移动缩放旋转。但是Drawcall一定是最大化合并的,并且不受动态合并的诸多限制(见下文详述)。
注意:即使物体都使用了同样的模型,在batch后每一个物体都会创建一份模型对应的geometry,在新的Combined Mesh里。所以过多的batch会增加内存占用。例如场景里的树群就不适合Static Batch,而适合动态合并。
实现方法:
(1)MeshRenderer勾选Batching Static: 勾了即可
(2)代码中使用UnityEngine.StaticBatchingUtility实现(可以在任何平台调用):
1)将所有要合并的静态物体(不须勾Batching Static)放入统一一个root
2)StaticBatchingUtility.Combine(root);
之后就合并好了!
区别:
勾选Batching Static:
完全自动合并,在MeshFilter里显示的是 Combined Mesh(root:scene)。合并后不能移动
StaticBatchingUtility:
合并到一个游戏对象下。合并后可以移动父节点游戏对象
二 Skinned Mesh Renderer
Unity对Skinned Mesh Renderer没有任何batching, 但插件Mesh Baker可以对Skinned Mesh进行合并。
注意:
(1)修改Renderer.material将会创建一份新的material,应使用Renderer.sharedMaterial来保持材质公用。
(2)可以使用Mesh.Optimize() 优化模型。导入模型不需要调用此接口,在导入模型至Unity3d时已自动处理。
代码创建的模型有可能需要调用此接口来优化。
三 合并要求对比
要求 动态 静态
1 只能是MeshRenderer不能是SkinnedMeshRenderer 要求 要求
2 Shader必须是单Pass 要求 不要求
3 不能被场景烘焙(不能标注为Light map static) 要求 不要求
4 网格模型文件总点数要求 要求 不要求
5 网格模型单个文件点数要求 要求 不要求
6 限制缩放 要求 不要求
7 限制位移旋转 不要求 要求
另外Unity中任何Mesh的面 有65536的面数限制
四 总结
三种方式:
1 动态合并
优点:
内存消耗小
可以自由位移旋转
缺点:
要求众多()
2 标记Light map static合并
优点:
最方便快捷,要求最少
缺点:
完全不能移动
内存有消耗
只能处理在Scene中默认放置的物体
3 代码StaticBatchingUtility合并
优点:
方便快捷,要求少
可整体移动
可处理代码动态加载的场景或物体
缺点:
内存有消耗
代码合并是要求最少的,并可以整体移动。而动态合并可以移动旋转,并做Animation动画。故推荐StaticBatchingUtility + 动态合并。
五 场景制作建议
美术人员在制作某场景时,尽量:
静态物体:使用静态合并
条件
1 用Mesh Renderer,也就是不绑定骨骼
2 不是Wrap循环UV的贴图,尽量合并到一张大图集
方法
标注Batching Static即可
动态物体:使用动态合并,动画可以用Unity的动画去做
条件
1 无骨骼
2 不参与场景烘焙
3 相同物体相同缩放
4 单个Mesh的vertex attribute总数不超过900.
5 Shader单Pass
方法
满足条件Unity自动优化
(不满足动态合并要求的。场景动画可以用骨骼动画去做。但应尽量避免或者少的使用这种方式。因为没有Drawcall优化效率较低)
PS:
要关闭动态合并在subshader里加以下代码即可
Tags { "DisableBatching" = "true" }
如果是非Mobile端可以考虑使用GPU Instancing
如果是有超级多的人,可考虑使用顶点动画提高性能。
Unity DrawCall优化相关推荐
- Unity性能优化 :合批篇
前言 本系列为一些性能优化的小知识,是日常游戏开发中与性能表现的一些点,本篇为该系列文章的第二篇,前篇链接: 第一篇: Unity性能优化:资源篇 在早期Unity中,对于合批的处理手段主要是下面三种 ...
- Unity 性能优化(力荐)
开始之前先分享几款性能优化的插件: 1.SimpleLOD : 除了同样拥有Mesh Baker所具有的Mesh合并.Atlas烘焙等功能,它还能提供Mesh的简化,并对动态蒙皮网格进行了很好的支持. ...
- Unity - 性能优化 - 包体,内存 - 偏静态资源的优化
文章目录 静态资源优化 - AssetPostprocessor Texture 压缩 Model 网格.动画 压缩 音频压缩 纹理的优化经验 尺寸 通道 发布出来的包资源再次分析 如何工具快速定位静 ...
- Unity性能优化全攻略
#Unity性能优化全攻略 总结自Siki的性能优化. ##优化相关前提 ###Unity游戏安装包大/运行卡的原因 Mono虚拟机 解决这个问题 ###DrawCall https://zhuanl ...
- 常用Unity的优化技巧集锦
Unity性能优化是面试的时候经常被问道的一些内容,今天给大家分享一些常用的Unity的优化技巧和思路,方便大家遇到问题时候参考与学习. 包体大小优化 游戏的安装包体大小对于游戏开发而言非常重要,因为 ...
- Unity UGUI优化与原理【unity官方】
来源( 来源:unity官方 Optimizing Unity UI ) 官方链接: [1] https://unity3d.com/cn/learn/tutorials/temas/best-pr ...
- Unity 性能优化 学习
1:unity 游戏安装包大,运行游戏卡 Unity为什么可以跨平台 因为它内置了mono虚拟机(跨平台) 程序要先在虚拟机运行虚拟机再和操作系统交互 所以包体大运行卡 但是不是一定的原因 (如果 ...
- 第一章:unity性能优化之内存优化
目录 前言 unity性能优化之内存的优化 一.unity Analysis工具的使用. 二.内存优化方法 1.设置和压缩图片 2.图片格式 3.动画文件 4.模型 5.RenderTexture(R ...
- 《Unity游戏优化》第三章 批处理
动态批处理.静态批处理.GPU Instancin 和SRP Batcher 批处理原理 批处理设置 Frame Debugger 1. 动态批处理 动态批处理使用场景 动态批处理优势: 动态批处理缺 ...
最新文章
- 1047 Student List for Course (25 分)【难度: 简单 / 知识点: 模拟】
- formal method lecture 13
- python中使用grpc方法示例_在Python中使用gRPC的方法示例
- html中列表导航怎么和图片对齐_HTML实战篇:html仿百度首页
- VMware10出现VMware Workstation 不可恢复错误: (vmx)
- hadoop学习日志
- Oracle Cluster Health Monitor(CHM)简介
- Zen Garden驾到:首批Metal游戏已登录iTunes应用商店
- 911计算机专业基础综合,青岛大学10数据结构911计算机专业综合
- 【HDOJ6958】KD-Graph(并查集)
- hive中删除表的错误Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException...
- mac虚拟机服务器设置u盘启动不了,mac虚拟机如何使用u盘启动盘
- CoinBene 满币荣获「2020 年度最佳品牌增长」大奖 未来可期
- [计算机视觉] AprilTag 2: Efficient and robust fiducial detection(2016)论文理解
- 微软所有正版软件下载网站ITELLYOU_我是亲民_新浪博客
- PS练习6——文字特效处理
- armabi armabi-v7a armabi-v8a 区别
- JAVA jdk8安装
- JAVA主方法(main)方法解释
- SQL SERVER 表变量 和 标量变量