大家好,我叫托马斯,是一名来自法国的技术音频设计师,很高兴能在 Audiokinetic 博客上跟大家说说自己开发的 Wwhisper 脚本。
关于 Wwhisper
简单来说,Wwhisper 是个 ReaScript 脚本。它允许 REAPER 使用 Take Marker 和 Automation Lane 向 Wwise 发送命令。
在运行脚本时,REAPER 会进入自定义播放状态。期间会检测标记和自动化点,并根据其名称执行各种操作。藉此,您可以创建并定位游戏对象、发送 Event 或设置 Switch、State 和 RTPC。
开发历程
此前,我跟我的导师文森特•塞尔热 (Vincent Sergent) 就派对游戏的混音技术进行过探讨。这些游戏的音频环境一般都比较乱,尤其是在快节奏和多人分屏模式下。这让我想到,动态混音技术(如 Wwise HDR)应该挺适合处理这种情况。为此,我决定制作一个 Wwise 工程原型。
在我们讨论的时候,我想到了之前看的一些有趣的 YouTube 视频。其中,马克•哈塞尔巴尔赫 (Marc Hasselbalch) 关于使用 Max 为《Hitman》序列重新设计音效的短片就有不少值得借鉴的地方。另外,伯纳德•罗德里格 (Bernard Rodrigue) 和安德鲁•科斯塔 (Andrew Costa) 在 ADC 22 大会上的演讲也很有帮助。
当时还没有可供大家使用的工具,我也不想花几个月时间在 Unreal 中开发框架。于是我就趁安德鲁不忙请教了他几个问题,一番琢磨之后想出了自己的一套解决方案。
如何使用 Wwhisper
Wwhisper 由三部分组成:两个脚本和一个 JSFX 插件。
Wwhisper:负责播放的主脚本。
Wwhisper Assistant:这个脚本不是必需的,不过可以简化流程,能省掉很多麻烦。
kusa_Wwhisper Params:这个 JSFX 插件允许调节 RTPC 并在 3D 空间中对游戏对象进行定位。
安装
除 SWS Extension for REAPER 外,所有组件均可通过ReaPack 访问。
- 在 REAPER 中,可依次转到 Extensions/ReaPack/Import repositories...
- 粘贴 Audiokinetic 存储库的链接:https://github.com/Audiokinetic/Reaper-Tools/raw/main/index.xml
- 以及我的存储库的链接:https://github.com/TFKusa/kusa_reascripts/raw/master/index.xml
- 接下来,可依次转到 Extensions/ReaPack/Browse packages 并安装以下组件:
ReaWwise、kusa_Wwhisper、kusa_Wwhisper Params、kusa_Wwhisper Assistant。
设置
要模拟游戏引擎环境,我们首先得创建听者。事实上,在运行主脚本时,Wwhisper 会在游戏世界的原点 (0,0,0) 创建 Listener 游戏对象。
接下来,我们需要能够自己创建游戏对象。其实,游戏对象就跟 DAW 中的音轨一样。
Wwhisper 会扫描会话中的每一条音轨,并分别为其生成对应的游戏对象。这些游戏对象会沿用音轨的名称。如果多个音轨名称相同,则仅创建一个游戏对象。这样方便高效地管理会话,尤其是在有大量的标记时。
使用 Assistant
通过音轨创建游戏对象
Create new track and item:生成新的音轨,为其添加空媒体项,并插入 JSFX 插件。如果在 REAPER 中导入了视频,可将其选中来确保新建媒体项的长度与视频的时长保持一致。或者,也可以定义一个时间范围。
Sync with Wwise
单击 Sync with Wwise 按钮可从当前 Wwise 工程导入所有 Event、RTPC、Switch 和 State 引用。这些元素将显示在与之对应的字段中以便于访问。
使用 Take Marker 创建 Event、State 和 Switch
选择目标媒体项,将播放光标置于要添加标记的位置,选择标记颜色,指定触发类型,选择对应的 Wwise 对象,单击 Create take marker。
管理 RTPC
Automation Lane:在 Assistant 窗口中,将 Type 设为 RTPC,输入 RTPC 名称(或从同步列表中选择),定义 Min Value 和 Max Value(若已同步则自动填充),选择目标音轨/游戏对象,单击 Create RTPC automation lane。
JSFX RTPC 参数:这些参数的取值范围为 0 ~ 100,代表实际 RTPC 范围的百分比。所以才要输入 Min Value 和 Max Value,为的是方便脚本将百分比转换为实际值。
听者与空间的相对运动
在典型的游戏场景中,是听者在 3D 空间中移动。不过,Wwhisper 主要用于处理试玩视频。在这当中,玩家通常处在画面的中央。所以在我们的例子中,是空间围绕听者移动。
就跟 RTPC 一样,我们可以通过 Automation Lane 和 JSFX 插件管理定位。
Front/Back 和 Up/Down:这些轴使用绝对值,定位起来会更便捷。
Left/Right:该轴与 Front/Back 相对。在将 Left/Right 设为 -100 时,会始终将对象硬摆位到左侧;在设为 100 时,会硬摆位到右侧。
这种设置对 2D 布局来说没什么问题。不过,在 3D 空间中准确定位对象会比较难。我目前同时在处理几个别的项目,准备后面做个 2D 摆位 VST 插件,以便准确定位游戏对象的空间位置。
播放
要播放序列,直接运行 Wwhisper 主脚本即可。在播放光标经过标记或自动化曲线时,会触发特殊播放状态并向 Wwise 发送指令。
其他命令
通常,Wwhisper 可自动管理大部分任务。不过,还有别的一些命令可供使用:
Register Game Object
Unregister Game Object
Unregister All Game Objects
这些命令可执行更加高级的管理操作。不过,一般情况下很少会用到。
Wwhisper Assistant 中的实用工具
Wwhisper Assistant 附带有一套实用工具。只需在 Assistant 窗口右上角勾选 Utilities 复选框就可访问并使用这些工具。
其中一项重要功能是 Generate Project from Profiler TXT。这项功能是用户 undertheradar84 在 REAPER 论坛的帖子中要求提供的。它支持导入 TXT 格式的 Wwise Capture Log,并可自动生成与文件中记录的 Event 序列一样的 Reaper/Wwhisper 设置。下面我们就来说说如何使用它。
准备 Wwise Capture Log
依次转到 Wwise > Project > Profiler Settings。
确保选中 API Calls 和 Game Syncs。这样可在 Capture Log 中包含必要的信息。
配置 Capture Log 列
右键单击 Capture Log 列,并选择 Configure Columns。
确保选中所有要包含在导入操作中的相关元素。
将 Wwise 连接到所选引擎并保存日志
单击 Save 图标并将日志保存为 txt 文件。
在准备好 Capture Log 后,便可使用 Utilities 分区中的 Generate Project from Profiler TXT 功能。
该脚本会对日志进行处理并创建对应的 Reaper/Wwhisper 配置。
完成设置
在生成工程后,将“听者”游戏对象(通常为 Main Camera)重命名为 Listener。
各位可在我的 YouTube 频道上试听我使用 Wwhisper 重新设计的音效:
Super Smash Bros. Ultimate & Lies of P
感谢各位阅读这篇博文。如果有任何疑问,不妨在 REAPER 论坛的这篇帖子里给我留言。希望对您有所帮助。最后,感谢 Audiokinetic 给我这次分享的机会!
评论