Wwise SDK 2023.1.10
|
Reverb Zoneは、独自のリバーブエフェクトを持つRoom内の領域をモデル化しますが、隣接するRoomと接続するためにポータルを必要としません。明確な壁がない場合、または一般的に2つの領域間の境界面にあるネガティブスペースがポジティブスペースよりも多い場合は、標準的なRoomの代わりにReverb Zoneを使用します。以下に、Reverb Zoneを活用できるシナリオ例をいくつかご紹介します:
Reverb Zoneは、Wwise Spatial AudioにあるRoomタイプで、Roomと同じプロパティをすべて利用できます。またReverb Zoneには以下があります:
音伝播は複数の方法で管理でき、 AK::SoundEngine::SetGameObjectAuxSendValues でセンドを追加できるほか、Reverb Zoneを利用できます。しかしReverb Zoneにはメリットがあり、Wwise Spatial AudioのRooms and Portals APIが提供する音伝播フレームワークと統合され、これを最大限に活用します。
以下は、Reverb Zoneの活用を示した例です。Wwise SDKの一部として配布されるIntegration Demoプロジェクトに含まれています。
![]() | エミッタが「Room Object」というRoom内で再生します。 |
![]() | サウンドが、「Patio Object」というReverb Zoneに接続されたPortalから、外へと伝播されます。 |
![]() | サウンドは外に伝播し続け、Reverb Zoneの親ルームまで伝播します。外に出たサウンドはさらに、ジオメトリによって定義された障害物の周りを回折します。 |
Advanced ProfilerまたはVoice InspectorのVoice Graphで、5つのGame Objectが連結されている様子を確認できます。
![]() | エミッタ「Emitter E」が、現在エミッタが含まれているRoomと、隣接するすべてのRoomの両方に送信します。この場合、エミッタは「Room Object」に含まれていて、「Patio Object」に隣接しています。 |
![]() | 各Roomが次のRoomへと送信し、リスナーへの最短パスをたどります。「Room Object」が「Patio Object」へと送信し、次に「Patio Object」が「Outside Object」へと送信します。「Patio Object」と「Outside Object」間のリンクは、2つのRoom間の親子関係によって確立されます。 |
AK::SpatialAudio::SetReverbZone
APIを使用し、Reverb Zoneとその親のRoom間のトランジション領域を指定できます。このトランジション領域の機能はポータルと非常に似ています。トランジション領域は、各Roomのジオメトリが重ならない限り、ポータルやほかのトランジション領域と重なっても問題ありません。この種のオーバーラップを活用し、Reverb Zone間にスムーズなクロスフェードを作成できます。Reverb Zoneのトランジション領域を定義するには、Reverb Zone Roomのジオメトリに1つ以上の「トランスペアレント(透過的)」な面が必要です。トランスペアレントな面とは、 AkAcousticSurface::transmissionLoss
を0に設定した面です。Reverb Zoneのトランジション領域の範囲は、Roomのトランスペアレントな三角形の場所と、 AK::SpatialAudio::SetReverbZone
に渡される in_transitionRegionWidth
パラメータで定義されます。トランジション領域は、各三角形を中心とします。例えば1つの壁がトランスペアレントな面で構成されたRoomを AK::SpatialAudio::SetReverbZone
をコールしてReverb Zoneとして定義し、 in_transitionRegionWidth
を5に設定したとします。トランジション領域は、Game ObjectがReverb Zoneの外側でトランスペアレントな壁から5ユニットまで近づいた時に始まり、Game ObjectがReverb Zoneの内側で壁を5ユニット過ぎた時に終わります。トランジション領域はトランスペアレントな三角形でのみ定義されるため、トランジション領域にカスタムの形状を定義できます。ルームジオメトリの定義の詳細については ルームのジオメトリを設定する をご参照ください。
このセクションでは、一般的なReverb Zoneの作成手順を説明します。以下の例で屋外環境に囲まれた森林を作成する方法を示します。森林と屋外環境は、それぞれ独自のリバーブエフェクトを持ちます。
Reverb Zoneの減衰は、Roomの動作とプロパティを継承し、追加の留意事項があります:
面を通過できるのは透過パスのみのため、回折パスが透過損失を持つことは通常ありません。Reverb Zoneでは、 回折パスが通過するReverb Zoneのトランジション領域の AkRoomParams::TransmissionLoss
が0を超える場合、ウェットパスとルームトーンにおいて例外が発生します。その場合は、同じ部屋からの異なるパスが、異なる透過損失量を持つ可能性があります。これはVoice Inspectorで確認できます:
このルームトーンの例では、ルームからリスナーへと直接の透過パスがあります。さらに、ポータルを通って回折するパスがあります。各パスの透過損失量は異なります。
直接透過パスの透過は、 エミッタとリスナーの(直接)コネクション に計算方法が記載されており、リスナーのルームとエミッタのルームにおける透過損失の最大値です。これらのルームが別々のReverb Zone階層に含まれる場合、透過損失は、ルームとそれぞれの親の両方における最大値です。
回折パスでは、パスがトランジション領域を通る時は子のルームの透過損失( AkRoomParams::TransmissionLoss
で指定)が採用され、最終的な透過損失はパス上で見つかった最大値です。
Reverb Zoneのどの面をトランスペアレント(透過損失を0)にするかを選ぶ際は、Reverb Zone内のオブジェクトと親のルーム間の距離の計算に影響するため、気を付ける必要があります。Reverb Zoneまで、およびReverb Zoneからのすべての距離計算は、最も近い不透過の三角形に基づき測定されます。
よくある例として、大規模なReverb Zoneの床があげられます。Reverb Zoneの床がトランスペアレント(床面の透過損失が0)で、リスナーがいずれの壁からも遠く離れた場所に配置されている場合、親のルームへの最短距離は床経由となるため、多くの場合望ましくありません。
別の例をあげると、Reverb Zoneの1つの面に、別のルームへのポータルがあることも珍しくありません。ポータルが接続された面は、通常は不透過のはずです。
この例では、Reverb Zoneの強調表示された3つの面が不透過になっています。底面は床と共有されています。左の面は別のルームと共有され、ポータルが接続されています。上面は創造性を活かして、例えば屋根付きのバルコニーなどを表します。ほかの面はすべてトランスペアレントです。
AK::SpatialAudio::SetReverbZone
APIでルームの階層を作成します。親子関係は AK::SpatialAudio::SetReverbZone
で直接作成し、兄弟関係は2つ以上のReverb Zoneに同じ親ルームを指定することで作成します。AK::SpatialAudio::SetReverbZone
または AK::SpatialAudio::SetPortal
をコールすると失敗します。AkAcousticSurface::transmissionLoss
は0を超えるようにしてください。Reverb Zoneから別のReverb Zoneへと直接トランジションすることはできないため、各Reverb Zoneとそのトランジション領域は重ならないようにします。