バージョン

menu_open

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

イントロダクション

Wwise は、2D および 3Dサウンドの両方をサポートしています。3Dサウンドは、3D環境をシミュレートし、5.1サラウンドスピーカーセットアップのフルな活用を可能にします。また、リスナー として知られるプレイヤーの位置は、聴覚的・視覚的体験によりプレイヤーをリアルな3D環境に没入させるのに役立ちます。

3Dサウンドのポジショニング情報は2つのカテゴリーに分かれています:

  • ゲーム定義 — オブジェクトの再生中に、そのプロパゲーション(伝播)と減衰の情報が、Wwise ユーザーに定義される設定に基づいて、ゲーム内で決定される。
  • ユーザー定義 — オブジェクトの空間配置が、標準的な5.1サラウンドスピーカーセットアップ内で「事前定義」される。

ゲーム定義3Dポジショニングでは、プロパゲーションと減衰プロパティが、ゲーム内のリスナーの位置と向きとの関係で定義されます。一方、ユーザー定義3Dポジショニングでは、サウンドがゲーム内のリスナーの位置や向きには関係なくスピーカー周囲に事前定義されたパスをたどり、「事前定義」のオーディオ体験が作成されます。

Note.gif
Note: このセクションでは、ゲームオブジェクトレベルでのポジショニングについて説明しています。リスナーのポジショニングに関する情報は、リスナーの位置情報を設定 を参照してください。

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

ゲームオブジェクトの実際の位置を設定するには、ゲーム定義3Dポジショニングを必要とするゲームオブジェクト全てに対して、AKSoundEngine::SetPosition() 関数が呼び出される必要があります。ゲームオブジェクトの位置が変わるたびに、位置設定をしなければなりません。

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

ゲームオブジェクトの位置は、AKSoundEngine::SetPosition() メソッドを使用して設定されます:

AKRESULT AK::SoundEngine::SetPosition( 
    AkGameObjectID in_GameObjectID,                             // Game object identifier
    const AkSoundPosition & in_Position,                        // Position to set
    AkUInt32 in_ulListenerIndex = AK_INVALID_LISTENER_INDEX     // If the listener index is valid, the 
                                                                // listener position is used instead of the 
                                                                // game object position.
);

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

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

ゲームオブジェクトがリスナーの位置から独立した3D ポジションを実際に持つ場合、3つ目のパラメータを AK_INVALID_LISTENER_INDEX に設定する必要があります。このパラメータに他の値をいつ使用すればよいかについては、リスナー位置の追従 を参照してください。

Note.gif
Note: それぞれの3Dポジションは、最大で1フレームごとに1度適用できます。つまり、AKSoundEngine::SetPosition() 関数を複数回呼び出しても、その後に AK::SoundEngine::RenderAudio() 関数を呼び出すと、最後の値のみが考慮されます。
Tip.gif
Tip: Wwiseで、2D または 3Dのユーザー定義サウンドとして設定されているサウンドは、3Dポジションを必要としません。もしも、3Dポジションが設定されても、サウンドはこれを無視します。ゲーム定義の3Dサウンドを使用することのないゲームオブジェクトへの無用な3Dポジションの設定を避け、貴重なCPUサイクルを節約しましょう。

リスナー位置の追従

ゲームオブジェクトの位置が自動的にリスナーの位置に収まるような動作を模倣するには、明示してゲームのオブジェクトの位置に、リスナー位置と同じ値をすべてのフレームで設定する、もしくは次のヒントを利用します。

Tip.gif
Tip: ユーザーを追うことをシュミレートする他の方法は、2D もしくは 3D ユーザー定義ポジショニングを使用します。これはWwiseユーザーが定義するため、すべての場合に適用されませんが、詳細についてはWwiseの説明書を参照してください。Wwise 2013.1以降、RTPCを使用して 2D と 3D ポジショニングの間で簡単に切り替えることができます。

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

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

AKRESULT AK::SoundEngine::SetMultiplePositions( 
            AkGameObjectID in_GameObjectID,             
            const AkSoundPosition * in_pPositions,      
            AkUInt16 in_NumPositions,                   
            MultiPositionType in_eMultiPositionType     
            );
);
Note.gif
Note: 各ゲームオブジェクトは、少なくとも1つの3Dポジションを持つ必要があります。

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

  • MultiPositionType_MultiSources メソッドを使用すると、様々なサウンドボリュームが追加され、同時に同じ音を発する複数のオブジェクトをシミュレートします。このメソッドは、様々な状況において有用で、全く同じ音を発する多数のオブジェクトがある場合に適しています。しかし、このメソッドは、サウンド同士が近すぎる場合に問題を引き起こす場合があります。この問題とは、ボリュームを追加することにより、複数のサウンドが正確に同相で再生するため、クリッピングの可能性が増大することです。
  • MultiPositionType_MultiDirections メソッドを使用すると、それぞれのスピーカーで再生されるボリュームが各方向で最大になります。ボリュームは追加されないので、このメソッドで使用される計算はCPU使用率の点で効率的です。このメソッドは、壁の開口、エリアサウンドや同時に同じ音を発する複数オブジェクトなど、ゲーム内の様々な状況をシミュレートするために使用できます。しかしながら、ゲームプレイヤーが、サウンドを発する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''。これを実行すると、2つのポジションは、同一オブジェクトにバインドされているため、同一のオクルージョンおよびオブストラクションパラメータが両方のポジションに適用されます。

Buildings.gif

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

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

X-Y-Z座標系

Wwiseサウンドエンジンでは、X、Y および Z軸は次のように定義されています:

  • X: 右向きのベクター
  • Y: 上向きのベクター
  • Z: 前向きのベクター
PositioningAxis.gif

WwiseサウンドエンジンでのX、Y および Z軸の方向

Caution.gif
Caution: 正しいX-Y-Z規則を使用して、ポジションと方向ベクターを渡すようにしてください。お使いのゲームエンジンが異なる座標系を使用する場合、座標を、 AK::SoundEngine::SetListenerPosition()AK::SoundEngine::SetPosition() などのメソッドに渡す前に変換する必要があります。

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

参照:

このページはお役に立ちましたか?

サポートは必要ですか?

ご質問や問題、ご不明点はございますか?お気軽にお問い合わせください。

サポートページをご確認ください

あなたのプロジェクトについて教えてください。ご不明な点はありませんか。

プロジェクトを登録していただくことで、ご利用開始のサポートをいたします。

Wwiseからはじめよう