Wwise Spatial Audio 2023.1 最新情報 | Reverb Zone

新リリース / スペーシャルオーディオ / Wwiseの使い方やツール

Reverb Zone入門

Wwise 2023.1ではWwise Spatial AudioにReverb Zoneという新しいツールが追加されました。Reverb ZoneはRoom内に設定し、ほかのRoomとPortalにより接続されず、トランジションが起きる場所がジオメトリで定義されるリージョンです。RoomやPortalの延長としてこのゾーンで空間から切り取ることで、カスタマイズしたRoomでは充分に提供できない、あるいはPortal配置からくる制約と衝突してしまうようなリバーブやルーム的なプロパティを設定することができます。

この記事ではデザイン問題を解決するためにReverb Zoneが適切に対応できる架空のゲーム開発シナリオを見ながら、予想外の結果を招きかねない一般的な落とし穴も指摘してゆきます。私が使ったUnrealエンジンではSpatial Audio Volumeを配置するように簡単にReverb Zoneを配置できますが、どのゲームエンジンにおいても同じような原則が通じるため、一般的な話としてすすめてゆきたいと思います。ここで紹介する事例は一般的な使い方を示すもので、技術的な詳細に踏み込んでいません。

おはよう、ヒーロー

さて、アドベンチャーゲームを作りましょう。アドベンチャーの主人公 は山奥にある小屋で目覚めます。分かりやすいRoomとPortalのセットアップです。屋外部分がカスタムのRoomで、SAV_Forestという名前にしました。山小屋はまた別のRoomです。両者はPortalでつながっています。屋外アンビエントサウンドをはじめるイベントをSAV_Forestにポストすると、そのルームトーンがポータルを通して山小屋の内部にも聞こえてきます。単純明快です。

冒険は屋内よりも屋外で起きるため クエストのプロ も当然、外に出て森の中の小道を歩き、開けた場所まで行きます。

whole_map_overview cabin_in_the_woods

 

空き地に何者かが隠れている

 

この空き地は本当の部屋ではないため、山小屋と異なる難しさがあります。明確な出入り口がなく、ポータルを直感的に配置できる場所もありませんが、この空間では音の響きが違うことが予想されます。壁のないRoomとしてとらえることができます。ここでの目標は空き地の中に入って行くにつれ、森のアンビエンス音が遠ざかってゆくことです。森のアンビエンスを切り取ったような結果にしたいのです。

空き地をReverb Zoneで表し、通常のRoomと同じ使い方をしますが、ポータルはありません。ゾーンの親をSAV_Forestにすることで、音の伝播の観点で森と空き地を1つの空間として運用することができます。空き地には大きな木があり、ジオメトリを有しています。どこかの壮大な冒険 の一部として 怪しい生物 が巨木の後ろに隠れていますが、これがエミッターとして表現されます。この 隠れ上手な敵 の音は巨木というジオメトリの周りを回折したり、Reverb Zoneの境界を通過したり(壁がないため)するため、姿が見える前に ミニチュアモンスター の音が聞こえてきて、Reverb Zoneに入る前から聞こえます。そうでなければ ゲームの主人公 にこっそり接近できてしまいます。

creature_behind_the_tree

このReverb ZoneのTransition Region Widthは150 cmです。Portalの深さに相当する幅であり、ルーム間のAUXセンドのバランスや、Room Transmission Lossの補間(後述の通り本例では不使用)など、ゾーンに出入りするトランジションの微妙な変化に影響します。

注意が必要なのはReverb Zoneの がデフォルトで透明な面であることで、森のアンビエントサウンドが地面から伝播してくるため、こちらの意図よりも音が大きくなります。「透明な面」ではTransmission Lossが0であり、Reverb ZoneのTransition Regionは透明な面でしか生じません。床面からの不要な伝播を防止するためには、サーフェスにジオメトリによるTransmission Lossを設定する必要があります。私はUnrealで床面を選択し、詳細パネルで“Surface Properties”の下の“Enable Surface”にチェックを入れました。“Enable Surface Reflector Set”をチェックしない場合(デフォルトはチェックなし)、イネーブルしたサーフェスではTransmission Lossが1となり、ディスエーブルしたサーフェスではTransmission Lossが0(つまり透明な面)となります。“Enable Surface Reflector Set”にチェックを入れた場合、サーフェスごとにTransmission Lossを具体的に指定するための追加プロパティが表示されます。SDKではAK::SpatialAudio::SetGeometryを使用する時に各サーフェスにおいて使われるAkAcousticSurface::transmissionLossで指定します。各サーフェスが同じような動作をするため、Reverb Zoneの天井面でも同じことが言えるかもしれません。今回のケースでは空き地に使用するボリュームが充分に大きく、天井面までの距離も充分あるため、心配する必要はありません。

properties_panel_1

注:私は2種類のTransmission Lossについて触れました。“Room Transmission Loss”とジオメトリのTransmission Lossには重要な違いがあります。Reverb Zoneのどのサーフェスが透明であるのかを決めるために使用するのが、ジオメトリに付随する透過損失です。AK::SpatialAudio::SetRoomで、ジオメトリとは独立してルーム自体に付随するTransmission Lossを指定することもできます。ジオメトリを使用する場合のRoom Transmission Lossは、ルームトーン(Roomに直接ポストされる音)とウェットパス(ルームトーンと通常エミッターの両方の、ルームAUXバスやリバーブのチェイン)だけに適用されます。今回の各例のRoom Transmission Lossは常に0です。これはUnrealでAkReverbZoneアクターを追加する時のデフォルト値でもあります。

下図はGame Object 3D ViewerでReverb Zoneを表示した時のスクリーンショットです。巨木の反対側にエミッターが見えます(単純化のために木のジオメトリは単なるカプセル形状としています)。透過パスが木で妨害され、木の周りを回折パスが通っていますが、Reverb Zoneの外周(「壁」の立つ場所)を突き抜けています。Game Object 3D ViewerのOptionsに“Show Transition Regions”というチェックボックスがあります。これを有効にするとTransition Regionが青色ボックスによって表示されます。なおボックスは概算であり、実践では影響範囲が各サーフェスへの距離に基づくため、ポータルと同様に四捨五入されます。

sound_in_the_clearing

リスナーがReverb Zoneに移動すると、親RoomであるSAV_Forestにポストしたアンビエントサウンドが、リスナーからReverb Zoneの「壁」までの距離に基づいて減衰します(アンビエントサウンドのAttenuation ShareSetカーブに従います)。ゾーンの奥へすすめばすすむほど、森のアンビエンスは薄れてゆきます。Reverb Zoneに別の音をポストした場合、ゾーン外で同じく距離で減衰します。

いざ町中へ

我がヒーロー 冒険探求エキスパート は非常に優れていて、プレイヤーのスキルレベルも高いため、 森の小動物 を簡単に追っ払い(というより説得した?)、私たちは空き地を後にすることができました。道の先にはさらに広い広場があり、その中央に小さな町があります。ここは空き地で見たものよりも手の込んだ設定にしてゆきます。

エリア全体がすでに外側のSAV_Forestの中に納まっていますが、今度はレイヤーが増えています。町が所在する広場は前の例で見たように切り出すことができます。私は広場の名前をRZ_Meadowとしました。次に町自体も独自のReverb Zoneとし、名前をRZ_Townとしました。どちらのReverb Zoneにおいても親RoomとTransition Region Widthが適切であることを確認し、音を通して伝播させるのかどうかをサーフェスごとに決め、設定してゆきました(主に床を不透明とすることに注意しました)。SAV_ForestをRZ_Meadowの親とし、RZ_MeadowをRZ_Townの親としました。

zone_ception

ゲームオブジェクトが正しいルームに確実に入るように、このタイミングで各RoomとReverb ZoneのRoom Priorityを適切に設定しておくことを忘れないでください。私はSAV_Forestの優先順位を最も低くし、次にRZ_Meadowとし、RZ_Townの優先順位を最も高くしました。優先順位が正しい限り、実際に設定する数値は自由です。

この順序であれば音が階層のすべてのレイヤーを通り伝播することが可能で、各Reverb Zoneにそのゾーン用の音をポストすることもできます。RZ_Meadowは前の例と同じくSAV_Forestから切り取ったようなかたちで、RZ_Townは両者から切り取ったようなかたちです。ゲームの 主人公 が町に到達する頃には森のアンビエンスが大幅に減衰されるか、全く聞こえなくなります。一方でRZ_Townに近づくにつれ、その音が広場中央の建物の方向から聞こえ、これもRZ_Townの外では距離で減衰します。町にはどの方向からも接近できるため、あえて入口を定めてポータルを注意深く配置する必要がありません。

町内のGameObjectにポストした音は、Reverb Zoneの「壁」が存在しないかのように外部のリスナーまで伝播します。Voice Inspectorでこの音を見ると、Room階層の各レイヤーのそれぞれのリバーブが、すべて音のウェットパスに適用されていることが分かります。関与しているRoomバスがすべてチェインでつながっています。(詳細については本記事の少し前に公開された 改定されたAux Sendモデル についてのブログ記事がおすすめです。)

chained_verbs2

パティオにいるクエスト情報の提供者

ここまで毎回違う名前で登場してきたヒーロー ですが、町中の人たちに話しかけ、時には住宅に忍び込み、伝統に従い陶器を壊しながら、やがて ストーリー上の理由 で近くのバーにいる者に話しかけて 秘密のクエスト情報 を入手するように言われます。ところが当のNPCはバーの外で屋根付きパティオに座っています。パティオ部分はバーを構成するRoomの外側にありながら、独自の控えめなリバーブエフェクトが期待されるため、Reverb Zoneに適したユースケースとなります。RZ_Patioという名前にしました。

walrus_room_outside

これまで見てきたものと比べ、このReverb Zoneは大きく違う点がいくつかあります。共通しているのは親Room(RZ_Town)とTransition Region Widthがあることです。このReverb Zoneには独自リバーブエフェクトの専用Room AUXバスが設定されているだけでなく、配置の仕方やゾーンのどのサーフェスを透明にするのかなどが、大きく異なります。

先ほどと同様に、床から音が伝播するのはおかしいため、床は透明にしません。さらに今回は検討すべきサーフェスがほかに2面あります。パティオは屋根がかかっているため、この方向から、あるいはこの方向へ音が伝播してしまうと、床と同じで不自然です。

opaque_surfaces

バーの壁の外側に接するサーフェスもあり、バー内部を表すRoomにPortalでつながっています。このサーフェスも不透明とするべきで、理由は2つあります。1つ目の理由はなんと言っても、そこに壁があるからです。つまり音はこのサーフェスを通り伝播するべきではなく、当該Reverb Zoneのトランジションリージョンはこの領域をカバーしてはいけません。前述の通りトランジションリージョンは透明なサーフェス周りのみに存在します。2つ目の理由はすでに述べた通り、バーの内部をRZ_Patioに直接つなげ、RZ_Townに間接的につなげるポータルが、このサーフェス上にあることです。ルーム間のトランジションはポータル経由であれ、Reverb Zoneのトランジションリージョン経由であれ、1つのGameObjectが2つ以上のトランジションに同時に存在することはできません。

1度に1つのトランジションしか許容されないため、このReverb Zoneの配置にもう1つの課題が残ります。このゾーンは町の端の方にあり、RZ_TownとRZ_Meadowの間のトランジション領域の近くです。ポータル同士の範囲が重複していけないように、トランジションリージョンも予期せぬ事態を避けるために重複しないようにします。今回の場合はスペースが充分にあるため、2つのトランジションが重複しないようにバー全体を町の境界線から遠ざけるか、町のReverb Zoneを広げることができます。

profiler town overview

このReverb Zoneが設定できれば クエストを提示する者 (と私が呼んでいるエミッター)をゾーン内に配置して、パティオ部分の独特のリバーブを適用することができ、バーの外部にいながらも、伝播の観点でRZ_Townルーム内にいるかのようにできます。バー内部から来る音(アンビエンスルームトーンや、ドア越しに怒鳴ってくる誰かの声など)は、ポータル経由でいつも通りに伝播します。ポータルを通過した音は、伝播の観点で1つの大きな空間として扱われる各Reverb Zoneとその親で形成されたルーム階層に入ります。

冒険は疲れますね、そろそろ一杯いきましょう

ビデオゲームの とてもリアルなクエスト をプレイして 冒険的な楽しい時間 を過ごすシナリオを紹介してきましたが、パティオに座っている Wwiseクエストの指導者 が、君は1日分の冒険をもう充分にこなしたから中に入って一杯やってはどうだ、と提案したと仮定します。すばらしいアイデアであるため、当然主人公も助言に従い、そのミッションを完了してくれるはずです。経験的なポイントがあふれています。魅力的な各種UI現象が起きています。よくできました。ところがバー自体は普通のルームであり、Reverb Zoneではないようです。なぜ普通のRoomで選択的に透明なサーフェスを有するReverb Zoneではないのでしょうか?

Reverb Zoneは結果的に Room であり、いくつかの追加プロパティがあります。Reverb ZoneとRoomには重要な違いがいくつかあり、どちらを使うのかを決める際に影響します。私はあえて簡単にReverb Zoneに決定できる事例を選んできましたが、標準的なRoomを使用した方がよいケースもあります。

両者の大きな違いの1つが親Roomです。Reverb Zone同士を親子関係にすると、シミュレーションや伝播のために1つの空間として扱うルーム階層が作成されます。理論的には複数のReverb Zoneだけで形成された空間も可能ですが、その場合はRoomやPortalのメリットを活用できず、すぐにパフォーマンス問題へと発展する恐れがあります。Spatial Audioでは一般的にルームやポータルのネットワークを利用することで、エミッターやリスナーのオブジェクトが移動したり変わったりした時、エミッターからリスナーまでのパス全体を再計算する手間を回避できますが、このネットワークがない場合は、パス全体を毎回見つける必要があります。私があげた事例では気になるほどの差が出ませんが、より大きいマップとより複雑なジオメトリとなると、負担が大きくなります。

Reverb Zoneを差別化するもう1つの重要な特徴はジオメトリが必要なことで、ほかのRoomと違います。Reverb Zoneの出入りはポータルではなくトランジションリージョンに依存するため、トランジションが起きる場所を定義するジオメトリの存在が必要です。

ごく一般的な話として「部屋」と気軽に表現できるような、閉ざされた空間やほとんど閉ざされた空間や、はっきりと定義されたカスタム設定の入り口がある空間などでは、ほとんどの場合に普通のRoomの方が適しています。家やビルの中の部屋、車庫、廊下などです。

Reverb Zoneの方が適しているのは大規模な空間を分割する時や、完全に閉鎖されていない空間や、Portal配置の制約によりルームトランジションが難しくなる場合などです。SDKドキュメントの例を見ると、高速道路の高架下や、庇付きのバルコニーや、前述のように屋外エリアから部分的に切り出したスペースなどが考えられます。

プレイしてくれてありがとう

クエストはこれで完了です。すべてのボックスをチェックし、すべてのNPCと話し、すべて(?)のモンスターと戦い、すべての陶器を破壊しましたので、その過程でReverb Zoneの便利な使い方を学べたことを願っています。

トーマス・ハンセン

ソフトウェアデベロッパ

Audiokinetic

トーマス・ハンセン

ソフトウェアデベロッパ

Audiokinetic

カナダ・ケベック州ガティノー市在住のソフトウェアデベロッパ。2022年にAudiokineticのR&Dチームに加わりました。ゲーム開発の経験があり、インディーゲームからAAAコンソールタイトルに至るまで、さまざまなプロジェクトに参加してきました。熱心なマルチ楽器奏者であり、オタワやガティノーの複数のバンドのメンバーです。

コメント

Replyを残す

メールアドレスが公開されることはありません。

ほかの記事

WAAPIとPythonを利用したチーム作業の紹介とその例

20.12.2022 - 作者 ユージン・チェルニー

ReaWwiseの開発 パート1 - プリプロダクション

25.4.2023 - 作者 ベルナール・ロドリグ(Bernard Rodrigue)

Wwise 2023.1 最新情報

Wwise 2023.1がリリースされ、Audiokinetic Launcherからインストールできるようになりました。本ブログでは最新機能の概要をご紹介いたします。 ...

9.7.2023 - 作者 Audiokinetic

WAQL 2.0

WAQL(Wwise Authoring Query...

22.8.2023 - 作者 ベルナール・ロドリグ(Bernard Rodrigue)

Wwise Unrealインテグレーションの現状

このブログは私が2022年に書いた『Wwise Unrealインテグレーションの改善』に続くものです。前回のブログではWwise...

5.3.2024 - 作者 ギヨーム・ルノー(GUILLAUME RENAUD)

Unreal EngineでWwiseから発音する方法

2.4.2024 - 作者 合田 浩(HIROSHI GODA)

ほかの記事

WAAPIとPythonを利用したチーム作業の紹介とその例

ReaWwiseの開発 パート1 - プリプロダクション

Wwise 2023.1 最新情報

Wwise 2023.1がリリースされ、Audiokinetic Launcherからインストールできるようになりました。本ブログでは最新機能の概要をご紹介いたします。 ...