赞
踩
影响性能的因素分3块
1.CPU
(1)过多的DrawCall
(2)复杂的脚本或者物理模拟
2.GPU
(1)顶点处理
->过多的顶点
->过多的逐顶点计算
(2)片元处理
->过多的片元
->过多的逐片元处理
3.带宽
(1)使用了尺寸很大且未压缩的纹理
(2)分辨率过高的帧缓存
一、减少DrawCall数
使用的技术:批处理 (在playerSetting中有相应的开关)
公共条件:使用同一个材质
注意:
1.批处理需要把多个模型变换到世界空间下再合并,所以Shader中如果存在基于模型空间下的坐标运算则会出现问题,一个解决方法是在Shader中使用DisableBatching控制使用此Shader的材质不会被批处理。
2.半透明材质的物体会需要严格的渲染顺序来保证透明混合,这类物体Unity会优先保证渲染顺序,当渲染顺序无法满足时,批处理无法在这些物体上被应用。
1.动态批处理(动态合批)
使用了同一材质并且满足一些条件,Unity会自动进行动态合批,把可以进行批处理的模型网格进行合并,并且是每帧都会重新合并一次网格,所以经过批处理的物体还是可以移动。但限制较多:
(1)顶点数要小于900(不确定,会根据Unity版本变化)。但如果shader中需要使用3个属性比如顶点位置、法线和纹理坐标,那么想被动态合批则顶点数量就只能不超过300。
(2)关于缩放尺度的限制(Unity5以后已经不存在)
(3)使用了光照纹理(lightmap)的物体要小心处理。这些物体需要额外的渲染参数,如在光照纹理上的索引、偏移量和缩放信息等。所以为了让它们可以被动态合批,需要保证它们指向光照纹理的同一个位置
(4)多Pass会中断批处理。
2.静态批处理
它在游戏运行开始的阶段把需要进行静态批处理的模型合并到一个新的网格结构中。
静态合批适用于任何大小的模型物体,没有任何限制,但要保证物体不可以被移动,并且它需要占用更多的内存,如果静态批处理以前一些物体使用了同一个网格,那么批处理以后它们每一个物体都会对应一个网格的复制体。
静态合批的视线方式很简单,把物体面板上的Static勾上就行了:
二、减少需要处理的顶点数
1.优化几何体
在制作上减少三角面的使用
2.模型LOD技术
使用Unity的LODGroup
3.遮挡剔除技术
三、减少需要处理的片元数
优化Overdraw
1.控制渲染顺序
(1)由于深度测试的存在,不透明物体一般都是从前往后渲染的,而没有通过深度测试的片元是会被舍弃的,这样就很大程度减少了Overdraw。所以,尽可能的把物体的渲染队列设为不透明的渲染队列而避免使用半透明队列,是可以控制减少Overdraw的。
(2)在游戏中可以根据需要来控制物体的渲染队列,比如第一人称游戏中对于主要人物他们往往会占用很大一块屏幕,所以我们可以先绘制他们(使用更小的渲染队列),敌方经常会出现在掩体后面,就使用更大的渲染队列。
2.时刻警惕透明物体
(1)UI物体经常会造成Overdraw的情况
(2)
3.减少实时光照和阴影
(1)实时光对于移动平台是一种非常昂贵的操作。因为对于逐像素的光源来说,被这些光源照到的物体需要再被渲染一次,而且无论是动态合批还是静态合批,对于这种额外处理逐像素光源的Pass都无法使用。不使用实时光的话一般会把光照烘培到光照纹理(lightmap)中,然后运行时根据纹理采样光照结果即可。如果一定要使用更多的实时光,用逐顶点光照代替。
(2)实时阴影也非常耗性能,可以把静态物体的阴影信息存到lightmap中,只对动态物体进行适当的实时阴影。
四、节省带宽
1.纹理长款使用二次幂
2.使用多级渐远技术(mipmapping)
3.减小分辨率
五、减少计算复杂度
1.Shader的LOD技术
在Shader代码中,可以设置Shader的LOD,然后使用Shader.maximumLOD或者Shader.globalMaximumLOD来设置允许的最大LOD值。超过这个值则Shader不会被使用。
2.代码方面的优化
3.根据硬件条件进行缩放
就是控制各种效果是否开启
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。