前回のブログジオメトリ情報を活用するダイナミックなアーリーリフレクションを、UnrealとWwise Reflectでシミュレーションするでは、新しいWwise Reflectプラグインでサウンドミックスする方法を、UnrealインテグレーションとサンプルゲームWwise Audio Labを使って説明しました。このブログでは、プラグインの実装、スペーシャルオーディオラッパー(spatial audio wrapper)の使い方、3Dバスアーキテクチャとの関係などについて、さらに詳しくみていきます。
Wwise Reflectの実装
Wwise Reflect プラグインは、イメージソース(image source)方式 [1] を使って反射をモデル化します。イメージソースとは、反射面を挟んで、発音源と同じ距離だけ離れたエミッターの仮想音源イメージ(鏡像)のことで、反射面を鏡のように捉えます。イメージソースからリスナーに直線を引くと、反射面と交差しますが、これが音の反射する点で、光線が鏡に反射する様子と同じです。下の鳥瞰図は、同じ部屋にあるエミッター(E)とリスナー(L)の関係を示したものです。青い点が1次反射のイメージソースを表し、太い青線がエミッターからリスナーまでの1次反射のサウンドパスを表しています。細い青線は、パスがイメージソースからリスナーへ向かう線です。
Wwise Reflectプラグインは、音の発生源に適用されます。エフェクトに必要なのは、エミッター、イメージソース、そしてリスナーのそれぞれのポジションです。これをもとに、イメージソースからリスナーまでの距離を計算でき、その結果、エミッター音の伝達距離も計算できます。反射をシミュレーションするには、ディレイライン(delay line)にドライサウンドを送ります。ディレイラインの長さは、音の伝達距離と音速に基づいて設定され、Wwise ReflectプラグインのUIで調整できます。遠いイメージソースは、近いイメージソースよりもあとに反射されます。次にWwise Reflectプラグインはイメージソースとリスナーの角度と向きを計算してから、全てをミキシングして元のチャンネルコンフィギュレーションに戻します。イメージソースのポジションが分かるのはWwise Reflectだけなので、この段階でポジショニングを行う必要があります。
ユーザーは、様々な方法で反射音を変更できます。前回のブログでみたとおり、Wwise Reflectプラグインエディタで提供されるカーブを使って、距離に基づく減衰やフィルタを適用できます。ゲーム側では、アコースティックテキスチャ(Acoustic Texture、吸音素材)が、エミッターのいる部屋を差別化するもう1つのフィルターとなります。アコースティックテキスチャは反射面の吸音特性をシミュレーションします。Project ExprorerのShareSetタブを開くと、アコースティックテキスチャの設定がVirtual Acousticsの下に表示されますが、下図のとおりFrequency Absorptionの設定が4つと、グローバルオフセットが1つあります。Wwise Reflectが行うバンド幅は各バンドが2オクターブ毎のクロスオーバー周波数が250、1000、4000 Hzとなります。Absorption値は、特定の周波数バンドが表面で吸収される音の比率を表します。例えば、Carpet(カーペット)というアコースティックテキスチャはHigh(高周波)を完全に吸収して、LowやMid Lowの周波数はエネルギーの50%以下を反射させます。全てのバンドをOffsetスライダで一括変更できますが、反射面はそこから反射される音を増幅することはないので有効値は内部で0から100に制限されます。
イメージソースの計算
Wwise Reflectプラグインが、イメージソースのシミュレーションにディレイライン、フィルター、パンニングを利用することが分かりました。Wwise Reflectプラグインをコールする前に、これらのイメージソースのポジション計算をしておく必要があります。自分で計算してWwise ReflectプラグインAPIを直接コールすることも、Spatial Audio APIを使用することも、可能です。Spatial Audio APIは、Wwise Reflectプラグインや、部屋やポータルなどのスペーシャルオーディオの要素を使えるようにするラッパー(wrapper)です。リスナーにとってエミッターから発生するイメージソースがジオメトリ上、どのポジションにあるのかを、常に計算できます。必要なのは、このジオメトリの三角形だけです。つまり、どのような形状にも対応できます。三角形ごとに、専用のAcoustic Textureを与えることができます。
作成するイメージソース数は、エミッターの反射の次数によります。2017.1で、最大4次反射まで対応しています。前のセクションでイメージソースの説明をした時は1次反射、つまり音が面を一度だけ跳ね返ってリスナーに到達した場合だけでした。2次反射のイメージソースは、下図のとおり、1次反射イメージソースのイメージソースと考えることができます。2次反射された音は、2つの面に跳ね返ってからリスナーに到達します。この音はまた、音が触れた2つのアコースティックテキスチャによってフィルタリングされます。既に気づいたかもしれませんが、反射する次数(回数)が進むごとに、反射の数が急増します。
Wwiseプロジェクト
音が出ると、それが周辺の面に反射して大量の反射音が発生しますが、下図のように、全てが面と空気によって吸収されるまで続きます。最初の反射はアーリーリフレクション(初期反射)と呼ばれ、Wwise Reflectプラグインでシミュレーションします。残りの反射はレイト(後期)リバーブと呼ばれ、Wwiseのほかのプラグインでシミュレーションできます。Wwise Reflectプラグインをエミッターごとに適用するのに対して、Wwiseで提供中のレイトリバーブプラグインは、一般的にゲームの部屋ごと、またはエリアごとに適用します。レイトリバーブプラグインで、部屋の大きさや全体的な音響特性に基づいて事前に計算したいくつかのアーリーリフレクションエフェクトを作成できますが、Wwise Reflectほどジオメトリに厳密ではありません。
前のセクションで説明した通り、Wwise Reflectプラグインはエミッターごとに適用します。エフェクトをボイス毎に適用すると重すぎますが、それをAuxバスにおくことでエミッターごとに適用できます。WALでプレイヤーがウェポンを発砲(Weapon Fire)すると、ウェポンのボイスがリスナーに直接送られると同時に、Auxバスに送信され、そこでWwise Reflectプラグインが適用されます。Auxバスに、Wwise Reflect Effectシェアセットを1つ設定してあります。前回のWwise Reflectのブログで、Wwise Reflectのエフェクトエディタのパラメータ設定を説明しました。
3Dバスの力で、エミッター1つに対してAuxバスを1つずつインスタンス化します。これを分かりやすくするために、2つのボイスが同じAuxバスを使った時のWwise Reflectをみてみます。例えば、WALではプレイヤーのフットステップ(Fooststep)ボイス用にフットのエミッターもあります。FirstPersonという1つのAuxバスを使って、両方のエミッターにWwise Reflectが適用されます。プレイヤーが歩きながら発砲すると、下図のような流れになります。WeaponAkComponentとFootAkComponentの2つのエミッターが、同じFirstPerson Auxバスにボイスを送りますが、グラフにはAuxバスが2つの別々のものとして表示されています。このようにしてエミッターごとにFirstPersonがインスタンス化され、それぞれ異なるスペーシャリゼーションが行われるのです。
ウェポンのエミッターもフットのエミッターも同じAuxバスを使うので、それぞれのWwise Reflectエフェクトは同じWwise Reflectシェアセットで設定されています。歩きながら発砲してWwise Reflectのエフェクトエディタを開くと、下のスクリーンキャプチャのように、2つのエミッターのイメージソースが同じリストとグラフに表示されます。
プレイヤー以外のほかのエミッターが出す音にもジオメトリの影響を適用するには、別のシェアセットを作成するのがベストです。WALでは、ThirdPerson Auxバスに別のWwise Reflectシェアセットを適用して、無線コンポーネントに使っています。こうすると、Wwise Reflectエフェクトのパラメータをファーストパーソンとサードパーソンのエミッターに別々に設定できます。その理由の1つは、無線コンポーネントに使われるDistance Attenuation (Emitter vs. Listener)カーブに従い、リスナーが無線に近づくと反射音のボリュームが下がるということです。物理的に正確な現象でなくても、この方が、ユーザーはアーリーリフレクションに気をとられずにエミッターに集中できます。下図は、ThirdPersonの反射音のエフェクトエディタにある設定内容です。
WALプロジェクトのMaster-Mixer Hierarchy(マスターミキサー階層)が、こちらです。Wwise ReflectエフェクトがあるAuxバスは、FirstPerson、ThirdPerson、Mountains_SpotReflectorsの3つです。この最後のAuxバスは、やまびこシミュレーション用に山(Mountains)に置いた複数のリフレクタ(Reflector)用です。
Late ReverbとWwise Reflectの関係
前のセクションの最初に、レイトリバーブの話を少ししましたが、レイトリバーブは部屋ごとに適用してジオメトリに基づいていません。Wwise Reflectプラグインを使うと、レイトリバーブプラグインの反応を拡張することもできます。Wwise Reflectのジオメトリに基づいたアーリーリフレクションを送ると、部屋のアコースティックテキスチャでリバーブが変化して、エコー密度も高まります。方法は、game-defined auxiliary sendsを、Wwise ReflectエフェクトのあるAuxバスで有効にします。下図の場合は、FirstPerson Auxバスでgame-defined auxiliary sendsを有効にしました。プレイヤーがWALの中でリバーブの設定されたエリアに入ると、そのたびにプレイヤーのウェポンやフットステップの音のアーリーリフレクションが、リバーブに送り込まれます。
例えば、Mezzanine 2の建物でウェポンを発砲すると、以下のグラフのようになります。点線がAuxセンドを示しています。ウェポンのボイスを別々のAuxバスにあるWwise ReflectとRoomVerbの2つのエフェクトに送ると同時に、リスナーに直接アウトプットしています。FirstPerson Auxバスはアーリーリフレクションをリスナーにアウトプットして、Mezzanine2 Auxバスにも送っています。
まとめ
このブログと、Wwise Reflectに関するブログジオメトリ情報を活用するダイナミックなアーリーリフレクションを、UnrealとWwise Reflectでシミュレーションするを合わせて読んで、テーマについて理解が深まったところで、あなたもこのエフェクトを最大限に活用して、ジオメトリで定義されるアーリーリフレクションをご自分のゲームに取り入れてみてください。全てのエミッターにWwise Reflectは必要ないので、ゲームのサウンドを明らかに豊かにしてくれるエミッターを厳選して、やり過ぎないようにしてください。
参考文献
[1] Savioja, Lauri. "Image-source Method in a Rectangular Room." Room Acoustics Modeling with Interactive Visualizations. (accessed September 11, 2017)
コメント