Wwise 2023.1の新機能リストをご覧になった方は気づいたかもしれませんが、実に多くの機能が導入され、その中でも“改定されたAux Sendモデル”という見慣れない表現があります。それって一体何だと思いますか?これが今回みなさまにお伝えしたい本記事の主題です。WwiseのSpatial Audioの変更点をまとめながら内部のしくみを説明し、細かい工夫や背景にある考え方を共有していきたいと思います。事前にお伝えしておきますが、話が少し技術的になるかもしれません。この記事は少なくともWwiseのルームとポータル設定の経験者や、ルームのAUXバス作成の経験者を主な対象としています。Spatial Audioの未経験者であればまずはじめに、サンプルプロジェクトをAudiokinetic Launcherからダウンロードし、UnrealまたはUnityのマップでルームリバーブをいくつか設定してからこの記事をお読みになった方が効果的かもしれません。
Wwise 2023.1ではSpatial Audioの「信号パス」を従来より使いやすく、柔軟にしています。ここで私が「信号パス」と呼ぶのは、バスが自動的に作成されて相互にルーティングされるしくみのことです。WwiseのSpatial Audioはサウンドエンジンの上に位置し、シミュレーション側の状況にオーディオを一致させるためにオーディオをどう処理しレンダリングするのかを指示します。一般的にバスのルーティング構成は仮想世界におけるエミッター、リスナー、そしてルームの各ゲームオブジェクトの位置に基づいています。
Wwiseのサウンドエンジンはゲームオブジェクトという考えのもと、ボイスやバスを発生させる柔軟な枠組みを提供します。ボイスやバスは相互にAuxiliary Sendsや直接出力接続で接続されており(まとめて「接続」と呼びます)、WwiseオーサリングツールのVoice Graph画面に可視化されます。Voice GraphやVoice Inspectorはサウンドエンジン内で、何が起きているのかを把握できる優れたツールです。
この記事は背景情報を必要に応じて提供しておりますが、サウンドエンジン内でSpatial Audioがオーディオをルーティングする方式を全体的に確認するためには、Wwiseドキュメントのルームとポータルの信号モデルにおける伝播パスというセクションをご覧ください。新しいタブで開いて参考にしながらすすめてもよいかもしれません。
Wwise 2023.1の改定Aux Sendモデルの私たちのデザイン目標:
- レンダリングに関連するパラメータ、つまり減衰、回折、透過などのカーブをすべてサウンドごとにカスタマイズできるようにすること。現実世界の音は物理の法則に基づく厳密なルールに従います。一方ビデオゲームは特定の芸術的効果を達成するために、音を調整せざるを得ないことがよくあります。例えば台詞が聞こえるようにするためなど、本来の物理条件を超えて不自然に伝播させる必要のある音もあります。またダイナミックレンジが限定されるため、仮想世界で音が大きく感じられるようにボリュームのフォールオフを、音の小さいサウンドよりも長く平らに設計する必要があります。実はWwise 2022.1においてもGame-defined auxiliary sendsでサウンドごとに減衰カーブを定義することにより、ルームのバスチェイン(いわゆる“ウェットパス”)への送信量を制御することが可能でした。ただしウェットパス用の回折カーブと透過カーブは別物でした。これらはルームを通るすべての音で共有されるため、ややぎこちなく、使いずらいです。これを改善しなくてはなりませんでした。
- 必要以上に多くのカーブを作成する必要のないように、また妥協のカーブを設定する必要のないようにすること。ルームのすべての音に適用できるカーブを設計できないこともあります。あるルームで足音と銃声音の両方を再生する時、すべての音に共通するカーブがあるとすれば、それはおそらく妥協の産物でしょう。
- 音がルームに伝播して入り、さらに伝播して外に出るという音響的な現象をモデル化すること。洞窟の入り口に立って大声で叫んだり風船を割ったりした時は、洞窟内でその音が反響し、それが外部に漏れて聞こえます。Wwise 2023.1の前までは、洞窟の反響が聞こえるのはエミッターとリスナーのどちらかが洞窟内にいる時だけでした。
- ルーム1つに対してAuxiliaryバス1つとリバーブインスタンス1つを維持しながら、上記すべてをまかなえるようにすること。ボイスごとに固有のリバーブバスとリバーブインスタンスを作成した方が簡単なのは確かです。エミッター独自の性質に合わせ、各リバーブの出力を厳密にカスタマイズすればよいのです。しかし残念ながらこれではCPU使用率が許容範囲を超えて過度に拡大してしまいます。
Wwise 2023.1のSpatial Audioで、改定Aux Sendモデルは何が変わったのか?
まずはじめにウェットパスの回折や透過損失の評価値を含む、すべてのレンダリングパラメータをチェインの最初のRoomバスの入力側に移動しました。典型的なリバーブエフェクトのようにルームバスのエフェクトがリニアで時間に左右されないと仮定した場合、音に対するフィルタリングや減衰の適用をバスの前後どちらに配置しても変わりません。オーディオバッファは結果的に全く同じです。
Roomバスサービスの入力側の、レンダリングパラメータの上流にレンダリングパラメータを移動することで、デザイン目標1が達成し、同時にデザイン目標2を助けます。Roomバスに対する入力接続がサウンドごとにあるため、そのサウンドに特有のレンダリングパラメータを適用することができます。これはお見事!Roomバスの減衰カーブが不要となり、カーブの設定作業を減らすことができます。
ただしRoomバスの入力に回折を適用した場合、不都合もあります。このルームの2つの出力に別々の回折値を設定することができなくなります。Roomバスがチェインの最後尾にある(つまりリスナーが入っている)場合を除き、出力はListenerゲームオブジェクトへの直接出力と、別のルームにつながるチェイン向けAUXセンドの2つです。入力に回折を適用する時に信号が事前にフィルタリングされ減衰されます。Listenerバスへの直接接続と下流にあるルームへの送信の両方が、すでにフィルタリングされています。一方Wwise 2022.1では、ルームの回折が適用されるのは直接出力のみでした。結果的に隣接するルームの音が、リスナーのあるルームを直接励起することができません。出力側にすでにフィルタリングが適用されており、高周波エネルギーがすでに失われています。
この弱点を補い、それに伴いデザイン目標3を達成するために、エミッターから隣接する各ルームへの新しい接続を追加しました。これまでエミッターの送信先がエミッターのあるルームだけであり、隣接するルームには送信しませんでした。新しい接続は私たちが勝手につくり出したものではなく、物理的な裏付けがあります。エミッターから直接伝播する音を表しており、エミッターの部屋内で跳ね返る前に隣接するルームを励起させます。
エミッターが隣接ルームを直接励起することになるため、リスナーが隣接するルームの1つにいる場合、リスナーに完全な周波帯の音が、正しい回折値で聞こえます。さらに隣接ルームに対して送信することにより、音が部屋の中に伝播し、その後にまた部屋の外に伝播するという音響的現象をモデル化することができます(デザイン目標3)。例えばエミッターとリスナーが洞窟の入口に位置する場合、洞窟は近くの音によって励起されます。従来通り洞窟のリバーブは立体的なスペーシャリゼーションが行われ、洞窟の入り口から聞こえてくるように感じられ、リアルなパンニングとスプレッドがあります。
Wwise 2023.1とWwise 2022.1の比較
理解を深めるために事例を取りあげてみたいと思い、Wwise 2022.1と2023.1のインテグレーションデモを比べてゆきます。インテグレーションデモはWwise SDKと共に配信されており、デモを見ながら読みすすめたい場合は、Audiokinetic LauncherのSamplesセクションの下にあります。以下は“Portal and Geometry Demo”からとったシナリオで、私がどちらのバージョンでも全く同じく再構築しました。このシナリオでリスナーは"Outside"(屋外)と定義されたルームにいて、エミッターのある屋内ルームに隣接しています。2つのルームは2つのポータルで接続されており、その結果として壁を通る透過パスが1つ、2つのポータルの回折パスが1つずつ、計3つの伝播パスがあります。
古いことから抜け出す:Wwise 2022.1のポータルとジオメトリ
Voice Inspectorは左ペインのボイスグラフと右ペインのコントリビューションリストの2面で構成されます。ボイスグラフは左から右へと読み、オーディオバッファを表す各ノードがミックスされますが、必要に応じてノードとノードの間の接続部分にフィルター、減衰、パンニング、スペーシャリゼーションなどが適用され、Master Audio Busへと流れます。右側のコントリビューションリストを参照しながら各段階で何が起きているのかを把握できますが、こちらは下から上へと続き、ボリューム値やLPF値とともに、それに至る経緯が表示されています。上図のVoice Inspectorのスクリーンショットではボイスグラフを通して信号パスを形成する2つの強調表示された接続があり、サウンド自体からはじまり、マスターバスで終わっています。ここで言う「信号パス」とは連鎖するボイスグラフのノード(サウンドまたはバス)を指し、Game Object 3D Viewerに表示される伝播パスとは異なるのでご注意ください。伝播パスはWwise Spatial Audioが計算した仮想世界を通るパスのことです。
Wwise Spatial Audioを理解する上でよく混乱を招く要素が、伝播パスと信号パスの関係性です。信号パスは伝播パスに基づいており、エミッターからリスナーまでの最短距離のルームの連鎖で構成されます。現実性や効率性のための調整が必要なため、2つのパスは1対1の関係ではなく、1対1にすることは不可能です。特にリバーブをルームごとに1つに限定する必要があり(上記デザイン目標4)、信号パス内でフィードバックループを発生させるわけにはいきません。
伝播パスによってパスの長さ、回折係数、透過係数などが決まり、これらに基づいてボイスグラフの接続をどのようにフィルタリングし減衰するのかが決まります。伝播パスは右のコントリビューションリストにそれぞれの接続が表示されます。
以下2つの接続が強調表示されています:
1)エミッターからルームへの接続(黄色)。
- この接続は音源から注入されるエネルギーを表し、ルーム内で反響して拡散音場をつくり出します。
- Game Object 3D Viewerの3つのパスに対応する3つの伝播パスが、Voice Inspectorの右側に表示されています。
- ここで距離減衰を適用します。これはウェットパスの1部であるため、音の“Auxiliary send volumes (game-defined)”カーブを評価します。ここは距離を適用しやすく、サウンド別に“ウェット”の減衰カーブを設定することができます [1]。
2)ルームからリスナーへの接続(青緑色)。
- この接続はルームの拡散音場を表しており、場合によりポータル経由(回折あり)や壁を通して(透過損失あり)、リスナーに直接伝播します。
- ここでもGame Object 3D Viewerの3つのパスに対応する3つの伝播パスが、Voice Inspectorの右側に表示されています。
- Wwise 2022.1以前では回折と透過損失がこの接続に適用されていました。RoomバスはそれがListenerルームである場合を除き、2つの出力があることに注目してください。1つは直接Listenerへの出力、もう1つは下流にある直後のRoomへの出力(“ルームからルームへ”の接続)です。この接続にフィルターを適用した理由は、もう一方の出力においてフィルターなしのオーディオを下流のルームに渡すためです。回折(およびオブストラクション)をEmitterの直接つまりドライ出力に適用し、AUXつまりウェット出力に適用しないという方式と、整合性があります。
- Diffraction(回折)値がGame Object 3D Viewerに表示されたパスの小さなパーセント数値と完全には一致していないことに注目してください。些細な点ではありますが、ウェットパスの回折の計算方法が関係しています。詳しくは後述します。
ようこそ:Wwise 2023.1のポータルとジオメトリへ
ご覧ください!Diffraction(回折)、Transmission(透過)、そしてDistance Attenuation(距離減衰)がすべて最初の黄色い接続(“エミッターからルームへ”)にあります。接続2はつまらないものになりました。動作によるボリューム(バスのスライダを調整してミックスの中でルームの音の大きさを増減させ、クリエイティブな効果を得るもの)が入っているだけです。
Roomバスのカーブを定義できなくなりました(デザイン目標2)。Roomバスのカーブは無視されます。すべてのカーブが1か所に集まり、サウンドごとにカスタマイズできるようになりました(デザイン目標1)。
技術的な細かい点:微妙なボリューム問題の解消
今回透過と回折を最初の接続に移動させたことにより、サウンドエンジン内でオーディオをミックスする方法に関連した些細な問題も解決されました。1つの接続で複数のサウンドパスを表現する場合であっても、DSPフィルタは1つの接続に対して1つしかありません。透過パスによってフィルター値が異なることがよくありますが、その場合は最終的なフィルター値を出すためにボリュームの重み付けの平均を使用します。その後にオーディオを一緒にミックスする際、フィルター値の希望と現実の差分に基づいてラウドネスを補正します。ミックスされたサウンドは、それぞれの伝播パスに専用のDSPフィルターが適用されたかのような納得のいく結果となります。Wwise 2022.1以前では距離減衰を最初の接続に適用し、回折や透過のフィルタリングを2つ目の接続に適用していたため、お互いに他方の接続で何が行われているのか分からず、ボリュームの重み付けの平均が実際には誤っているという問題がありました。勘のよいユーザはリバーブが常に思ったよりも少しだけ大きく、最悪の場合は距離カーブの終わりを過ぎた時に突然途切れてしまう状況があることに気づいたかもしれません。このようなリバーブのボリューム問題が解消され、Wwiseのリバーブは絶好調です。
Roomバスの減衰カーブについて、もう1点
最後にWwise 2022.1でRoomバスのカーブをオーサリングする際、少し厄介であった点についてです。ルームのカーブをカスタマイズしたい性格のユーザは、うまく動作させるために微妙な工夫をする必要がありました。WwiseでRoomバスにカスタム減衰を追加した上でdistance-volumeカーブを意図的にフラットにする必要があり、唯一これが無効にできないカーブであったためです。これを怠ると同じ信号パスに距離減衰が2回適用されてしまいます。Roomバスの減衰カーブについて心配する必要がないと、毎日がだいぶ楽になるかと思います。
新しい接続:エミッターから隣接するルームへ
上図スクリーンショットで強調表示されているのが2023.1の新しい接続であり、“エミッターから隣接ルームへ”の接続です。すでに説明した通り、これはエミッターから(エミッターのルーム内を跳ねまわる前に)隣接するルームを直接励起させる、音のエネルギーをモデル化した接続です。
リスナーのルームのリバーブは、ポータルの回折に影響されない信号チェインで励起されるようになりました。コントリビューションリストを見るとDiffraction(回折)がまだ適用されていますが、最小限かつ戦略的に適用されています。ウェットパスに回折を適用する具体的な方法はWwise 2023.1で追加された、Wwise Spatial Audioドキュメントの“Wet Path Diffraction”セクションをご参照ください。
もっと面白いことに、この新しい接続で前述の「洞窟の入り口」エフェクトをモデル化することができます。いい感じに聞こえると思いますので、ぜひ試してみてください!
当然パフォーマンスは私たちが常に気にしていることであり、あまり多くのリバーブバスが出現してもいけません。特に最終結果であまり聞き取れず、さほど影響のないリバーブバスであればなおさらです。1つのエミッターのルームセンドの数を制限できる新設定を、AkSpatialAudioInitSettingsに追加しました。uMaxEmitterRoomAuxSendsを1まで下げることにより、2022.1の時と同様にエミッターから隣接ルームへの送信を防ぐことができます。2または3に設定すると必ず静かなルームよりも音の大きいルームが選ばれるため、パフォーマンスと品質の観点でバランスがよいことを私たちは発見しました。
エミッターのAuxiliary Send Valuesの計算方法
音の大小の話が出たので、最後にエミッターのRoom Send値を私たちがどのように決めたのかを簡単に説明します。エミッターとルームは、そのルームがエミッター自身のルームでも隣接ルームでも接続に必ず“Room Send”ゲインがあり、上図2023.1スクリーンショットのように、コントリビューションリストの最後の行に表示されます。固定距離にある点音源エミッターには自分自身のルームと隣接ルームの間で分配される、一定かつ有限のエネルギー量があります。エネルギーは常に保存されるべきであり、クリエイティブな意図でオーサリングツールのゲインスライダなどを使用して具体的に指定しない限り、位置やルームなどによって変動することはありません。どの時点(そしてどの空間)においても、センド値の2乗の値を合計すると必ず「1」になります。隣接ルームに送られるエネルギー量はエミッター周りの球全体に対するポータルのスプレッド値(厳密にはエミッターに対するポータルの立体角と呼ぶ)により決定されます。
以下は上から見たGame Object 3D Viewerスクリーンショットです。先ほど紹介したインテグレーションデモのシナリオと全く同じです。
エミッターからくる音エネルギーはパイを切るように、エミッター自身のルームと隣接する各ルームの間で切り分けられます。上図の例ではエネルギーの80%がエミッター自身のルームで「捕獲」されています。このエネルギーはエミッターのRoomリバーブバスに送られます。残り20%のエネルギーは隣接ルームに消え、隣接Roomリバーブバスに送られます(なお数値は参考値であり今回のデモ用に用意したものです)。各ルームセンドの割合はポータル表面積と壁面積の割合で決まります。閉め切ったルームのエミッターは自分自身のルームに100%送ります。同じ考えで壁よりポータル開口部の方が多い場合は、エネルギーの大部分が隣接ルームに消えてゆきます。
Wwise 2023.1はSpatial Audioにとって重要なリリースであり、改定Aux Sendモデルはその一部に過ぎません。ぜひAudiokinetic Launcherを使って試してみてください。ご自分のゲームを開発中でなければUnrealデモゲームが絶好のスタート地点となるほか、実験用のすばらしいサンドボックスが欲しい場合はWwise Audio Labのダウンロードをおすすめします。
脚注
[1] 2017年にリリースされたルームとポータルの当時をご存知の方は、距離減衰をルームごとに定義する必要があり、不便を感じたことがあるかもしれません。
コメント