|
Wwise SDK 2022.1.19
|
以下のセクションで、Spatial Audioがボイスグラフやバスグラフの信号フローにどう影響するのか、そして音の伝播モデルとどう関係するのかを説明します。
Spatial Audioがボイスグラフやバスグラフをどのように制御し、音の伝播モデルとの関係にどう影響されるのかを知ると、分かりやすくなります。このセクションでは、音の伝播モデルを基に、信号フローを説明します。
ランタイムにボイスやバスがほかのバスに接続する様子を、Wwise ProfilerのVoice GraphビューやVoice Inspectorビューで確認できます。Wwise Object同士をつなぐ電線のようなものを「コネクション」と呼んでいます。エミッタとリスナーのペアが成立するのは、ゲームオブジェクト(エミッタやルーム)に関連付いているボイスまたはバスが、別のゲームオブジェクト(別のルームや最上位のリスナーなど)に接続したときです。エミッタとリスナーのペアを、ここではパスと呼びますが、減衰カーブなど様々なものを計算するために使います。1つのコネクションの中にあるパスの数は、0の場合もあれば、1つまたは複数の場合もあります。例えば、ゲーム側が AK::SoundEngine::SetMultiplePositions を使って1つのゲームオブジェクトに複数のポジションを設定すると、複数のパスが作成されます。Spatial Audioでは多数のパスが使われます。これから、下図の信号グラフのように、エミッタのあるルームがリスナーのあるルームと隣り合っているという簡単なシナリオを使い、各コネクションの中のパスを詳しく検討していきます。
エミッタとリスナーの間のコネクションが、エミッタとリスナーの間のドライ(反響無し)信号を運びます。Spatial Audioは、エミッタからリスナーまで直接送られる音波である、エミッタのポジションからリスナーのポジションまでの第1パスを作成します。このときの長さは、両者の間の距離を表し、その距離に基づいてエミッタの減衰カーブが判断されます。また、エミッタとリスナーが別々の部屋にいる場合は、ポータルを通して相手が直接見える場合を除き、2つのルームの透過損失のうち大きいものが、オクルージョン要素としてパスに追加されます。これをダイレクトパスまたは透過パスと呼びますが、その違いは、透過損失がゼロか、ゼロでないかです。
両方のルームの間のポータルが開いていると、回折を通してリスナーに到達する別の音波があります。それはディフラクション(回折)パスです。ポータルのエッジで折れ込むので、その全体の長さは透過パスよりも長くなります。透過による損失はありませんが、その代わり、折れ曲がる角度に比例する回折があります。2つのルームの間にあるポータルの数と同数の、回折パスが存在します。
下図のVoice Inspectorに示された直接のコネクションには、1つの透過パスと、2つの開いたポータルを通る2つの回折パスの、合計3つのパスがあります。
下表は、この直接コネクションのパスの内容です。
| パスの種類 (数) | 特徴 |
|---|---|
| 透過・ラインオブサイト (1) |
|
| 回折 (N) |
|
![]() | 注釈: 透過パスを通る波面よりも、回折パスを通る波面の方が距離が長く、リスナーに到達するのが遅くなるはずですが、ディレイは適用されません。 |
全てのパスが、1つの同じコネクションの中に納まっています。そこで、並行する音の伝播パスとして、とらえることができます。実際に、Master Audio BusにミキシングされるMarkers_Testの信号は、パスごとに別々にパンニングされて減衰します。ただしフィルタは1つのフィルタユニットで、そのカットオフ周波数は各パスの透過や回折で変動するフィルタ値と、その影響力に基づいています。
![]() | 注釈: 本来、複数のパスが平行に存在することで、エネルギー節約の原則に反してはいけません。Spatial Audioは、この原則を重視し、パスのボリュームをノーマライズすることを避けます。ただし、サウンドエンジンのMulti-Directionパンニング方式を活用して、ボリュームのノーマライズと似た結果を達成しています。 |
| エミッタ・ルーム間のコネクション |
| ルーム・リスナー間のコネクション |
エミッタからルームバスへの補間的なコネクションはソースから注入されるエネルギーを表し、ルーム内で反響して拡散音場をつくり出します。
このコネクションに基づくパスの距離はゼロで、透過損失も回折もありません。つまり、このモデルでは、ルーム内のソースから内壁までと、それ以降の壁から壁への移動の、平均的な移動距離による距離減衰が、ルームバス上のリバーブEffectのインパルスレスポンスで、充分に表現されるとみなしています。また、壁からくる音がルーム内のジオメトリに大きく妨げられれることはない、とみなしています。
ルームのバスからリスナーへのコネクションは、リスナーへと伝播するルームの拡散エネルギーを表し、リバーブEffectでシミュレーションされます。ルームの壁を通して、そしてポータルを経由して、リスナーに到達します。「直接コネクション」と同様に、このコネクションに埋め込まれているのは、透過パスが1つと、リスナーの視界に入る各ポータルの回折パスが1つずつです。透過パスはルームの透過損失によって減衰し、スプレッドは、ルームの範囲の概算に基づいて計算されます( ルームのジオメトリを設定する 参照)。回折パスの拡散エネルギーは、ポータルの開口部に垂直な軌道に沿ってルームから出るとみなすので、回折の角度は、ポータルの通常のベクトルをもとに算出されます。回折パスのスプレッドは、ポータルの開口部とリスナーの位置関係をもとに算出されます。
![]() | 注釈: ルームの外にあるジオメトリによる妨害は、このモデルで考慮しません。そのようなジオメトリの影響は無視できる範囲とみなしています。 |
これらのパスの長さで距離減衰が決まるので、次のセクションで検討します。
前セクションで紹介したパスは、ルームの拡散エネルギーがリスナーに伝播する様子を表していますが、その長さを正確に定義することはできません。このモデルでは、音が壁に向かって、その壁から別の壁に進む過程の、距離減衰は、完全にリバーブEffectで表現されているとみなします。そこで、パスの原点がルームの中央にあると推定しても、問題ありません。ところが、ルームの拡散エネルギーを励起させたソースがリスナーの近くにあるのか遠くにあるのかによって距離減衰を決めた方が、効果的であり、大きいルームの場合は特にそうです。
さらに、現実世界の物理現象に反してWwiseでは音の距離減衰にカスタムカーブを使っています。リスナーのいるルームの距離減衰を正確に算出するには、サウンドエミッタの減衰カーブをルームに適用するべきです。ただ、ルームには複数のエミッタが存在することがあり、ポジションや設定されている減衰カーブがエミッタによって異なり、問題となります。また、いったんルーム内の全サウンドをダウンミックスしてリバーブEffectに通してしまえば、サウンド別に設定された距離減衰に基づいて個別にボリュームを増減させることは、不可能です。
無理やり解決するとしたら、ルームの全てのサウンドに、それぞれのバスとリバーブエフェクトを用意することができます。ただ、途方もないコストとなってしまうので、Spatial Audioでは裏技として、エミッタとリスナーのパスの最初から最後までの距離判定と減衰処理を行う代わりに、エミッタとその直後のルームバスのコネクションに対して行います。具体的には、ダウンミックスやリバーブの処理前に行います。これだと、バスに設定されている複数のEffectが直線的な位置関係にあれば、ソース1つに対してバスが1つ、リバーブが1つあるのと、同等の計算量です。一般的に、リバーブEffectはこれに該当します。
ルーム・リスナーのコネクションの距離減衰を、代わりにエミッタ・ルームのコネクションに適用します。ただしルーム・リスナーのコネクションには距離の異なる伝搬パスが複数あるかもしれないので、同数の複数のパスが、エミッタ・ルームのコネクションにも必要です。ここで適用されるのは距離減衰だけで、透過損失や回折は今まで通りにルーム・リスナーのコネクションに適用します。
それでは、エミッタ・ルームのコネクションと、ルーム・リスナーのコネクションの、伝播パスの特徴をまとめます。
下表は、エミッタ・ルーム間コネクションのパスの内容です。
| パスの種類 (数) | 特徴 |
|---|---|
| 透過・ラインオブサイト (1) |
|
| 回折 (N) |
|
下表は、ルーム・リスナーコネクションのパスの内容です。
| パスの種類 (数) | 特徴 |
|---|---|
| 透過・ラインオブサイト (1) |
|
| 回折 (N) |
|
下図は、両コネクションのパスをVoice Inspectorで見た様子です。下半分はEmitter-Roomコネクションのパスで、距離減衰が、エミッタのAttenuation(Emitter_Attenuation_Rooms_Portals_Demo というシェアセット)の上に計算されます。上半分はRoom-Listenerコネクションのパスで、透過損失や回折が適用されます(ルームのバスにAttenuationシェアセットがないため、"None"の下に表示)。
| ルーム・リスナーコネクション |
| エミッタ・ルーム間コネクション |
エミッタのルームと、リスナーのルームの間のコネクションは、エミッタのルームの拡散エネルギーが、リスナーのルームに伝わり、後者の拡散エネルギーに貢献する様子を表現します。この伝達は、壁や開いたポータルを通して起きます。
壁を通る透過パスや、ポータルを通る回折パスが、作成されます。透過パスの透過損失は、両ルームの透過損失の最大値に等しくなります。回折パスの回折は0であり、理由は、ポータルから出る音波が受け側のルームを励起するためにエッジの周りを曲がる必要がないからです。
![]() | 注釈: 開いたポータルがある場合は、おそらくポータルの伝播パスの方が透過パスよりも優位となるので、2つのルームをフルボリュームでカップリングできます。開いたポータルの面積と、壁の面積の比率に基づいて、エネルギーの伝達を調節することは、このモデルでは行いません。将来のリリースで改善される予定です。 |
![]() | 注釈: 受ける側のルームのジオメトリが、出す側のルームからのエネルギーの伝達を妨害することはないと、このモデルではみなしています。 |
本来、これらの伝播パスも距離減衰の対象となりますが、減衰はエミッタ・ルーム間のコネクションに割り当てられているので、すでに適用されています( ウェット信号の距離に基づく減衰 の検討内容を参照してください)。
下表は、エミッタのルームから、リスナーのルームへのコネクションの、パスの内容です。
| パスの種類 (数) | 特徴 |
|---|---|
| 透過・ラインオブサイト (1) |
|
| 回折 (N) |
|
![]() | Tip: カップリングコネクションのボリュームをオフセットするには、オーサリングツールにあるGame-defined aux sendのVolumeを使います。このボリューム設定は、特定のルームバスに設定され、コネクションでつながっている全てのルームに対して適用されます。 |
このコネクションは、リスナーを取り囲むリスナーのルームの拡散エネルギーを示します。距離による減衰はこのコネクションのインプット時にすでに考慮されているので、追加の減衰は適用されません。また、オブストラクションはなく、Spread値がほぼ100であると想定されています。