2
1

More than 3 years have passed since last update.

UE4+ADX2、ブループリントで作る立体的な環境音

Last updated at Posted at 2021-02-04

はじめに

アンリアルエンジン4とサウンドミドルウェア「ADX2 for UE4」を連携させ、
環境音にひと工夫して、立体的なアンビエントサウンドづくりに挑戦してみます。

今回は森の中にいる鳥のさえずり音をべたっとループして流すのではなく、常にプレイヤーの周りで新しい音源が生成され続ける実装をします。
これにより、空間のあちこちに鳥が生息し気ままに鳴いている環境が再現できるはずです。
B20C.png
(かわいい鳥さんのイラストはイメージです)

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

前提

ADX2 for UE4の導入や基本的な使い方は以下の記事にあります。当記事だけでも実装はできるかと思いますが、必要に応じて参照してください。
ADX2 for UE4の導入で、一歩上のサウンド表現を(導入編)
https://qiita.com/SigRem/items/4250925f6d66a4fd287a
ADX2 for UE4の導入で、一歩上のサウンド表現を(実践編)
https://qiita.com/SigRem/items/c089b71c42e898980a46

実装

AtomCraftで環境音を構築する

マテリアルのインポート

A01.png
用意した音声ファイルをAtomCraftのマテリアルツリーにインポートします。
今回は森の環境音のベースとなる「Forest_Wind」と、鳥の鳴き声を4バリエーション用意し「Forest_Bird(番号)」といった5種のファイルを用意しました。

キューの作成

環境音、鳴き声のふたつのキューを作成します。
環境音として「Cue_ForestWind」を「ポリフォニック」タイプで、鳴き声として「Cue_ForestBird」を「ランダム」タイプで作成しました。
A04.png
A02.png
「ランダム」タイプのキューは毎回ランダムなトラックがひとつ選ばれて再生されます。

それぞれのキューに用意したマテリアルをD&Dして配置します。
A03.png
A05.png
テスト再生すると、そのたびにランダムなトラックが再生されているはずです。
A06.png

3Dサウンドの設定、確認

キュー内のウェーブフォームを選択し、インスペクターにて「パンのタイプ」を「3Dポジショニング」にします。
A07.png
これにより、空間内で音が再生された際にスピーカーやイヤホンの左右で音が振られるようになります。
3Dポジショニングにしたサウンドを確認するには、セッションウィンドウを使用します。
A08.png
開いたセッションウィンドウの「3Dポジショニング」をクリックします。
A09.png
下部のキューリストに「Cue_ForestBird」をD&Dして登録します。
A10.png
「プレーヤーに3Dオブジェクトをアタッチ」をクリックすると、3Dポジショニングのテストを行う準備ができます。
A11.png
緑色の領域で聞き手と音源の位置を変え、音声のパンのかかり具合を試すことができます。
A12.png

キューシートのビルド

調整ができたら、キューシートをビルドします。
A13.png
A14.png

UE4で立体的な環境音を再生する

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

UE4エディタを起動し、エクスポートしたacf、acbファイルをコンテンツブラウザにD&Dしインポートします。
B01.png
プロジェクト設定を開き、「CriWare」タブの「Atom Config」ファイルにインポートしたacfファイルを指定します。
B02.png
B03.png

シーンのセットアップ

森の環境音を使うので、今回は森のシーンとなるレベルを用意しました。デフォルトのレベルでも動作は可能なので、気分次第でセットしてみてください。
B04.png
使用アセット:「Nature Package」
https://www.unrealengine.com/marketplace/ja/product/nature-package
レベルを再生すると、風の音に加えて鳥の声が周りから絶えず聞こえてくるようにします。
B05B.png
(繰り返しますがかわいい鳥さんのイラストはイメージです!)

「Cue_ForestWind」をレベルにD&Dして配置すると、そのまま再生されるようになります。
B06.png

ブループリントで鳥の声を再生する

レベルブループリントを開きます。
B07.png
空欄で右クリックし、「Add Custom Event」から新しいカスタムイベントを作成します。
B08.png
鳥が鳴くためのイベントなので「BirdCall」と名前をつけました。
B09.png
イベントBirdCallから線を伸ばし、Play sound at Locationノードを配置します。同名のノードがふたつありますが、Atomカテゴリの方を選択します。
B10.png
B11.png
プレイヤーキャラクターの位置を取得するノードを配置します。Get Player CharacterGetActorLocationのふたつのノードを組み合わせるとプレイヤーの座標が取得できます。
B12.png

プレイヤーの座標の周りのランダムな位置に鳥の声を鳴らしたいので、決まった範囲内のランダムな座標を生成します。Random Float in RangeMake Vectorノードを組み合わせます。Z座標だけはプレイヤーの上方のみに限定しています。
B14.png
プレイヤー座標とランダム生成した座標を+(プラス)ノードで足します。そのままPlay Sound at Locationノードの「Location」ピンにつなげます。
B15.png
このイベントを起動するために、Event BeginPlayから線を伸ばしSet Timer by Function Nameを配置します。「Function Name」には起動したいイベント名である「BirdCall」を、「Time」は「1.0」、「Looping」にチェックをつけます。
B16.png
これにより、1秒間隔でイベント「BirdCall」が呼び出されるようになります。

再生してみましょう。周りのランダムな位置から鳥の声が聞こえるはずです。3Dポジショニングの設定がされているため、移動すると鳥の声がフェードアウトしていくのがわかると思います。
B17.png
鳥の声はプレイヤーの周りに都度生成され続けるため、離れた場所に行っても同じように聞こえます。
B18.png
現状ではきっかり1秒間隔で鳥が鳴いていますが、自然ではそうはなりません。DelayノードとRandom Float in Rangeを組み合わせ、ランダムな間隔で鳥が鳴くようにするといいでしょう。

「BirdCall」のイベント内にDelayノードを挿入し、Random Float in Rangeノードで指定した秒数の間ランダム性をもたせます。

B21.png
これでイベントが走るごとに、Delayノードによるランダムな「間」が発生することになります。

2
1
0

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
1