Wwise 2017.1から導入されたスペーシャルオーディオの新機能に含まれる Wwise Reflectプラグインは、ゲームに配置された壁面や物体から音が跳ね返される様子をリアルタイムで算出して、ユーザーが周囲の空間を実感できるようにします。例えばファーストパーソンゲームの場合。あなたのキャラクターが音を出すと、今いる部屋の壁に反射するはずです。音の反射は部屋の形状やリスナーのポジションによって変わります。壁から離れていれば、近くにいる時よりも反射音が遅れて聞こえるはずです。この様子を、新しいWwise Reflectプラグインでシミュレーションできます。今回のブログでは、UnrealインテグレーションとWwise Audio Lab(WAL)を使って、Wwise Reflectで没入感あふれる音響レンダリングを実現する方法を、手順を追って説明します。WALは、Audiokineticの機能で遊んだり実験したりできるファーストパーソンのUnrealゲームです。
Wwiseプロジェクト
Wwiseプロジェクトで、まずジオメトリから反射されるサウンドエフェクトを設定します。WALは、ファーストパーソンキャラクターがボールランチャーを持つゲームです。ボールランチャーのサウンドはすべて、以下の画面に表示されたWeapon Actor-Mixerに入っています。Reflectプラグインは、AUXバス上にインサートするものです。Reflectエフェクトを適用したAuxバスにウェポンサウンドをルーティングするには、Property EditorのGeneral SettingsでUse game-defined auxiliary sendsを有効にします。
次に、Reflectプラグインを適用したAuxバスを追加します。今回の例では、下図の通り、Auxバス名はFirstPersonです。
AuxバスのEnable Positioningをチェックして、2Dオプションを選択します。これは、Reflectプラグインが先に3Dポジショニングの処理を済ませるので、Wwiseがさらにもう一度ポジショニングを行うのを防ぐための設定です。
WAL
部屋のどの壁面が音を反射するのかを、ゲーム側で指定する必要があります。Unrealインテグレーションでは、これにSurface Reflectorコンポーネントを使います。分かりやすいようにUnreal Integrationにこのコンポーネントが付属したAkSpatialAudioVolumeが含まれているので、少なくともEnable Surface Reflectorsをチェックしておきます。WALでは、このようなボリュームを1つ、下図のようなメザニン(中二階)と呼ばれる建物に配置します。
メザニンの建屋は、立方体として簡単に表せます。下図で明らかなように、反射面に番号が振られます。この時点では、まだメザニン自体のSurface Reflectorの体積が設定されていませんが、このブログの最後に説明します。
このコンポーネントのAcoustic Surfacesセクションで、それぞれの面に異なるAcoustic Textureを設定できます。Acoustic Textureは周波数に依存する吸音プロパティで、フィルタやゲインを使ってモデル化されています。例えば、金属製の部屋と木製の部屋では、反射音が異なります。とりあえず、自分のサウンドデザインのアーリーリフレクションに満足できるまで、Acoustic TextureをNoneにしておきます。テクスチャをNoneにすると発生したサウンドの全周波数を完全に反射して、フィルタが適用されません。
Reflectプラグインで使うウェポンを構築するには、ファーストパーソンキャラクターに付属するAkComponentのオプション設定を変更します。コンポーネントのDetails画面のSpatial Audioで、Early Reflection Aux BusとしてAuxバスFirstPersonを追加します。ここのプロパティ設定で、アルゴリズムで算出される最大リフレクション次数を変更することもできます。例えばReflection Orderが2であれば、2つの反射面に跳ね返された音となります。また、このコンポーネントの面白い機能の1つがDebug Drawオプションです。どれかを有効にすると、コンポーネントから発生するレイが、これから反射されることになる、途中に障害物のない反射面まで延びる様子が、確認できます。レイが接触した面の名前も、画面に表示されます。Reflectプラグインを使ってミキシングする時にとても役に立つ機能で、どの三角形がプラグインに送られているのかが分かります。これについては、次のセクションでReflect Plug-in Editorと共に詳しく紹介します。
下図は、メザニン内で、ウェポンコンポーネントから描かれた1次リフレクションの様子です。プレイヤー視点とサードパーソン視点の2種類の画像です。
下図は、2次反射を選択した場合のリフレクション例です。
Wwise Reflect
この時点で、ゲームをWwiseに接続してミキシングを開始できます。ProfilerレイアウトのVoices GraphでFirstPersonというAuxバスを探します。出てくる音が短すぎる場合は、Performance Monitorのカーソルを動かして時間をさかのぼる必要があるかもしれません。メザニン内のWALのグラフは、下図のようになります。
このグラフについてはまた別のブログで詳しく説明しますが、今は、FirstPersonというWwise Reflect Effectが使われているAuxバスをダブルクリックします。Auxiliary Bus Editorが開くので、Reflect Effect Editorを開きます。いよいよ、プラグインのパラメータで遊びながらアーリーリフレクションのミックスを調整していきます。
下図のとおり、Wwise Reflectのリフレクションはイメージソースとして表示されます。イメージソースとは、反射面の裏側の同じ距離だけ離れた場所に配置された、エミッターのイメージを表し、反射面を鏡としたような考え方です。イメージソースとリスナーを結ぶ直線が壁と交わる点が、ちょうど音の跳ね返る場所です。この直線の長さが、音が壁面を跳ね返ってリスナーに到達するまでの距離と等しくなります。ご興味があれば、Wwise Reflectのイメージソースの活用方法がWwise Reflect ドキュメンテーション やWwise SDKドキュメンテーションに詳しく書かれているので、参照してください。
ゲームに接続してキャプチャータイムを見ながら、ウェポンから音を出す、Wwise Reflect Effect Editorのリストにリフレクションが表示され、折れ線グラフにもフラグが表示されるので、リフレクションで音が出ているのが分かります。リストの各列を見ると、リフレクションの名前、反射した音を発したゲームオブジェクトの名前、発生音にかけるフィルタとなるテクスチャの名前、そして音がリスナーに到達するまでの合計距離が示されます。上図のとおり、リフレクション名はAkSpatialAudioVolumeの省略名、反射面番号、そして反射面の三角形番号を並べたものです。デバグ用に表示できる列がほかに2つあり、Image Source IDは各リフレクションに割り当てられる固有のIDで、Game Object IDは同名のゲームオブジェクトが複数ある場合に見分けるために使います。
リフレクションをミキシングするには、グラフのカーブを動かします。音が大気を進むうちにオーディオスペクトル全体で徐々にエネルギーを失いますが、これをDistance Attenuation (Image Source vs. Listener)のカーブでモデル化できます。今回のファーストパーソンの例では、キャラクターとメザニンの壁面の間の距離に応じて、グラフのカーブの形状に従ってリフレクションのボリュームが変化します。上図のEffect Editorを見ると、キャラクターが壁から離れるにつれリフレクションボリュームが小さくなるようにカーブを調整してあります。空気の吸音をモデル化するには、Distance Low-pass FilterやDistance High-pass Filterのカーブを微調整します。例えば、カーブ形状を変えて低い周波数よりも高い周波数の方が速く減衰するようなシミュレーションができます。
音の秒速がゲームユニット単位で表示されますが、音速を遅くすればリフレクションサウンドとドライサウンドが区別でき、カーブの変更もしやすくなります。リフレクションのミュートやソロ再生は、リストのボタン(M、S)をクリックします。ミュートボタンやソロボタンが適用されるのは、このEffect ShareSetの範囲内だけです。例えば、リフレクションの1つをソロにすると、このAuxバスのほかのリフレクションが聞こえなくなりますが、それ以外のバスやAuxバスのサウンドはそのまま聞こえます。普段から、まずWwise ReflectエフェクトをインサートしたAuxバスをソロにして、それから各リフレクションのミュートやソロを適用する習慣をつけると良いでしょう。
ReflectのAuxバスをソロにして、部屋の壁面の1つをソロにした状態から、ゲーム内で移動しながらカーブを変更して、自分の求めている距離減衰になるようにカーブを変えていきます。各カーブのフラグにリフレクションの距離が表示されるので、作業中にとても助かります。
一度に発生するリフレクションが多すぎる場合や、ソロさせたリフレクションだけを見たい場合は、Filterバーを利用します。フィルター条件として、名前、ゲームオブジェクト名、テクスチャー、さらにIDも設定できます。Filterバーの左側に、ミュートやソロのリセットボタンがあります。リフレクションをミュートしたり、ソロしたりしても、それがアクティブでなくなっていることもあるので、このボタンで全てをリセットできます。
次のステップは?
アーリーリフレクションのミキシングが完了したところで、次はサーフェスにAcoustic Textureを追加して、部屋ごとに様々な違いを出す作業に移ります。2017.1では、Acoustic Textureのファクトリプリセットが使えます。ファクトリプリセットは、Virtual Acousticsの、ShareSetsにあります。
メザニンの壁はすべて木製です。AkSpatialAudioVolumeでテクスチャを追加すると、テクスチャは種類ごとに色分けされ、サーフェス番号ではなくテクスチャの種類が壁に表示されます。
メザニンの建屋で使用するテクスチャによって変わる結果を、以下にいくつかご紹介します。
木造のメザニン
無響室のメザニン
カーペット敷きのメザニン
なし
この部屋のミキシングが完了したところで、ゲームに部屋を追加したり、他のボリュームを入れたりします。メザニンの建屋のメザニン(中二)階に別のボリュームを追加してみます。ただし、ご覧の通り、この床の形状は単純な立方体では表せません。簡単な方法として、階の大部分を立方体のボリュームでカバーして、残る小さなバルコニー部分は台形として追加します。床面だけが有効で、ほかの面のリフレクションはありません。この方法の唯一の欠点は、手すりから音が反射しないことです。全て、ゲームのニーズによりけりです。
また、屋外にいる時に、メザニンの建屋からの反射をシミュレーションできるように、建物全体の周囲に体積(volume)とレンガのテクスチャを追加しました。
次のブログで、Wwise Reflectのインプリメンテーション方法、3Dバスとの依存関係、他のプラグインと一緒に使う方法などを紹介します。
その他のリソース
UnrealでWwise Spatial Audioを使う
コメント