Wwise SDK 2023.1.9
|
Wwiseで音を再生するには、ゲームに登録され、場合によってポジションをアサインされるオブジェクトに対し、イベントをポストします。その結果、これらのゲームオブジェクトが エミッター になります。シミュレーションされる3D環境 エミッター と リスナー の位置関係を使い、音のパンニングなどの特性を変化させることで、プレイヤーが信憑性のある3D環境で、聴覚的にも視覚的にも没入感を体感できるように補助します。
デザイナーは、Wwiseを使い、プレイヤーのスピーカーセットアップにおいて、マニュアル設定で音をパンニングすることも(Speaker Panning)、ゲームオブジェクトのポジションに基づいてパンニングすることも(3D Spatialization)、できます。さらに、Wwiseで減衰カーブや減衰設定を音にアサインし、その音の特性(ボリュームやフィルタリングなど)を距離や角度に基づいて変化させることもできます。
AK::SoundEngine::SetPosition()
関数を、この情報を必要とする音のゲームオブジェクトごとに、コールします。また、リスナーゲームオブジェクト用にも、これを必ずコールします。ゲームオブジェクトの位置が変わるたびに、位置設定をしなければなりません。
最初のパラメータは、ゲームオブジェクトのIDです。詳細は、統合の詳細 - ゲームオブジェクト を参照してください。
2番目のパラメータは、ゲームオブジェクトの位置と向きを表すベクターを含む AkTransform
構造です。Wwiseサウンドエンジンで、X、Y および Z軸がどのように定義されるかについての詳細は X-Y-Z座標系 を参照してください。
注釈: AK::SoundEngine::SetPosition() 関数を複数回コールし、次に AK::SoundEngine::RenderAudio() 関数をコールした場合に、考慮されるのは最後の値だけです。 |
エミッターのポジションがリスナーのポジションに自動的に付いて回るような動作にするには、ゲームオブジェクトのポジションを、フレームごとに明示的にリスナーのポジションと同じ値に設定する必要があります。また、リスナーゲームオブジェクトに対しイベントをポストすることも可能です。
1つのゲームオブジェクトに対して1つの3Dポジションしか設定できない AK::SoundEngine::SetPosition()
関数を使わずに、1つのゲームオブジェクトに複数の3Dポジションを設定できる AK::SoundEngine::SetMultiplePositions()
関数を使います。
MultiPositionType
は慎重に選択してください。状況や生み出したい効果の種類に合わせてオプションを選択します。
MultiPositionType_MultiSources
を渡すと、複数のボリュームレベルが追加されるので、まるで複数のオブジェクトが同じ音を同時に出しているかのように聞こえます。この関数は様々な状況に有効で、全く同じ音を出すオブジェクトが多数あるようなときに適しています。ただし音同士の距離が近すぎると、この関数で問題が発生する可能性があります。この問題とは、ボリュームを追加することにより、複数のサウンドが正確に同相で再生するため、クリッピングの可能性が増大することです。MultiPositionType_MultiDirections
を渡すと、各スピーカーで再生するボリュームは、その方向における最大ボリュームです。この関数で様々なゲーム状況を演出することができ、例えば壁の開口部やエリアサウンド、または同時に同じ音を発する複数のオブジェクトなどに使えます。ただし、音を出す2つ以上のオブジェクトがゲームプレイヤーの近くに来た時に、音が徐々に大きくなるようにしたい場面では、 MultiPositionType_MultiSources
で音を追加してください。MultiPositionType_SingleSource
は、リストの最初にあるポジションだけを考慮するので、 SetMultiplePositions()
と一緒に使用しないでください。MultiPositionType_MultiDirections
として扱われます。AK::SoundEngine::SetObjectObstructionAndOcclusion
API は、すべてのサウンドポジションに1つのオブストラクションとオクルージョンの値を適用します。代わりに AK::SoundEngine::SetMultipleObstructionAndOcclusion
を使用すると、各サウンドポジションに対して固有のオブストラクション値とオクルージョン値がアサインされます。詳細については オブストラクションやオクルージョンとゲーム定義AUXセンド をご覧ください。
単一のゲームオブジェクトに対して複数のポジションを作成することにより、次のような数々のサウンドエフェクトをシミュレートできます:
MultiPositionType_MultiDirections
オプションを適切なSpread(スプレッド)値および距離ベースのVolume Attenuation(ボリューム減衰)値と組み合わせて使用することで、エリアサウンドをシミュレーションできます。このメソッドを使用する場合、ポジションの数が相加的にボリュームを上げていないことを確認する必要があります。このメソッドを使用してエリアサウンドをシミュレートすることにより、複数の方向から聞こえてくるリアルな減衰特性を持った単一サウンドを生み出すことができます。
次の例では、黒い点がサウンドの最初のポジション、黒い円は減衰と拡散(スプレッド)の最小距離を、ピンクの円は最大半径を表しています:
青い領域は、ゲーム内の湖を表します。湖から発せられるアンビエンスサウンドは、4つのポジションを持つサウンドを使用してシミュレートされています。
リスナーがポジションAにあるとき、湖のサウンドは全方向から聞こえなければなりません。これは、サウンドをすべてのスピーカーで再生するように拡散させる適切な高拡散値を設定することにより実行可能です。
リスナーがポジションBにあるときは、減衰の距離の限界を超えています。これは、最大減衰でリスナーに湖のサウンドが全く聞こえないかかすかにしか聞こえないことを意味します。大きな湖をシミュレートするために複数のポジションを使用しているため、サウンドは常に適切な方向から聞こえます。
リスナーがポジションCにある時、リスナーには広角にあるスピーカー(~180度)から湖の音が聞こえますが、リスナーが湖から一定の距離に離れてあるためサウンドが減衰されます。この状況では、リスナーは減衰半径内にあるため、湖のサウンドが最大レベルまで減衰されることはありません。
このテクニックでは、複数のサウンドポジションを重ね合わせることにより、あらゆる種類のオブジェクトの形状を再現することができます。しかし、新たなポジションが追加されることにより、結果的なボリュームを計算するためにより多くのCPUが要求されることに注意してください。
例えば、ゲーム内のレベルのいずれかで、すべての廊下が壁にある松明で照らされているとします。これらの松明は、すべて同じで、全く同じ音を出します。それぞれの松明に、Playイベントを個別にポストすると(20本あったとして)、消費されるCPUやメモリはかなり増加します。また、サウンドがストリーミングされる場合、潜在的に複数の重複したストリームが存在するためI/Oアクセスが増加します。
このような状況では、 SetMultiplePositions()
の使用がパフォーマンスを大幅に改善します。また、すべてのサウンドを1つの操作で簡単に制御することが可能で、登録する必要のあるゲームオブジェクト数を減らすことができます。
ゲームでこのシナリオを作成するには、 MultiPositionType_MultiSources
またはMultiPositionType_MultiDirections
を使用します。
MultiPositionType_MultiSources
は一般的により正確ですが、ポジション同士が近すぎると問題となる場合があります。複数サウンドをシミュレートするために1つのボイスのみが再生される場合、Wwiseが異なるポジションのボリュームを追加するため、ボリュームが 0 dB を上回る可能性があることに注意してください。MultiPositionType_MultiDirections
のCPU使用率はやや少なめで、単純に最大ボリュームを取り、各スピーカーでこれを再生します。MultiPositionType_MultiDirections
はボリュームを加算せず、クリッピングが発生しないことが保証されるため、より適しているかもしれません。
サウンドの複数ポジションがあるにもかかわらず、サウンドエンジンに再生されるボイスは1つのみです。これは、全てのサウンドが範囲外にある場合、1つのバーチャルボイスのみが処理されることを意味します。
例えば車のスピーカー、つまりエミッターから、ステレオレコーディングされた大音量の音楽が流れているとします。下図のとおり、音楽のステレオソースファイルの、左右のインプットチャンネルを、左右のエミッターから、それぞれアウトプットすることができます。
この場合、 SetMultiplePositions()
オーバーロードと、 AkChannelEmitter
パラメータを合わせて使うと、インプットチャンネルを柔軟にアサインできます。エミッターポジションが、それぞれ左右のインプットチャンネルのどちらを使うべきかを、 AkChannelMask
で指定できます。そうすると、ソースの左右チャンネルでオーディオコンテンツが異なれば、リスナーには、その時点の位置における左右チャンネルの差が聞こえてきます。
注釈: 上図では、車の左と右に位置するリスナーにおいて、左エミッター(赤)と右エミッター(青)を組み合わせた音が、1つのアウトプットチャンネルから聞こえ、紫色で示されています。2つのエミッターを合算した具体的な内訳は、それぞれに設定された減衰距離やカーブで決まります。例えば車の右側から一定の距離だけ離れたリスナーには、左スピーカーより右スピーカーの音がよく聞こえるはずで、それは左スピーカーの減衰の方が大きいからです。右側から充分に離れた場所では、左スピーカーの音がリスナーに全く聞こえなくなることも考えられます。 |
サウンドが部分的にオブストラクションおよび/またはオクルージョンされている時、実際にこれらのサウンドがある位置とは別の方向から聞こえてくるように感じることがあります。このようなケースでは、サウンドを複数の場所に位置づけて希望するエフェクトを作成することができます。
例えば、サウンドのダイレクトパスが建物によってブロックされているような場合があるとします - 次の図を参照してください。オブジェクト Aの実際のポジションを使用する代わりに、次のような2つのポジションを交互に使用するほうがよりリアルなサウンドになります:A' および A''。その際、SetObjectObstructionAndOcclusion()
を使用して、すべての位置に同じオクルージョンおよび妨害パラメータを適用するか、 SetMultipleObstructionAndOcclusion()
を使用して、各サウンドの位置ごとに固有のオクルージョンおよび閉塞値を指定します。
このアプローチは、破壊された環境をシミュレートする場合にも上手く機能し、サウンドが任意の複数ポジションから聞こえて来るようにできます。サウンドを再配置する場合、 MultiPositionType_MultiDirections
を使用することをお勧めします。
Wwiseの音は、左手系の座標システムを想定しています。以下がデフォルト値ですが、重要なのは、リスナーのオリエンテーションフレームに対する、エミッターのポジションとオリエンテーションだけです。
3Dポジションの統合例は、 3D ポジション統合例 を参照してください。