AreaSoundVolume

概要

CRIWARE Unreal Engine Plugin の AreaSoundVolume 機能は、環境音を 3D 空間上の領域を指定することで実現できます。 この機能は CRIWARE UE4 Plugin v1.27.11.00 にて追加されました。
area_sound_volume_sample_image.jpg
上図の黄色いワイヤーフレームが AreaAudioVolume を表します。 2つの AreaAudioVolume が入れ子のように配置されており、湖を覆う Volume と 林全体を覆う Volume が存在しています。 AreaAudioVolume は、湖なら水音、林なら鳥の声といった、広い範囲に渡って聞こえる環境音を擬似的に表現します。
通常、川や森などのマップで広範囲に音を出すような環境を実装するには、 複数個の点音源オブジェクトを配置して実現することができます。 例えば Unreal Engine の AmbientSound アクタを複数作成して、広い範囲に点在させるといった実装方法があります。 音源それぞれの距離減衰のバランスを調整して、リスナーがどの場所に存在していても均一にサウンドが聞こえるようにするのが望ましいです。 しかしこの実装方法の場合は、マップの形状に変更があるたびに点音源の再配置を行わなければなりません。
AreaSoundVolume 機能を使う場合、環境音の実装のために点音源を複数配置したりバランスの調整を行う必要はありません。 マップの形状が変更された場合は、AreaSoundVolume の形状も変更させることで再調整が可能です。

使用方法

AreaSoundVolume 機能を使用するには、下記の操作が必要です。
  1. AreaSoundVolumeの作成と配置
  2. SoundAtomCueアセットの設定
  3. AreaSoundVolumeの設定
以下、各操作について説明します。

AreaSoundVolumeの作成と配置

まずは川や森などの環境を覆うように、 Brush オブジェクトを作成します。 下記のいずれかの方法で作成してください。
  • "ジオメトリ" から Brush オブジェクトを作成して配置する
  • "モード" –> "ペンツール" で Brush オブジェクトをレベル上に描画する
作成した Brush オブジェクトをレベル上で選択し、 "詳細" タブの "Actor" –> "Actorを変換" から AreaSoundVolume を選択してください。
注意
この時作成する Brush オブジェクトには、凹み形状ができないよう注意してください。 AreaSoundVolume 機能では、リスナーの座標と AreaSoundVolume の境界面との間で最短距離を計算し、環境音の音源の座標を求めます。 Brush オブジェクトに凹み形状を作ってしまうと、リスナーとの距離計算が期待どおりに行われない可能性があります。 例えば、凹み形状部分の付近をリスナーが移動すると、音源の座標が極端に変化してしまい、望ましくない聞こえ方になります。 これについては、凹み形状ができる箇所で AreaSoundVolume を分割して配置することで対処できるかもしれません。

SoundAtomCueアセットの設定

コンテンツブラウザ上で環境音として使用したい SoundAtomCue アセットをダブルクリックし、以下のアセット設定画面を開きます。
area_sound_volume_sound_cue_settings.jpg
上記画面にて、 "UseAreaSoundVolume" チェックボックスを有効にしてください。

AreaSoundVolumeの設定

AreaSoundVolume の詳細パネルより、 "Sounds" エレメントを追加してください。 次に、このエレメントへ 環境音として再生したい SoundAtomCue アセットを指定してください。
area_sound_volume_settings_parameter.png

ここまでの設定を適用すれば、以下のいずれかの操作によって AreaSoundVolume の環境音表現を実現できます。

  • レベル開始時、AreaSoundVolume に設定された SoundAtomCue を参照する AtomSound アクタが自動生成され、サウンド再生を開始する (これがデフォルトの動作なります)
  • 上記設定済み SoundAtomCue を参照する AtomComponent 付きアクタを、 AreaSoundVolume 内に配置してサウンド再生を行う
  • 上記設定済み SoundAtomCue を SpwanSoundAtLocation 、 PlaySoundAtLocation 関数で、 AreaSoundVolume 内の座標を指定して再生する
上記のデフォルト動作を無効化する方法については、 再生タイミングのコントロール で説明します。

詳細

AreaSoundVolumeの影響下にあるオブジェクトの位置関係

AreaSoundVolume 機能は、AreaSoundVolume の形状を表す Brush オブジェクトの境界面と、リスナーの座標との間で最短距離を計算します。 この計算結果に基づいて、環境音の音源の座標を求めます。 また、環境音の座標はリスナーの移動と共に毎フレーム更新されます。
AreaSoundVolume の影響下にある Brush、音源、リスナーの位置関係を、以下のように説明することができます。
  • Brush オブジェクトの外側をリスナーが移動する場合、Brush の形状に沿って音源がリスナーを追跡するように移動します。
  • Brush オブジェクトの内側をリスナーが移動する場合、音源の座標はリスナーの座標と一致します。
上記のような挙動から、AreaSoundVolume は環境音を擬似的に表現するための機能と言えます。

距離減衰領域

音源の距離減衰領域

AreaSoundVolumeの影響下にあるオブジェクトの位置関係 では、AreaSoundVolume の Brush オブジェクトの外周に沿って音源が移動することを説明しました。 ここで言う音源とは 3D 音源のことです。 3D 音源には音量の減衰距離を設定できます。 リスナーが音源から離れると音量が小さくなります。 指定の最大減衰距離を超えると音量は 0 になります。 3D 音源の周囲には円形の "距離減衰領域" が存在することになります。

環境音の距離減衰領域

AreaSoundVolume の Brush オブジェクトの外周に沿って音源が移動した場合、 環境音の真の距離減衰領域は Brush オブジェクトの外周を覆うように存在することになります。

Tips

複数のAreaSoundVolumeが重なり合っている場合の挙動

異なる複数の AreaSoundVolume の一部分を重ねて配置したいケースがあるかもしれません。 重なり合っている領域の上で環境音を再生した際、音源の座標は未定義になります。 各 AreaSoundVolume の "Priority" 設定を変更することで、音源の座標をどの AreaSoundVolume で行うか指定することが可能です。 最も "Priority" が高いものが優先されます。

AreaSoundVolumeのコリジョンイベント

AtomAreaSoundVolume にリスナーが侵入、侵出した瞬間を、OnActorBeginOverlap 、 OnActorEndOverlap イベントとして キャッチすることができます。 Unreal Editor 上のレベルのアウトライナに表示されている AtomAudioVolume を右クリックして、 "イベントの作成" –> "OnActorBeginOverlap" を選択してください。 "Collision Profile" を指定することでイベントの取得が可能となります。

プレイヤーが一定距離AtomAreaSoundVolumeから離れた際のSound制御

AtomAreaSoundVolumeには、プレイヤー(リスナー)がAtomAreaSoundVolumeから指定距離以上離れた場合に、Soundを自動的に停止する機能があります。 AtomAreaSoundVolumeの詳細パネル内の「Sound Stop Distance」というパラメータに、cm単位で距離を指定することで、その距離よりもリスナーが AtomAreaSoundVolumeから離れた場合にSoundが停止するようになります。
停止のための距離判定は、二種類あります。 デフォルトでは、AtomAreaSoundVolumeのアクター座標からの判定となっています。 コリジョンからの判定で行うようにしたい場合は、「Is Determination from Volume Boundary Plane」のフラグを有効にします。 これによりコリジョン表面とプレイヤー座標の最短距離で判定されるようになります。
area_sound_volume_volume_boundary_plane.png

再生タイミングのコントロール

デフォルト動作では AreaSoundVolume に設定された SoundAtomCue アセットを参照する音源がレベル開始時に自動で作成し、サウンド再生を開始します。 任意のタイミングでサウンドの再生を開始したい場合、 AreaSoundVolume の "IsAutoPlaySound" プロパティ を false にしてください。
Blueprint であれば、下記図のように CreateSound 関数を使うことで AtomComponent 配列を取得して再生制御やパラメータ設定を行うことができます。
area_sound_volume_blueprints.jpg

サンプル

CRIWARE SDK for Unreal Engine にはサンプルプロジェクト CriUE4Sample.uproject が同梱されています。 まずは サンプル に従って、このサンプルプロジェクトを Unreal Editor で開いてください。
AreaSoundVolume に関するサンプルレベルは、サンプルプロジェクトに含まれている Atom110_AreaSoundVolume レベルが相当します。

動作の説明

Atom110_AreaSoundVolume は以下のようなレベルです。
  • マップには林と湖が存在します
  • 林エリアでは、環境音として鳥の鳴き声 ("se_forest_sound" キュー) が再生されます
  • 林エリアは、 AtomAreaSoundVolume_ForForest という AreaSoundVolume で覆われています
  • 湖エリアでは、環境音として水の流れる音 ("se_lake_sound" キュー) が再生されます
  • 湖エリアは、 AtomAreaSoundVolume_ForLake という AreaSoundVolume で覆われています
  • マップ上の各 AreaSoundVolume 内にプレイヤーキャラクターが侵入・侵出するとイベントが発行され、環境音が再生開始・停止されます
  • イベント処理はレベルブループリント上に記述されています
area_sound_volume_sample_image.jpg