Unity3D性能优化之Draw Call Batching
在屏幕上渲染物体,引擎需要发出一个绘制调用来访问图形API(iOS系统中为OpenGL ES)。每个绘制调用需要进行大量的工作来访问图形API,从而导致了CPU方面显著的性能开销。
Unity在运行时可以将一些物体进行合并,从而用一个绘制调用来渲染他们。这一操作,我们称之为“批处理”。一般来说,Unity批处理的物体越多,你就会得到越好的渲染性能。 Unity中内建的批处理机制所达到的效果要明显强于使用几何建模工具(或使用Standard Assets包中的CombineChildren脚本)的批处理效果。这是因为,Unity引擎的批处理操作是在物体的可视裁剪操作之后进行的。Unity先对每个物体进行裁剪,然后再进行批处理,这样可以使渲染的几何总量在批处理前后保持不变。但是,使用几何建模工具来拼合物体,会妨碍引擎对其进行有效的裁剪操作,从而导致引擎需要渲染更多的几何面片。 Materials 只有拥有相同材质的物体才可以进行批处理。因此,如果你想要得到良好的批处理效果,你需要在程序中尽可能地复用材质和物体。 如果你的两个材质仅仅是纹理不同,那么你可以通过 纹理拼合 操作来将这两张纹理拼合成一张大的纹理。一旦纹理拼合在一起,你就可以使用这个单一材质来替代之前的两个材质了。 如果你需要通过脚本来访问复用材质属性,那么值得注意的是改变Renderer.material将会造成一份材质的拷贝。因此,你应该使用Renderer.sharedMaterial来保证材质的共享状态。 Dynamic Batching 如果动态物体共用着相同的材质,那么Unity会自动对这些物体进行批处理。 动态批处理操作是自动完成的,并不需要你进行额外的操作。 Tips: 2、 4、 5、 6、 7、 8、 9、 静态批处理 相对而言,静态批处理操作允许引擎对任意大小的几何物体进行批处理操作来降低绘制调用(只要这些物体不移动,并且拥有相同的材质)。因此,静态批处理比动态批处理更加有效,你应该尽量低使用它,因为它需要更少的CPU开销。 为了更好地使用静态批处理,你需要明确指出哪些物体是静止的,并且在游戏中永远不会移动、旋转和缩放。想完成这一步,你只需要在检测器(Inspector)中将Static复选框打勾即可,如下图所示: 使用静态批处理操作需要额外的内存开销来储存合并后的几何数据。在静态批处理之前,如果一些物体共用了同样的几何数据,那么引擎会在编辑以及运行状态对每个物体创建一个几何数据的备份。这并不总是一个好的想法,因为有时候,你将不得不牺牲一点渲染性能来防止一些物体的静态批处理,从而保持较少的内存开销。比如,将浓密森里中树设为Static,会导致严重的内存开销。 静态批处理目前只支持Unity iOS Advanced。 |
最新文章
- 常见css水平自适应布局
- 【原】iOS:手把手教你发布代码到CocoaPods(Trunk方式)
- mysql常用基本操作
- python爬虫学习-爬取某个网站上的所有图片
- 27. Best Time to Buy and Sell Stock &;&; Best Time to Buy and Sell Stock II &;&; Best Time to Buy and Sell Stock III
- 查看innodb表空间
- rmmod 无法卸载模块问题
- 转:在MyEclipse下创建Java Web项目 入门(图文并茂)经典教程
- jQuery 核心函数 (十一)
- OAuth 2 深入介绍
- nginx实现Ipv6地址解析
- VS2015P配置opencv340
- FTP(虚拟用户,并且每个虚拟用户可以具有独立的属性配置)
- 创建dblink
- React中redux表单编辑
- 在eclipse上搭建Roku开发环境
- 如何让VB6代码编辑器垂直滚动条随鼠标滚轮滚动
- YAML教程
- tocmat远程调试
- Python slice() 函数
热门文章
- hdu6035(树形DP)
- Ext分区文件恢复工具extundelete
- [POJ 2397] Spiderman
- MySQL判断中文字符的方法(转)
- Memcache的mutex设计模式 -- 高并发解决方案
- 【SQL】用Sql Server自动生产html格式的数据字典
- 跟着Sedgewick学算法(week 1 UnionFind)
- 利用jquery.form.js实现将form提交转为ajax方式提交的方法(带上传的表单提交)
- DB2中查询前十数据的sql
- WINDOWS 2003系统时间24小时制与12小时显示格式不一致问题与解决