目录

Wwise SDK 2018.1.11
环境中的声障和声笼

简介

在使用环境时,经常发生的一种情况是,一个游戏对象被另一个对象遮挡(例如墙壁或横梁),或者封闭在室内,听者只可听到从墙壁泄漏出来的一点声音。

声笼(Occlusion)和声障(Obstruction)的示例如下图所示。

obstruction.gif
声障的示例

通过使用音量控制或只作用于信号直通路径的低通滤波器(LPF),即可对声障建模。环境反射不受影响。

occlusion.gif
声笼的示例

通过使用音量控制或同时作用于信号直通路径和环境反射的 LPF,即可对声笼建模。

Note: 注意,声障和声笼可同时发生,并可使用受到声障和声笼值影响的直通路径来建模。然而,反射路径只受声笼值的影响。

以下是声音引擎中声障/声笼处理管线的示意图:

obs_occ_processing.gif
声障/声笼处理管线

设置声障和声笼

游戏引擎负责确定声障值和声笼值,它使用对象和听者在游戏几何图形中的位置来确定。

声音设计师可访问 Wwise Project Settings/Curves 选项卡中的曲线来确定音量和 LPE 如何对声障和声笼计算值做出反应。

声音设计师也可启用或禁用任何曲线,以充分满足性能和逼真度需求。

project_settings_curves.gif
在 Wwise 中自定义声障和声笼曲线

通过使用此快照的曲线,设置 1.0f(100)的声障值将在源对象上产生 -50 dB 的音量变动。

有关使用 Wwise 自定义声障和声笼曲线的详情,请参阅 Wwise 联机帮助。

游戏程序员必须计算影响每个听者的每个游戏对象的声障和声笼,并使用以下调用把计算值传递给声音引擎:

Caution: 声障和声笼级别必须永远位于 0.0f 和 1.0f 之间。

当为游戏对象启用多个听者时,声音引擎会确定所有听者应能够听到的最小 LPF 值和最大音量值;然后使用该值计算声障/声笼结果。

示例:设置声障和声笼

#define MAIN_LISTENER 0
// 游戏循环
while( TRUE )
{
(...)
for( int iGameObject = 0; iGameObject < nbObjects; iGameObject++ )
{
AkReal32 fCalculatedObs, fCalculatedOcc;
pGeometryModule->GetObsAndOccForGameObject( iGameObject, MAIN_LISTENER, &fCalculatedObs, &fCalculatedOcc );
AK::SoundEngine::SetObjectObstructionAndOcclusion( iGameObject, MAIN_LISTENER, fCalculatedObs, fCalculatedOcc );
}
(...)
}
参见