很长时间以来,由于粒子合成器在声音设计上的广泛应用,我们一直都想为 Wwise 开发一款通用的粒子合成器插件。这样就可以利用它生成各种各样的声音,来为游戏设计提供丰富灵活的支持。
我记得几年前曾在 Native Instruments 的 Reaktor 中为自己制作过一个类似粒子合成器的patch。但是用了几次之后发现跟预期还是有些差距,于是就添加了一些新的功能。随后又继续添加了更多的功能。后来越加越多。最后做成了这个样子…
因为通过粒子合成可以生成各种各样的声音,所以我就想系统地设计一个粒子合成器应该会很方便,没想到各种功能堆在一起,弄成了这么个庞然大物。
专一性和灵活性
一般来说,只专注于做好一件事情的音频插件更容易取得成功。比如,为了逼真地模拟燃烧式发动机的声音,Crankcase Rev 结合运用了粒子合成和复杂精细的信号处理技术。它在用户体验和控件选择方面非常明确,就是为了方便用户创建这一种类型的声音。显然,我们并不想再设计一款专门用来生成燃烧式发动机声音的插件,因为 Rev 已经做得非常好了。
虽然有悖于前面提到的专一性法则,但我们还是想开发一款可以满足大部分粒子合成需求的通用插件,而不是只专注于实现某一项特定的应用功能。同时,希望广大用户能够通过灵活的参数调节和调制来使其满足自身设计需要。为此,我们首先问了自己一个简单直接的问题:大家在游戏音频设计中到底想通过粒子合成实现什么?
用户调查
在设计粒子合成器的过程中,我们明显感觉到要想做到兼容并包而非专精一样,有必要广泛征求 Wwise 游戏音频社区用户的意见。
于是,我们提出了这样的问题:大家在工作中想用传统意义上的粒子合成器做什么?收到的回复大致如下:
- 汽车发动机轰鸣声、富有质感的环境声、隆隆的滚动声、雨声、火声
- 爆炸声、碎裂声、非循环声音、崩塌声
- 不断变换的氛围背景声、科幻音效、半自然声音
- 离奇古怪的非自然声音
- 以波表合成方式制作音乐
- 整合多样变化的运行时/互动音效。比如,在砍掉怪物身上的鳞片时,让怪物被击中的声音更有颗粒感
- 生成一些酷炫的粒子化声音,然后重新导入到 DAW 中进行编辑
还有很多人说自己也不知道,甚至有人说想不到用来干嘛。
这些用例肯定会牵涉到其他方面的一些问题。所以,对游戏音频社区用户的调查并没有止步于收集用例。
- 在开始设计之前,我们就跟音频设计师进行了书面交流,收集了大量有关粒子合成的建议。
- 我们在公司内部展开了有针对性的访谈。
- 我们设计了简单的原型并在游戏开发者大会 (GDC) 上做了展示,以期找到有兴趣试用的用户。
- 我们制作了第二个原型并发布给用户试用,然后进行了后续访谈,来了解他们都有哪些意见和建议。
- 我们发布了 Alpha 版本,藉此获取更多反馈。
这是一个漫长的学习、测试和验证过程。在此期间,我们学到了很多宝贵的知识。用户回答的问题和访谈期间的话题主要围绕以下内容展开:
- 用例
- 工作流程和用户痛点
- 有关功能界面的具体问题
- 缺失的功能
不过,实际交流内容往往远不止这些。
我当然可以跟各位深入地探讨这些访谈涉及的大量细节,不过为了方便各位快速了解这是一个怎样的流程,还是先举个简单的例子吧(若想参与探讨日后开发,请点击此处注册)。
示例:Grain Window
其中有家用户想为汽车发动机设计音效,然后跟我们解释说希望在波形顶部显示可供随机选取粒子的窗口。而且,这些粒子必须跟原始文件中的轰鸣声保持一致。同时,窗口本身还要随着与游戏驱动的 RPM(转速) 关联的 RTPC 移动位置。
对于这种应用来说,专门设置一项 Grain Window(粒子窗口)功能方便选择粒子开始位置,然而它却不适用于其他应用,如时序效果器和波表合成器。通过在 Position 光标上应用随机调制器可以实现同样的行为,但是这样很难形象地展示如何将调制转换成所述窗口,而且也没法将粒子开始位置与轰鸣声保持一致。
Alpha
于是,我们决定不专门添加 Grain Window 功能。因为虽然它对此汽车发动机用例来说最为合适,但却不具备我们想要的通用性。在围绕这一理念进行深入探讨之后,我们最终设计了 Snap to Markers 和瞬态自动检测以及 Grain Visualization 功能(叠加于波形视图之上)。我们认为这些功能将可满足更多的用例需求。如需了解如何结合运用这些功能和 Position 调制来模拟 Grain Window,请点击此处。
按照如下方式来设置合成器,以此模拟 Grain Window:
-
将 Position 属性指派给 RTPC,然后绑定到相应的游戏参数(如 RPM)。此 RTPC 用来定义宏窗口的左侧边界。
-
将 Position 属性指派给 Random+ 调制器,并根据需要设置 调制量(Amount)。该 Amount 用来定义宏窗口的宽度(表示为文件时长的百分比)。
-
若要使窗口的宽度随 RPM 变化,则使用 RTPC 将其绑定到 RPM。
您可以通过添加标记并运用 Snap to markers 选项,来将粒子开始位置强制设在原始声音中的具体位置(比如发动机每次发出轰鸣时)。同时,借助瞬态自动检测来节省时间并提高效率。
归根结底,是用户在开发过程中不断提供的宝贵意见帮助我们成功打造了这款 SoundSeed Grain 插件。比如,正因如此我们才得以把如下功能做得更加精巧:
- Envelope Visualizer(窗口中间)– 假如没有它,用户会很难理解粒子时长、发射间隔和包络形状之间的相互作用。
- 滑杆反馈(各个滑杆下方的实时监控条)– 在进行调制时非常有用。
对于其他插件,我们以后肯定也会采取这种以用户为导向的方法。所以,如果您想参与探讨日后开发,欢迎点击此处注册!
致谢
在此,我代表 Audiokinetic 衷心地感谢参与设计流程的每一个人以及积极地为我们提供反馈意见的广大游戏音频社区用户。尤其是 Tom Bible、Nicholas Bonardi、Mike Caviezel 和 Andrew Quinn,感谢你们在设计方向上的精心指导和大力相助。
离开之前不妨看下 SoundSeed Grain 简介视频!
(国内视频观赏通道)
评论