Wwise SDK 2023.1.8
|
ゲームでは、ゲームオブジェクトが、壁や梁など別のオブジェクトによって部分的に遮られたり(オブストラクション)、壁を通過するわずかな音のみがリスナーに聞こえる室内にいることによって完全に遮られたり(オクルージョン)することは珍しくありません。信号の反射を表現するには、AUXセンドを使用します。
Wwiseはオブストラクションやオクルージョンのレベルを計算しません。ゲームが物理計算を実行し、 AK::SoundEngine::SetObjectObstructionAndOcclusion() でサウンドエンジンに結果を送る必要があります。
Wwiseサウンドエンジンは、オブストラクションやオクルージョンのレベルを、Wwiseで定義するボリューム、ローパスフィルタ、ハイパスフィルタの各カーブにマッピングします。これらのカーブは、デフォルトでプロジェクト全体を対象としますが、Attenuation ShareSetを使用してサウンドごとにカスタマイズできます。その後、ゲームプレイ中にオブストラクションやオクルージョンが与える影響に合わせて、これらのカーブがサウンドオブジェクトに適用されます。定義する値は相対的で、すでにゲームオブジェクトに適用されているボリューム値やLPF/HPF値に追加されます。
これらの条件を実装するに当たり、サウンドエンジンは割合()を計算し、オブストラクションとオクルージョンの両方にアサインすることでリアル感を高めます。この割合は、ゲームエンジンから来るリアルタイムのポジション情報に基づき、遮られたエリアを出入りするゲームオブジェクトの動きを反映します。例えば、大型の彫像が多数展示された美術館の中をスパイのキャラクターが移動するとします。オブストラクションの割合は、彫像の後ろを通る時のスパイの位置によって変化する可能性があります。同様にオクルージョンの割合も、完全に閉塞した掃除用具入れからスパイがゆっくりと忍び出る時に変化するかもしれません。
オブストラクションやオクルージョンは、Spatial Audioと組み合わせることも、単独で使用することもできます。Spatial Audioの詳細については Spatial Audio をご覧ください。
オブストラクションやオクルージョンを処理するサウンドエンジンのパイプライン内の流れを、下図に示します:
オブストラクションは、壁や柱などゲーム中の物体が、サウンドソースとリスナー間の空間を部分的に塞ぐ時に起こります。例えばスパイゲームで、柱の陰に隠れているプレイヤーキャラクターにも前方の銃声は聞こえます。
オブストラクションのモデルでは、信号の直接パスにボリュームコントロール、Low Pass Filter(LPF)、High Pass Filter(HPF)、または3つの組み合わせを適用します。AUXセンドによるReflection(反射)は影響を受けません。
オクルージョンは、ゲームのジオメトリにある物体が、サウンドソースとリスナー間の空間を完全に塞ぐ時に起こります。例えばスパイゲームで、プレイヤーキャラクターと発砲された銃の間に壁があるにもかかわらず、隣室の銃声が聞こえるかもしれません。
オクルージョンのモデルでは、信号の直接パスとAUXセンドによる反射の両方に影響を与えるボリュームコントロール、Low Pass Filter(LPF)、High Pass Filter(HPF)、または3つの組み合わせを適用します。オブストラクションとオクルージョンは同時に発生する場合もあります。直接パスはオブストラクション値とオクルージョン値の両方の影響を受けます。一方、反射パスはオクルージョン値の影響のみを受けます。
ゲームエンジンは、ゲームのジオメトリにおけるオブジェクトとリスナーの位置からオブストラクション値やオクルージョン値を決定します。
サウンドデザイナーは、Wwise Authoringでカーブを設定することで、算出されたオブストラクション値やオクルージョン値に対してボリューム、LPF、HPFがどう反応するかを決定できます。またパフォーマンス要件や求めるリアル感に応じて、任意のカーブを有効化または無効化できます。
デフォルトで、すべてのサウンドがWwiseプロジェクトで指定したカーブを使用します。詳細についてはプロジェクトのオブストラクションカーブやオクルージョンカーブの定義をご覧ください。
以下の例では、オブストラクション値が1.0f(100)の場合、ソースオブジェクトで-50 dBのボリューム変化が発生します。オブストラクションとオクルージョンのレベルは常に0.0fと1.0fの間の値とします。
またAttenuation ShareSetを使用し、オブストラクションとオクルージョンをサウンドごとに有効化、無効化、設定できます。詳細についてはApplying attenuationをご覧ください。
ゲームデザイナーは、各リスナーに影響を与えるゲームオブジェクトごとにオブストラクションとオクルージョンを計算し、 AK::SoundEngine::SetObjectObstructionAndOcclusion() コールで、算出した値をサウンドエンジンに渡す必要があります。
1つのゲームオブジェクトに対して複数のリスナーが有効になっている場合、サウンドエンジンは、すべてのリスナーに聞こえる最小LPF値と最大ボリューム値を決定します。その後、それらの値を使用し、結果として生じるオブストラクション/オクルージョンを計算します。