Axıs
技能目录

参考 06:中间件集成与总线架构

参考 06:中间件集成与总线架构

1. 中间件选型

Wwise FMOD 原生(Unity Audio / Unreal MetaSounds)
定位 大/中型项目行业标准 中小项目、独立团队 极简项目 / 无预算
强项 强大的混音、Profiler、动态音乐、平台支持、多人协作 上手快、轻量、免费额度友好、Studio API 灵活 零依赖、无额外成本
弱项 学习曲线陡、授权费用(超预算门槛) 大型工程组织能力弱于 Wwise 几乎无专业混音与动态音乐能力
典型用户 3A、主机/多平台 独立、手游、PC 独游 原型、超休闲
建议 主机/3A/长期项目首选 独立/移动端/快速迭代首选 仅原型阶段

2. 通用概念映射(跨中间件)

概念 Wwise FMOD Unity Unreal
播放触发 Event Event AudioSource.Play Play Sound / MetaSound
分类层级 Actor-Mixer Hierarchy 无(用 Bus + 参数) Mixer Group Sound Class / Submix
混音总线 Bus (Master-Mixer) Bus / Group Audio Mixer Group Sound Submix
辅助/发送 Auxiliary Bus Return Bus Send / Return Submix Send
连续参数 RTPC Parameter Exposed Parameter Audio Parameter
离散切换 Switch Parameter (labeled) 手写逻辑 Enum Parameter
全局状态 State Global Parameter 手写逻辑 Gameplay Tag / State
混音快照 Snapshot Snapshot Snapshot Submix Preset
混响区 Reverb Zone / Environment Reverb(3D 属性) Audio Reverb Zone Reverb Effect / Submix
打包 SoundBank Bank Addressables Chunk / Primary Asset

3. 推荐总线架构(可直接套用)

Master_Mixer (Limiter: -1 dBTP, 输出 -23 LUFS)
│
├── BUS_Music                    [ducking: 被 VO 压 -6dB]
│   ├── BUS_Music_Exploration
│   ├── BUS_Music_Combat
│   └── BUS_Music_Stinger
│
├── BUS_SFX                      [HPF 40Hz]
│   ├── BUS_SFX_Weapons          (优先级 80, voice limit 16)
│   ├── BUS_SFX_Character        (优先级 70, voice limit 12)
│   ├── BUS_SFX_Impacts          (优先级 65, voice limit 12)
│   ├── BUS_SFX_Vehicle          (优先级 75, voice limit 4)
│   └── BUS_SFX_AmbientDetail    (优先级 30, voice limit 8)
│
├── BUS_UI                       [不进混响, 优先级 90, bypass 3D]
│
├── BUS_Ambience                 [ducking: 被 VO 压 -4dB]
│   ├── BUS_Ambience_Exterior
│   └── BUS_Ambience_Interior
│
├── BUS_Voice                    [优先级 100, 最高; Compressor 3:1 + De-esser]
│
└── BUS_Cinematic                [过场专用,可临时 duck 其他全部]

Auxiliary (Send targets):
├── AUX_Reverb_Short   (0.8–1.2s, 室内小房间)
├── AUX_Reverb_Long    (2.5–4.0s, 大厅/洞窟/室外峡谷)
├── AUX_Delay          (回声, 山谷/废墟)
└── AUX_Underwater     (LPF 500Hz + 强混响, 特殊状态)

总线设置要点

  • 优先级数字越大越优先(Wwise 中 Priority 是"值越大越不容易被裁掉",注意各中间件定义相反,务必确认)
  • Voice Limit 必须按类设置:同类音效超过限制时按优先级 + 距离裁掉
  • UI 与 VO 不要 Send 到混响(会变糊)
  • Cinematic Bus 只用于过场,避免过场音乐与 gameplay 音乐打架
  • 每个子总线挂 HPF 40–80Hz 清理无用低频,能显著减少浑浊并省 CPU

4. 混音快照(Snapshot / State-based Mixing)

场景 处理
暂停菜单 Music -8dB + LPF 2kHz;SFX -12dB;UI 保持
水下 全局 LPF 500Hz;Reverb Send +6dB;Music -6dB
慢动作 / Bullet-time Music -6dB + 变调 down pitch;SFX LPF 3kHz;加低频轰鸣
死亡 Music fade out(2s);Ambience -10dB + LPF;心跳低频 solo
剧情对话 Music -8dB;Ambience -5dB;SFX -6dB;VO -0

Snapshot 过渡:用插值时间(200–500ms),避免突兀跳变。

5. Voice 管理(性能关键)

总 Voice 上限:主机 128 / PC 96 / 移动 32
   ↓ 超出后的策略(按顺序)
1. Priority 最低者先停止(Kill)
2. 音量低于阈值(如 -60dB)者 → Virtual Voice(后台计算,恢复时可接续)
3. 距离超过 Max Distance → 停止或虚拟化
4. 同类超限 → 用 "Use Exclusive / Voice Stealing" 抢占

Virtual Voice 三种行为(Wwise):

  • Play from beginning — 恢复时重头播(脚步,OK)
  • Play from elapsed time — 恢复时接着播(引擎,OK)
  • Resume — 保持位置(循环环境音,OK)
  • Kill if finite else virtual — 一次性音直接砍(推荐默认)

6. 集成接口文档模板(events.md)

事件表

Event 名 触发时机 3D 位置 循环 Stop 事件 备注
Play_Weapon_Rifle_Fire 开火瞬间 枪口 Socket 否 — 带 Switch_Material
Play_Vehicle_Engine 上车 车辆 是 Stop_Vehicle_Engine 必须成对
Play_UI_Menu_Hover 悬停 2D 否 — BUS_UI

RTPC 表

RTPC 范围 驱动源 更新频率 影响
RTPC_Vehicle_Speed 0–200 车速 km/h 每帧 引擎音高 + 音量 + 风噪
RTPC_Player_Health 0–100 血量 变化时 心跳强度、听觉低通
RTPC_Occlusion 0–1 射线检测 10Hz(插值) LPF 截止 + 音量

Switch / State 表

名称 类型 取值 设置者 默认
Switch_Surface Switch Dirt / Stone / Metal / Water / Grass 物理材质 Dirt
State_Combat State Exploration / Combat / Stealth GameMode Exploration
State_Location State Interior / Exterior / Cave 触发器 Exterior

7. 打包与加载策略

  • SoundBank 分包原则:按通用(常驻) / 按关卡 / 按角色 / 按语言 VO 拆分
  • 常驻 Bank 控制在 < 15MB(含核心 UI、玩家角色、通用反馈音)
  • VO Bank 按语言独立,切换语言时卸载旧包再加载新包
  • 关卡切换用 异步加载 + 音频淡入,避免加载卡顿
  • 移动端:Bank 用 Opus/ADPCM,避免一次性解压大包

8. 常见集成事故清单

  • ❌ 循环音 Start 了没有 Stop → 切场景后声音叠加(头号 bug)
  • ❌ 物体销毁时未发 Stop → 悬空声源持续播放
  • ❌ 在构造函数中 Post Event → 音频系统未初始化,事件丢失
  • ❌ 3D 音未绑定位置更新 → 声音固定在原点
  • ❌ 每帧 Post Event(无节流/无状态判断)→ voice 数爆炸
  • ❌ UI 音挂在 3D 总线上 → 玩家移动时音量忽大忽小
  • ❌ 多语言 VO Bank 全部常驻 → 内存爆
  • ❌ 未设置 Max Distance → 全图所有音源都发声,CPU 爆