LoginSignup
2

UE5 + ADXで、遠距離や遮蔽物に隠れた音を減衰させる(オクルージョン)

Last updated at Posted at 2021-08-11

はじめに

ADXアンバサダーとして記事を書いておりますSigと申します。
この記事ではアンリアルエンジン5とサウンドミドルウェア「ADX for UE」を連携させ、ゲーム中に音源が遮蔽物に隠れた際、聞こえてくる音を減衰させます。
単純な音量の変化だけでなく、音をくぐもったように変化させて臨場感を与えることも可能です。

ADXによってUEに追加されるサウンド機能の「オクルージョン」を使用します。

当記事ではUE5.2を使用します。基本的にブループリントのみでの実装を想定しています。
ADX for UEはインディー向けの「LE版」であれば、無料で使用できます。
https://game.criware.jp/products/adx-le/

前提

ADX for UEの導入や基本的な使い方は以下の記事にあります。必要に応じて参照してください。
ADX for UEの導入で、一歩上のサウンド表現を(導入編)

ADX for UEの導入で、一歩上のサウンド表現を(実践編)

実装

AtomCraftでサウンドを用意する

マテリアルの用意

AtomCraftでサウンド及びキューシートをビルドします。
サンプルとしてBGMと喧騒の環境音を用意してみました。
A01.png

マテリアルにはループ設定をしておきます。マテリアルを選択した状態で、インスペクターにて「ループ情報の上書き」を**「True」に、「ループタイプ」を「ループ」**に設定します。
A02.png

キューを作成する

今回AtomCraftで特別な実装は必要ないので、キューシートを右クリックし「新規オブジェクト」→「キュー『ポリフォニック』の作成」で通常どおりキューを用意します。
A03.png
A04.png

それぞれ対応したマテリアルを配置し、テスト再生して確認してみましょう。
A05.png

キューシートをビルドする

キューが完成したらキューシートを書き出します。
A06.png
A07.png

UE5でオクルージョンの設定をする

キューシートのインポート

UE4エディタを起動し、ビルドしたacbファイル、acfファイルをインポートします。

acfファイルのインポート時のダイアログでは、どちらも「Yes」を選択します。
これにより、ビルドしたacfファイルがUE5のプロジェクトに適用されます。
A01.png
A02.png

アセットがふたつともインポートされたことを確認します。
A03.png

キューシートのアセットを開き、キューが正常にインポートされているか確認しておくといいでしょう。
A04.png

レベル上からキューのAttenuationを設定する

キューのAttenuation(減衰)設定をします。

レベル上に任意のキューを配置します。
鳴らし続けて動作を確認したいので、ループして再生されるキューが最適です。
B01.png

レベル上に配置したキューを選択し、Detailsパネルにて「Override Attenuation」にチェックを入れます。
B02.png

チェックを入れると、距離などによる減衰が設定できる項目が出現します。
B03.png

チェックを入れない場合AtomCraftで設定した減衰設定が、「Attenuation Settings」にUE4で作成した減衰設定を適用した場合それが適用されます。
ざっと設定項目を見ていきましょう。

Attenuation(Volume)

リスナーと音源の距離が離れた場合の音量の減衰です。
「Enable Volume Attenuation」にチェックを入れることで有効になります。
B04.png

「Inner Radius」と「Falloff Distance」で減衰が始まる距離、聞こえなくなる距離が設定できます。
レベル上でもふたつの領域が表示されます。
B05.png

「Attenuation Shape」で減衰距離の形を変え、指向性のある減衰を設定することもできます。
B06.png

項目を初期設定に戻したい場合は、矢印をクリックします。
初期値から数値が変更されたプロパティにのみ出現します。
B07.png

Attenuation(Spatialization)

リスナーと音源の位置により、左右に音声を割り振り3Dサウンドを演出します。
「Enable Spatialization」にチェックを入れると有効化されます。
B08.png

「密着した状態では両側から等しく音が聞こえるが、一定距離離れると3Dサウンドとして聞こえる」といった設定も可能です。
B09.png

Attenuation(Occlusion)

「Occulusion」では、遮蔽物に隠れた場合の設定ができます。
「Enable Occlusion」にチェックを入れて有効化します。
B10.png

Occlusion Low Pass Filter Frequencyでは、隠れた音の高音部分をカットしてくぐもった印象にさせます。
数値で指定した以上の音域が聞こえなくなります。
この数値を小さめにし、BGMなどを再生してみると違いが分かりやすいです。
Occlusion Volume Attenuationは隠れた音の音量を小さくする設定です。

ゲームを実行してみましょう。カメラから見て壁の向こうに音が隠れた際、音が小さく、くぐもるように変化するはずです。
B11.png

※テスト用に音源を描画しています。コンソールコマンド「atom.3dVisulalize.Enabled 1」を入力することで音源が可視化されます。
B12.png

Occlusion Interpolation Time」は減衰状態、通常状態に移行するのにかかる時間の設定です。
「0.5」などの大きめの数値にしてテストしてみると分かりやすいでしょう。
B13.png

Occlusion Trace Channel」は遮蔽物を判定するためのTrace Channelです。
「Pawn」にすると、原則としてキャラクターのみが遮蔽物として判定されます。通常は「Visibility」で使うことになるでしょう。
B14.png

アクターやコンポーネントの「Collision」の項でチャンネルが有効かどうか個別に設定できます。
B15.png

Trace Channelを追加したり、設定を変更するにはツールバーの「Edit」→「Project Settings」からプロジェクト設定を開きます。
B16.png

「Collision」タブで既存のTrace Channelを編集したり新しく追加することが可能です。
B17.png
サウンド用にTrace Channelを追加しても便利かもしれません。

Atom Attenuationアセットを使い、多数のキューにオクルージョンの設定を適用する

上記の方法は一点ものの音源に対しては有効ですが、レベル上の多数のキューに対していちいちこういった設定をしていくのは面倒ですね。
そこでADX for UEの新バージョンで追加されたAtom Attenuationアセットを使用すれば、よく使用する減衰設定をアセットとして保持しておき、多数のキューにワンタッチで適用することが可能です。

Atom Attenuationアセットを作るには、コンテンツブラウザ(コンテンツドロワー)で右クリックし、
「ADX Atom」→「Spatialization」→「Atom Attenuation」を選択します。
C01.png
アセットが作られるので、適当な名前をつけます。
C02.png
ダブルクリックして開くと、通常のキューにも設定できる減衰設定が開きます。
C03.png
このアセットで設定した減衰は、キューのプロパティ「Attenuation Settings」に指定することで適用されます。
C04.png

また、キューシート上からキューに予め設定しておくことも可能です。
用途に応じて設定しておきましょう。
C05.png

補足

補足:リスナー位置の設定

カメラとプレイヤーキャラクターの位置が異なる場合、「キャラクターは移動していないのにカメラを動かしたら音が隠れた扱いになる」現象が起こることがあります。
Set Audio Listener Overrideノードを使うことで、音の遮蔽判定をどこで行うのか設定できます。
D01.png

コンポーネントを指定すると、そのコンポーネントにリスナーの座標が追従します。
D02.png
D03.png

リスナーの位置を可視化するには、コンソールコマンド「atom.3dVisualize.Listeners 1」を入力します。
D04.png

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2