The SpatialAudio
module exposes a number of services related to spatial audio, notably to: SpatialAudio
モジュールは、空間オーディオに関連するいくつかのサービスを公開しています。特に:
中で、それは:
次のフローチャートに示すように、Wwiseサウンドエンジンの一部をラップするゲーム側のSDKコンポーネントです。
SpatialAudio
の関数と定義は in SDK/include/AK/SpatialAudio/Common/にあります。 その主な関数はネームスペース AK::SpatialAudio
に公開されています。概要を以下に示します:
AK::SpatialAudio::RegisterEmitter
と AK::SpatialAudio::UnregisterEmitter
:残りのAPIで使用されるエミッター・ゲームオブジェクトをSpatialAudioに認識させますAK::SpatialAudio::SetEmitterPosition
と AK::SpatialAudio::SetEmitterAuxSendValues
:SpatialAudioに登録されているエミッタの AK::SoundEngine
の代わりに( AK::SoundEngine::SetPosition
とAK::SoundEngine::SetGameObjectAuxSendValues
)これらの関数を使用してください。AK::SpatialAudio::AddImageSource
と AK::SpatialAudio::RemoveImageSource
:画像ソース Wwise Reflect を直接制御するために使用します。下の 'Using "raw" Image Sources' を参照してください。AK::SpatialAudio::AddGeometrySet
と AK::SpatialAudio::RemoveGeometrySet
:後でWwise Reflectインスタンスに送信するため、SpatialAudioでジオメトリに基づいて画像ソースを計算させます。AK::SpatialAudio::AddRoom
/AK::SpatialAudio::RemoveRoom
, AK::SpatialAudio::AddPortal
/AK::SpatialAudio::RemovePortal
, AK::SpatialAudio::SetGameObjectInRoom
:ルームとポータルを作成し、ルームエミッターがどこにあるかを AK::SpatialAudio
に知らせます。
![]() |
Note: すべての呼び出しを AK::SoundEngine::SetPosition と AK::SoundEngine::SetGameObjectAuxSendValues を AK::SpatialAudio のものに置き換えることができます。オブジェクトがRegisterEmitter経由で AK::SpatialAudio に登録されていない呼び出しは、 AK::SoundEngine に直接転送されます。 |
前述のように、Spatial Audioは、ダイナミック・アーリー・リフレクション(略してER)を生成するために、2つの異なる(しかし補完的な)方法で使用できます:Geometry APIを使用するか、生の画像ソースでWwise Reflect を直接入力してください。これについては、次の2つのサブセクションで説明します。
バーチャルリアリティの魅力的な残響を作成するブログをご覧ください。 たとえば、ジオメトリによる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::SetEmitterPosition
と AK::SpatialAudio::SetEmitterAuxSendValues
を使用してください。 AK::SpatialAudio::AddGeometrySet
とAK::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プロジェクトの動的環境効果を効果的に処理するためには、バス構造設計の次の点を理解する必要があります。
補助バスの設計 通常、様々なAuxiliary Busが異なる環境を表すために使用され、これらのバスは、これらの環境のリバーブ特性をエミュレートする異なるリバーブShareSetsをホストすることができます。 SpatialAudio
でWwise Reflect よって処理されるような動的ERを使用する場合、後期リバーブは補助バスのリバーブを使用して設計することができます。ただし、これらのリバーブ(該当する場合)のERセクションを無効にしたい場合があります。これはWwise Reflectで処理する必要があるためです。
一方、Wwise Reflectは後半の残響に使用されるAUXバスと並行して実行する必要があります。下の図は、EarlyReflectionsバスの下にある3つの補助バスに、それぞれWwise ReflectのShareSet が異なる一般的なバス構造を示しています。この設計では、初期反射を生成するために、わずかなShareSetsしか使用しないことに注意してください。これは、このEffect の「空間的要素」がランタイムにゲームジオメトリによって駆動されるという事実によって動機づけられます。ここでは、他のオブジェクトが発する音よりも、プレーヤー(リスナー)が発する音に対して異なる減衰カーブが必要なので、異なるShareSetを使用します。
バス インスタンス ERバス(Wwise Reflect をホストする)は、初期の反射を生成したいエミッターと同じ数のインスタンスに存在します。これは、前のセクションで説明したように、これらのエミッタをSpatial Audio APIに登録し、このバスに送信することによって実行されます。これを正しく動作させるには、下の図に示すように、このバスのPositioningチェックボックスを有効にする必要があります。. これを行うことにより、ERバスの様々なインスタンスによって生成された信号は、下流の次のミキシングバスの単一インスタンスに適切にミックスされます。この単一のインスタンスは、プレーヤー(またはカメラ)に対応する、通常は最終的なリスナーであるこのエミッターを聴いているゲームオブジェクト(AK::SoundEngine::SetListeners
経由で設定)に対応します。
![]() |
Warning: ERバスの配置は、すべてのエミッタ・インスタンスがリスナーのバスに統合されるようにする必要がありますが、Wwiseの「ダブル3D配置」を避けるために、3Dではなく2Dに測位タイプを設定する必要があります。詳細は、 Wwise Reflect のドキュメンテーションを参照。 |
後期反響に送信する初期反射 また、遅れた残響を処理するために使用された補助バスにゲームオブジェクト(エミッター)が送信されるため、ERバスと後期リバーブバスとの間にも接続が確立されます。これは、生成されたERが後期リバーブを色づけして「緻密化」するために利用されるため、通常望ましいことです。 これを有効にするには、ERバスでゲーム定義の補助送信を使用するチェックボックスを有効にする必要があります。下のVolumeスライダを使って、後期リバーブに送る初期反射の量とダイレクトサウンドのバランスを合わせることができます。
次の図は、前の説明の実行時イラストです。
Acoustic Textureを使用する 各反射三角形について、ゲームはマテリアルのIDを渡します。これらのマテリアルは、Virtual Acoustics ShareSetsのAcoustic Texture の形式でWwiseプロジェクトで編集されています。ここで、各マテリアルの吸収特性を定義することができます。
バス インスタンス ERバス(Wwise Reflect をホストする)は、初期の反射を生成したいエミッターと同じ数のインスタンスに存在します。また、「生の」画像ソースをサーフェスリフレクター(同じターゲットバス/プラグイン上にある可能性があります)とミックスして一致させることができます。
各ゲームソースの AddImageSource を呼び出します。バスIDとオプションのゲームオブジェクトIDをターゲットにします(ゲームオブジェクトIDはリスナーまたはメインリスナーでもよいことに注意してください)。イメージソースの記述方法の詳細については、 AkReflectImageSource
を参照してください。
例えば、画像ソースはレイキャスティングまたは独自の画像ソースアルゴリズムを介して、この機能を既に実装しているゲームエンジンによって反映されるように提供されてもよいです。
ジオメトリ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
によって維持され、リスナーが部屋の中にいるときのリスナーの位置と同じに設定されます。
空間音響の文脈における3Dバスの使用と機能をよりよく理解するためには、ジオメトリAPI:Simulating Early Reflection のためのSurface Reflectorの使用のWwiseプロジェクトのセットアップを参照してください。
Auxiliary Busの設計は、伝統的な環境のモデリングとは基本的に異なりません。唯一の違いは、下の図に示すように、(Positioningタブでの)位置付けを有効にし、Positioning Typeを3Dに設定することによって、3Dにする必要があることです。
Roomの中にあるRoomのリバーブがリスナーを包み込むようにするには、減衰のShareSetを指定し、距離ゼロで100の広がりを持つ拡散曲線を設定する必要があります。
![]() |
Caution: 3D補助バス上に設定された減衰設定および3Dパンニングは、ルームポータルのゲームオブジェクトとリスナーとの間に適用されることを理解することが重要です。ルーム内のエミッターと3D補助バスとの間に適用される減衰は、ルーム内のエミッターで再生されているサウンド/アクター ・ミキサー構造で定義されたものです。 |
以下の例で使用されているShareSet は、「Portal」と呼ばれます。RoomのPortalの動作に従って設計されているためです:リスナーがPortal から離れていくと、ポイントソースになります。距離ゼロでは、リスナーはポータルを完全に横切ってRoomの中にいます。上で述べたように、Roomオブジェクトはルーム内にあるときにリスナーに従うため、この場合、カーブは距離ゼロで常に評価されます。
下のスクリーンショットは、エミッター、ラジオ、Auxiliary Bus Mezzanine2への送信を示しています。この環境は AK::SpatialAudio
モジュールごとにルームとして登録されており、Radioでもリスナーでもない別のゲームオブジェクト(PlayerCameraManager_0 )が作成されていることがわかります。
ゲームはルームとポータルを AK::SpatialAudio::AddRoom
と AK::SpatialAudio::AddPortal
を使用して登録する必要があります。 次に、AK::SpatialAudio::SetEmitterAuxSendValues
を使用してエミッターの送信値を定期的に更新します。さらに、 AK::SpatialAudio::SetGameObjectInRoom
を使用して、エミッターおよび場合によってはリスナーがどのRoomにあるかを宣言する必要があります。
ルームとポータルAPIを使用する場合、すべての後期リバーブAUXバスは "Positioning Enabled"とポジショニングタイプ "3D" に設定されていることが求められます。これにより、auxバスがポータルと指向されたルームの音声グラフで正しくインスタンス化されます。空間オーディオは、リスナーがいるルームとポータル(リスナーがいないルーム)の両方で同じAUXバスを使用します。しかし、各シナリオにおいて、AUXバスは、異なるゲームオブジェクト上でインスタンス化されます。これらの2つのシナリオでの動作は次のとおりです:
エミッターとリスナーが同じルームにある場合:
エミッターがリスナーに隣接するルームにあり、1つまたは複数のポータルで接続されている場合: