/ Ch15 音频

第15章:音频 — 零基础讲义

讲义说明本讲义基于 Jason Gregory 所著《Game Engine Architecture Volume II》第4版第15章(Audio, p.425-521)。
本版插画由 ImageGen + Guizang 材质插画标准流程生成。

学习目标

  1. 理解声音的物理原理和数字采样基础
  2. 掌握3D音频空间化五大技术(衰减/平移/HRTF/混响/遮挡)
  3. 了解主流音频中间件(Wwise/FMOD)的架构

15.1 声音的物理

15.1.1 声波基础

15.1.1.1 三个核心属性

属性物理量感知游戏应用
振幅声压(Pa)响度(dB)距离衰减曲线
频率赫兹(Hz)音高多普勒效应(警车驶过)
波形谐波成分音色材质区分(木质/金属地面脚步声)

15.1.2 人类听觉关键参数

15.1.2.1 人耳的工程规格

  • 频率范围: 20Hz-20kHz(随年龄衰减高频)
  • 动态范围: 0dB(听觉阈值)到 120dB(痛阈)
  • 等响曲线: 人耳对 3-4kHz 最敏感(婴儿哭声频率)——这就是为什么警报器在这个频段
  • 双耳定位: ITD(时间差——声音先到左耳=来自左边)+ ILD(响度差——左耳大声=来自左边)+ HRTF(频谱差——辨别前后上下)

15.2 声音的数学

15.2.1 数字音频基础

15.2.1.1 PCM采样三参数

// 数字音频 = 采样率 × 位深度 × 通道数
// CD音质:44100Hz × 16bit × 2ch = 172KB/秒 = 10MB/分钟
// 游戏音效:48000Hz × 16bit × 1ch = 94KB/秒(常用妥协)

// 奈奎斯特定理:采样率 ≥ 最高频率的 2 倍
// 44100Hz → 最高还原 22050Hz(覆盖人耳上限)
// 48000Hz → 最高还原 24000Hz(留有余量)

15.2.1.2 分贝(dB)— 对数标度

人耳对响度的感知是对数关系。10倍功率=+10dB(感觉"响了大约一倍")。游戏中音量滑块用 dB 作为单位正是因为这个原因。


15.3 声音的技术

15.3.1 音频中间件

15.3.1.1 Wwise vs FMOD 对比

WwiseFMOD
市场定位3A 主机游戏主流独立游戏/中小型项目
授权费收入分成(3A项目昂贵)分级订阅(有免费版)
核心优势极其灵活的音频总线、强大Profiler易上手、集成快、DAW风格界面
交互音乐强(多层音乐轨+实时过渡)强(自适应音乐系统)

几乎没有任何工作室自己写音频引擎——Wwise和FMOD统治了整个行业


15.4 3D音频渲染

3D音频空间化
图15-1:3D音频空间化——距离衰减与双耳差异(Guizang流程生成)

15.4.1 五项空间化核心技术

15.4.1.1 技术速查表

技术做法效果计算代价
距离衰减音量随距离指数/线性下降远=小声最低(一次乘法)
立体声平移按方位角分配左右声道权重左边=左耳大声低(sin/cos查表)
混响模拟声音在空间反弹造成的余音大教堂=长混响(2-5秒)中(FIR/卷积)
遮挡/衍射墙后声音的高频衰减+衍射路径计算"墙后有声音"的感知高(需要几何信息)
HRTF用头部传递函数模拟耳朵对声音的频响改变分辨前/后/上/下来源中(卷积)

15.4.1.2 距离衰减曲线

// 典型的游戏音频衰减
// 近距离(0-5m):音量不变(满)
// 中距离(5-50m):线性下降
// 远距离(50-100m):快速衰减到0

float Attenuation(float distance) {
    if (distance < minDist) return 1.0f;            // 满音量区
    if (distance > maxDist) return 0.0f;             // 完全听不到
    float t = (distance - minDist) / (maxDist - minDist);
    return 1.0f - t;                                 // 线性衰减(或用对数)
}

15.4.2 空间音频API

15.4.2.1 平台原生空间音频

现代平台提供硬件加速的空间音频:Windows Sonic / Dolby Atmos(Xbox/PC)、PS5 Tempest 3D AudioTech(极低延迟+数百个声源同时空间化)、Apple Spatial Audio(AirPods 头部追踪)。引擎只需提供声源的3D位置+方向,平台负责HRTF渲染。


15.5 音频引擎架构

15.5.1 分层架构

15.5.1.1 从游戏逻辑到扬声器的五层

// 音频系统的完整分层
游戏逻辑(C++/Blueprint)
  ↓ "播放脚步声"
引擎音频包装层(封装 Wwise/FMOD API)
  ↓ 设置 GameObject 位置、触发 Event
音频中间件(Wwise/FMOD 核心)
  ↓ 空间化、混合、DSP 效果、总线路由
平台音频 API(XAudio2 / WASAPI / CoreAudio)
  ↓ 提交 PCM 缓冲
音频驱动 → DAC(数模转换器) → 扬声器/耳机

15.5.2 交互音乐系统

15.5.2.1 自适应音乐

现代游戏音乐不是"一首MP3循环播放"——而是多层音乐轨实时混合:基础层(一直播放的低频弦乐)+ 紧张层(战斗中叠加鼓点)+ 高潮层(Boss战加入合唱)。Wwise/FMOD 根据游戏状态(战斗/探索/Boss)改变各层的音量和过渡时长。


本章核心洞察

🔑 好音频 = 玩家听不到音频引擎的存在
游戏音频的最高境界是完全沉浸——玩家不意识到"这是技术实现的"。而背后需要的引擎支持非常复杂:3D定位、混响、遮挡、交互音乐、动态混合……但没有工作室自己写音频引擎——Wwise/FMOD已完美解决所有已知难题。你的精力应该放在"如何用好中间件"而非"如何实现音频管线"。

📝 课后练习题(含答案)

题1人耳如何判断声音来自"左边"还是"右边"?

双耳定位三要素:① ITD(时间差)——左边声音先到左耳 ② ILD(响度差)——头遮住部分声音,左耳更响 ③ HRTF(频谱差)——耳朵形状对不同方向有不同滤波效果。对前后上下的判断主要靠 HRTF。

题2CD采样率44100Hz怎么来的?

奈奎斯特定理:采样率 ≥ 最高频率×2。人耳上限≈20kHz→需40kHz。44100 > 40000,恰好也有历史原因——早期数字录音用录像带,每行可存3个采样,NTSC制式245行×60Hz×3=44100。


🤖 qAagent问答区

实践自己项目应该选 Wwise 还是 FMOD?

大团队/3A项目 → Wwise: 更强大的混合总线、Profiler、互动音乐系统。小团队/独立游戏 → FMOD: 免费版可用、上手快、DAW风格界面让音频设计师零学习成本。两者功能都已远超任何游戏的实际需求——"选哪个都不会错"。