環境(Environments)を使用する際に、ゲームオブジェクトが他のオブジェクト(壁や梁など)によってオブストラクション(妨害)を受けたり、隣の部屋の音が壁越しに漏れてくるようなオクルージョンが起きる状況がよくあります。
オクルージョンやオブストラクションの例を下図に示します。
オブストラクションの例
オブストラクションのモデルでは、信号の Direct Path だけにボリュームコントロールと/またはローパスフィルター(LPF)を適用します。環境による Reflections には適用しません。
オクルージョンの例
オクルージョンのモデルでは、信号の Direct Path と環境による Reflections の両方にボリュームコントロールと/またはローパスフィルターを適用します。
|
Note: オブストラクションとオクルージョンを同時に発生させるには、ダイレクトパスに対して、オブストラクションとオクルージョンの両方の値を適用します。ただし、リフレクションパスはオクルージョン値の影響の みを受けます。 |
オブストラクションやオクルージョンを処理するサウンドエンジンのパイプライン内の流れを、下図に示します:
オブストラクション/オクルージョンを処理するパイプライン
ゲームエンジンは、オブジェクトやリスナーのゲームにおける物理的な位置情報を使い、オブストラクション値やオクルージョン値を決定します。
サウンドデザイナーは、Wwise Project Settings/Curves タブのカーブにアクセスして、算出されたオブストラクション値やオクルージョン値に対してボリュームや LPF がどのように反応するかを決定することができます。
また、サウンドデザイナーは、ゲームのパフォーマンス要件や描写レベルに応じて、任意のカーブの使用を有効化または無効化することができます。
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 ); } (...) }