音频性能与并发
自动关联目录:音频性能与并发
1. 定位
音频最常见的事故不是"播不出来",而是"播太多":群体战斗、爆炸、连锁触发时几十个音源同时播放 → 爆音 + CPU/音频线程飙升。
一句话定位:限定同类音效的最大并发数,是音频性能的第一道防线——其余优化都排在这一条之后。
2. 并发控制
| 设置 | 说明 |
|---|---|
USoundConcurrency | 并发设置资产 |
Max Count | 同类音效最多同时播几个 |
Resolution Rule | 超限时的策略:阻止新的 / 停最旧的 / 停最远的 / 停最小音量 |
SoundClass 的 Priority | 资源紧张时谁被牺牲 |
Volume Scale | 同类叠加时的音量处理 |
典型配置:
| 音效类型 | 建议 |
|---|---|
| 子弹/命中 | 严格限制(如 8–16),超了停最旧的 |
| 脚步 | 限制 + 随机化 |
| 环境循环 | 数量少,可常驻 |
| UI | 限制很低(重复点击不该叠加) |
3. 成本来源
| 来源 | 说明 |
|---|---|
| 音源数量 | 每个活跃音源都有解码与混音成本 |
| 解码 | 压缩格式的解压成本(见 音频资源与流式) |
| 实时 DSP | 效果链(滤波、混响、遮挡)都有成本 |
| 遮挡检测 | 射线开销,按音源计 |
| 空间化(HRTF) | 比非空间化贵 |
| MetaSound 实例 | 图求值成本(见 MetaSounds) |
4. 优化手段(按收益排序)
1. 限制并发(最有效)
2. 按距离/重要性剔除远处音源
3. 减少实时 DSP 与效果链
4. 遮挡检测只对重要音源开,并限制频率
5. 压缩格式与采样率(见音频资源与流式篇)
6. 减少空间化(次要音源用非空间化)5. 代价与权衡
| 设计 | 收益 | 代价 | 什么时候不该用 |
|---|---|---|---|
| 严格限制并发 | 防止爆音与飙升 | 极端情况下会丢音 | 关键音(如玩家自己的开火)优先级要调高 |
Resolution Rule 停最旧 | 保留最新的信息 | 旧音被截断 | 长尾音(如爆炸余音)可能突兀 |
Resolution Rule 阻止新 | 不打断已有 | 新事件没反馈 | 高频事件会"没声音" |
| SoundClass 优先级 | 关键音不被牺牲 | 需规划分类 | 分类体系要先建 |
| 遮挡检测 | 真实感 | 射线成本 | 次要音源不开 |
| HRTF 空间化 | 定位准确 | 更贵 | 环境音可不开 |
6. 踩坑与排查
| 坑 | 现象 | 怎么验证 |
|---|---|---|
| 每颗子弹都播且不限并发 | 群体战斗爆音 | 加 USoundConcurrency |
| 循环音效忘了 Stop | 泄漏、叠加 | 检查停止路径 |
| 音效挂在会被销毁的 Actor 上 | 声音被切断 | 改用 PlaySoundAtLocation 或挂到稳定对象 |
| 遮挡检测开太多 | 射线开销 | 只对重要音源开 |
| DSP 链过长 | 音频线程贵 | 精简效果 |
| 优先级没规划 | 关键音被牺牲 | 用 SoundClass 分层 |
| 移动端没测 | 低端机爆音 | 在最低配机型测 |
7. 排查顺序
1. 爆音/卡?→ 先统计同时活跃的音源数量
2. 加并发限制,选对 Resolution Rule
3. 按距离剔除远处音源
4. 遮挡检测与 DSP 是否过多
5. 用 SoundClass 分层保证关键音
6. 在最低配机型复测参考
许可协议:CC BY
作者:Davids
本文链接:https://hustjjd.github.io/0c977a54.html
更新于:2026年10月10日