バージョン
Wwise は、2D および 3Dサウンドの両方をサポートしています。3Dサウンドは、3D環境をシミュレートし、5.1サラウンドスピーカーセットアップのフルな活用を可能にします。また、リスナー として知られるプレイヤーの位置は、聴覚的・視覚的体験によりプレイヤーをリアルな3D環境に没入させるのに役立ちます。
3Dサウンドのポジショニング情報は2つのカテゴリーに分かれています:
ゲーム定義3Dポジショニングでは、プロパゲーションと減衰プロパティが、ゲーム内のリスナーの位置と向きとの関係で定義されます。一方、ユーザー定義3Dポジショニングでは、サウンドがゲーム内のリスナーの位置や向きには関係なくスピーカー周囲に事前定義されたパスをたどり、「事前定義」のオーディオ体験が作成されます。
|
Note: このセクションでは、ゲームオブジェクトレベルでのポジショニングについて説明しています。リスナーのポジショニングに関する情報は、リスナーの位置情報を設定 を参照してください。 |
ゲームオブジェクトの実際の位置を設定するには、ゲーム定義3Dポジショニングを必要とするゲームオブジェクト全てに対して、 AK::SoundEngine::SetPosition()
関数が呼び出される必要があります。ゲームオブジェクトの位置が変わるたびに、位置設定をしなければなりません。
ゲームオブジェクトの位置は、 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番目のパラメータは、ゲームオブジェクトの位置と向きを表すベクターを含む AkSoundPosition 構造です。Wwiseサウンドエンジンで、X、Y および Z軸がどのように定義されるかについての詳細は X-Y-Z座標系 を参照してください。
|
Note: それぞれの3Dポジションは、最大で1フレームごとに1度適用できます。つまり、 AK::SoundEngine::SetPosition() 関数を複数回呼び出しても、その後に AK::SoundEngine::RenderAudio() 関数を呼び出すと、最後の値のみが考慮されます。 |
|
Tip: Wwiseで、2D または 3Dのユーザー定義サウンドとして設定されているサウンドは、3Dポジションを必要としません。もしも、3Dポジションが設定されても、サウンドはこれを無視します。ゲーム定義の3Dサウンドを使用することのないゲームオブジェクトへの無用な3Dポジションの設定を避け、貴重なCPUサイクルを節約しましょう。 |
ゲームオブジェクトの位置が自動的にリスナーの位置に収まるような動作を模倣するには、明示してゲームのオブジェクトの位置に、リスナー位置と同じ値をすべてのフレームで設定する、もしくは次のヒントを利用します。
|
Tip: ユーザーを追うことをシュミレートする他の方法は、2D もしくは 3D ユーザー定義ポジショニングを使用します。これはWwiseユーザーが定義するため、すべての場合に適用されませんが、詳細についてはWwiseの説明書を参照してください。また、RTPCを使用して2Dと3Dの配置を簡単に切り替えることもできます。 |
各ゲームオブジェクトに対して単一の3Dポジションのみを許可する AK::SoundEngine::SetPosition()
メソッドを使用する代わりに、単一のゲームオブジェクトに複数の3Dポジションを設定できる AK::SoundEngine::SetMultiplePositions()
メソッドを使用することができます。
AKRESULT 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 ); );
|
Note: 各ゲームオブジェクトは、少なくとも1つの3Dポジションを持つ必要があります。 |
MultiPositionType
は、慎重に選択する必要があります。選択するメソッドは、作成しようとする状況やエフェクトの種類によって異なってきます。
MultiPositionType_MultiSources
メソッドを使用すると、様々なサウンドボリュームが追加され、同時に同じ音を発する複数のオブジェクトをシミュレートします。このメソッドは、様々な状況において有用で、全く同じ音を発する多数のオブジェクトがある場合に適しています。しかし、このメソッドは、サウンド同士が近すぎる場合に問題を引き起こす場合があります。この問題とは、ボリュームを追加することにより、複数のサウンドが正確に同相で再生するため、クリッピングの可能性が増大することです。MultiPositionType_MultiDirections
メソッドを使用すると、それぞれのスピーカーで再生されるボリュームが各方向で最大になります。ボリュームは追加されないので、このメソッドで使用される計算はCPU使用率の点で効率的です。このメソッドは、壁の開口、エリアサウンドや同時に同じ音を発する複数オブジェクトなど、ゲーム内の様々な状況をシミュレートするために使用できます。しかしながら、ゲームプレイヤーが、サウンドを発する2つ以上のオブジェクトが近接する時にサウンドの音量が上がることを望むような状況では、MultiPositionType_MultiSources メソッドでサウンドを追加する必要があります。MultiPositionType_SingleSource
メソッドは、最初にリストされているポジションのみを考慮するため、SetMultiplePositions() と一緒に使用されるべきではありません。単一のゲームオブジェクトに対して複数のポジションを作成することにより、次のような数々のサウンドエフェクトをシミュレートできます:
- エリアサウンド
MultiPositionType_MultiDirections
オプションを、Spread(スプレッド)および距離ベースのVolume Attenuation(ボリューム減衰)の適切な値と組み合わせて使用し、エリアサウンドをシミュレートすることができます。このメソッドを使用する場合、ポジションの数が相加的にボリュームを上げていないことを確認する必要があります。このメソッドを使用してエリアサウンドをシミュレートすることにより、複数の方向から聞こえてくるリアルな減衰特性を持った単一サウンドを生み出すことができます。
次の例では、黒い点がサウンドの最初のポジション、黒い円は減衰と拡散(スプレッド)の最小距離を、ピンクの円は最大半径を表しています:
複数ポジションを持つエリアサウンドのサンプル
青い領域は、ゲーム内の湖を表します。湖から発せられるアンビエンスサウンドは、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()
を使用して、各サウンドの位置ごとに固有のオクルージョンおよび閉塞値を指定します。
2つの交互ポジションを使用してサウンドを再配置
このアプローチは、破壊された環境をシミュレートする場合にも上手く機能し、サウンドが任意の複数ポジションから聞こえて来るようにできます。サウンドを再配置する場合、次のメソッドを使用したほうがよいでしょう: MultiPositionType_MultiDirections()
。
Wwiseサウンドエンジンでは、X、Y および Z軸は次のように定義されています:
WwiseサウンドエンジンでのX、Y および Z軸の方向
|
Caution: 正しいX-Y-Z規則を使用して、ポジションと方向ベクターを渡すようにしてください。お使いのゲームエンジンが異なる座標系を使用する場合、座標を、 AK::SoundEngine::SetPosition() などのメソッドに渡す前に変換する必要があります。 |
3Dポジションの統合例は、 3D ポジション統合例 を参照してください。