rarilog

主にゲーム制作に関することを書いていきます

2015/12/18 : UnrealEngine FMOD

UE4 + FMOD でインタラクティブなサウンド体験を実現しよう!

この記事は、Unreal Engine 4 (UE4) Advent Calendar 2015 の 18 日目の記事です。

昨日の記事は、ntaro さん の「UE4のWindowsにおけるマルチタッチについて」でした。これまで様々なデバイスを UE4 と連携させて作品づくりを行ってきた ntaro さんならではのとても貴重な記事でした。Kingyo いいですね!

さて、この記事では、オーディオミドルウェア FMOD を UE4 と連携させて、ゲームにインタラクティブなサウンド要素を盛り込む方法について解説していきます。まずは、以下の動画をご覧ください。

プレイヤーの正面遠くに配置されているスピーカーから BGM が流れています。プレイヤーがスピーカーに近づくにつれて、BGM を構成する音色が増えていくのがおわかりでしょうか?FMOD を利用すると、ゲーム内のパラメータ (ここでは、Audio Listener と Audio Speaker の距離) に応じてサウンドが変化するような仕組みを簡単に実装できます。

また、スピーカーが BGM の拍に合わせて振動していることに気づくかと思います。FMOD を利用すると、サウンドの拍や任意のタイミングで UE4 の Event を発行することができるので、サウンド主導のインタラクティブな表現を実現できます。

それでは、FMOD の導入手順について説明した後に、上記 2 点の実装方法について解説していくことにします。

なお、使用した UE4 のバージョンは 4.10 です。

目次

FMOD の導入

ライセンス条項の確認

導入作業を行う前に、必ずライセンス条項の確認を行いましょう。記事執筆時点では、FMOD のライセンス条項は http://www.fmod.org/sales/ にて確認できます。

利用形態によっては License Fee が発生しますし、Non Commercial / Educational ライセンスであっても Credit の表示義務などが発生しますので、よく読みましょう。

ソフトウェア・プラグイン のインストール

ファイルのダウンロード

Download ページ から、以下の 2 つをダウンロードします。なお、ダウンロードを行うにはサイトアカウントの作成が必要となります。

  • FMOD Studio Authoring Tool (以下、単に FMOD Studio と呼ぶ)
  • FMOD Studio for Unreal Engine 4 (以下、FMOD Plugin と呼ぶ)

FMOD Plugin は、お使いの UE4 のバージョンに対応したものを選択してください。また、FMOD Studio は、FMOD Plugin のバージョンと一致したものを選択してください。

FMOD Studio のインストール

ダウンロードしたインストーラの指示に従ってインストールしてください。

FMOD Plugin のインストール

ダウンロードした zip ファイルを解凍し、その中にある FMODStudio ディレクトリを UE4 の Plugins ディレクトリに格納してください。

ちなみに自分の環境 (Windows) では、UE4 の Plugins ディレクトリのパスは C:\Program Files\Epic Games\4.10\Engine\Plugins でした。

FMOD Plugin を導入したバージョンの UE4 エディタを起動し、メニューバー → ヘルプ を開いてください。その中に FMOD Help の項目があれば、正常にインストールされています。

以上で導入は完了です。

プロジェクトの設定

UE4 と FMOD Studio を連携させて作業を行うためには、以下の設定を双方のプロジェクトで一致させる必要があります。

  • Output Format : サウンドの出力フォーマット
  • Bank Output Directory : サウンドの出力先

UE4 プロジェクトの作成と FMOD Plugin の設定

UE4 の新規プロジェクトを作成して ツールバー → 設定 → プロジェクト設定… を開き、プラグイン → FMOD Studio を選択して、以下の項目を設定します。

  • Basic → Output Format : 好きな出力フォーマット
    • この記事の説明どおりに作業を行うのであれば、Stereo を選択してください
  • Basic → Bank Output Directory : FMOD
    • Content ディレクトリ以下の任意のパスで構いませんが、特に理由がなければデフォルトの FMOD にしておくのが無難です

Bank Output Directory の作成

上で設定した Basic → Bank Output Directory のパスが存在しない場合は作成する必要があります。デフォルトの FMOD で設定してある場合は、《UE4 プロジェクトのディレクトリ》/Content/FMOD という名前のディレクトリを作成します。

FMOD Studio プロジェクトの作成と設定

FMOD Studio を起動します。起動すると自動的に新規プロジェクトが作成されているかと思いますが、もしサンプルプロジェクトなどの既存プロジェクトが開かれた場合は、メニューバー → File → New を選択して新規プロジェクトを作成してください。

その後、メニューバー → Edit → Preferences... を開き、以下の項目を設定します。

  • Format タブ → Project OUtput Format : UE4 プロジェクトの Basic → Output Format と同じフォーマットにする
  • Build タブ → Build banks output directory(optional) : UE4 プロジェクトの Basic → Bank Output Directory と同じパスにする

以上で設定は完了です。

簡単な連携テスト

本格的なサウンド作成に取り掛かる前に、「FMOD Studio でサウンドファイルを読み込み、それをそのまま UE4 側で再生する」という簡単な連携テストを行って、作業の流れを把握することにしましょう。

FMOD Event の作成

まず、FMOD Studio 上で新規 Event を作成します。Events タブを開き、検索ボックス下の領域を右クリックして New Event を選択してください。Event が作成できたら、Event 名を Test としておきます。

UE4 にも Event はありますが、「呼び出されたら処理を行うもの」という点では FMOD Event も同じです。FMOD Event の処理内容は「サウンドを鳴らすこと」なので、単純に「FMOD Event ≒ サウンド」だと考えても差し支えないかと思います。

次に、Audio 1 Track に、何でもいいのでお手持ちの mp3 ファイルをドラッグ & ドロップしてください。

Event の作成はこれで完了です。

Bank の Build

Event の作成が完了したので、UE4 で利用できるように書き出しを行いましょう。FMOD Studio では、この作業のことを「Bank の Build」と呼びます。Bank とは Event の集合のことです。

先ほど作成した Event の Test は、まだどの Bank にも割り当てられていません (Events タブ内の Test の右側に #unassigned と表示されていることから確認できます)。このままでは Build を行っても書き出されないので、Bank への割り当てを行います。

Events タブ内の Test を右クリックし、Assign to Bank → Master Bank を選択します。

これで Event が Bank に割り当てられたので、Build を行います。メニューバー → File → Build を選択します。

UE4 で FMOD Event を呼び出す

Bank の Build が終わったら、UE4 のコンテンツブラウザで FMOD Event が書き出されていることを確認してください。

確認できたら、FMOD Event をドラッグ & ドロップしてレベルに配置してください。

ゲームをプレイすると、サウンドが鳴っているはずです。鳴らない場合は、プレイヤー (Audio Listener) が FMOD Event に十分近いかどうかと、詳細 → Activation → Auto Activate のチェックがオンになっているかどうかを確認してください。

これで連携テストは終わりです。今後の作業のために、FMOD Event Test はレベル上から削除しておいてください。

Audio Listener との距離に応じてサウンドが変化する FMOD Event の作成

最初にお見せした動画にあった、プレイヤーが近づくにつれて音色が増えていくサウンドを作成してみたいと思います。

動画で使っている自作の音素材 6 つと、ついでにテキトーに作成したスピーカーの 3D モデルを以下に置いておきます。これを使って作業を進めていきます。

AssetsForFMODTest.zip

FMOD Studio での作業

まずは FMOD Studio で新規 Event を作成します。Event 名は BGM としておきます。

次は Audio Track にサウンドファイルを配置します。サウンドファイルは 6 つあるので、Audio Track も 6 つ必要です。どれでもいいので Audio Track を右クリックし、Add Audio Track を選択すれば追加できます。

この Event はループで再生させたいので、そのための設定をします。Audio Track の上にある黒い領域を右クリックし、Add Loop Region を選択します。

Loop Region が追加されるので、ループさせたい範囲を設定します。8 秒ちょうどでループする曲なので、0:00:000 ~ 0:08:000 の範囲を設定します。サウンドが Loop Region から若干はみ出るのは仕様です。

減衰の設定を行います。Master Track を選択し、Distance AttenuationMin & Max Distance を 0 ~ 150 に設定します。FMOD Studio における長さの単位はメートルなので、150 とは 150 メートルのことを指します。「距離が離れたら音色が少なくなる」ことを確認する前にサウンドが減衰してかき消えてしまうと困るので、Max Distance を長めに設定しています。

さて、ここからが設定のキモの部分です。距離のパラメータを導入し、その値に応じて各 Audio Track のボリュームが変化するように設定します。

まずは Timeline タブ右側の + ボタンをクリックし、Add Built-In Parameter → Distance... を選択します。

Distance の値の範囲を設定するダイアログが出るので、0 to 100 に設定します。

作成された Distance タブを選択し、Audio Track のボリュームフェーダー (ツマミ) を右クリックして Add Automation を選択します。これをすべての Audio Track で行います。

これで、「どの距離でどれだけのボリュームを出すか」を、グラフで設定することができるようになりました。Audio Track 上を左クリックで制御点の追加、制御点のドラッグで移動ができるので、以下のように設定します。

これで設定は完了です。BGM Event を Master Bank に割り当てて、Bank の Build を行います。

UE4 での作業

先ほどの連携テストでは FMOD Event をレベルにドラッグ & ドロップすることで配置・再生を行いましたが、今回は FMODAudio Component を Actor に付加させる方法で行ってみます。

まず、スピーカーの 3D モデル (Speaker.fbx) を Skeletal Mesh として Import し、レベルに配置して、Blueprint クラス BP_Speaker に変換します。

BP_Speaker の編集画面を開いて FMODAudio Component を追加し、詳細 → Sound → EventBGM を設定します。

これで、スピーカーの位置から BGM が再生されるようになりました。ゲームをプレイして、スピーカーに近づいたり離れたりしてみてください。距離に応じてサウンドが変化するはずです。

サウンドの拍子に合わせてスピーカーが振動する処理の実装

FMOD Studio での作業

FMOD Event にテンポ情報を埋め込むことで、拍子のタイミングで UE4 の Event を発生させることが可能となります。

Events タブにて BGM を選択し、TimeLine タブを選択状態にします。Audio Track の上にある黒い領域を右クリックし、Add Tempo Marker を選択します。

Tempo Marker が追加され、Timeline のメモリが時間表示から小節数/拍数表示に変更されました。Tempo Marker の位置を先頭に移動させます。また、この曲は bpm 120 かつ 4/4 拍子の曲なので、値を 120 4/4 に設定します。

UE4 での作業

BP_Speaker の編集画面を開き、追加済の FModAudio Component を選択して、詳細 → Callbacks → Enable Timeline Callbacks のチェックをオンにします。

これで、FMODAudio Component の Event である On Timeline MarkerOn Timeline Beat が発行されるようになります。これら 2 つの Event 発行処理は重いらしいので、必要ない場合はオフにしておきましょう。

拍子のタイミングで何らかの処理を行わせたい場合は On Timeline Beat Event の方を利用します。スピーカーの 3D モデルには Morph Target を仕込んであるので、その Weight を拍子のタイミングで変更させることで振動を表現します。ノードは以下のとおりです。

ちなみに、On Timeline Beat ノードを見ればわかるとおり、この Event では Bar (小節数) や Beat (拍数) などの値が取得可能ですが、ここでは利用していません。

これで、拍子に合わせてスピーカーが振動する処理を実装することができました。

最後に

ゲーム特有のインタラクティブ性を映像だけに留めるのはもったいないと感じています。「サウンドは流すだけ」だった人も、これを機にインタラクティブなサウンドの実装に取り組んでみてはいかがでしょうか。

明日は とげとげさん の「UE4のソースコード的な何か」です。UE4 のソースコード周りを解説した Dive to Unreal Engine 4 の著者さんなので、内容に期待大です!また、とげとげさんとは Unreal Engine 4 (UE4) 其の弐 Advent Calendar 2015 21 日目の記事の作成を共同で行うことになっていますので、そちらも合わせてよろしくお願いします。