一.简介
Unity工程完成后,常常出现安装包大的问题和运行卡的问题。性能优化就是尽量解决这两方面的问题。
二.DrawCall概念
在游戏运行过程中,CPU通过调用图形库接口(DirectX/OpenGL),向GPU传达渲染命令。CPU对图形绘制接口的调用就是DrawCall。一方面CPU在调用图形库接口前,会进行很多准备工作,如检测渲染状态、提交渲染需要的数据、提交渲染需要的状态等,但是CPU同时还要负责很多其他的计算任务,另一方面GPU的处理速度相对较快,很快就能处理完成渲染任务(如果我们同样复制一个1G大小的文件夹,一个文件夹中只有一个文件,大小1G,一个文件夹中有n个文件,每个文件都小于1G,显然单个文件的复制时间要短得多,也是由于每个文件CPU都需要进行一些准备工作,和这里的DrawCall调用的原理类似)。所以CPU在DrawCall前的准备工作增加了CPU的负载,减少DrawCall的次数也就能提升游戏的运行速度。
如何查看DrawCall:
1)新建或打开Unity工程
2)打开窗口:Window->Analysis->Profiler
3)在打开的Profiler(性能分析器)窗口左侧选择Rendering
三.UnityStatistics统计面板
四.实际的一些优化方案
1.资源优化参考标准:
1)Mesh中,动态模型的面片数小于3000,材质数小于3,骨骼数小于50,静态模型顶点数小于500;
2)Audio中,时间较长的音乐(如背景音乐)使用压缩的MP3格式,短时间的音效使用非压缩的wav格式;
3)Texture中,贴图长宽小于1024;
4)Shader中,尽量减少复杂的数学运算,减少discard操作;
注意:以上标准并非绝对标准,仅供参考,具体标准可以自己根据实际项目情况做出调整。
2.减少冗余资源和重复资源:
1)Resources目录下的资源不论是否被引用,都会打包到安装包中,所以不适用的资源不要放在这里;
2)尽量保证同一个资源文件再项目中不要重复存放。
五.LOD技术
在游戏物体上添加LOD Group脚本,可以拖动不同的模型到模型上,设置摄像机在距离游戏物体不同的距离时物体使用的渲染模型,使我们可以在摄像机距离较远时使用粗糙一些的模型渲染,在摄像机距离较近时使用精细一些的模型渲染。
六.遮挡剔除
1)将要进行遮挡剔除的物体设置为静态物体,静态类型为OccluderStatic:
2)打开OcclusionCulling窗口
3)在窗口中选择object窗口,选择All,勾选OccluderStatic,然后点击右下角Bake选项,生成遮挡剔除基础数据
4)选择Visualization选项,选择场景中的摄像机,添加摄像机
5)再次运行游戏,会发现不在摄像机视野内的游戏物体不会被渲染
七.光照贴图:使用光照贴图预先生成光照信息,而不是在游戏中实时渲染光照,也能优化游戏性能。