|
Wwise SDK 2024.1.9
|
Wwise 的 Game-defined Auxiliary Sends(游戏定义的辅助发送)是根据游戏中声音的位置将若干个环境效果器作用于声音的便捷方式。在对象或者其可以继承的上层对象中必须已经设置了选项“Use game-defined auxiliary sends”。
通过使用 Wwise,声音设计师可以定义多个环境来用于游戏中。例如,这些环境可以是:
每个环境可代表有不同参数组合的环境混响效果器。然后每个环境将由 Wwise 工程中的 Auxiliary Bus(辅助总线)来表示。
开始时,每个游戏对象应该处于没有定义任何环境的位置上。 当声音不在环境中(未连通到任何辅助总线)时会正常播放。换句话说,声音不带任何环境效果器。
处于同一辅助总线上的所有声音先混合在一起,然后再施加效果器。 各个游戏对象可以设置不同的音量。
![]() | 备注: API 中采用的值域是 0 到 1,代表最高音量的百分比。0 代表 0,1 代表 100。当多个地方应用音量时,各结果值会相乘。例如,如果 GAME_OBJECT_ID_HUMAN 游戏对象在辅助总线“飞机库”中是 50,而辅助总线“飞机库”衰减了 90,那么此游戏对象发出的声音将以 45(0.50f * 0.90)进入它的效果器。 |
使用以下函数处理游戏定义的辅助发送:
动态辅助总线通路: 动态发送到辅助总线。
Wwise 声音引擎中总线的每个实例都关联了游戏对象。当我们创建辅助发送时,我们就在声音引擎中创建了一条听者与发声体间的关联,辅助发送以一条辅助总线作为目标。发声体和听者游戏对象的位置用在源目标音频节点中,以便空间化声音(如果声音在设计工具中设置为 3D)。当定义辅助发送时,通常最好让目标辅助总线使用与源音频节点的直接输出上指派的相同听者——也就是已通过 SetListeners() or SetDefaultListeners() 指派的听者。方便起见,为了避免需要花力气记住哪个游戏对象已经关联到了哪个听者,我们只要将 AK_INVALID_GAME_OBJECT 作为 listenerID 传递即可。
![]() | 备注: 在 AkAuxSendValue 结构中填写 listenerID 字段是很重要的。如果没有将其初始化,会导致未定义的行为。 |
SDK 为您提供两种访问 SoundBank 内项目的方式:一是使用字符串,二是使用 ID。Using strings makes code more readable and is suitable during development, or when working in an environment that normally uses strings. 使用 ID 后,Wwise 就无需在运行时散列名称了。
要使用 ID的话,生成 SoundBank 时必须选中 Wwise 中 Generate SoundBanks 对话框上的“Generate header file”选项。名为 Wwise_IDs.h 的定义文件中包含所有必要的 ID。每次生成 SoundBank 时都会更新此文件。
有关在 Wwise 中生成 SoundBank 的详情,请参阅 Wwise 帮助。
![]() | 注意: When working with IDs, it is important to keep the .h file up-to-date when new banks are generated. 否则可能发生 ID 不匹配或编译错误。 |
以下是 Wwise 生成的一个非常简单的头文件示例:
必须校正代码片段。
除上述内容外,Wwise 生成的头文件通常还包含更多内容。这是因为每个事件、状态、切换开关、总线等都会有条目。
另外还可以综合使用这两种方法。例如,您可以主要使用字符串,但可以运用 ID 来访问环境。
以下方法在运行时把 unicode 字符串转换成 ID。您可以在字符串表中根据环境进行一次性查询,然后使用 ID。
动态驱动辅助总线通路通过使用 AK::SoundEngine::SetGameObjectAuxSendValues() 函数来完成。 此函数的第一个参数是游戏定义的辅助总线通路所应用到的游戏对象 ID。The second and third parameters represent an array of structure of type AkAuxSendValue and the number of Auxiliary Busses to send to. If the sound does not have the option "Use game-defined auxiliary sends" enabled, then no environments will be applied to this game object. For every Auxiliary Bus to which a game object is sent, a control value must be set representing the percentage application of the environment. The control value is a value ranging from 0.0f to 1.0f, where 0 represents no send and 1 represents 100% send.
![]() | 备注: 在更改对象的辅助发送时,声音引擎会在多个环境间插值以避免出现不连续。如此一来,便可在某一给定帧将对象连接至更多 Auxiliary Bus。 |
将飞机库辅助总线设为 100。
通过使用控制值,可以让声音流畅地从一个环境切换到另一个环境。
![]() | 技巧: 辅助发送的总值不必等于 100。For instance, to set only a light environmental effect on a game object, you could set the game object to be 25% in one environment. |
![]() | 注意: Wwise 声音引擎不限制一次可发送到的辅助总线的数量。That means that it is possible to request that many environmental FX be processed at the same time. Some environmental FX can take up a lot of the CPU and having too many running at the same time can cause a performance drop. Therefore, it is your responsibility to prevent situations in which, for example, 64 sounds play at the same time, each with their own environment. |
在以下示例中,我们注册了一个游戏对象,它是用来在 3D 空间中模拟声学门户的。该游戏对象代表一个其中既没有声音也没有主听者存在的环境。 将 listenerID 字段设置为有效的游戏对象 ID,这样做会以类似 SetListeners() 的方式创建一个发声体-听者关联,但是它是从音频节点应用于辅助输出,而 SetListeners() 是应用于直接输出。发送音频的音频节点是通过在设计工具中设置“Use game-defined auxiliary sends”标志来控制的。设置 listenerID 会创建出游戏对象 listenerID 上 auxBusID 指定的总线实例,为了可视化该过程,请查看 Wwise 设计工具高级性能分析器(Advanced Profiler)中的声部图。
在该示例中,AK::AUX_BUSSES::TUNNEL_ENV_PORTAL 辅助总线应在 Wwise 设计工具中设置为“Enable Positioning(启用定位)”并且定位类型设置为 3D,以便让它在 3D 模拟中依然能够发出声音。
As well as changing the Auxiliary Busses to which a game object belongs, you can also reduce its dry component by using the AK::SoundEngine::SetGameObjectOutputBusVolume() function. 此函数可用来模拟声障。 每个游戏对象初始都有一个设为 100% (1.0f) 的干声级别(除非声音对象属性中另有明确指定)。
![]() | 技巧: 模拟一个由于听者距离太远而只能听到混响的声音的方法是,将干声级别设为 0。 |
辅助总线输出端音量与其它所有总线音量一样,都可使用设计工具中的 Volumes 滑块、State、RTPC 等来驱动。