はじめに
UE4.23+「ADX2 LE v2.10.05」を使用します。
アンリアルエンジン4とサウンドミドルウェア「ADX2 for UE4」を連携させ、
ゲーム内のBGMに対してエフェクトを動的にかける処理を実装します。
サウンドに動的なエフェクトを使う場面の例
- 雨天の屋外から屋内へ入る場合際に、段々と雨の音をくぐもらせる
- スローモーション演出時にローパスフィルタをかける
- 浮遊感や疾走感の表現として、ハイパスフィルタをかける
- ダンスフロア等のロケーション表現
- リバーブエフェクトをかけ、空間を表現
前提
「ADX2 for UE4 LE」を使用します。導入や簡単な使い方は以下の記事にあります。
ADX2 for UE4の導入で、一歩上のサウンド表現を(導入編)
https://qiita.com/SigRem/items/4250925f6d66a4fd287a
ADX2 for UE4の導入で、一歩上のサウンド表現を(実践編)
https://qiita.com/SigRem/items/c089b71c42e898980a46
やること
- AtomCraftでキューを作成
- DSPバスを設定し、エフェクトを用意
- UE4にインポート
- ブループリントでリアルタイムにエフェクトのかかり方を変更する
実装
AtomCraft側
キューの作成
キューシート、およびキューを作成します。
画像では「ポリフォニック」で作っていますが、セレクタによるトラック遷移など、他の処理を混ぜたい場合キューのタイプを任意のものにしましょう。
マテリアルからサウンドをトラックに入れます。
DSPバスの作成
エフェクトを構成する「DSPバス」の設定をします。
プロジェクトツリーの「DSPバス設定」を右クリックし、「新規オブジェクト」→「DSPバス設定の作成」を選びます。
新規に「DspBusSetting_1」が作られますので、分かりやすいようF2キーなどでリネームします。
DSPバスの中身を編集……するまえに、まずは必要なパネルを表示します。
ツールバーの「表示」→「メインビュー」→「ミキサー(DSPバス設定)」をクリックして、ミキサーのパネルを表示させます。
下の画像の場所にタブが出たと思います。もしない場合、もう一度ツールバーから表示を行ってみてください。
タブをクリックするとDSPバスの編集画面に移ります。
DSPバスについて
ミキサーについて少し紹介します。
下の画像は少しだけミキサー内でDSPバスを編集してみたものです。
一番左にあるのが「MasterOut」で、それ以外はエフェクトをかけるための「バス」という単位です。
「Reverb」「Flanger」「MixA」のバスはそれぞれエフェクトをかけた音を「MasterOut」に送り、最終的にそれらが合わさったものが「MasterOut」から鳴って音声を形作ります。
エフェクトをかけた音を、さらに別のバスに送って合成することも可能です。
それでは、実際にDSPバスでエフェクトをかけてみましょう。
DSPバスの編集
ミキサーの空いている場所で右クリックし、「DSPバスの追加」をします。
バスが追加されました。
「エフェクト」の横にある+ボタンを押してエフェクトを追加します。今回は試しに「リバーブ(反響)」を追加しました。
「センド」の横の+ボタンを押し、「MasterOut」を選んで「MasterOut」へと音を送ります。
下の画像のようになっていれば大丈夫です。
「MasterOut」へ音の通り道を作ってあげなければ、エフェクトのかかった音は鳴らないようになっています。
バスを選択していれば、インスペクターで名前を変更できます。
エフェクトを選択すると、インスペクターでエフェクトのかかり具合やパラメータが編集可能です。
現時点ではまだエフェクトがどうかかっているかをプレビューすることができません。次の項で、とりあえずエフェクトのプレビューを可能にしてしまいましょう。
バスマップの作成
キューに対してDSPバスを適用するためには、「バスマップ」が必要になります。
プロジェクトツリーの「バスマップ」内の「キュー設定用バスマップ」を右クリックし、「新規オブジェクト」→「バスマップの作成」をクリックします。
新規にバスマップが作られますので、リネームしておきます。
作成したバスマップを選択した状態で、インスペクターの「バスセンド」の項目内の「バス名1」に先ほど作ったバスを指定します。
キューへのDSPバス設定の適用
ワークユニットツリーで、任意のキューを選択します。
インスペクターで「バスマップ」に、作成したバスマップを指定します。
「バスセンド1」にチェックを入れます。
これでプレビューが可能になりました!再生ボタンを押して聞いてみましょう。
インスペクターの下の「バスセンド」ボタンを押すと、エフェクトのかかり具合を設定できます。
「MasterOut」のボリュームを低くすることで、エフェクトのかかった音のみをプレビューすることもできます。
エフェクトを追加する場合
プレビューして気に入らなかったらミキサーに戻ってエフェクトを編集したり、新しく追加するのもいいでしょう。
エフェクトを追加した場合、以下の項目を確認してください。
センドをMasterOutに繋がるように設定する
バスマップのインスペクターで、追加したバスを登録する
キューのインスペクターで、追加したバスセンドにチェックを入れる
キューシートのビルド
UE4での実装
キューシートのインポート
acfファイル、afbファイルをドラッグアンドドロップしてインポートします。
Atom Configファイルも今回使用するものに差し替えておきます。
キュー、リファレンスの配置
レベルにキューを配置します。
レベルブループリントを開きます。
イベントグラフの空いている場所で右クリックし、「Create a Reference to (アクター名)」を選択します。
リファレンスノードが配置されます。
ブループリントノードによるDSPバス操作
UE4内でエフェクトのかかり具合を変動させるには、「Set Bus Send Level」や「Set Bus Send Level Offset」ノードを使用します。
「Set Bus Send Level」は元のバスの音量に乗算するかたちで、「Set Bus Send Level Offset」では元のバスの音量に加算して操作します。
もしエフェクトがかかっているように聞こえない場合、後述する「DSPバス設定の上書き」を試してエフェクトを有効にしてください。
DSPバス設定を上書きする
DSPバス設定をまるごと適用するには、「Attach Dsp Bus Setting」ノードに任意のバス設定名を入力します。
プロジェクトツリー内の「DSPバス設定」名がそのまま使えます。
これを使用することで、DSPバスを設定していないキューに対してもエフェクトをかけることができます。
実装例
以下のグラフ例では、「0」キーを押すごとにバスID0(つまり元の音量)をON/OFFし、
「1」キーを押すごとにバス「Reverb」の音量をON/OFFします。
「Set Bus Send Level by Name」「Set Bus Send Level Offset by Name」ノードでは、AtomCraftのミキサーでつけたバス名を入力します。
特別な処理がない限り、バス名を指定して音量を変動させるのが楽で確実だと思います。