版本
在 Wwise 中创建层级结构的方式非常灵活,在项目伊始就制定统一的策略可以节省后期的时间和精力。当然,处理音频工程的方法多种多样;了解相关概念可让游戏获得最佳效果。
在构建层级结构之前,要构思组织对象的最佳方式。既要节省创作时间,又要更好地管理工程内存占用。关于如何对工程中的不同对象进行有效分组,以下是一些建议,请您根据实际需求选用。
Actor-Mixer(角色混音器)是节省内存和 CPU 的利器,因为其部分属性(例如定位和 RTPC)可以被所有子对象共享。所以组织对象的时候,可以考虑把一组对象置于 Actor-Mixer 下,这样可以:
共享属性设置,方便统一处理。
共享 Overrides (不沿用)属性,避免为多个子对象单独勾选 Override 和指定新值。
注意 | |
---|---|
在 Actor-Mixer 层级使用效果器可以提高工作效率,但并不节省 CPU,因为所每个子对象都会启用该效果器。实时为各个对象处理效果可能会占用大量 CPU。 |
要优化内存占用,可以考虑把一组对象置于 Actor-Mixer 下,方便共享以下属性:
定位
RTPC(实时参数控制)
States(状态)
随机化器
假设有一个 Actor-Mixer,其中含有 10 个声音,您希望将它们的 positioining(空间定位)设置为 3D。可以为这些声音逐个勾选 Override Parent(不沿用父选项),并设置为 3D。不过,您可以直接将 Actor-Mixer 的 Positioning 属性设为 3D。这样能节省 10 倍以上的运行时内存。即使只希望对部分声音进行声像摆位,将 Actor-Mixer 的定位属性设为 3D Emitter(3D 发声体)时仍可达到优化内存的效果。这时可为子对象忽略 Actor-Mixer 父对象的属性,并只将声像摆位应用于特定声音。因为,经过声像摆位的声音并不需要额外占用内存。
虽然 Actor-Mixer 通常是最好的选择,但在某些情况下,也可以选择采用 container(容器)属性,优化内存占用。例如,如果只需设置某个 container 内对象的空间定位,比如 Random Container(随机容器)中的脚步声,可以为该 container 设置定位属性来减少内存占用量,而无需设置父级 Actor-Mixer。但如果您希望结构中的所有对象共享定位属性,则应在 Actor-Mixer 上设置。
下面介绍如何运用刚刚讨论的概念,有效地在 Actor-Mixer 中为对象分组。本例中,您会处理游戏的对话素材,其中一些是角色语音,另一些是对讲机语音。可以将整组素材放在名为 Dialogue(对话)的 Actor-Mixer 中,因为您希望所有对话素材共享音量等属性。
为 Actor-Mixer 设置好音量后,接下要为对讲机语音添加 Parametric EQ(参数均衡器)效果器。您可以逐个编辑对讲机语音对象,为每一个都 override 父级 Actor-Mixer 设置,再逐个添加效果器。但还有更高效的办法:将所有对讲机语音文件放到 container 中,然后为 container 勾选 override 父级设置并添加效果器。
当您连接到游戏或游戏模拟器时,可以在 Wwise 中实时修改以下相对属性的值:
Volume
Pitch(音高)
Low-Pass Filter(低通滤波器)
Center %
RTPC 值
State 和 Switch 变换
Triggers
Attenuation 控件
部分音频和源效果器插件属性
备注 | |
---|---|
一般情况下,任何可映射至 Game Parameter 的属性都可在游戏中实时修改。 |
为了能够做到这一点,您需要加载您想在 Transport Control 或 Soundcaster 中修改其属性的对象。如果未加载对象,则更改将不会生效,因为声音引擎中未注册该对象。对于无法加载到 Transport Control 中的 Actor-Mixer,可通过加载 Actor-Mixer 的子对象在声音引擎中注册其父对象。在注册对象后,对象将在您连接到游戏时保持注册状态。
备注 | |
---|---|
记住,如果您将对象固定在 Transport Control 中,则其它对象要到您取消固定第一个对象后才可加载。然而,如果您已将对象加载到 Soundcaster 中,则此对象将在声音引擎中注册。 |