unity 性能优化 引擎的设置方面
想要做好Unity性能优化,主要从CPU,内存,GPU等多方面进行,需要措置好许多事情。在脚本篇中我们就Unity API,C#,IL2CPP,Lua和算法数据布局等多方面提出了性能优化建议。鉴于Unity内设置项繁多,如果某项设置不妥,就可能会对性能造成负面影响。本文将从纹理、模型、音频等多方面进行讨论,主要针对影响性能较大的设置项。
纹理
[*]Read/Write Enable:如果你不需要运行时读取图片的像素信息的话,禁用,否则启用后纹理的内存消耗会增加一倍。
[*]Generate Mip Maps:如果不是3D模型贴图,则禁用,否则会多出约33%的内存开销。Mipmaps主要为远处的物件生成较为清晰的小贴图,减少衬着导致的画质损掉。像UI贴图,则完全用不到。
[*]Override for iOS/Android:启用,为特定平台做差异化配置。
[*]Max Size:视情况而定,默认最大贴图尺寸限制为2048,如果是特效贴图限制为512。
[*]Format:
[*]iOS保举使用ASTC,ASTC一般保举ASTC 6x6,如果清晰度达不到需求,可以设置为ASTC 4x4。注意:ASTC仅在iPhone 6以后的设备被撑持,如果需要撑持iPhone 6之前的设备,可以设置为PVRTC。
[*]Android保举使用ETC,如果是带透明通道的,可选择ETC2,注意:ETC2只在撑持OpenGLES 3.0的设备获得撑持,如果考虑旧设备,则可以选用ETC,然后勾选Split Alpha Channel。如果不带透明通道,则无脑选用ETC。
[*]我们可以在预览的下方看到纹理的压缩格式和实际占用的内存大小,我们需要经常存眷这项信息,以不雅察看设置是否生效。
模型
[*]Mesh Compression:压缩比越高模型文件越小,需要按照游戏内的实际效果决定,一般可以设置为Medium。
[*]Read/Write Enable:如果你不需要运行时改削模型的话,禁用,否则启用后模型的内存消耗会增加一倍。
[*]Optimize Mesh:保举启用,可以提升GPU性能。
[*]Normals:如果你的模型没有法线信息,将其设为None,可以减小模型大小。
Rig
[*]Animation Type:如果你的模型没有骨骼,将其设为None。
[*]Optimize Game Objects:启用,可以将表露在Hierarchy的子节点移除,极大的减少了模型的层级和Children数量,从而提升运行时性能。如果有挂载点需求,在Extra Transforms to Expose里添加需要表露的子节点即可。
Animation
[*]Import Animation:如果你的模型没有动画,将其解除勾选。
[*]Anim. Compression:保举使用Optimal,颠末测试Optimal比Keyframe Reduction节省约50%的大小,从而可以提升加载速度。如果感觉动画质量太差,则可以退回到Keyframe Reduction甚至到Off。
Materials
如果你不需要模型内的材质,解除Import Materials的勾选,否则会附带一个默认的材质引用在模型里。
音频
音频的性能开销主要有两点:内存开销和CPU开销。
关于内存开销,我们可以通过最下方信息里的Imported Size来得知。
音频设置中影响性能最大的两个参数为Load Type和Compression Format。
此中Load Type有三种类型:
[*]Decompress On Load:音频文件在加载完毕后,会被全部解压到内存中。这种方式会占据大量的内存,然而在播放时,由于音频之前已经被解压,所以其对CPU的开销很小。
[*]Compressed In Memory:音频文件以压缩格式存放于内存中,一边播放一边进行解压。这种模式的内存开销会比前一种稍小,但是播放时的CPU开销会较之更大。
[*]Streaming:音频文件不会被加载到内存,只有即将播放的一小段才会被读取到内存中。这种模式的内存开销最低,但是CPU开销也最大,因为其伴随着大量的磁盘读写操作和解压缩。
Compression Format主要也可以分为三种类型:
[*]PCM:完全不压缩格式,占据的硬盘和内存相对会较大,由于运行时不需要解压,所以它的CPU开销最小。
[*]ADPCM:一种古老的压缩格式,相对于PCM的压缩比为3.5:1,但是运行时的解压开销很小,对于音质有必然损耗。
[*]Vorbis/MP3:常见的压缩格式,主流平台全部撑持的格式,压缩斗劲高,但是运行时的解压缩开销较大,对于音质的损耗更加严重。在iOS平台上一般设置为MP3,因为iOS撑持MP3格式的硬解码。
那么对于音频文件我们应该如何设置?
我的建议是:
[*]对于布景音乐,采用Compressed In Memory+Vorbis/MP3,因为布景音乐凡是较大较长,所以内存开销就会斗劲大,这时候我们应该优先存眷内存,同时也要使CPU开销没有Streaming那么大。
[*]对于时长较短且频繁播放的音效,比如按钮点击音效,采用Decompress On Load+PCM,因为非常短的音效文件很小,所以内存开销就不那么关键,可能由于要播放多次,这时候CPU开销就很关键。
[*]对于一般的音效,采用Compressed In Memory+ADPCM,你需要去试听其效果,如果感觉ADPCM掉真太严重,可以将其换成PCM。
其他
Quality Settings
[*]Texture Quality:贴图质量,可以选择Half Res,这样速度会更快,但是贴图质量会轻微下降。
[*]Shadows:建议禁用,Unity内的影子开销很大,可以用贴图来实现粗拙的暗影,也可以本身用Shader实现,影子的模型可以操作减面东西来减面,譬如Simpolygon。
[*]V Sync Count:建议设置为Don't Sync,否则无法自行在游戏内控制帧率。有些时候在静态UI较多的界面,可以将帧率适当降低,以达到减少发烧量和耗电量的目的。
[*]Async Upload:建议在Loading时,将Async Upload Time Slice调大成4ms或者8ms,将Async Upload Buffer Size调高到16MB,以加速资源上传。具体可以参考:优化加载性能:了解异步上传管线AUP。
Player Settings
[*]Scripting Backend:选IL2CPP,IL2CPP颠末几年的不竭完善,已经非常不变,转成C++代码后性能得到提升,同时也变相提供了对C#代码的混淆。
[*]C++ Compiler Configuration:默认选择Release,如果出上线包的话,保举改成Master,这样虽然打包速度会慢一点,但是编译的C++代码会更加优化一些。
[*]Prebake Collision Meshes:启用,用构建的时间换运行时的性能。
[*]Keep Loaded Shaders Alive:启用,因为Shader的加载和解析很耗时,所以不但愿Shader被卸载。
[*]Managed Stripping Level:如果项目斗劲简单,可以测验考试High,这样可以降低一些包大小。如果项目斗劲复杂,则需要酌情考虑,因为High和Medium可能会导致报错或者闪退。
[*]Optimaze Mesh Data:启用,减少不必要的Mesh数据,降低包大小。
[*]安卓有个Blit Type的选项,如果你的Color Space不是Linear(Linear空间会比Gamma空间开销更大,但是显示效果更好),则可以将其设为Never,这样可以减少额外的一次Blit而提升性能。
参考文章Unity性能优化 - 设置篇 | Tim's Blog
https://blog.unity.com/cn/technology/optimize-your-mobile-game-performance-expert-tips-on-graphics-and-assets
移动游戏优化指南 | Unity 中文课堂
页:
[1]