はじめに
ADXアンバサダーとして記事を書いておりますSigと申します。
この記事ではADX for UE の 「バスセンド」機能及び「Atom Gameplay Volume」機能を使い、特定のエリアでの音響設定やエリア制御などを行う方法をまとめます。
多少の事前設定は必要になりますが、プログラムを書かずとも視覚的に音響の変化ボリュームを配置することが可能になります。
まずはエフェクトを噛ませる「バス」を作り、通常のバスの音量、エフェクトつきのバスの音量を変化させることで音響エフェクトのON/OFFを実現します。
「Atom Gameplay Volume」はUE5のデフォルト機能である「Audio Gameplay Volume」と似た感覚で使える機能です。
また、Atom Gameplay Volume機能を使わず、ブループリントを通して直接リバーブなどの音響効果を適用・操作する方法については、こちらの記事をご覧ください。
やること
- AtomCraftでリバーブエフェクトを作成する
- UE内で音響ごとのエリアをAtom ameplayVolumeを使い構成する
- BlueprintでAtomGameplayVolumeを制御する
- Atom Gameplay Volumeに機能を追加する
また、記事中に「blueprintue」を使用したBPグラフ共有を載せています。コピペすることで大体の実装ができますので、よろしければご活用ください。
当記事ではUE5.7 及び 「ADX LE UE SDK(2.05.01)」を使用します。
また、基本的にブループリントのみでの実装を行います。
ADX for UEはインディー向けの「LE版」であれば、無料で使用できます。
https://game.criware.jp/products/adx-le/
前提
「ADX for UE LE」を使用します。導入や簡単な使い方は以下の記事にあります。
ADX for UEの導入で、一歩上のサウンド表現を(導入編)
ADX for UEの導入で、一歩上のサウンド表現を(実践編)
ADX for UEでつくる、エリアごとの音響
AtomCraftでリバーブ、バスセンドを設定する
まずはAtomCraftで音響効果となるエフェクトを作り、設定していきます。
プロジェクトツリーの「ミキサー」から、使用中のミキサーを選択するか画面下部のタブ「ミキサー」に切り替えます。

ミキサー内でバスを追加します。
空欄で右クリックして「バスの作成」。

バス名を入力します。
今回は「BUS_Reverb」、「BUS_Normal」としました。
前者はリバーブ効果を適用するためのバス、後者は通常の音を再生するためのバスになります。

「BUS_Reverb」側にエフェクト「リバーブ」を追加します。

リバーブエフェクトはインスペクターにて音の響き方などの設定が可能です。

バスマップを選択し、バスセンドを設定します。
出力先のバス名には「BUS_Normal」を、バス2には「BUS_Reverb」を指定します。
これにより、再生されたキューはふたつのバスから再生されることになります。

キューを選択し、インスペクターで「バスセンド」のボタンを押します。

バスマップを設定したものに指定し、出力先とバスセンドでふたつのバスに流れるようチェックを入れておきます。
適用するキューにおいて、この設定が適用されていることを確認してください。

UE5にキューシートをインポートする
UE5のエディタにて、コンテンツドロワーにビルドしたacbファイル、acfファイルをドラッグ&ドロップしてインポートします。
既にあるアセットを上書きする場合、該当のアセットを選択して右クリックし「Reimport」から再インポートします。

その際に表示されるダイアログでは両方ともYesを選択します。
これにより、プロジェクト設定が自動的に適用されます。


Atom Rackを用意する
音響を適用するため、音声の出力先である「Atom Rack」アセットを用意します。
コンテンツドロワーで右クリックし、「ADX Atom」→「Sound Renderer」→「Atom Rack」を選択。

Atom Rackアセットが作られます。

ダブルクリックして開き、「Atom Config」にインポートしたacfファイルを指定します。

Dsp Bus Settingも今回のプロジェクトで作成したものが選択できるようになっているので、それを指定します。

「ADX Atom」タブの「Master Rack」に作成したAtom Rackアセットを指定します。

Atom Sound Classの設定
Atom Gameplay Volumeの変化を適用するために、Atom Sound Classアセットも用意します。
コンテンツドロワーで右クリックし、「ADX Atom」→「Atom SOund Class」を選択。

アセットを開き、「Apply Ambient Volumes」にチェックをつけます。
これにより、Atom Gameplay Volumeの変化が適用されます。

が、このSound Classを各キューに設定しなければなりません。
キューを選択し、Detailsパネルの「Class」に作成したAtom Sound Classアセットを指定します。

アセットの数が多い場合、プロパティマトリクスを使って一括で適用するのがいいでしょう。
適用したいアセットをすべて選択し、右クリックして「Bulk Edit via Property Matrix」を選択します。

複数のアセットのDetailsパネルを一度に設定できるウィンドウが現れます。
右側のPinned Columnsパネルで「class」を検索し、Atom SOund Classアセットをピックします。

Atom Gameplay Volumeを配置する
いよいよAtom Gameplay Volumeを使って音響に変化を与えていきます。
Atom Gameplay Volumeをレベル上に配置します。

Detaisパネルで座標や「Brush Settings」を入力し、レベルの一部を覆います。

「Display Shaded Volume」にチェックをつけると半透明のボリュームが可視化され、範囲が分かりやすくなります。

このボリュームを選択した状態でレベルブループリントを開きます。

右クリックし、「Add Event for Atom Gameplay Volume」→「Events」からリスナーがボリュームに入った、離れた際のイベントが配置できます。

Print Stringノードを使ってデバッグ表示をしてみましょう。

ゲームを再生し、カメラがボリュームに入ったり出たりするとデバッグメッセージが表示されます。
この状態ではまだ実際にリバーブエフェクトはかかりません。

Atom Gameplay Volumeで音響を変化させる
Atom Gameplay Volumeは様々な機能を持ちますが、使用するには対応したコンポーネントを追加する必要があります。
Atom Gameplay Volumeを選択し、Detailsパネルの右上にある「+ Add」ボタンを押します。
「Bus Send」コンポーネントを追加します。

追加された「Atom BusSendVolume」コンポーネントを選択し、バスセンドの音量を設定します。
「Bus Send Settings」の要素を追加します。

「Listener Location State」ではボリュームの外にいるか、中にいるかを指定します。
どちらも追加し、ボリューム内外でのバスセンド音量をどちらも指定してしまいましょう。
また、Atom Gameplay Volumeが複数ある場合や重なっている場合、「Priority」の大きい方が優先的に適用されます。

まだバスセンドの変化ルールを指定しただけなので、実際に音量を指定するため「Bus Sends」に要素を追加します。

「Bus Sends」では要素ごとにAtom RackとBus、Send Levelを指定します。
ここで指定したバスに、Send Levelの音量が適用されます。
ボリューム内(Inside the Volume)では「BUS_Reverb」音量を1.0に、
ボリューム外(Outside the Volume)では「BUS_Normal」音量を0.0にします。
これでとりあえずの設定は完了です。


テストしてみましょう。
キューシートアセットから、BGMなどのキューをレベルにドラッグ&ドロップして配置します。

このキューをAtom Gameplay Volume内に移動させます。

ゲームを再生してみましょう。
カメラ(リスナー)がボリューム内外にいる状態に応じて、リバーブ音量が変化するはずです。
反応しない場合、デバッグメッセージと合わせてこれまでの工程を洗ってみてください。
補足
Atom Gameplay VolumeはSet Enabledノードで有効状態が切り替えられます。

このグラフはこちらからコピペできます。といっても単純なものですが……。
また、Atom Gameplay Volumeには他にも追加することで効果を発揮するコンポーネントがあります。
たとえば「Filter」ではローパスフィルタをかけることで、「ボリューム内では音がくぐもって聞こえる」などの演出が実装可能です。
コンポーネントを追加し、

コンポーネントのDetailsパネルでフィルタのかかり具合を調整できます。




