版本

menu_open

环境中的声障和声笼

简介

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

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

obstruction.gif

声障的示例

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

occlusion.gif

声笼的示例

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

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

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

obs_occ_processing.gif

声障/声笼处理管线

设置声障和声笼

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

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

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

project_settings_curves.gif

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

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

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

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

Caution.gif
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 );
    }
    
    (...)
}
参见:

此页面对您是否有帮助?

需要技术支持?

仍有疑问?或者问题?需要更多信息?欢迎联系我们,我们可以提供帮助!

查看我们的“技术支持”页面

介绍一下自己的项目。我们会竭力为您提供帮助。

来注册自己的项目,我们帮您快速入门,不带任何附加条件!

开始 Wwise 之旅