大家好,我是刘海宜(Eddy Liu),是刚刚发售的《除夕:双鱼玉佩》的音频设计师,负责游戏音效、音乐和Wwise工程的制作。《除夕》是一款PSVR恐怖射击冒险游戏,其场景包含了大量的解密元素。由于VR平台的特殊性,在音频制作上,与普通类型游戏也存在着一些区别。在此,希望能通过这篇文章和大家分享下整个项目的音频设计思路。
《除夕:双鱼玉佩》Trailer
关于Ambisonic的概念和使用
说到VR,很多人都会想到Ambisonic制式。作为一种全景声的解决方案,该制式于1970年由英国国家研究与发展公司(The National Research Development Corporation)发明并引入,但其后并未被广泛应用和商业化,直到VR产业的快速崛起。这里我想跟大家简单分析一下其中的原因和Ambisonic在游戏中的具体实现方式。
首先,Ambisonic制式诞生的核心概念,是引入声音的第三个维度(the 3rd dimension)一一高度(Height),让听者可以更好的感受到声源所在的空间位置。传统上,无论在Stereo还是Surround系统下制作声音,声音的Panning都是基于水平面的。而当我们引入了高度的概念后,声音不再平面化,声音在空间中的位置变得更加立体。这种立体感,一直也是音频领域努力开拓的方向,近年来Dobly ATMOS和DTS:X的技术也都是朝这个方向发展的。但对于传统影视行业来说,诞生更早的Ambisonic制式却并没有被广泛采用。一方面,尽管制作上它能够提供精准的空间定位,但现实中想要精准的进行声音的还放,对于影院的还放设备和系统有着较高的要求,难于普及。另一方同,在传统电影和游戏中,由于屏幕通常固定保持在观众正前方,因此听者通常更关注其所面向的方向的声音信息,大多数情况下,点声源并不会大量频繁的出现在观众水平的左右或后方。同时在高度上,人耳对于声源垂直方向的判断其实也并不如对水平方向的判断敏感,因此,即便像Dobly ATOMS系统在顶部添加了音箱阵列,但在实际制作中,Sound Object在顶端音箱阵列的移动也是选择性的,并谨慎处理的。所以,对于Ambisonic这种全方向性的声音系统来说,优势并不明显。
而相对于VR作品来说,Ambisonic便可以发挥其天然的优势了。由于VR的全景特性,Ambisonic可以很好的提供一个球体三维空间,将听者包裹进去。同时,它对于高度的控制,可以让听者更好的判断声音在3D空间内的位置。声音在还放时是以类似球面的结构,通过一个或多个音箱还放出来的,与传统意义上的Panning不同,Ambisonic可以呈献给观众一种“声面”的效果,声音在不同音箱和方位的移动也更加平滑流畅和自然。
然而,之前提到过Ambisonic对于还放设备存在着一定的局限性。尽管Ambisonic本身并不受限于某个音箱阵列的限制,例如Stereo,5.1或7.1设备都可以用于还放Ambisonic,但由于大多数用户并不具备能达到360°甚至720°摆位的多音箱配置,导致还放效果并不理想,加上许多家庭用户仍然在使用传统的Stereo系统,因此目前而言,Ambisonic在游戏领域的应用大多是通过HRTF(Head Related Transfer Functions)技术,将多通道信号转换成双耳信号(Binaural Signal)通过耳机来进行还放的。这也是为什么,绝大多数VR游戏都会在一开始时建议玩家,佩戴耳机以达到最好听感。
在音频制作上,VR全景电影可以大量使用通过Ambisonic话筒同期录制好的音频素材,但对于VR游戏而言,由于游戏独特的互动性、发声物体在空间方位上的不确定性,使得我们无法单纯的依赖于同期Ambisonic素材。因此目前以Ambisonic制式所录制的商业素材,几乎都以偏静态的环境声(Ambience)为主。对于空间内的点声源而言,我们则需要通过Wwise的Ambisonic管线,将3D空间内的声音,根据其实时位置,以Ambisonic制式从新渲染,再以双耳声或其他方式返送给听者。
从格式上来说,Ambisonic分为1阶4个通道,2阶9个通道,和3阶16个通道。
Ambisonic Order
(图片来自Audiokinetic,详见:https://www.audiokinetic.com/zh/library/edge/?source=Help&id=ambisonics_channel_ordering)
可以理解为,通道数量越多,所营造的声场效果就更加逼真和细腻,声音位置感就更强。这里需要注意的是,这里提到的通道数量是Ambisonic制式本身的通道数量,与我们还放时的通道数量无关。即便我们使用Stereo设备还放,3阶Ambisonic的听感也要明显好于1阶的Ambisonic。 在格式上,Ambisonic又分为A-Format和B-Format。可以简单理解为,A-Format是我们通过Ambisonic话筒录制的,未经过编码的原始音轨。而我们通常所说的Ambisonic格式,其实指的都是B-format。当一个A-Format音频文件经过1st order Ambisonic进行编码后,我们便得到了一个拥有W,X,Y,Z的四轨B-Format文件。
Ambisonic B-Format Figure
此时,WXYZ四轨并不像5.1或7.1一样分别代表着某个方位的声道,而是作为一个整体,记录着整个3D空间音频信息(Full 3-dimensinal spherical sound),同时,只有通过B-Format格式,我们才可以获取声音正确的空间位置信息,并对其进行混音,编辑等相关处理。
在B-Format下,由于声道顺序,权重和量化的不同,常用的B-format又有两种:Furse-Malham格式和基于SN3D的AmbiX格式。
前者简称FUMA,是传统的B-format格式,曾被广泛大量的使用。而后者是近几年流行起来的新格式,被软件和游戏所大量使用。AmbiX相对于FUMA来说有着更好的扩展性。而我们要注意的是,由于二者在声道的排序上截然不同,这意味着,无论是通过同期录音,还是后期人工合成,你都需要确认当前的B-Format文件使用的是FUMA还是AmbiX格式,以确保在解码时,使用匹配的解码系统还原声音,否则你得到的声音方位信息将会是错误的。软件通常无法自动判定一个B-format音频文件采用的哪种编码方式,因此当我们将一个B-format声音导入进Wwise时,切记要手动选择正确的解码格式。
Ambisonic Format Select in Wwise
了解了Ambisonic的具体情况后,我们来说一下其在VR游戏中的使用方式,简单来说,可以把Ambisonic的使用分为两种情况:
- 导入现有的B-Format音频文件进行解码,并在游戏中播放
- 导入任何格式的音频文件,在Wwise内通过Ambisonic管线渲染后播放
前者大多针对以Ambisonic制式录制的环境声素材,后者则更多针对于普通音频素材的导入,并在游戏内实现Ambisonic的转换和还放。
关于环境声的制作
由于全景画面带给玩家的视觉冲击,VR游戏本身在沉浸感上有着显著的加成。加上Wwise本身对于Ambisonic的良好支持,我们可以选择直接导入B-Format环境素材进行使用,来提供更好的沉浸效果。但是,尽管目前商业上已有大量Ambisonic环境音效库,但由于大多来自于同期录音,所以内容多以自然环境为主,如果我们想要获取更多风格的Ambisonic环境声,我们需要利用Nuendo或Reaper等工作站,配合相应的B-format编解码插件(如ReaJS ATK、Matthias AmbiX、Waves Ambisonics Tools、Noise Maker Ambi Head等等)来进行人工合成。而这种人工制作的B-format声音,听感上并没有直接录制的Ambisonic素材的效果好,同时也无形的增加了制作工时和成本。因此在游戏中,除了部分场景使用了Ambisonic格式的环境声外,我们还使用了大量4声道(Quad)环境音和少量的立体声环境音进行补充。对于四声道的环境音来说,我们可以很容易的将现有的5.1环境素材下混成4声道,其方法要比Ambisonic的制作更加简便。同时从听感上来说,经过我们反复的测试,四声道的环境仍然可以提供给玩家良好的包容感,是一个非常不错的选择。
在游戏内部,我们将环境声直接绑定在玩家的Camera上,并设置其不随玩家头部的旋转而旋转。这样,当玩家转动头部时,就可以感受到相关的环境变化。同时,通过Spread和Focus的调整,可以控制玩家转头时,环境声在各声道中切换时的平滑度,以满足特定需求。例如,当使用4声道的环境音时,如将Spread设置为100%,Focus设置为0%,此时声音在各方向间的过渡最为平缓且且最不明显。而如果想要刻意突出环境声在不同方向上的变化,可以适当的增加Focus的比例,甚至适当降低Spread来得以实现。
Spread and Focus Demonstration
值得一提的是,尽管同一项目中会使用不同制式的环境声,我们仍然可以将这些声音混合叠加,而保持整体环境声在游戏内良好的空间感和方向性。比如我们将一个立体声环境音和一个Ambisonic环境音同时播放,在游戏中玩家转动头部时仍然可以感受到不同方向所带来的声音变化,而立体声素材又能给我们提供更多的声音元素,便于我们进行声音设计。在游戏中,我们制作了大约40个铺底用的环境音效。这些环境声有制式的区别(Ambisonic, Quad或Stereo),有内容上的区别(Country Yard, Storm, Heavy Wind, Cave Dripping等), 也有风格上的区别(Eerie, Tension, Ancient, Mechanic等)。我们可以把每一条环境音效理解为“一层”。在游戏中,每个场景的环境音效实际上都是由3层以上的环境声,根据场景需要叠加起来的。这样的好处是,每个场景的环境都将是一个复杂音效,而不是由一个单调音效组成的。同时通过排列组合的方式,可以让我们获得远多于已导入音效数量的环境音。甚至,即便不同场景中使用了完全相同的几个环境声素材,但通过对不同层的Volume设定,仍然能够得到风格迥异的环境声。游戏内,由于我们将环境声事件固定在玩家头部,关闭了其Attenuation功能,且《除夕》在流程上比较线性,因此我们的环境声划分是人为的按照区域设计的,这样做的优点是我们可以根据场景特点将区域划分的很细,以避免让玩家长时间处于同一环境声中。此时分层组合的优势也充分体现了出来。比如,场景A的环境是由环境音效1、2、3组成的,此时2为主环境音效,Volume最大,1、3为辅助环境,Volume略小。当玩家走到相邻场景B时,B的环境音效则是由2、3、4组成的,此时3为主环境音效,2、4为辅。这样,每两个相邻的区域中,实际上都Share了部分相同的环境元素,只要分割合理并设置了合适的Cross Fade Time,环境在不同场景间的切换过渡就更加平滑舒适,听感上也几乎感受不到任何缝隙或边界的。
Ambience Layout
如上图所示,场景内每个区域都由两个相同的环境声事件封闭起来,当玩家准备进入新的区域时,首先会再次触碰当前区域的环境声事件,然后再触碰下一区域的环境声事件,这是为了确保当玩家往回走时也能调用正确的事件。以下面某一个环境声事件为例:
Ambience Event Demonstration
所有环境声事件的第一条执行命令,都是Post一个“停止所有环境声”的事件,该事件内容如下:
Stop All AMB Event
这个事件的作用是用来停止所有环境声的播放,以确保当玩家连续多次触碰同一环境声事件时,声音不会被叠加触发,相当于一个将环境声“清零”的效果。因此,每个环境声事件在触发时,都会先将当前播放的所有环境声停止,然后再播放当前场景正确的环境声内容。由于停止和播放行为都设置了较长的Fade Time,因此这个过程完全是无缝衔接的,玩家并不会感受到环境声有任何停顿或间隙。
3D Position Automation的优势
对于一个完整的声景(Soundscape)来说,上面所提到的环境音效,仅仅是声景中的一个Bed元素,或者可以理解为一个“铺底”声音。而想要营造一个真实、沉浸感强的声景,只依靠环境声(Ambience)本身是是远远不够的。我们需要设计更多的声音元素去“装饰”整个空间,比如卧室钟表的滴答声,丛林里的蛐蛐叫,鸟儿从头顶飞过的声音等等。这些看似是点声源的声音元素,也属于环境中(Environment)的一部分。即便在游戏场景内并没有具体的模型(Object)来绑定这些声音,但只要符合场景需求,我们就要想办法将其虚拟出来。比如,在《除夕》中有一个大型的地下墓穴,昏暗潮湿,阴森恐怖。此时,一个相对安静的环境声可以很好地表现其地下墓穴的寂静和压抑感,但是“安静”并不意味着什么声音也没有。在这里,我们设计了一些其他音效作为环境声(Ambience)之外的附加音效(Add-Ons)。比如,腐朽木头发出的嘎吱嘎吱的声音(Wood Creaky Stress Sound),钢筋支架发出的金属拉伸的声音(Metal Stress Sound),亦或是偶尔有些虫子爬过的声音。在这些声音中,有些需要绑定在场景内某些物体上,比如木梁,铁架等等,而有些,则需要通过Wwise虚拟出来。比如,制作人想在游戏内的某个区域,时不时的听到虫子从玩家身边爬过的声音。而该区域十分昏暗,玩家很难真正的看到虫子,游戏内也不会有真正的虫子模型从玩家身边爬过,这就导致场景内没有合适的物体(Object)用来绑定该声音。此时,Wwise在3D Position上Automation功能发挥了重大作用。首先,我们制作一组虫子爬行的声音并创建一个Random Container,然后,将该Container设置成Emitter with Automation,同时手动设定虫子声音的移动路径,并赋予一定的随机值,以保证每次虫子移动时都会是不同的路径。
Path Simulation
最后将该Container设置成一个随机间隔的循环事件并绑定在玩家身上,由相关区域的环境声事件来间接的Post执行。
Loop Randomization
最终,当玩家进入该区域后,便会听到有虫子时不时从身边爬过的声音,且每次虫子的路径都不一样。如果同时选择开启Hold Emitter Position and Orientation, 那么当该声音触发时,玩家的位移同样会和该声音产生相对的位置变化,让玩家觉得虫子是真实存在的。
擅用3D Position Automation功能还可以有效的解决很多问题,比如游戏中一辆空挡停驶的卡车,由于该模型的中心点并不在车头,因此当卡车引擎的音效被绑定在模型上时,引擎声音明显是从卡车的中下部发出来的,这时候,我们就可以通过Emitter with Automation来手动调整发声的位置,将发声点位移至车头部位,而无需经过程序或美术来解决该问题,大大提高了工作效率。
Engine Sound Position
下面的视频中,场景内有一个巨大的雕像,当机关触发时,我们能够听到一些机关在不同方位的解锁声,而这些声音全部都以雕像为中心,虚拟放置的雕像周围的,以模拟墙壁内部,或远处某个并没有实质模型的物体。
Unlock Sound by 3D Position Automation
过场(CutScene)的制作
如果游戏过场动画可以分为实时渲染和预渲染两种方式,那过场音效的制作也可以相应的分为预先制作好的完整音轨,和通过程序实时调用事件这两种方式。前者类似于传统影视作品的制作,按照动画内容制作出一条完整的音频文件即可。在这种情况下,所有混音工作都是预先完成的。声音的内容、比例、声向等无法在游戏中有任何改变。在不考虑游戏容量和内存的前提下,这种方式的缺点,一是如果动画内容和剪辑点反复调整,音频就需要从新修正。二是,在长时间播放时,有可能因为机器性能的不同而出现不可预测的卡顿,从而导致声画不同步。因此让过场音效和游戏中一样,通过引擎实时调用,可以有效地避免上述问题。然而,实时调用过场音效对于混音来说有着更高的挑战性,同时,在面对复杂的过场动画时,把制作好的后期音轨切碎成单个声音事件,有时也降低了制作效率。对于《除夕》这款游戏来说,我们还面临更复杂的问题,由于游戏中的过场动画仍然是以全景的方式实时展示的,玩家可以在动画播放中任意的转头,甚至移动,这就意味着所有声音都需要随着玩家的动作而产生方向和距离上的变化。因此,我们采取了上述两种制作方式混合的办法来制作过场音效。根据每个角色的对话、动作,制作出完整的对白音轨、动效音轨,绑定在人物身上并和动画同时播放,以保证了所有过场声音在游戏内仍然是3D的。同时,动画中某些其他位置琐碎的声音(比如某个关门声,某个物品掉落),或是需要频繁触发的音效(如脚步,枪声等),仍然通过引擎实时调用,这样,即减少了制作上的时间,也降低了混音的难度。经过测试,在Wwise内部配合使用Stream:Zero Latency的功能下,几乎不会在PS4上出现任何卡顿,同时也缓解了较长的预渲染音频文件给内存带来的压力。
评论
yongzhen ma
May 14, 2019 at 11:38 pm
“在游戏内部,我们将环境声直接绑定在玩家的Camera上,并设置其不随玩家头部的旋转而旋转。这样,当玩家转动头部时,就可以感受到相关的环境变化。” 请问这句话中“”不“”随玩家头部旋转而旋转,是指的quad方式的环境声音么,还是bformat声音?
yongzhen ma
May 14, 2019 at 11:38 pm
“在游戏内部,我们将环境声直接绑定在玩家的Camera上,并设置其不随玩家头部的旋转而旋转。这样,当玩家转动头部时,就可以感受到相关的环境变化。” 请问这句话中“”不“”随玩家头部旋转而旋转,是指的quad方式的环境声音么,还是bformat声音?
yongzhen ma
May 14, 2019 at 11:39 pm
“在游戏内部,我们将环境声直接绑定在玩家的Camera上,并设置其不随玩家头部的旋转而旋转。这样,当玩家转动头部时,就可以感受到相关的环境变化。” 请问这句话中“”不“”随玩家头部旋转而旋转,是指的quad方式的环境声音么,还是bformat声音?
yongzhen ma
May 14, 2019 at 11:39 pm
“在游戏内部,我们将环境声直接绑定在玩家的Camera上,并设置其不随玩家头部的旋转而旋转。这样,当玩家转动头部时,就可以感受到相关的环境变化。” 请问这句话中“”不“”随玩家头部旋转而旋转,是指的quad方式的环境声音么,还是bformat声音?
yongzhen ma
May 14, 2019 at 11:39 pm
“在游戏内部,我们将环境声直接绑定在玩家的Camera上,并设置其不随玩家头部的旋转而旋转。这样,当玩家转动头部时,就可以感受到相关的环境变化。” 请问这句话中“”不“”随玩家头部旋转而旋转,是指的quad方式的环境声音么,还是bformat声音?
yongzhen ma
May 14, 2019 at 11:39 pm
“在游戏内部,我们将环境声直接绑定在玩家的Camera上,并设置其不随玩家头部的旋转而旋转。这样,当玩家转动头部时,就可以感受到相关的环境变化。” 请问这句话中“”不“”随玩家头部旋转而旋转,是指的quad方式的环境声音么,还是bformat声音?
yongzhen ma
May 14, 2019 at 11:39 pm
“在游戏内部,我们将环境声直接绑定在玩家的Camera上,并设置其不随玩家头部的旋转而旋转。这样,当玩家转动头部时,就可以感受到相关的环境变化。” 请问这句话中“”不“”随玩家头部旋转而旋转,是指的quad方式的环境声音么,还是bformat声音?
yongzhen ma
May 14, 2019 at 11:39 pm
“在游戏内部,我们将环境声直接绑定在玩家的Camera上,并设置其不随玩家头部的旋转而旋转。这样,当玩家转动头部时,就可以感受到相关的环境变化。” 请问这句话中“”不“”随玩家头部旋转而旋转,是指的quad方式的环境声音么,还是bformat声音?
yongzhen ma
May 14, 2019 at 11:39 pm
“在游戏内部,我们将环境声直接绑定在玩家的Camera上,并设置其不随玩家头部的旋转而旋转。这样,当玩家转动头部时,就可以感受到相关的环境变化。” 请问这句话中“”不“”随玩家头部旋转而旋转,是指的quad方式的环境声音么,还是bformat声音?
yongzhen ma
May 14, 2019 at 11:39 pm
“在游戏内部,我们将环境声直接绑定在玩家的Camera上,并设置其不随玩家头部的旋转而旋转。这样,当玩家转动头部时,就可以感受到相关的环境变化。” 请问这句话中“”不“”随玩家头部旋转而旋转,是指的quad方式的环境声音么,还是bformat声音?
yongzhen ma
May 14, 2019 at 11:39 pm
“在游戏内部,我们将环境声直接绑定在玩家的Camera上,并设置其不随玩家头部的旋转而旋转。这样,当玩家转动头部时,就可以感受到相关的环境变化。” 请问这句话中“”不“”随玩家头部旋转而旋转,是指的quad方式的环境声音么,还是bformat声音?
Eddy Liu
May 19, 2019 at 07:06 pm
是的,是指所有quad和B-format之类的多声道环境声。
Eddy Liu
May 19, 2019 at 07:06 pm
是的,是指所有quad和B-format之类的多声道环境声。
Eddy Liu
May 19, 2019 at 07:06 pm
是的,是指所有quad和B-format之类的多声道环境声。
思南 缪
June 06, 2019 at 05:13 am
任何方式的空间音频或者环绕声都可以做得到。
思南 缪
June 06, 2019 at 05:13 am
任何方式的空间音频或者环绕声都可以做得到。