Wwise 中的 Ambisonics:概述
Ambisonics 管线的主要功能在于允许将总线的声道配置设为一阶、二阶、三阶、四阶或五阶 Ambisonics。这样设置了之后,任何连通到这些总线的非 Ambisonic 信号都将自动编码为 Ambisonic,同样的,所有连通到非 Ambisonic 总线的 Ambisonic 信号会依照选择的定位设置自动解码。最终,要么不经更改直接传递输出到 Ambisonics 总线的 Ambisonics 信号 (Direct Assignment),要么依据游戏对象和听者之间的相对位置和朝向加以旋转和收缩 (3D Spatialization)。除此之外,您还可以:
- 按照 FuMa 格式(最高三阶)或 AmbiX 格式(最高五阶)导入并播放 B-format 素材;
- 使用 Effect 插件来自定义解码;
- 使用效果器插件(如 Google Resonance 或 Auro Headphones)将 Ambisonics 信号转码为双耳信号;
- 将 Ambisonic Bed 传给支持 Ambisonics 的音频设备;
- 用 Wwise Recorder 录制 Ambisonic 总线到磁盘文件并重新导入文件;
- 您可以选择最喜欢的 Wwise 插件*来处理 Ambisonics,就和处理其他格式一样。
*除了 Stereo Delay 和 Matrix Reverb。
为实现 3D 空间音频而采用的中间表示形式
博文《将 Ambisonics 用作空间音频的中间表示形式(针对 VR)》详细阐述了空间/3D 音频的中间表示形式这一概念。总的来说,就是要对总线层级结构上层的混音总线进行相应配置以传达 3D 信息,进而在适当实施双耳混音后将信号传给耳机或在进行下混后传给扬声器。这在游戏试图运用某些平台中嵌入的 3D 音频技术时尤其有用。
Wwise 针对子混音提供了三种 3D 中间表示形式:
- Audio Object:在 Wwise 2021.1 推出基于对象的音频管线之前,并没有对此实施任何混音。基于对象的表示处于管线末端。在此,并不会对混音的各个声音本身实施混音,而只是收集并保留其各自的定位信息,直至用于 Binauralizer 之类的 3D 渲染器。这样便不会丢失任何 3D 信息,确保 3D 渲染器可以最佳状态工作。不过,声音没有实施下混。也就是说,之前可将效果器应用于混音总线的一组声道,现在则需将其单独应用于各个声音(数量可达上百个)。
- Fixed Object:对此,声道配置的扬声器位置是已知的。通常会选用 7.1.4 配置。因为其在双耳上方设有高度扬声器,并可表示来自上方的声音。换而言之,7.1.4 无法正确表示来自下方的声音。另外,倘若声音不与扬声器直接对齐,三个临近的扬声器便无法精准传达其方向性。
- Ambisonics:Ambisonics 与 Fixed Object 类似,两者的声道数都是恒定的。不过,其并不像 Fixed Object 一样某些方向的空间表示效果要优于其他方向:它相对于旋转具有不变性,会均衡地实施模糊处理。这种表示形式的精确度与 Ambisonics 阶数成正比。
在 Ambisonics 总线上设置 Binauralizer 效果器
在 Master Audio Bus 下创建 Ambisonics 总线,并应用 Binauralizer 效果器(如 Google Resonance 或 Auro Headphones)。所有需要实施双耳处理的音频都要输出到此总线。
将此总线设为其中一种 Ambisonics 配置。在用作空间音频的中间表示形式时,Ambisonics 阶数越高,效果越好。虽然总线的配置为 Ambisonics,但 Binauralizer 效果器会将其 Out Config 设为立体声。
对比 Ambisonics 和 Audio Object
Ambisonics 格式适合用于包括 Binauralizer 在内的各种 3D 渲染器。相较于 Audio Object,其可确保由子混音效果器和 3D 渲染器本身对固定数量的声道进行处理,不过在方向性传达方面不那么精准。最终的精确度与所选声道数 (4 ~ 36) 成正比。
相比之下,基于对象的音频管线在方向精确度方面要精准很多。它会不惜代价地保留对象的所有 3D 信息。对此,设计师需要通过其他方式(如声部限制)来控制 Audio Object 及声道的数量。
融合 Ambisonics 和 Audio Object
Wwise 中基于对象的管线支持结合 Audio Object 使用多个声道(包括 Ambisonics)。也就是说,两种表示形式之间并不是相互排斥的。比如,您可以使用 Audio Object 来保留某些声音,以充分利用 Audio Object 提供的方向性渲染优势。同时,针对其余声音使用 Ambisonics。在采用 Audio Object 配置时,所有没有保留为 Audio Object 的声音都会输出到 Bed。鉴于以上原因,Ambisonics 最为适合表示 Bed。
在采用 Audio Object 配置时设置 Ambisonics Bed
顶层空间音频应采用 Audio Object 来表示,不过我们为 Bed 创建了 Ambisonics 子总线,以将下混的 Ambisonics 声音强制输出到该总线。直接输出到父总线的声音将被视作对象。Ambisonics Bed 也会被视作单个多声道对象。
目前,Wwise 没有针对对象配套提供 Software Binauralizer 效果器。不过,有些平台在 Audio Device 层面支持对对象实施双耳处理。比如,Windows Sonic。在这种情况下,Master Audio Bus 会沿用 Audio Device 的 Audio Object 配置,并可将 Ambisonics Bed 作为其直接子对象。
如需详细了解 Audio Device 在基于对象的音频管线中的效用,请参阅 Audio Object – 从 System Audio Device 到终端。
如何针对头戴式设备旋转以 Ambisonics 形式表示的声音?
通常来说,头戴式显示设备(HMD 头显)的头部追踪数据会被游戏引擎作为听者的朝向通过 SetListenerPosition() API 不断地传送给 Wwise。定位被设置为 3D 的声音会被添加到游戏对象中。当这些声音在 Ambisonic 总线中混音时,角度的编码取决于游戏对象相对于听者朝向的相对位置。 因此,Ambisonic 下混是由相对于 HMD 作了旋转的声源构成的。
另外,还可结合 B-format 声源使用 3D Spatialization。在这种情况下,其将被视作声场并依据游戏对象和听者之间的相对朝向旋转(参见下文“将 Ambisonics 视作声场”部分)。
电影般的 VR
Ambisonics 的旋转只消耗极少的 CPU 和内存,这要归功于在 Ambisonics 域内计算旋转矩阵。这使得它成为 VR 中交换音频的理想格式。例如,我们可以很容易地构建逼真的礼堂场景,其中声音从四面八方传来。 可以把它们编码成 Ambisonic 信号, 并用支持 Ambisonics 的 DAW (包括 Wwise)存盘。在 VR 设备中播放时,播放引擎只需要读取头部追踪坐标,将 Ambisonics 信号沿反向加以旋转,然后解码/虚拟化为双耳信号并传给耳机。
在前面的小节中,旋转是互动地得到的。除了因为头部追踪的旋转以外,您也可以用 Wwise 创作非互动的 (电影式) VR 内容。为此,只需在 Ambisonics 总线上将之前提到的 Binaural Virtualizer 效果器替换为 Wwise Recorder 效果器即可。录制的文件为兼容的 FuMa 或 AmbiX 文件,其阶数与总线相同。您可以把这个文件嵌入到 360 度视频中,并且让玩家用上面描述的方法旋转声场。
环境
类似的理念也适用于环境效果器所用的 Auxiliary Bus。目前来说,RoomVerb 混响器 和 Convolution Reverb 天然地支持 Ambisonics,但是 MatrixReverb 不支持。不管您想不想用前-后 delays,您都可以在立体声或者 4.0(或更高)总线上使用它们,然后让它们连通到 Ambisonic 总线上。他们的输出会编码成 Ambisonics,编码过程遵循的原则和应用到 2D 声音上的相同。您可以用 RoomVerb混响器做相同的操作,也可以直接在 Ambisonic 总线上使用它。有方向性的声道由去相关性的信号组成,这和标准多声道配置一样。使用更高的阶数会产生更多去相关性的声道,进而需要更多运算处理。请多多尝试以便找到质量和性能的平衡点。
Ambisonics 声像摆位 VS VBAP
出于审美考虑,单声道声源可以编码成 Ambisonics 衬底。Wwise 中默认的 3D 声像摆位的算法是基于常规的 VBAP 算法。 VBAP 算法在恒定的总能量下最大化了声音的精度, 代价是牺牲了能量散布的可变性。也就是说,当虚拟声源与扬声器对齐时,能量的散布是最小的。当虚拟声源正好位于扬声器弧的中间(对于 2D 配置,如 7.1)或三角中间(对于 3D 配置,如7.1.4)时,能量的散布是最大的。相较之下,不管声源方向和扬声器布局如何,Ambisonics 都具有恒定的能量散布。它的散布与阶数成反比。因此,一阶的 Ambisonics 非常 模糊。因为 Ambisonics 子混音会被自动解码为父总线的标准配置(如 5.1 或 7.1.4),所以我们可以利用普适 Ambisonics 解码技术,来在 Wwise 中实现普适 Ambisonics 声像摆位 [1]。为此,可将 3D 声音输出到 Ambisonics 总线,然后将该总线与采用标准配置的父总线连通。
将 Ambisonics 看作声场
xAmbionics 声音(无论录制还是合成)特别适合实现环境声。虽然在游戏中通常以高阶 Ambionics 作为空间音频的中间表示形式,但对环境声来说一般低阶 Ambionics 就已足够。对此,博文《为动态环境声使用 Ambisonics》中进行了详细的介绍。
声场收缩
在被视作声场并结合使用 3D Spatialization 时,倘若 Spread 保留设为默认值 0,Ambisonics 会像其他多声道文件一样收缩成单声道点声源。为了确保被声场完全环绕,您需要向 Ambisonics 声音添加相应的 Attenuation Shareset,以此将 Spread 值改为 100%。
如《为动态环境声使用 Ambisonics》中所述,在将 Spread 设为 100% 并将 3D Spatialization 设为 Position + Orientation 时,Ambisonics 声音将依据“发声体”和“听者”游戏对象的相对朝向进行旋转,给人一种声场与周边环境互动的感觉。
Ambisonics 代表传向听者的波前,所以构成声场的声源总是在远处。倘若使用其来表示声场的平移,听起来会比较奇怪。不过,我们可以借助 Spread 来模拟进出声场时的声音效果。事实上,只需将 Spread 降至 100% 以下便可实现沿“发声体”游戏对象所在方位收缩声场的效果。对此,Spread 的效果中进行了阐释。Wwise Spatial Audio Room 正是通过这种方式处理房间底噪和混响的(参见房间底噪):
- 在听者位于 Room 之内时,Spread 接近于 100%;房间底噪和混响总线在声场旋转时与 Room 朝向绑定。
- 在听者位于 Room 之外时,Room 游戏对象设在最近的 Portal 上;此时,Spread 会降至 50% 以下(具体取决于 Portal 的开口大小)。声场会沿 Portal 方位收缩,并依据 Room 的朝向旋转。随着听者逐渐远离,声场会慢慢地在 Portal 所在位置收缩为点声源。