本文分为4个模块,分别是:
枪声 SFX 的混合
枪声的播放逻辑
子弹飞越声音的播放逻辑
子弹撞击的设计思路(如何制作子弹撞击声音)
模块 1:枪声 SFX 混音
第一人称游戏包含许多不同的声音:各种声音、3D音效、氛围、音乐等。确保游戏中的关键声音能够被玩家清晰地听到是音频设计师的核心任务之一。 对于FPS游戏来说,枪声是(关键声音之一)。
枪声是非常独特的音效:由于爆炸和大声头的存在,很容易触发中间件的总线压缩,也很容易触发中间件的空间混响(很容易被玩家听到)。 游戏的空间不是无限的。 如果枪声素材混合不好,会在游戏中触发过多的总线压缩或限幅,导致声头缺乏力度和冲击力,俗称“糊状”。 ”或“平坦”。
关于发枪声的方法很多老师都提到过,这里不再赘述。 我的经验是,如果想要在音频引擎中有更好的播放效果,最好将枪声导出为one shot素材文件,这样可以更好的控制声音表现,同时也节省性能(当然,对于一些特定的设计,将枪声分割出来)将音效分层并配置它们以便在 Wwise 中播放也是一项必要技能,但这不是本文的重点)。
以下两个步骤可以帮助游戏中的枪声变得更加清晰和响亮。
1.避免音效中频段过度凹陷
对于大多数玩家来说,听音环境并不像专业监听环境那么“全方位”。 这样的“非全方位”听音环境会导致音频设计师的设计思想难以传达。 例如:
我做了音效A。音效A在1khz~2khz有一个凹陷的频段,但由于其他频段都比较饱满,所以我没有太关注凹陷的频段。 在某款手机的扬声器上播放时,由于该扬声器其他频段的表现很弱,但1khz~2khz的表现尤为突出,因此该扬声器上音效A的响度会低于其他频段声音特效。
如果你的枪声恰好和音效A有同样的问题,那么在这款手机上,枪声很容易被其他声音掩盖。
最直接的解决办法就是在音效A中添加1khz~2khz的声音素材,或者使用均衡器来解决。 但最重要的是要意识到问题所在,并使用Fabfilter Q3的频谱分析仪轻松监控问题。
可见,只要音效中存在过度压抑的频点,就没有独特的修复方法。 对于频率凹陷的问题,还可以使用多级饱和器(如Fabfilter Saturn 2或Steinberg QuadraFuzz)来解决,这里不再赘述。
2.控制声级峰值
枪声等大声音的音效通常被用作侧链源来压缩其他音效(或音乐)。 但播放次数增加后,较大的枪声仍然很容易触发中间件的总线压缩和限制,导致枪声变得模糊。 所以我们需要一个工具来控制音头并在不改变整体音色的情况下获得更多的动态余量。
最直接有效的方法就是使用剪刀。 这里推荐的剪辑器是Submission Flatline。
可以看出,削波器可以保证素材声音的纯净度,并在一定程度上控制峰值。 但不同的削波器产生谐波的行为不同,实际使用时需要具体情况具体分析。
模块2:枪声播放逻辑
射击游戏的战斗系统通常围绕着枪支和弹药展开。 如何很好地表达多种多样的枪械是音频设计的重点。
虽然同一款射击游戏可能包含差异巨大的不同武器,但综上所述,你会发现游戏中包含的武器都是基于几种不同类型的现实原型设计的(原型包括但不限于:手枪(Pistol)、突击步枪(AR)、狙击步枪(SR)、霰弹枪(SG)、冲锋枪(SMG)和注射器等)。
其中,手枪、狙击枪、霰弹枪的音效多由One Shot播放。 真正需要点脑力的是连发、全自动、循环的音效。 根据项目的需求,枪声播放逻辑的复杂度上限非常高。
之前有老师讲解过如何在中间件中配置枪声。 他提到,应该将资源渲染成包含多个枪声的长文件,并用音乐曲目播放,适合全自动射击枪械。 这个方法很巧妙,但是因为我参与的项目需要实时改变发射率,所以我不得不另辟蹊径。 这是我的想法:
类型 1:突发模式
对于 AR 或 SMG 的某些突发突发,序列容器可以嵌套在随机容器内:
如上图所示,序列容器中嵌套了几个随机容器(这里的例子是3个),随机容器中配置了枪声的多样本(相邻播放的两个随机容器中的多样本应该是不同的)。
然后,在序列容器的Playlist中,配置播放数量和顺序(武器设置为3连发,则配置数量=3):
然后在序列容器中配置播放模式。 这里,我们希望每个触发事件都会触发一个3镜头序列,所以选择Continental,即每次触发事件时,都会按顺序播放序列容器的播放列表。 然后勾选Transitions,类型选择Triggerrate,根据武器设置的射速设置Duration(武器设置的射击间隔为67ms,所以输入0.067)。
最后,在每个随机容器上挂上音高随机化,并保证每个声音的起始位置都在音符头上(与全自动模式相同),可以预览一下效果:
类型 2:全自动模式
为了满足“射速可以实时变化”的要求,这里提供以下思路:
使用随机容器加载枪声文件(如上图)2d素材,播放模式选择连续,勾选循环。 Transitions下的Duration中填写武器的基本射速(这里是100ms,下图):
然后用2个事件来控制射击的开始/停止(当玩家射击时调用play事件,当玩家停止射击时调用stop事件,参考下图)。 Stop事件需要写Fade Time,防止鬼影。 为了及时停止,建议写入100ms以下的值(这里是50ms):
然后,配置一个rtpc来控制射速(下图):
(如上图)这里rtpc的值为(0, 2),其中1为原始发射率(Y=0); 0为最慢的射击速率(Y=31ms,即射击间隔增加31ms); 2是最慢的发射速率(Y=31ms,即发射间隔增加31ms); 射速快(Y=-19ms,意味着射击间隔减少19ms)。
预览配置后的效果:
类型3:喷气武器
这种类型用于激光枪和火焰喷射器等枪械。 这些武器的共同点是在发射的瞬间会有强烈的音头,而音头过后会有循环式的喷射/照射音效,所以选择了嵌套在这里的混合容器。 主意:
射击文件为射击音头,loop1和loop2为连续喷射/照射音效。 使用多个循环文件的目的是减少玩家听到循环点的概率,因此loop1和loop2是不同长度的最佳音频文件。 然后检查loop1和loop2容器上的循环:
与类型2:全自动模式一样,使用两个事件分别控制武器射击的开始/停止。 效果如下:
模块三:子弹飞越声音的播放逻辑
子弹破风的音效是射击游戏紧张感的来源之一。 这也是描绘战场的一个重要因素。 可以说是沉浸感的必要条件。
子弹破风音效可回调美术特效,保证音画的一致性。 但由于我参与的项目,子弹飞得很慢,所以我最终选择了另一种思路来实现这个功能:
假设图中蓝色的人体模型是第一人称游戏的玩家模型(Camera和Listener应该配置在这个人体模型的头上),绿色是游戏引擎中的球形碰撞器,配置为以Listener为圆心(圆的直径根据游戏需要听到的子弹射程来确定),结果如下:
然后你需要配置一个可以触发游戏中子弹碰撞的Game Object。 当子弹与侦听器周围的球体碰撞时,将调用 Bullet Flyby 事件。 同时子弹的入射角度会反馈角度信息来控制Wwise中的转换容器。
接下来我们来展开一下Wwise的配置方法:
如上图所示,子弹与球体碰撞后触发转换容器。 其下有9个子随机容器,对应9种不同的子弹发生情况。 上图中第一种情况是子弹击中玩家时(需要配置停止事件及时停止声音)。 其余八种情况是子弹不同的入射角度,分别是:
听者左前→左后
听者左前→右后
等等等等
匹配开关的设置如下:
下一步是配置不同方向的音轨。 以left_front_to_left_rear容器为例:
在3D Position中选择Listener with Automation,绘制声音的定位轨迹(如上图):轨迹是从左前到左后。 这个函数还可以画出几条方向相同但角度或时长略有不同的轨迹,然后选择随机化,这里不再赘述。
点击“配置时间轴”,配置该轨迹的时间轴(指的是音效从初始位置移动到结束位置所花费的时间,这个时间需要根据资源的ADSR来设置,经过测试游戏音效制作,优选在150ms~400ms之间)。
最后,返回父变换容器并配置3D衰减曲线:
结果显示:
模块 4:子弹撞击的设计思路(如何制作子弹撞击声音)
如果读者完整读完本文,就会发现你不再关注子弹碰撞音效的播放逻辑,因为逻辑与上面类似。 需要注意的是,上面提到的枪声是2D播放的,而子弹飞越是“伪3D”播放的,但子弹碰撞需要“真3D”播放(读取游戏引擎的定位信息来渲染子弹碰撞音效)定位效果)。
这里主要分享一下子弹碰撞的设计思路。 通常在射击游戏中,与“子弹碰撞”行为相关的音效有四种:
奖励音效:如击中敌人弱点的奖励音效(典型的例子是《守望先锋》中的爆头奖励音效)、击杀敌人的奖励音效等;
子弹撞击音效:这些通常是子弹击中后,由于碰撞和弹道而产生的声音,如跳弹、摩擦、碰撞甚至爆炸等。 可以在子弹游戏对象上配置并在碰撞时触发。 ;
物体击中音效:通常是物体被子弹击中时发出的声音,比如玻璃破碎、射击时溅起的水花等,甚至敌人被击中、死亡的音效等。可以在Game Object中配置或者使用艺术特效回调;
伤害确认音效:与加成音效类似,具有提示效果,但通常程度较小,如击中敌人的躯干、击破敌人的护盾等。
根据游戏设置的不同,以上四种音效的播放逻辑可能会发生变化。 根据我的项目经验,奖励音效都是2D播放,其他三个是3D播放。 为了清楚地表现这些声音效果,需要对它们进行优先级排序并相应地配置动态混音。
假设如下场景:你是玩家A,队友B击中敌人C并成功将其击杀。 因为杀人行为不受A控制,所以不需要为A播放奖励音效游戏音效制作,只播放C的死亡音效和B的子弹命中。 中等音效就够了。 这里C的死亡音效优先级较高,应该没有争议; 但如果玩家A击中敌人C,触发破盾效果,并成功击杀,则播放【A的奖励】。 音效+C的破盾音效+C的死亡音效],我们要做出一个选择:玩家应该优先选择哪种声音?
一般来说,奖励音效>死亡音效>破盾音效。
根据游戏中可能发生的情况的详尽列表,可以粗略地得出一个基本想法:
奖励音效 > 部分子弹击中音效(如爆炸等) > 部分伤害确认音效(如敌人死亡等) ≥ 部分物体击中音效(如击中油桶爆炸) > 大多数伤害确认音效(如击中躯干) = 大 部分子弹击中音效(如跳弹) > 大多数物体击中音效
由于游戏中也可能存在穿透性或AOE子弹,所以这个列表越清晰,就越容易在Wwise级别上干净清晰地处理声音。
基于以上思路,可以建立动态混合。 首先,配置每个级别的总线(下图):
在gunshot_feedback的管道下,放置3个大关卡(t1、t2和t3)。 在这3个级别之下,还有6个级别,分别对应:
t1_damage_bonus=奖励音效
t21_sfx_bullet_explode=一些子弹撞击音效(如爆炸等)
t22_sfx_damage_confirm=一些伤害确认音效(如敌人死亡等)
t23_sfx_prop_explode=某些物体被击中时会产生音效(例如油桶被击中后爆炸)
t31_sfx_bullet_feeback=最多伤害确认音效(如击中躯干)+最多子弹击中音效(如跳弹)
t32_sfx_prop_damage=大多数物体撞击音效
接下来,将相关音效容器发送到相应的总线后,就可以开始设置动态混音了。 首先是避免奖励音效橙光游戏,因为这部分都是2D音效,可以使用HDR和auto-duck。 基于上面的管道结构,我选择了auto-duck(下图):
对 t2 和 t3 进行相同的设置。 由于t1通常具有清脆响亮的音效,因此淡入设置得相对较短(100ms)。 接下来,我们将为 t2 和 t3 创建计量侧链。 首先设置rtpc:
在t21上加载仪表插件,并将读数发送到t22的rtpc:
然后在t22和t23上配置rtpc(如下):
同样的计量侧链方法也适用于t2按t3和t31按t32。 通过此设置,完成以下优先级渐变设置:
奖励音效 > 部分子弹击中音效(如爆炸等) > 部分伤害确认音效(如敌人死亡等) ≥ 部分物体击中音效(如击中油桶爆炸) > 大多数伤害确认音效(如击中躯干) = 大 部分子弹击中音效(如跳弹) > 大多数物体击中音效
当然,声音的优先级不仅需要通过动态混音来控制,还需要在素材层面进行控制,甚至需要使用Wwise的Playback Priority来控制。 通过控制响度差和频响回避,也可以取得不错的效果。 之前有老师分享过侧链低切和侧链特定频段的控制方法。 使用 Wwise 附带的插件,您已经可以制作非常清晰的动态。 混合。
总结:
游戏开发过程中存在很多不可预见的变数。 根据不同项目的玩法重点、操作特点、世界观设定,音频设计的侧重点也不同。
本文根据个人项目经验和对声音设计的理解,探讨FPS游戏中几个音效模块的设计思路。 一家人的话不足以作为教训,而是为了激励其他人。 如果能给读者带来一些帮助,将是我的荣幸。
Wwise 的存在让我的很多想法得以付诸实践。 今后我也会更多地学习音频设计的技术和艺术,希望有更多的机会与各位老师朋友交流。
本文作者
谢伟 游戏音效设计 灵犀互娱
热爱游戏、电影、动画和音乐,Progressive Fusion 和 Djent 爱好者。 致力于“恰到好处、公正无私”的声音设计。