SAT04 CREATIVE SPACE

メディア芸術作品、音楽制作、ゲーム開発(UE4)、アート、エンタメなどの創作に関する話題を扱うブログです

【UE4】距離に応じて音を切り替える「Crossfade by Distance」

  Unreal Engine 4のSoundまわりの情報が不足しがちなので、基本的なところも含めてメモ代わりに書いていこうかと思います。アーティスト向けです。


 これからUE4を勉強しよう、自分の職種のパートはわかるけど他はわからないという人は下記の書籍を超絶オススメしています。日本語で順を追ってUE4を学びたければ、この本を置いて他にはないと個人的には思います。まずは、この本の通りに実際にレベルを作ってみる事をオススメします。

 上記の本をある程度理解してるという前提で書いています。

音源とプレイヤー(リスナー)との距離に応じて再生する音を切り替える

 [Sound Cue]にある[Crossfade by Distance]ノードを使用する事で、「音の発生源」「プレイヤー(実際にはリスナー)」の位置関係によって音量を変化させ、音を切り替える事ができます。

 例えばロケットランチャーの着弾の「ドカーン」という効果音を、プレイヤーの近くで再生される時と、遠くで再生される時で音を変えて、距離による音の変化を再現する事ができます。

 似たような事は[Attenuation]でも実現できますが、[Attenuation]が比較的シンプル且つ汎用的な距離減衰のシミュレートを目的として使われるのに対して、[Crossfade by Distance]は音作りに近い用途で使うことができます。

 「The Witcher 3: Wild Hunt」では、木々に鳥の鳴き声を設定しており、ある一定の距離にプレイヤーが近づくと鳥が鳴くのをやめ、プレイヤーが離れると再び鳥がさえずりだすというサウンドデザインになっているそうです。彼らはWwiseを使用していますが、同じようなことを[Crossfade by Distance]で実現が可能です。

 Blueprintを併用せずとも、アイデア次第で様々なサウンドデザインをする事ができます。

パラメータの設定

 下の画像は、[Crossfade by Distance]のパラメーターと音のボリュームの関係を、ジオメトリを使ってなんとなく可視化したものです。地面からの起伏が音量と対応している思ってください。

f:id:nowshika:20160821225349j:plain

 リスナーはプレイヤの頭上、音源と同じZ軸(高さ)に設置してあります。

 音源からの距離をUE4の距離測定ツールで測ったものです。
f:id:nowshika:20160821225530p:plain

 実際の[Crossfade by Distance]の設定は以下のようになっています。

f:id:nowshika:20160821225535j:plain

実際に歩いてみる

f:id:nowshika:20160821234011j:plain
 プレイヤー(リスナー)が、上記スクリーンショットの位置に来ると音が聞こえ始めます。

f:id:nowshika:20160821230507j:plain
 この区間は、音は[Volume]で設定した音量にもとづいて再生されつづけます。

f:id:nowshika:20160821230556j:plain
 この位置ではもう音は聞こえなくなります。音源にとても近いのですが、音が聞こえないという状況を作り出すことができます。

単体でも複数音でも可能

f:id:nowshika:20160821230735j:plain
 「クロスフェード・バイ・ディスタンス」という名前なだけあって、単体で使うことは少ないと思います。

 実際には以下のように使われる事が多いはずです。
f:id:nowshika:20160821231017j:plain

f:id:nowshika:20160821231031j:plain

f:id:nowshika:20160821231037j:plain
 上記のキャラクターの位置だと、2つの音が丁度クロスフェードする途中の音が聞こえます。上手く使えば立ち位置によって多様に変化するインタラクティブ・ミュージックを実現する事も可能かもしれません。

注意点

説明のためのジオメトリー表現

 上記で、ジオメトリを作って音量の変化を二次元的に解説しましたが、実際には音源を中心としたスフィア型をイメージしてください。当然Z軸も距離に影響します。

リスナーの位置と音源の距離

 TPSではプレイヤー・キャラクターの後方にカメラがあり、キャラクターを映しているという状況があります。当然、「カメラの位置=キャラクターの位置」ではありません。

 カメラが映像を映しているのに対して、音声も同じようにマイクという概念があり、それをリスナーと呼びます。デフォルトだと「カメラの位置=リスナーの位置」になっており、プレイヤー・キャラクターの耳の位置で、音を聞いているわけではありません。

 [Crossfade by Distance]のDistanceの値も、音源とリスナーの距離で計算されています。