目次

Wwise SDK 2018.1.11
環境におけるオブストラクションとオクルージョン

イントロダクション

環境(Environments)を使用する際に、ゲームオブジェクトが他のオブジェクト(壁や梁など)によってオブストラクション(妨害)を受けたり、隣の部屋の音が壁越しに漏れてくるようなオクルージョンが起きる状況がよくあります。

オクルージョンやオブストラクションの例を下図に示します。

obstruction.gif
オブストラクションの例

オブストラクションのモデルでは、信号の Direct Path だけにボリュームコントロールと/またはローパスフィルター(LPF)を適用します。環境による Reflections には適用しません。

occlusion.gif
オクルージョンの例

オクルージョンのモデルでは、信号の Direct Path と環境による Reflections の両方にボリュームコントロールと/またはローパスフィルターを適用します。

Note: オブストラクションとオクルージョンを同時に発生させるには、ダイレクトパスに対して、オブストラクションとオクルージョンの両方の値を適用します。ただし、リフレクションパスはオクルージョン値の影響の みを受けます。

オブストラクションやオクルージョンを処理するサウンドエンジンのパイプライン内の流れを、下図に示します:

obs_occ_processing.gif
オブストラクション/オクルージョンを処理するパイプライン

オブストラクションとオクルージョンの設定

ゲームエンジンは、オブジェクトやリスナーのゲームにおける物理的な位置情報を使い、オブストラクション値やオクルージョン値を決定します。

サウンドデザイナーは、Wwise Project Settings/Curves タブのカーブにアクセスして、算出されたオブストラクション値やオクルージョン値に対してボリュームや LPF がどのように反応するかを決定することができます。

また、サウンドデザイナーは、ゲームのパフォーマンス要件や描写レベルに応じて、任意のカーブの使用を有効化または無効化することができます。

project_settings_curves.gif
WwiseでObstructionやOcclusionのカーブをカスタム設定

上図のスナップショットで設定したグラフのカーブを使うと、オブストラクション値を1.0f(100)とした時、ソースオブジェクトで-50dBのボリューム変化が発生します。

Obstruction や Occlusion カーブの Wwise でのカスタム設定に関する詳細は、Wwiseオンラインヘルプをご覧ください

ゲームデザイナーは、各ゲームオブジェクトのオブストラクションとオクルージョンを計算し、次のコールを使用して、算出した値をサウンドエンジンに値を渡す必要があります:

Caution: オブストラクションとオクルージョンレベルは常に0.0f と 1.0fの間の値でなければなりません。

1つのゲームオブジェクトに対して複数のリスナーが有効になっている場合、サウンドエンジンは、すべてのリスナーに聞こえる最小LPF値と最大ボリューム値を決定し、続いて、この値で結果として生じるオブストラクション/オクルージョンを計算します。

例:オブストラクションとオクルージョンの設定

#define MAIN_LISTENER 0
// game loop
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 );
}
(...)
}
参照