バージョン

menu_open

Spatial Audio

spatialAudio_flowChart.png

The SpatialAudio module exposes a number of services related to spatial audio, notably to: SpatialAudio モジュールは、空間オーディオに関連するいくつかのサービスを公開しています。特に:

  • Wwise Reflect のraw API に簡単にアクセスできます;
  • 与えられたジオメトリのReflectの画像ソースを計算する;
  • 3D AUXバスの向きを制御して方向付けられたルームを実装する。 そして、
  • 3D Auxバスの配置を制御することによってポータルとルームの結合を制御します。

中で、それは:

  • エミッターとリスナーを管理して3Dバスを制御します;
  • ジオメトリックなサウンド・リフレクション・アルゴリズムを実行し; そして、
  • Wwise Reflect のデータをパッケージ化します。

次のフローチャートに示すように、Wwiseサウンドエンジンの一部をラップするゲーム側のSDKコンポーネントです。

SpatialAudioFlow
AK::SpatialAudio namespace AK::SoundEngine namespace Wwise Reflect Plug-in SetEmitterPosition() SetPosition() SetEmitterAuxSendValues() SetGameObjectAuxSendValues() RegisterEmitter() RegisterGameObj()

API

SpatialAudio の関数と定義は in SDK/include/AK/SpatialAudio/Common/にあります。 その主な関数はネームスペース AK::SpatialAudioに公開されています。概要を以下に示します:

Note.gif
Note: すべての呼び出しを AK::SoundEngine::SetPositionAK::SoundEngine::SetGameObjectAuxSendValuesAK::SpatialAudio のものに置き換えることができます。オブジェクトがRegisterEmitter経由で AK::SpatialAudio に登録されていない呼び出しは、 AK::SoundEngine に直接転送されます。

使用上の注意

前述のように、Spatial Audioは、ダイナミック・アーリー・リフレクション(略してER)を生成するために、2つの異なる(しかし補完的な)方法で使用できます:Geometry APIを使用するか、生の画像ソースでWwise Reflect を直接入力してください。これについては、次の2つのサブセクションで説明します。

ジオメトリAPI:Simulating Early Reflection のためのSurface Reflectorの使用

バーチャルリアリティの魅力的な残響を作成するブログをご覧ください。 たとえば、ジオメトリによるERへの導入について説明します。

ゲーム側の設定

AK::SpatialAudio::Init() を使用してSpatialAudioを初期化します。

ダイナミックERをサポートすべきエミッターごとに、対応するゲームオブジェクトをサウンドエンジンに登録した後で AK::SpatialAudio::RegisterEmitter() を呼び出します。反射計算のパラメータを決定するには、AkEmitterSettingsを使用します。

  • reflectAuxBusID : 目的のプラグインWwise Reflectをホストする Auxiliary BusのID。SpatialAudioは、このバスへのAux送信接続を確立しますが、エミッターと同じゲームオブジェクトに関連付けられているバスのインスタンスに確立します。This means that different emitters will send to different instances of the auxiliary bus, and thus to different instances of the plugin. これは、異なるエミッタが補助バスの異なるインスタンスに、したがってプラグインの異なるインスタンスに送信することを意味します。これは、早期反射のセットは各エミッターに固有のものであるため、重要です。これは、以下の「Wwiseプロジェクト設定」のVoice Graph スクリーンショットに示されています。
  • reflectionsAuxBusGain :補助バスに向かってレベルを送信します。
  • reflectionsOrder :計算された反射の順序を決定します。1つの面に当たって生じる反射を1次反射と呼びます。2次反射は、リスナーに到達する前に2つのサーフェスに当たる音などによって生成されます。注意してください!生成された反射の数は、指数関数的に増加します。
  • reflectionMaxPathLength:反射の計算を止めるヒューリスティック。このエミッターで再生される音のMax Distance 以下に設定する必要があります。 これらのエミッターのサウンドエンジン関数の代わりに、AK::SpatialAudio::SetEmitterPositionAK::SpatialAudio::SetEmitterAuxSendValues を使用してください。 AK::SpatialAudio::AddGeometrySetAK::SpatialAudio::RemoveGeometrySet を使用して、関連ジオメトリをSpatialAudioにプッシュしてください。 AK::SpatialAudio::AddGeometrySetに渡された各リフレクタに対して、Wwiseプロジェクトで定義されているAcoustic Texture ShareSetを特定するよう求められます。For each reflector passed to AK::SpatialAudio::AddGeometrySet, you are asked to identify an Acoustic Texture ShareSet, as defined in the Wwise Project. AkTriangle::textureID参照してください。これらのAcoustic Textureは、マテリアルの反射特性とみなされ、計算された初期反射に適用されるフィルタリングに影響を与えます。

Wwiseプロジェクトのセットアップ

Wwiseプロジェクトの動的環境効果を効果的に処理するためには、バス構造設計の次の点を理解する必要があります。

補助バスの設計 通常、様々なAuxiliary Busが異なる環境を表すために使用され、これらのバスは、これらの環境のリバーブ特性をエミュレートする異なるリバーブShareSetsをホストすることができます。 SpatialAudio Wwise Reflect よって処理されるような動的ERを使用する場合、後期リバーブは補助バスのリバーブを使用して設計することができます。ただし、これらのリバーブ(該当する場合)のERセクションを無効にしたい場合があります。これはWwise Reflectで処理する必要があるためです。

一方、Wwise Reflectは後半の残響に使用されるAUXバスと並行して実行する必要があります。下の図は、EarlyReflectionsバスの下にある3つの補助バスに、それぞれWwise ReflectのShareSet が異なる一般的なバス構造を示しています。この設計では、初期反射を生成するために、わずかなShareSetsしか使用しないことに注意してください。これは、このEffect の「空間的要素」がランタイムにゲームジオメトリによって駆動されるという事実によって動機づけられます。ここでは、他のオブジェクトが発する音よりも、プレーヤー(リスナー)が発する音に対して異なる減衰カーブが必要なので、異なるShareSetを使用します。

auxbus_hierarchy.png

バス インスタンス ERバス(Wwise Reflect をホストする)は、初期の反射を生成したいエミッターと同じ数のインスタンスに存在します。これは、前のセクションで説明したように、これらのエミッタをSpatial Audio APIに登録し、このバスに送信することによって実行されます。これを正しく動作させるには、下の図に示すように、このバスのPositioningチェックボックスを有効にする必要があります。. これを行うことにより、ERバスの様々なインスタンスによって生成された信号は、下流の次のミキシングバスの単一インスタンスに適切にミックスされます。この単一のインスタンスは、プレーヤー(またはカメラ)に対応する、通常は最終的なリスナーであるこのエミッターを聴いているゲームオブジェクト(AK::SoundEngine::SetListeners 経由で設定)に対応します。

Warning.gif
Warning: ERバスの配置は、すべてのエミッタ・インスタンスがリスナーのバスに統合されるようにする必要がありますが、Wwiseの「ダブル3D配置」を避けるために、3Dではなく2Dに測位タイプを設定する必要があります。詳細は、 Wwise Reflect のドキュメンテーションを参照。
aux_bus_positioning.png

後期反響に送信する初期反射 また、遅れた残響を処理するために使用された補助バスにゲームオブジェクト(エミッター)が送信されるため、ERバスと後期リバーブバスとの間にも接続が確立されます。これは、生成されたERが後期リバーブを色づけして「緻密化」するために利用されるため、通常望ましいことです。 これを有効にするには、ERバスでゲーム定義の補助送信を使用するチェックボックスを有効にする必要があります。下のVolumeスライダを使って、後期リバーブに送る初期反射の量とダイレクトサウンドのバランスを合わせることができます。

aux_bus_generalsettings.png

次の図は、前の説明の実行時イラストです。

runtime_voices_graph.png

Acoustic Textureを使用する 各反射三角形について、ゲームはマテリアルのIDを渡します。これらのマテリアルは、Virtual Acoustics ShareSetsのAcoustic Texture の形式でWwiseプロジェクトで編集されています。ここで、各マテリアルの吸収特性を定義することができます。

acoustic_texture_editing.png

"Raw" Image Sourcesを使用する

バス インスタンス ERバス(Wwise Reflect をホストする)は、初期の反射を生成したいエミッターと同じ数のインスタンスに存在します。また、「生の」画像ソースをサーフェスリフレクター(同じターゲットバス/プラグイン上にある可能性があります)とミックスして一致させることができます。

ゲーム側のセットアップ

各ゲームソースの AddImageSource を呼び出します。バスIDとオプションのゲームオブジェクトIDをターゲットにします(ゲームオブジェクトIDはリスナーまたはメインリスナーでもよいことに注意してください)。イメージソースの記述方法の詳細については、 AkReflectImageSource を参照してください。

例えば、画像ソースはレイキャスティングまたは独自の画像ソースアルゴリズムを介して、この機能を既に実装しているゲームエンジンによって反映されるように提供されてもよいです。

Wwiseプロジェクトセットアップ

ジオメトリAPI:Simulating Early Reflection のためのSurface Reflectorの使用 については、同じである上記の Wwiseプロジェクトのセットアップ を参照してください。 Reflect on FPSサウンドのサンプルデザインについては、Wwise Helpの Wwise Reflectドキュメントを参照することもできます。

ルームとポータルを使用する

RoomとPortalサービスは、中で3Dバスの機能を利用する、配置された(および指向された)ルームの抽象化を提供します。通常、様々なAuxiliary Busが異なる環境を表すために使用され、これらのバスは、これらの環境のリバーブ特性をエミュレートする異なるリバーブShareSetsをホストすることができます。 「Room」は環境と似ていて、補助バスでWwiseプロジェクトでもモデル化されています。Room内のサウンドは補助バスで一緒にミックスされ、このダウンミックスは通常、ルームエフェクト(後期残響)を表すリバーブになります。 しかし、Roomは、リスナーに暗黙的に関連付けられるのではなく、別個のゲームオブジェクトに関連付けられているという点で、標準的な環境とは異なります。したがって、Roomのゲームオブジェクトは、(ルームの中のエミッターの)リスナーとエミッター(ルームの残響)の両方です。これにより、ルームのリバーブの出力であるルームを他の3Dエミッターと同様に3D世界に配置することができます:

さらに、 AK::SpatialAudioモジュール で は、Portal、つまり残響音が他のルームに漏れる可能性のある開口部を定義することができます。

AK::SpatialAudio モジュールは、RoomとPortalのゲームオブジェクトとRoom内のエミッターとの関連付けを管理します。Portal は、ゲームによって設定された位置にあります。一方、ゲームはルームの向きのみを設定します。Roomの位置は AK::SpatialAudio によって維持され、リスナーが部屋の中にいるときのリスナーの位置と同じに設定されます。

Wwiseプロジェクトセットアップ

空間音響の文脈における3Dバスの使用と機能をよりよく理解するためには、ジオメトリAPI:Simulating Early Reflection のためのSurface Reflectorの使用Wwiseプロジェクトのセットアップを参照してください。

Auxiliary Busの設計は、伝統的な環境のモデリングとは基本的に異なりません。唯一の違いは、下の図に示すように、(Positioningタブでの)位置付けを有効にし、Positioning Typeを3Dに設定することによって、3Dにする必要があることです。

set_positioning_to_3D.png

Roomの中にあるRoomのリバーブがリスナーを包み込むようにするには、減衰のShareSetを指定し、距離ゼロで100の広がりを持つ拡散曲線を設定する必要があります。

Caution.gif
Caution: 3D補助バス上に設定された減衰設定および3Dパンニングは、ルームポータルのゲームオブジェクトとリスナーとの間に適用されることを理解することが重要です。ルーム内のエミッターと3D補助バスとの間に適用される減衰は、ルーム内のエミッターで再生されているサウンド/アクター ・ミキサー構造で定義されたものです。

以下の例で使用されているShareSet は、「Portal」と呼ばれます。RoomのPortalの動作に従って設計されているためです:リスナーがPortal から離れていくと、ポイントソースになります。距離ゼロでは、リスナーはポータルを完全に横切ってRoomの中にいます。上で述べたように、Roomオブジェクトはルーム内にあるときにリスナーに従うため、この場合、カーブは距離ゼロで常に評価されます。

portal_shareset.png

下のスクリーンショットは、エミッター、ラジオ、Auxiliary Bus Mezzanine2への送信を示しています。この環境は AK::SpatialAudio モジュールごとにルームとして登録されており、Radioでもリスナーでもない別のゲームオブジェクト(PlayerCameraManager_0 )が作成されていることがわかります。

voices_graph.png

ゲームサイドのセットアップ

ゲームはルームとポータルを AK::SpatialAudio::AddRoom AK::SpatialAudio::AddPortal を使用して登録する必要があります。 次に、AK::SpatialAudio::SetEmitterAuxSendValuesを使用してエミッターの送信値を定期的に更新します。さらに、 AK::SpatialAudio::SetGameObjectInRoomを使用して、エミッターおよび場合によってはリスナーがどのRoomにあるかを宣言する必要があります。

ルームやポータルのためにどのようにAux バスとゲームオブジェクトがインスタンス化されるか。

ルームとポータルAPIを使用する場合、すべての後期リバーブAUXバスは "Positioning Enabled"とポジショニングタイプ "3D" に設定されていることが求められます。これにより、auxバスがポータルと指向されたルームの音声グラフで正しくインスタンス化されます。空間オーディオは、リスナーがいるルームとポータル(リスナーがいないルーム)の両方で同じAUXバスを使用します。しかし、各シナリオにおいて、AUXバスは、異なるゲームオブジェクト上でインスタンス化されます。これらの2つのシナリオでの動作は次のとおりです:

エミッターとリスナーが同じルームにある場合:

  • “room”ゲームオブジェクトは、空間オーディオによって内部的に登録されます。プロファイラでは、\ c AkRoomParamsの空間オーディオに渡された名前のゲームオブジェクトが表示されます。
  • このゲームオブジェクトの位置は、相対距離が常に0になるようにリスナーの位置に従います。ゲームオブジェクトの向きは、リスナーが向いている方向に応じて相対的な向きが変化するように、ルームの向きに固定されます。以前の世代のリバーブとは異なり、リバーブはリスナーの向きに“追従”しないため、仮想環境に没入することができます。
  • このルーム(聴取者と同じルーム)のエミッタのすべての後期リバーブAUXバスは、“ルーム”ゲームオブジェクトでインスタンス化されます。

エミッターがリスナーに隣接するルームにあり、1つまたは複数のポータルで接続されている場合:

  • 各アクティブポータルのポータルゲームオブジェクトは、空間オーディオによって内部的に登録されます。プロファイラでは、\ c AkPortalParamsの空間オーディオに渡された名前のゲームオブジェクトが表示されます。
  • ポータルの位置は、空間オーディオAPIに登録されているポータルの場所によって与えられます。
  • 隣接するルーム(ポータルを通るルーム)にあるエミッタの後期リバーブAUXバスは、ポータルゲームオブジェクトでインスタンス化されます。 各ポータルゲームオブジェクトのためのバスの固有のインスタンスが存在します。
  • ソースサウンドエミッタと同様に、後期リバーブAUXバスの減衰設定は、それを通過するサウンドがどのくらい離れて聞こえるかを決定します。
参照:

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

サポートは必要ですか?

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

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

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

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

Wwiseからはじめよう