最近在学习unity性能优化,主要是平时用的大型场景比较多,优化变得必不可少,也是想着技多不压身,学一学也为以后做准备,咱们先从简单的声音入手。
在Unity项目中音频的优化不可缺少,在很多时候甚至会成为内存杀手。
这篇主要记录关于Unity内音频设置与音频优化的一些方法
优化的目标
1.文件体积尽可能小。
2.内存占用尽可能小,全部播放总内存占用<10MB。
3.音质够用。
Unity支持很多音频格式:
1.Mp3 :失真小,适合音质要求较高的文件。
2.WAV:资源大,不推荐。
3.OGG:压缩比高,适合人声和音效等。
Unity音频的设置面板
根据上图的Unity音频设置面板先介绍下个选项的功能:
ForceToMono:如果启用,音频将向下混合成单声道,一般手机使用单声道足够满足需求。建议强制音效使用单声道,只有少数手机真的有立体声喇叭,最重要的是将音频强制设置为单声道可以让内存减半。
Normalize:当ForceToMono开启后选项可用,开启后音频将在ForceToMono的混合过程中被单位化。
LoadInBackground:后台加载,默认关闭。如果启用此选项这个音频将在一个单独的线程中延迟加载而不会阻塞主线程。
Ambisonic:是否是环绕声,对于360度视频和XR应用程序非常有效。如果AudioFile包含三维编码音频,则开启此项其余情况可关闭。
LoadType:
1.DeCompressOnLoad 加载后解压缩(适合小音效)
音频文件将在加载后立即解压缩,对较小的音效使用此选项可避免动态解压缩的性能开销。请注意在加载后解压缩Vorbis编码的声音,会使用它压缩时大约10倍的内存,ADPCM编码大约是3.5倍。所以请不要将此选项用于大文件。
2.CompressedInMemory 压缩在内存中(适合较大文件音效)
将声音压缩在内存中,在播放时解压缩。这个选项有轻微的性能开销(尤其是对于ogg/Vorbis压缩文件)所以只能用于大文件音效,因为在加载时解压缩会使用大量的内存。可在Profiler窗口的音频面板中的“DSP CPU”部分监视。
3.Streaming 流(适合大文件)
动态解码声音,此方法是使用最最小量的内存来缓冲从磁盘逐渐读取并在运行中解码的压缩数据。解压缩发生在单独的流线程上,请注意解压缩发生在Profiler窗口的音频面板中的"Streaming CPU" 部分中可监视其CPU使用率的单独流式线程上,即使没有加载任何音频数据,流式片段也会有200KB的过载。
Preload Audio Data:预加载音频数据。如果启用音频剪辑将在场景加载时预先加载,也就是当场景开始播放时,所有的AudioClips已经完成了加载。如果没有开启,音频数据也会在第一次调用AudioSource.Play(),AudioSource.PlayOneShot()执行时被加载,或者也可以通过AudioSource.LoadAudioData(),AudioSource.UnLoadAudioData()再次加载时被加载。
Compression Format 压缩格式
1.PCM:这个选项提供了以更大的文件大小和代价提供了更高的质量,所以非常适合使用在很短的音效上面。
2.ADPCM:这个格式适用于需要大量使用的音效上面,比如脚步 爆破和子弹发射,他比PCM小3.5倍但是CPU适用于远低于Vorbis,所以适合多次调用的短音效。
3.Vorbis:比PCM小但是质量比PCM低,比ADPCM消耗更多而CPU。这种格式最适合中等长度的音效和音乐,这个选择多了个Quality可以调节质量改变文件大小1-100。
SampleRateSetting 采样率设置
PCM和ADPCM压缩格式允许自动优化或手动降低采样率
1.OptimizeSampleRate:该设置根据分析的最高频率内容自动优化采样率。
2.PreserveSampleRate:该设置保持比率未修改(默认)
3.OverrrideSampleRate:该设置允许手动覆盖采样率,优先选择22050HZ,如果音质不能接受就选择44100HZ,但是不允许高于44100HZ。
OriginalSize:磁盘大小
ImportedSize:内存大小
Ratio:ImportedSize占OriginalSize比例
修改AudioClip属性之后记得点击Apply。如果一个MP3文件和压缩格式设置为PCM(未压缩),由此产生的Ratio的比例将超过100%,因为文件现在存储未压缩的空间比它来自于源MP3占据更多的空间。
优化思路
1.根据平台选择合理的音效设置,原始音效资源尽量采用未压缩的WAV的格式,但是资源大,也可以采取mp3的形式,推荐仅用在背景音之类的声音选择。
2.无法区分单双通道的声音的场景,音效统一采用单通道设置(Force to Mono),根据效果选择是否勾上Normalize(对音频的峰值进行处理,按照标准的方式来处理它们,保证音频在单双声道如果有细微差别的话也可以更好的融合在一起)。
3.自定义设置覆盖默认设置:勾选OverrideForAndroid/IOS。采样率(SampleRateSetting)设置为OverrideSampleRate,并将音乐采样频率为22050Hz.
3.移动平台大多数声音尽量采用Vorbis压缩设置,IOS平台或不打算循环的声音可以选择MP3格式,对于简短、常用的音效,可以采用解码速度快的ADPCM格式(PCM为未压缩格式)
4.音频片段加载类型说明
- 简短音效导入后小于200kb,采用Decompress on Load模式
- 对于复杂音效,大小大于200kb,音频长度超过4到5秒的音效采用Compressed In Memory模式,对内存有影响,但是很小,鱼和熊掌不可兼得,哪儿边高了优化哪儿边。
- 对于长度较长的音效或背景音乐则采用Streaming模式,虽然会有CPU额外开销,但节省内存并且加载不卡顿
可根据不同目录设置不同的参数
长音频 播放时间>=5秒
目录:Audio/Bgm,预计最大内存占用200KB,播放时加载1.LoadType 设置为Streaming
2.CompressionFormat 设置为Vorbis
3.Quality设置为尽可能的小,在音质可以接受的前提下
时延敏感的短音频 播放时间<1秒
目录:Audio/Short_NoDelay,预计占用最大内存86KB*音频数量,游戏启动时加载,永不释放1.LoadType 设置为DeCompressOnLoad
2.CompressionFormat 设置为ADPCM
时延敏感的中等长度音频 播放时间1-5秒
目录:Audio/Medium_NoDelay,预计占用最大内存ImportedSize*音频个数,播放时加载1.LoadType 设置为CompressionInMemory
2.CompressionFormat 设置为ADPCM
时延不敏感的短音频 播放时间<1秒
目录:Audio/Short,预计占用最大内存ImportedSize*音频个数,播放时加载1.LoadTyoe 设置为CompressedInMemory
2.CompressionFormat 设置为ADPCM
时延不敏感的中等长度音频 播放时间1-5秒
目录:Audio/Medium,预计占用最大内存ImportedSize*音频个数,播放时加载1.LoadType 设置为CompressedInMemory
2.CompressionFormat 设置为Vorbis
5.脚本方面,当实现静音功能时,不要简单的将声音设置为0,应该销毁(AudioSource)组件,将音频从内存中卸载。
大神总结的音频格式设置,特此感谢,并存档以备以后查看。
今天是2024年11月20日
重复一段毒鸡汤来勉励我和你
你的对手在看书
你的仇人在磨刀
你的闺蜜在减肥
隔壁的老王在练腰
而你在干嘛?