查看原文
其他

【翻译馆】虚拟现实音频处理VR Audio

2016-09-29 GAD-VR Gad-腾讯游戏开发者平台

一、简介


从投币游戏开始,音频就是计算机和视频游戏体验的重要一部分。相较于传统行业,虚拟现实采用头戴设备(HMD)和耳机,可以追踪用户的头部的方向和位置,这些信息可以为音频技术带来许多新的机遇。目前,虚拟现实仅仅关注视觉信息,例如分辨率、延迟和追踪,但是音频也必须跟上来提供最好的现场体验。


本文关注于虚拟现实音频相关的挑战、机遇和解决方法,以及传统游戏开发相关技术需要针对VR做哪些改变。本文不对音频、听觉和人的听觉系统进行深入的研究,如果感兴趣的话,可以谷歌以下关键词:Head-Related Impulse Response,Head-Related Transfer Function,Sound Localization。


二、定位和人体听觉系统


人只用两只耳朵,就可以在三维空间中定位声音,根据时间、相位、强度和频谱的变化,依靠于心理声学和推理去定位。


本节总结了人类定位声音的方法,并应用这些知识来解决空间定位问题,让开发者可以把单声道的声音信号进行转化,让这个声音听起来像是来自于空间中的某个具体位置。


人类定位声音的两个关键因素,分别是方向和距离。


2.1方向定位


2.1.1 侧面(Lateral)

侧面的定位是最简单的,当一个声音更靠近左边时,左耳会比右耳更早听到,并且听到的声音更大。通常来说,两只耳朵听到的声音越接近,那这个声音就越靠近中间。


然后,还有一些有趣的细节。首先,我们主要依靠到达两耳的延迟来定位声音,也就是“耳间时间差别”(ITD: interaural time difference);或者依靠两耳的音量差别,也就是“耳间强度差别”(ILD: interaural level difference)。我们使用的定位技术极大的依赖了信号的频率内容。


当声音低于一定频率时(500到800HZ之间,取决于源),会很难分辨出强度的差别。但是,在这个频率范围的声音,比人脑袋的规模还要大半个波长(have half wavelengths greater than the dimensions of a typical human head),让我们可以依靠两耳之间的时间信息(phase相位)区别。


另一个极端,当声音的频率高于1500HZ时,比脑袋小半个波长,用相位信息来定位声音就不再可靠了。对于这些频率,我们需要根据由脑袋引起的强度差别,叫做head shadowing,这是由于脑袋的阻挡,导致较远的那只耳朵听到的声音强度有所衰减,如下图所示。



我们也根据信号的起始时间差来判断,当声音播放时,哪个耳朵先听到会有很大影响,但是这个仅能帮我们定位突变的声音,而不是连续的声音。


对于频率在800HZ到1500HZ的声音,我们需要依靠时间差别和强度差别来同时判断。


2.1.2 前后(Front/Back/Elevation)

前后的判断会比侧面的判断难很多,因为我们无法依靠时间差和强度差,因为它们的差为0,如下图所示。



人体依靠由人体和脑袋引起的光谱差别(spectral modifications)来解决混淆。这些光谱的差别是因为脑袋、脖子、肩膀、躯干、尤其是外耳(或耳廓)引起的过滤和反射。由于来自不同方向的声音与人体的交互会不一样,我们的大脑通过光谱的差别来推测源的方向。从前方过来的声音会与耳廓的内部产生共振,而从后侧传来的声音被为耳廓削弱(shadowed)。类似的,从上方传来的声音会在肩膀处反射,而来自下方的声音会被躯干和肩膀阻挡(shadowed)。


以上这些反射和阻挡被结合起来,创造了一个方向选择滤波器(direction selective filter)。


问题:如何考虑人的高度和姿势?


2.1.3 头部相关的转换方程组 (HRTFs: Heade-Related Transfer Functions)

一个方向选择滤波器可以被编码为一个脑袋相关的转换方程(HRTF),这个HRTF方程是当今3D声音空间关键技术的基石,具体怎么样来构造这个方程,将在后文中进行详细的说明。


2.1.3.1 头部模型

仅仅依靠HRTF方程组还不足以准确定位声音,因此我们需要一个脑袋模型来辅助定位。通过旋转脑袋,就可以把一个前后定位的问题转换为侧面定位的问题,让我们可以更好去解决。


例如下图中的A和B无法通过强度和时间的差别来区分,因此它们是一样的。通过轻微的旋转脑袋,听者就改变了两只耳朵的时间和强度差别,来帮助定位声音。D1比D2要近,因此可以判断出声音在用户的左侧(后侧)。



类似的,扭动脑袋,可以帮助定位垂直的物体。在下图中,D1变短D2变长,因此可以判断物体在脑袋的上面。



2.2 距离定位


ILD,ITD和HRTFs可以帮助我们定位声音源头的方向,但是对于声音的距离只能给出一个宽泛的参考。为了定位距离,我们需要考虑一系列的因素,包括起始时间的延迟,声音和混音的比例,以及运动视差。


2.2.1 声音大小

声音大小是距离最明显的线索,但是有时候会误导。如果我们缺少参照,我们就无法判断声音从源头的削弱来衡量距离。幸运的是,我们对生活中的声源很熟悉,例如乐器、人声、动物、汽车等,因此我们很好的判断这些距离。

对于合成的和不熟悉的声源,我们没有参照,那就只能依靠其他的信息或者是相对音量的改变来判断一个声音是接近还是远离。


2.2.2 起始时间延迟(Initial Time Delay)

起始时间延迟描述了声音和回声的区间,这个区间越长,我们就离声源越近。无回声或者空旷的环境中,例如沙漠,不会产生可感知的回声,这会导致距离的估计更加困难。



2.2.3 声音和混音(Reverberation)的比例

在一个有回声的环境中,声音之间会有很长的、散开的音尾融合,在不同平面上反射,最终消失。如果我们听到的原声比混声要多,那我们就离声源越近。

音频工程师在人工混音时,常常需要考虑这个因素,来调整乐器和歌手的位置。


2.2.4 运动视差

声音的运动视差可以体现距离,例如比较近的昆虫可以从左边很快的飞到右边,但是远处的飞机可能需要好多秒来达到同样的效果。因此,如果一个声源运动的比一个固定的视角要快,那我们就猜测这个声源来自附近。


三、3D音频的空间化


前文讨论了人类如何在三维空间中定位声音,现在,我们反过来问,“我们能不能应用这些信息来让人们认为一个声音来自于空间中的某个具体位置?”

答案是YES,否者的话,这篇文章就会非常短了。VR音频很重要的一部分就是空间化:能够让一个声音听起来来自于三维空间中的某个位置。空间化给用户提供了在一个真实3D环境中的感觉,可以加深immersion。

和定位一样,空间化有两个重要部分:方向和距离。


3.1 使用HRTF的方向空间化


我们知道不同方向的声音,在身体和耳朵里的传播是不同的。这些不同的影响构成了HRTF的基础,让我们来定位声音。


3.1.1 得到HRTFs

最准确的方法是把话筒放在人的耳朵里,然后放在一个无回声的环境里,然后在房间里从各个重要的方向播放声音,并记录下话筒里的声音,通过比较原始声音和话筒的声音就可以计算出HRTF。(Oculus的音频工程师在一次演讲中提到,这种方法不是很实际,对于被测者是个torture)

两只耳朵都必须这样做,并且需要从足够多的离散的方向来建立模型。但是这些模型只是针对一个人的,在现实世界中,我们无法得到每个人的模型,因此生成一个通用的模型一般也够用了。

大多数基于HRTF的空间化方法,都采用一些现有的公开数据集,例如下面的4个。

IRCAM Listen Database

MIT KEMAR

CIPIC HRTF Database

ARI(Acoustics Research Institute) HRTF Database

大多数HRTF的数据集中不包含各个方向的HRTF,例如头下区域。有些HRTF数据集只进行了稀疏采样,只有5-15个自由度。

大多数方法,或者采用最近的HRTF,或者进行插值。在这个领域有许多研究,但是对于基于桌面的VR应用,通常情况下都能够找到足够的数据集。


3.1.2 应用HRTFs

给定一个HRTF数据集,如果我们知道了声源的方向,我们就可以选择一个HRTF然后把它应用到该声源。这常通过一个时域的卷积或者一个FFT/IFFT对实现。


如果你不知道这些事什么东西,也不用着急,这些细节只有当你自己实现HRTF时才用得到。本文讨论的是应用的细节,例如怎么存储一个HRTF,当处理音频时如何调用。我们关注的是高层的逻辑,“将音频进行进行过滤让它听起来来自于一个特定的方向”。

由于HRTFs会考虑到听众的头部位置,因此在进行空间化时,需要带耳机。如果没有耳机,就需要应用两个HRTF方程组:模拟的一个,和真实通过身体得到的。


3.1.3 头部追踪

听众本能的会通过头部的运动来分辨空间中的声音,如果一个听众的脑袋向一侧转了45度,那我们就必须在他们的听觉环境中体现出来,否则音响就会出错。


VR头部设备(例如Rift)可以追踪听者的头部方向(或者位置),根据这些信息,我们就可以投射声音信息到听者的空间中。这些的前提是听者戴了耳机,否则难度系数对于大多数VR应用是无法接受的。


3.2 距离模型

HRTFs帮助我们定位声音的方向,但是不能对距离进行建模。人们通过一些因素来估计声音的距离,这些可以通过在软件中调整参数和精度来进行模拟。


声音大小:最重要的因素,很容易通过听者和声源的距离进行建模。

起始时间延迟(Initial Time Delay):很难建模,需要根据空间进行计算反射,但是依然有几个数据集尝试对此进行建模,从简单的 shoebox models到完整的空间几何建模。

声音和混音(Reverberation)的比例:通过对反射和回声进行建模可以得到,有一些现有模型,但计算复杂度很高。


运动视差:根据声源的速度可以直接计算得到。

高频衰变:通过低通滤波器可以很容易的建模,实际应用中,该因素并不是很重要。


四、听觉设备


对于当前的VR,特别是需要追踪头部和用户的运动,耳机是标配,因为它提供了更好的独立性、隐私性、便携性和空间性。

与自由声场话筒系统(free-field speaker systems)相比,在VR音频领域,耳机有以下优点。

听觉与听者所在环境的增强现实以及沉浸式相独立。

头部的追踪变得很简单。

HRTFs变得更准确,因为不需要收到其他HRTF以及自己身体的影响。

更容易控制HMD设备。

耳机都戴的很好,不会受到回声的影响。


4.1耳机


当前的耳机种类有以下几种,各自有优点和缺点。



1、Closed Back

这种型号的耳机可以提供最好的隔离以及音响效果,到那时可能会导致不舒服。

They tend to offer less accurate reproduction due to internal resonance. Also, if placed on or over the ear, they cause the pinnae to impact sound reproduction slightly.

听觉的隔离可以提升沉浸式的效果,让听者与外界环境隔绝,听不到有人走进屋子、手机响、门铃响等,这是不是一件好事取决于用户自己。


2、Open Back

比Closed-back更加准确和舒服,但不能让听者与外界隔绝,比较适合在安静的环境中体验VR,可以与外界的音响设备(subwoofer)相结合。当戴在耳朵上时,可以放耳廓对声音有所反应和重建。


3、Earbuds

和手机配套的耳机比较便宜,轻便,低音效果比较差。有些设备例如苹果的耳机,对频率有很好的响应,虽然会丢失一些低音,这些会被空间化忽略掉。 大部分这种耳机的隔绝性较差。


4、In-Ear Monitors

对空间有较好的隔绝效果,并且很轻便,对整个频域的反应都很好。这些耳机去除了耳廓对声音的反应,由于要插入内耳,这就削弱了耳道对于声音的重构。


1 脉冲反应

耳机本身有自己的脉冲信号,由于HRTF对频率很敏感,因此在输出信号时,最好把耳机的脉冲信号给去掉。可以对输出信号进行去卷积。


4.3 外置话筒系统


对于家用的VR不实际。


4.4 蓝牙

由于目前的蓝牙技术会造成严重的延迟,有事会有500ms那么多,因此蓝牙技术不推荐用于音频的输出。


五、环境建模


HRTFs和衰减一起为三维空间声音提供了无回声的模型,可以体现很强的方向信息,但是由于缺少空间因素,造成声音比较干和假。为了补偿这个,我们加入了环境建模来模拟周围空间的听觉效果。


1、混响和反射

随着声音在空间中传播,它们会在平面上反射,造成一系列的回音。最初的回音可以帮助我们确定声音的距离和方向,当这些回音传播、消失以及交叉时,会产生混音(late reverberation tail),来增强我们的空间感。



混音和反射有以下几个模型。

shoebox model

6面平行的墙,需要指定距离,听者的位置和朝向。虽然这个模型很简单,但是总比没有强。



人工混音artifical reverberations

由于物理建模的计算复杂度很高,混音常常使用人工的模拟,ad hoc methods。虽然计算复杂度低了一些,但是由于缺少听者的朝向信息,可能会造成声音的失真,这与算法和实现相关。

sampled impulse response reverberation

基于抽样的脉冲响应与游戏中的环境不太匹配,同样缺少听者的位置和朝向,他们是单声道的,并且很难在不同空间进行转移。


2、真实世界的空间和声音

shoebox模型试图对空间信息进行简化的表达,它假设没有冲突,并且所有墙对频率的吸收是相同的,并且六面墙对听者的距离是固定的。由于VR环境是复杂且动态的,这种方法不能很好的scale。

现有方法有对复杂环境进行建模,但是知名度不够高。


3、环境的转变

对一个区域进行建模是很复杂的,但也很直接。但是当空间进行转换时,可能会有音频的不连续性,有些模型需要缓冲和重启整个混音器,有些系统会在现实系统中引入噪声。


4、现场和沉浸式

开发者将用户沉浸在一个虚拟世界中,给用户一种现场感。当用户在场景中间时,音频的沉浸感是最强的。例如,一个人在远处观看3D棋盘游戏时,压迫感远不如她站在棋盘的中心。


六、空间化的声音设计


既然我们已经分析了人们如何把声音放在真实世界中,以及我们如何欺骗用户让他们以为声音来自于空间的某个具体位置,接下来,我们就要研究如果改变我们的声音设计来支持空间化。


1、单声道

大多数空间化技术把声音建模成一个无限小的点源,假设声音来自于巨大空间中的一个点,或者是离散的几个话筒。因此,声音可以被视为是单通道的。


2、避免正弦波


纯声音例如正弦波,缺乏泛音,会导致以下几个问题:

纯音调很难出现在现实世界中,听起来是不真实的,并不代表你需要彻底杜绝,因为VR体验是抽象的。

HRTFs通过滤波来工作,但是纯声音缺乏一些内容,因此很难使用HRTF来进行空间化。

HRTF过程中的任何瑕疵或者不连续,在纯音调中会更明显,因为缺乏其它的内容来掩盖。一个移动的正弦波还会在空间化的实现过程中表现的非常差。


3、使用宽频谱的源

与空间化正弦波的问题类似,宽频谱的声音可以为HTF提供更多的频率信息。它们也可以来掩盖由HRTF动态改变引起的听觉瑕疵。同时要保证内容中包含1500HZ以上的声音信息,因为人民最常用这个来定位声音。


人们很难定位低频的声音,这就是为什么家庭影院系统会使用单声道的低音频道。如果一个声音必须是低频的,那就要避免这些头上的空间化,换做使用摇动或者衰变。


4、避免实时的格式转换

音频的格式转化非常费时,会造成延迟,因此音频应该使用和目标设备一致的输出格式。对大部分PC来说,一般是16-bit,44.1kHz PCM,但是一些其他平台使用其他类型的格式。

空间化的声音是单声道的,因此应该避免在播放时进行信号的融合,这会造成相位和音量的误差。


七、VR的混合场景


https://developer.oculus.com/documentation/audiosdk/latest/concepts/audio-intro-mixing/

和声音设计一样,为VR混合一个场景既是艺术又是科学,以下的推荐可能包含警告。


1、创造性的控制


我们的最终目标不一定是真实,需要一直记住这一点。和计算机环境中的灯光一样,什么需要连续或者正确并不是在艺术上有很高的要求。音频团队应该注意,不要逼着自己在VR环境中去追求完全的正确。特别是在考虑动态范围、衰变曲线以及直接返回时间的时候。


2、声源的精确3D位置信息


声源必须被精确的放在3D的场景中。以前,一个大概的位置信息就足够,因为可以通过移动和衰变来定位。一个物体的默认位置可能是它的尾部或者是脚和地面接触的地方,当一个声音从这些位置发出时,会在空间中显得很不和谐。


3、有方向的声源


Oculus Audio SDK不包含声源的方向,但是高层级的SDK会使用基于角度的衰变进行建模,来控制方向。这些方向的衰变会在空间化之前就发生。


4、场景声音


Oculus Audio SDK不包含场景声音,例如瀑布、河流、人群等。


5、多普勒效应


当声音接近或远去时,会产生明显的多普勒效应。VR可以通过声源和听者之间的相对速度来消除,但是这个过程很容易引入噪声。


6、声音传输时间


在现实世界中,声音的传输需要时间,因此在看到和听到东西之间会有明显的延迟。

Oculus Audio SDK支持time-of-arrival。


7、非空间化的声音


并不是所有的声音都需要被空间化,有许多声音是静态的或者与头部相关的,例如:

用户交互的元素,例如点击、哔哔声、传输或者其他。

背景音乐

旁白

身体声音,例如呼吸和心跳

这些声音应该在编写程序时被隔离,避免它们在混音时不小心被加入到3D空间化声音的流水线中。


8、效果

空间化的效果与设备的性能有关,例如在高配的PC上可以空间化30多种声音,但是在移动设备上只能空间化一到两个。

有些声音空间化后效果很差,例如低频的轰隆声,给出的空间感很弱。这些声音可以通过一些移动和衰变来作为标准的立体声播放。


9、气氛(Ambiance)

传统的非VR游戏很难做到声音的沉浸感。因为PC用户的话筒质量很低,家庭影院的隔离效果很差。

有了耳机、位置追踪和完全的视觉沉浸之后,对用于声音体验的音效设计变得更为重要。


这就意味着:

有效空间化的声源

合适的音效范围,不太密集,也不太稀疏

避免用户疲劳

合适的音量,可以让用户听得时间比较长

空间和环境的效果


10、延迟

VR音效的延迟与设备有关,最少可以达到2ms,最多可能达到几百毫秒。当用户脑袋的移动速度与声源速度的差别较大时,系统延迟会比较明显。如果观看者移动较慢,且场景相对静止时,音频的延迟很难被察觉。


11、特效


在VR体验中,特效是很重要的一个环节,像是滤波、赋值、变形和折边等。例如一个低通的滤波器可以模拟水下游泳的声音,因为高频会比在空气中失去能量的更快。或者可以用扭曲来模拟迷失方向。


(本文是Oculus Audio SDK文档的阅读笔记,作者只对感兴趣的内容进行了简单的翻译。转自:segmentfault)


点击一下立即阅读相关好文章


5个步骤制作完美3GCD腾讯GAD游戏创新大赛


游戏美术3D设计干货回顾为VR优化UE4渲染器


这么做设计才好玩Unity教程


《逆战》原画组长王磊:用创作打造属于自己的标签


......

近期热文

2016TGPC 腾讯GAD精品VR游戏推荐

UNITY中的VR适度优化


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存