目次

Wwise SDK 2018.1.11
統合の詳細 - 3D ポジション

Wwiseで音を再生するには、ゲームに登録され、場合によってポジションをアサインされるオブジェクトに対し、イベントをポストします。その結果、これらのゲームオブジェクトが エミッター になります。シミュレーションされる3D環境エミッターと リスナー の位置関係を使い、音のパンニングなどの特性を変化させることで、プレイヤーが信憑性のある3D環境で、聴覚的にも視覚的にも没入感を体感できるように補助します。

デザイナーは、Wwiseを使い、プレイヤーのスピーカーセットアップにおいて、マニュアル設定で音をパンニングすることも(Speaker Panning)、ゲームオブジェクトのポジションに基づいてパンニングすることも(3D Spatialization)、できます。さらに、Wwiseで減衰カーブや減衰設定を音にアサインし、その音の特性(ボリュームやフィルタリングなど)を距離や角度に基づいて変化させることもできます。

ゲームオブジェクトの位置設定

AK::SoundEngine::SetPosition() ファンクションを、この情報を必要とする音のゲームオブジェクトごとに、コールします。また、リスナーゲームオブジェクト用にも、これを必ずコールします。ゲームオブジェクトの位置が変わるたびに、位置設定をしなければなりません。

This sound must be routed to the Master Secondary Bus (or any sub bus) plus have a send to an auxiliary bus in the main hierarchy.

最初のパラメータは、ゲームオブジェクトのIDです。詳細は、統合の詳細 - ゲームオブジェクト を参照してください。

2番目のパラメータは、ゲームオブジェクトの位置と向きを表すベクターを含む AkTransform 構造です。Wwiseサウンドエンジンで、X、Y および Z軸がどのように定義されるかについての詳細は X-Y-Z座標系 を参照してください。

Note: AK::SoundEngine::SetPosition() ファンクションを複数回コールし、次に AK::SoundEngine::RenderAudio() ファンクションをコールした場合に、考慮されるのは最後の値だけです。

リスナー位置の追従

エミッターのポジションがリスナーのポジションに自動的に付いて回るような動作にするには、ゲームオブジェクトのポジションを、フレームごとに明示的にリスナーのポジションと同じ値に設定する必要があります。また、リスナーゲームオブジェクトに対しイベントをポストすることも可能です。

単一のゲームオブジェクトに複数ポジションを設定

各ゲームオブジェクトに対して単一の3Dポジションのみを許可する AK::SoundEngine::SetPosition() メソッドを使用する代わりに、単一のゲームオブジェクトに複数の3Dポジションを設定できる AK::SoundEngine::SetMultiplePositions() メソッドを使用することができます。

AkGameObjectID in_GameObjectID, ///< Game object identifier.
const AkSoundPosition * in_pPositions, ///< Array of positions to apply.
AkUInt16 in_NumPositions, ///< Number of positions specified in the provided array.
MultiPositionType in_eMultiPositionType ///< \ref AK::SoundEngine::MultiPositionType
);
);

MultiPositionType は、慎重に選択する必要があります。選択するメソッドは、作成しようとする状況やエフェクトの種類によって異なってきます。

  • MultiPositionType_MultiSources メソッドを使用すると、様々なサウンドボリュームが追加され、同時に同じ音を発する複数のオブジェクトをシミュレートします。このメソッドは、様々な状況において有用で、全く同じ音を発する多数のオブジェクトがある場合に適しています。しかし、このメソッドは、サウンド同士が近すぎる場合に問題を引き起こす場合があります。この問題とは、ボリュームを追加することにより、複数のサウンドが正確に同相で再生するため、クリッピングの可能性が増大することです。
  • MultiPositionType_MultiDirections メソッドを使用すると、それぞれのスピーカーで再生されるボリュームが各方向で最大になります。このメソッドは、壁の開口、エリアサウンドや同時に同じ音を発する複数オブジェクトなど、ゲーム内の様々な状況をシミュレートするために使用できます。しかしながら、ゲームプレイヤーが、サウンドを発する2つ以上のオブジェクトが近接する時にサウンドの音量が上がることを望むような状況では、MultiPositionType_MultiSources メソッドでサウンドを追加する必要があります。
  • MultiPositionType_SingleSource メソッドは、最初にリストされているポジションのみを考慮するため、SetMultiplePositions() と一緒に使用されるべきではありません。

単一のゲームオブジェクトに対して複数のポジションを作成することにより、次のような数々のサウンドエフェクトをシミュレートできます:

- エリアサウンド

MultiPositionType_MultiDirections オプションを、Spread(スプレッド)および距離ベースのVolume Attenuation(ボリューム減衰)の適切な値と組み合わせて使用し、エリアサウンドをシミュレートすることができます。このメソッドを使用する場合、ポジションの数が相加的にボリュームを上げていないことを確認する必要があります。このメソッドを使用してエリアサウンドをシミュレートすることにより、複数の方向から聞こえてくるリアルな減衰特性を持った単一サウンドを生み出すことができます。

次の例では、黒い点がサウンドの最初のポジション、黒い円は減衰と拡散(スプレッド)の最小距離を、ピンクの円は最大半径を表しています:

AreaSound.gif
複数ポジションを持つエリアサウンドのサンプル

青い領域は、ゲーム内の湖を表します。湖から発せられるアンビエンスサウンドは、4つのポジションを持つサウンドを使用してシミュレートされています。

リスナーがポジションAにあるとき、湖のサウンドは全方向から聞こえなければなりません。これは、サウンドをすべてのスピーカーで再生するように拡散させる適切な高拡散値を設定することにより実行可能です。

リスナーがポジションBにある時、最大減衰距離を超えたところに位置します。これは、最大減衰でリスナーに湖のサウンドが全く聞こえないかかすかにしか聞こえないことを意味します。大きな湖をシミュレートするために複数のポジションを使用しているため、サウンドは常に適切な方向から聞こえます。

リスナーがポジションCにある時、リスナーには広角にあるスピーカー(~180度)から湖の音が聞こえますが、リスナーが湖から一定の距離に離れてあるためサウンドが減衰されます。この状況では、リスナーは減衰半径内にあるため、湖のサウンドが最大レベルまで減衰されることはありません。

このテクニックでは、複数のサウンドポジションを重ね合わせることにより、あらゆる種類のオブジェクトの形状を再現することができます。しかし、新たなポジションが追加されることにより、結果的なボリュームを計算するためにより多くのCPUが要求されることに注意してください。

- 同じエリアで同じサウンドを発する複数オブジェクト

例えば、ゲーム内のレベルのいずれかで、すべての廊下が壁にある松明で照らされているとします。これらの松明は、すべて同じで、全く同じ音を出します。各松明ごと(例えば20本)に再生イベントを個別にポストすると、かなり多くのCPUとメモリが消費されます。また、サウンドがストリーミングされる場合、潜在的に複数の重複したストリームが存在するためI/Oアクセスが増加します。

このような状況では、 SetMultiplePositions() の使用がパフォーマンスを大幅に改善します。また、すべてのサウンドを1つの操作で簡単に制御することが可能で、登録する必要のあるゲームオブジェクト数を減らすことができます。

ゲームでこのシナリオを作る場合には、次のいずれの方法を使用します: MultiPositionType_MultiSources または MultiPositionType_MultiDirections

MultiPositionType_MultiSources は、通常より正確ですか、ポジションが近すぎる場合には問題となる場合があります。複数サウンドをシミュレートするために1つのボイスのみが再生される場合、Wwiseが異なるポジションのボリュームを追加するため、ボリュームが 0 dB を上回る可能性があることに注意してください。MultiPositionType_MultiDirections() のCPU使用率はやや少なめで、単に最大ボリュームを受け取って各スピーカーでこれを再生します。 MultiPositionType_MultiDirections() は、ボリュームを追加しないので、クリッピングが発生する可能性がなく、より適切であると言えます。

サウンドの複数ポジションがあるにもかかわらず、サウンドエンジンに再生されるボイスは1つのみです。これは、全てのサウンドが範囲外にある場合、1つのバーチャルボイスのみが処理されることを意味します。

- 開口部からのサウンドをシミュレート(サウンドの再配置)

サウンドが部分的にオブストラクションおよび/またはオクルージョンされている時、実際にこれらのサウンドがある位置とは別の方向から聞こえてくるように感じることがあります。このようなケースでは、サウンドを複数の場所に位置づけて希望するエフェクトを作成することができます。

例えば、サウンドのダイレクトパスが建物によってブロックされているような場合があるとします - 次の図を参照してください。オブジェクト Aの実際のポジションを使用する代わりに、次のような2つのポジションを交互に使用するほうがよりリアルなサウンドになります:A' および A''。その際、SetObjectObstructionAndOcclusion() を使用して、すべての位置に同じオクルージョンおよび妨害パラメータを適用するか、 SetMultipleObstructionAndOcclusion() を使用して、各サウンドの位置ごとに固有のオクルージョンおよび閉塞値を指定します。

Buildings.gif
2つの交互ポジションを使用してサウンドを再配置

このアプローチは、破壊された環境をシミュレートする場合にも上手く機能し、サウンドが任意の複数ポジションから聞こえて来るようにできます。サウンドを再配置する場合、次のメソッドを使用したほうがよいでしょう: MultiPositionType_MultiDirections()

X-Y-Z座標系

Wwiseの音は、左手系の座標システムを想定しています。以下がデフォルト値ですが、重要なのは、リスナーのオリエンテーションフレームに対する、エミッターのポジションとオリエンテーションだけです。

  • X: 右向きのベクター
  • Y: 上向きのベクター
  • Z: 前向きのベクター
PositioningAxis.gif
WwiseサウンドエンジンでのX、Y および Z軸の方向

3Dポジションの統合例は、 3D ポジション統合例 を参照してください。

参照