読者です 読者をやめる 読者になる 読者になる

SAT04 CREATIVE SPACE

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

【UE4】Sound Attenuationの設定項目と解説

UnrealEngine4

 ほとんど読まれないUE4 Audio記事ですが、Wwiseやら使っててUE4標準に戻ってくると、あれこのパラメータどこからどこの距離だっけ?とか忘れてしまうので備忘録的に書いておきたいと思います。

 3Dゲームのサウンドを作る上で欠かせないのがAttenuationの設定です。Attenuationとは、距離による音の減衰をシミュレートするパラメータです。UE4は単純な音量の減衰だけでなく、音の空間的な位置や減衰に関するフィルター処理、遮蔽物による音の変化などもAttenuationで行うことができます。

f:id:nowshika:20161106221114j:plain

Unreal Engine 4 ネットワークゲーム開発入門 (Game developer books)

Unreal Engine 4 ネットワークゲーム開発入門 (Game developer books)

 

事前知識

Unreal Engine | サウンドの減衰
Unreal Engine | Ambient Sound アクタのユーザーガイド

距離減衰と空間化

 Attenuate(距離減衰)は、距離による処理。Spatialize(3D空間化)は位置による処理です。一般的に、3Dゲームではこの2つの処理を組み合わせる事になります。

 Spatialize処理は、3D Soundと呼ばれることもありますが、立体音響とは異なります。

  • Attenuateの主な役割
    • 遠くの音は小さく、近くの音は大きく聞こえるようする
    • 遠くの音は篭った音に、近くの音はよりハッキリ聞こえるようにする
  • Spatializeの主な役割
    • 左側の音は左側から聞こえ、右側の音は右側から聞こえるようにする

f:id:nowshika:20161106221553j:plain

 上記のスクリーンショットの場合、AttenuateがOFFの場合、AもBも同じ音量で聞こえます。ONの場合、Bの方が音が小さく聞こえます。

 SpatializeがOFFの場合は音の発生源は左にあるのに中央から聞こえます。ONの場合、音は左(左スピーカー)から聞こえます。

リスナー(Listener)

 別の記事でより詳しく書こうと思いますが、ゲームにはリスナー(Listener)という概念があります。音出すのがスピーカーなら、リスナーは音を収録するマイクの存在です。

 Attenuationの処理は、このリスナー音を出すオブジェクトの位置関係によって決まります。詳しくは述べませんが、サード・パーソン・タイプのゲームを作るときには、このリスナーの概念は十分理解しておく必要があります。

 今回は、プレイヤーの位置=リスナーの位置だと思ってください。

距離減衰のパラメーター

f:id:nowshika:20161106225239p:plain

Attenuate

 距離による減衰を有効にするかしないかのチェックボックスです。ここをONにすると、フィールドにサウンドを配置した際、リスナーとの距離によって音量などに変化をもたらす事ができます。

Spatialize

 位置関係を有効にするかかしないかのチェックボックスです。ステレオ・スピーカーの例でいうと、リスナーから見て左に音を出すオブジェクトがあれば、左のスピーカーからより大きく音が出るようになります。

 AttenuateをOFF、SpatializeをONという設定も可能です。

Attenuation Shape

 Attenuationの形を設定できます。大抵のものは「スフィア(Sphere)」で良いですが、例えば滝などは「ボックス(Box)」にするなど、音を発生するオブジェクの形状に合わせて臨機応変に選択します。カプセルやコーンは特殊な場合を除いて殆ど使わないと思います。

Falloff Distance

 音が減衰しきる距離、つまり音がまったく聞こえなくなってしまう距離を設定します。すこしわかりにくいと思うので実際の値と参考の画像を用意しました。

f:id:nowshika:20161106221826j:plain

 スフィア(Sphere)型を半分に割って、半径(Radius)を赤い棒、Fallout Distanceを緑の棒で表現しています。

 球の半径を表す赤い棒の部分は、最大音量で再生されます。逆に緑の部分では音は減衰していき、球の外に出ると音はまったく聞こえません。

 つまり、Attenuation Shapeの範囲+Falloff Distanceが音が聞こえる範囲になります。

 更にわかりやすくBox型で説明します。
f:id:nowshika:20161106222216j:plain

 真横から見た図です。

f:id:nowshika:20161106223220j:plain

 赤のエリアで、音は最大ボリューム(Sound Cueなどで設定したボリューム)で再生されます。緑のエリアでは音の減衰がおきます。赤いエリアに近づくにつれて音が大きくなり、緑の外に向かうにつれ音は小さくなり、外に出た場合完全に音は聞こえなくなります。

 たとえば、部屋の中はどの位置に居ても音楽がガンガン鳴り響いているけど、部屋の外に出たら少し漏れ出て聞こえる程度になるというようなことが簡易的に実現できます。ちゃんとやろうとすると、Occlusion機能を使うことになります。

Non-Spatialized Radius

 3D空間の位置による処理を無効化する範囲です。オブジェクトの中心からの距離になります。

 例えば、電子銃を撃った時に、音がでるようにしたとします。その電子銃を使ってリスナーの右側から撃ってくる敵がいた場合、右方向から音が聞こえます。同じ電子銃を、プレイヤーが右手で装備して射撃した場合も同じように右手の位置から聞こえます。

 実際のゲームでは、そこまで正確にプレイヤーの右手の方向から音が鳴る必要はありませんし、むしろ違和感を感じるかもしれません。こういった場面で、Non-Spatialized Radiusを利用するのも一つの方法です。

 他にも、爆発音や警報アラーム等、近づいた時にあまりにも正確にその方向から音が出る事に違和感を感じる場面は多々あります。

3D Stereo Spread

 3D空間に配置する音は、基本的にモノラルファイルを使うのが妥当とされてきました。しかし、UE4.11でステレオファイルにも対応しました。下記のリリースノートを見ると図解付きでパラメータの説明を見ることができます。

アンリアル エンジン 4.11 がリリースされました!

 10メートル離れて聞くテレビの音はモノラルのように聞こえますが、画面に顔がくっつくくらい近づくとステレオに聞こえるという状態をイメージするとわかりやすいかもしれません。

f:id:nowshika:20161107000504j:plain

 例えば、これは滝の音などに有効です。大きな滝も遠くから聞くと点音源として聞こえるが、近づくにつれて包み込まれるような臨場感のあるステレオ・サウンドで聞こえるようにする事ができます。

LPF設定

 LPFとはLow Pass Filterの略です。名前の通り低音だけ通すフィルターで、高域をカットし篭った音にするエフェクターです。

 音は高音のほうが減衰しやすいという特性をこれで擬似的に再現する事ができます。ローパスフィルターを使うことで、遠くの音は篭った音にし、近くの音は高音までハッキリ聞こえるように設定することができます。

LPFRadius

 LPFRadius Minは、ローパスフィルターの効果が発生しはじめる距離です。Attenuation Shapeからの距離で、0にするとAttenuation Shapeの大きさと同じになります。

 LPFRadius Maxも、Attenuation Shapeからの距離で、LPFの効果が最大になる距離です。

LPFFrequency

 LPFFrequencyは、ローパスフィルターのかかり具合に関するパラメータで、周波数を値として入力します。人間の可聴域は最大でも20,000Hz(20kHz)なので、20000が上限の目安になります。下限は0で問題ありません。

 もしくは、詳しくは述べませんがサンプリング定理により、扱うオーディオファイルが44.1kHzであれば22050Hz、48kHzであれば24000Hzの音声情報を含んでいると言えるので、これらの数字を上限にしてもよいと思います。

 LPFFrequency at Minは、通常の用途では周波数の初期値に相当します。Attenuation Shape+LPFRadius Minの範囲内に居る間、この周波数でフィルタリングされた音が再生されます。

 LPSFrequency at Maxは、LPFRadius Maxで設定した地点での周波数になります。通常の用途だと、離れた距離から聴いたときの音の篭り具合になります。

f:id:nowshika:20161106224141j:plain

 上記の場合、LPFRadius Maxが40なので、水色エリアから外に出ると、40Hz以下の音しか出ないので殆ど聞こえなくなります。

 AttenuationのFalloff Distanceとの兼ね合いは常に考える必要があります。十分な長さのFalloff Distanceを確保していても、LPFの影響で、想定以上に音が小さく聞こえてしまったり、ほぼ聞こえなくなってしまう場合があります。

 また逆に、LPFを設定していもFalloff Distanceの方が短ければ、LPF効果がかかる手前で音量が下がりきって、LPFが意味を成さない場合もあります。

TIPS

 通常の使い方としてはLPFRadius Minの値は、Maxより値が小さくなります。そして、LPFFrequency at Minの値は、LPFFrequency Maxの値よりも大きくなります。

 しかし、LPFRadius MinもLPFRadiusMaxも、単にA地点、B地点として考える事もできます。つまりLPFRadius MinよりもMaxの値を大きくした場合、近づくとLPFがかかって音が篭って聞こえる、離れるとよりハッキリ聞こえるといった事も可能です。LPFFrequencyも同様です。