概要
- AtomAudioVolume は Unreal Engine サウンドの3D空間デザイン機能である AudioVolume を、ADX2 向けに拡張したクラスです。 この機能は CRIWARE UE4 Plugin v1.27.11.00 にて追加されました。 AtomAudioVolume は、3Dリスナーの侵入または進出に反応して3D音源のパラメータを変化させます。 変化の強さは AtomAudioVolume の境界面とリスナーの距離に対応します。
- AtomAudioVolume 機能は、主に2種類に分けられます。
- AtomAudioVolume の境界面に対するリスナーの侵入・侵出時に、DSP Bus Snapshot 設定を切り替える機能
- AtomAudioVolume の境界面に対するリスナーの侵入・侵出距離に応じて、サウンドのパラメータ ( BusSendLevel や AisacControl Value) を変化させる機能 .
- 前者はレベル全体に影響する設定、後者は AudioVolume 内のサウンドのみに影響する設定です。
使用例
- 例えば以下のようなタイトルを仮定します。
- アクション RPG のようなタイトルです
- このタイトルでは、カメラがプレイヤーキャラクターを三人称視点で追いかけます
- カメラの座標は常に 3D リスナーの座標に一致します
- プレイヤーキャラクターのアクタには AtomComponent がアタッチされており、ボイスのキューを再生します
- プレイヤーキャラクターの歩行アニメーションには PlayAtomCue トリガーが配置されており、足音のキューを再生します
- プレイヤーが探索可能な洞窟のマップを用意します
- デザイナーは「プレイヤーキャラクターから発せられるすべてのキューを洞窟マップの中で反響させたい」と考えています
- このとき、タイトル開発者は AtomAudioVolume アクタを洞窟の内部空間に重ねて配置することができます。 この AtomAudioVolume を適切に設定することで、洞窟に侵入したプレイヤーから発せられるすべてのキューをリバーブさせることができます。 また、プレイヤーが洞窟の奥へ行けば行くほど、リバーブ効果を強くするという設定も可能です。
- どのサウンドが AtomAudioVolume の設定の影響を受けるかについては SoundAtomCue アセット毎に設定可能です。 例えば、BGM用のキューは AtomAudioVolume の影響を受けないようにすることもできます。
使用方法
ADX2データの準備
CRI Atom Craftでの準備
- AtomAudioVolume を使用するには、CRI Atom Craft v3.43.05 で追加された Json ファイルエクスポート機能が必要です。 CRI Atom Craft でACFデータの Json ファイルを出力して Unreal Editor へインポートし、DataTable アセットを用意する必要があります。 この DataTable アセットは ACF ファイル内の情報のコピーを保持しており、AudioVolume はこのアセットを参照します。
- CRI Atom Craft v3.43.05 以降、WithACFJson チェックボックスを有効にしてビルドしてください。 これにより、ACF、ACB、AWB と共に Json ファイルが出力されます。 このファイルには ACF の情報が記述されています。
- 注意
- 必ず同じバージョンの AtomCraft プロジェクト からビルドした ACF ファイルと Json ファイルを組み合わせて使用するようにしてください。 両ファイルの内容に齟齬が生じると、予期せぬ動作を引き起こす可能性があります。
Unreal Engineアセットの準備
Unreal Engineへのインポート
- ACF ファイル、ACB ファイル、Json ファイルを Unreal Engine へインポートします。 Json ファイルをインポートする際は、下図のように「データテーブルの列の種類を選択」から "AcfDataTable" を選択してください。 上記手順により、AtomConfig アセット、AtomCueSheet アセット、DataTable アセットが作成されます。 また、デフォルトでは ACB ファイル内の各キューに対応する SoundAtomCue アセットが自動で作成されます。
SoundAtomCue アセットの EnableAudioVolume 設定の有効化
- CRIWARE Unreal Engine Plugin では、AtomComponent や PlayAtomCue トリガーといった機能により 3D サウンドを再生です。 AtomComponent と PlayAtomCue は SoundAtomCue アセットを参照します。 この SoundAtomCue アセットを介して再生する ADX サウンドを AudioVolume の影響下に置くには、アセットに特別な設定が必要です。
- 再生したい SoundAtomCue アセットをアセットエディタで開き、"EnableAudioVolume" チェックボックスを有効にしてください。 これにより、この SoundAtomCue アセットはレベル上に配置された AudioVolume の影響を受けるようになります。
- 音源に自由な移動を許可する場合は、 SoundAtomCue アセットの設定から "IsMovable" チェックボックスを有効にする必要があります。 音源に移動だけでなく AudioVolume への自由な出入りを許可する場合は、 "CanStraddleAudioVolume" チェックボックスも有効にしてください。 これらの設定は AudioVolume の処理負荷を高めてしまう可能性があるため、重要な音源に対してのみ適用してください。
Unreal Engineプロジェクトの設定
- Unreal Editor のメニューバー上で、"編集" –> "プロジェクト設定" –> "CriWare" の順に選択し、CRIWARE Unreal Engine Plugin の設定画面を開いてください。
- 上図のように、"AtomConfig" プロパティへ AtomConfig アセットを設定してください。 次に "AtomConfigDataTable" へ、ACF データの Json ファイルから作成した DataTable アセットを指定してください。 Unreal Editor を再起動することで、これらの設定が有効になります。
補足
- 同時に複数のデバイスからサウンド出力を行いたい場合、デバイス別に AsrRack を作成する必要があります。 SnapshotSwitchSettings の要素に、目的のデバイスに対応する AsrRackID を設定することができます。
AudioVolumeの設定
- 本節では AtomAudioVolume で設定可能なパラメータ各種について説明します。
Use Snapshot Settings
- このフラグを有効にすると、リスナーの AtomAudioVolume への侵入・侵出による DspBusSettings、Snapshot の切り替えを行えるようになります。 BusSettings に要素を追加できるようになります。
Snapshot Switch Settings エレメント内の詳細
- Asr Rack ID : 適用したい ASRRack の ID
- Dsp Bus Settings ID : 適用したい Dsp Bus Settings の ID
- Snapshot ID : 適用したい Snapshot の ID
- Fade Time : DspBusSetting の遷移が完了するまでの時間
Use BusSend Settings
- このフラグを有効にすると、リスナーの AtomAudioVolume への侵入・侵出時、侵入距離に応じて Bus Send Level を変化させることができます。 BusSendInterpolateSettings に要素を追加できるようになります。
Bus Send Interpolate Settings エレメントの詳細
- Dsp Bus Settings ID : 適用したい Dsp Bus Settings Name を選択するためのID
- Bus ID : パラメータを変化させたい Bus の ID
- Bus Send Level for AudioVolume Inside: リスナーがサウンドと同じ AtomAudioVolume にいる場合に適用する値
- Bus Send Level for AudioVolume Outside : リスナーとサウンドが異なる AtomAudioVolume にいる場合に適用する値
- Area Width : AtomAudioVolume 内部にリスナーが侵入した際、 BusSendLevelForAudioVolumeoutside から BusSendLevel への遷移が完了するまでの距離
Use AisacControl Settings
- フラグを有効にすると、リスナーの AtomAudioVolume への侵入・侵出による、侵入距離に応じて AisacControl Value を変化させることができます。 AisacControlInterpolateSettings に要素を追加、値の設定ができるようになります。
Aisac Control Interpolate Settingsエレメント内パラメータ :
- Aisac Control ID : 適用したい Aisac Control のID
- Aisac Value for AudioVolume Inside : リスナーがサウンドと同じ AtomAudioVolume に属している場合に適用する値
- Aisac Value for AudioVolume Outside : リスナーとサウンドが異なる AtomAudioVolume に属している場合に適用する値
- Area Width : AtomAudioVolume 内部にリスナーが侵入した際、 AisacValueForAudioVolumeoutside から AisacValue への遷移が完了するまでの距離
Atom Brush Color
- レベル上に配置した AtomAudioVolume のワイヤーフレームの色を設定できます。
Max distance for EntranceVolume
- リスナーが EntranceVolume から設定値以上に離れた場合、リスナーと EntranceVolume 間の距離計算処理を行いません。
Switch Interpolation Inside for Bus
- フラグが有効の場合、Bus Send Level のパラメータ遷移処理を行う領域が AtomAudioVolume の内側になります。
Switch Interpolation Inside for Aisac
- フラグが有効の場合、AisacControl Value のパラメータ遷移処理を行う領域が AtomAudioVolume の内側になります。
AtomAudioVolume で DSP Bus Snapshot を切り替える方法
- AtomAudioVolume の境界面に対するリスナーの侵入・侵出時に、DSP Bus Snapshot 設定を切り替えるための設定方法を説明します。
- AtomAudioVolume をレベル上に配置します。
- レベル上に配置した AtomAudioVolume を選択し、詳細タブより UseSnapshotSettings にチェックを入れて有効にします(右側のチェックボックスをチェックしてください)
- SnapshotSwitchSettings の要素を一つ追加します
- DspBusSettingsID を目的の値に設定してください。この値に連動して DspBusSettingsName の表示文字列が変化します
- SnapshotID を目的の値に設定してください。この値に連動して SnapshotName の表示文字列が変化します
- FadeTime に Dsp Bus Snapshot 切替時の遷移時間 (秒) を入力してください
詳細
リスナーの位置に応じたパラメータコントロール
- AtomAudioVolume の境界面に対するリスナーの侵入・侵出距離に応じて、サウンドのパラメータ ( BusSendLevel や AisacControl Value) を変化させることができます。 サウンドパラメータは以下2種類に分けられます。
- 音源とリスナーが同一の AtomAudioVolume に属している場合、音源から再生されるサウンドに対して適用するパラメータを指します
- 音源とリスナーが異なる AtomAudioVolume に属している場合、音源から再生されるサウンドに対して適用するパラメータを指します
- AtomAudioVolume から見て、
- 前者のパラメータは「リスナーが内側にいる時のパラメータ (インサイドパラメータ)」です。
- 後者のパラメータは「リスナーが外側にいる時のパラメータ (アウトサイドパラメータ)」です。
- 黄色、青色、灰色の領域はそれぞれ異なる AtomAudioVolume を意味します。 上図の黄色の領域に置かれているアイコンはリスナーを意味します。 青色の領域に置かれているアイコンは音源を意味します。
- リスナーが黄色の領域に留まる場合、音源から再生されるサウンドには「アウトサイドパラメータ」が適用されます。
- リスナーが青色の領域へ移動する場合、サウンドパラメータは「インサイドパラメータ」へと遷移していきます。
- リスナーが青色の領域から黄色または灰色の領域へ移動する場合、「アウトサイドパラメータ」へと遷移していきます。
- AtomAudioVolume の "Area width" プロパティによって、アウトサイドパラメータからインサイドパラメータへと完全に遷移し終える距離を設定できます。
EntranceVolume によるパラメータコントロール
- リスナーの AtomAudioVolume に対する侵入距離は、通常、リスナーの座標値から最も近い AtomAudioVolume の境界面を基準点として計算されます。
- 下図は AtomAudioVolume に対するリスナーの侵入距離を示す図です。
- この白い部屋は AtomAudioVolume そのものを表します。
- 青色の人形はリスナーを表しており、位置1から2へと移動します。
- 位置1にいる場合、リスナーの座標値に最も近い壁は "Wall (A)" です。
- 位置1にいる場合、緑色の点線の長さが実際の侵入距離となります。
- 位置2にいる場合、リスナーの座標値に最も近い壁は "Wall (B)" です。
- 位置2にいる場合、オレンジ色の点線の長さが実際の侵入距離となります。
- 侵入距離を常に "Wall (A)" のドアを基準として求めたいケースがあるかもしれません。 これを実現するのが "EntranceVolume" 機能です。 名前の通り、 AudioVolume の入り口を定義するための Volume です。 EntranceVolume は、リスナーの AtomAudioVolume に対する侵入距離を計算する際の基準点として振る舞います。 上図の場合、 EntranceVolume を "Wall (A)" のドアに重ねて配置することで、青色の点線を位置 2 における侵入距離とすることが可能です。
AudioVolumeへのEntranceVolumeの関連付け
- レベル上に配置したEntranceVolumeはAudioVolumeと関連付けなければ、どのAudioVolumeの入り口を表すものなのか認識できません。 AudioVolumeにEntranceVolumeを関連付けるには、AudioVolumeにEntranceVolumeが重複している状態で、AudioVolumeの詳細パネル内の 「Auto Settings Entrance Volume」フラグと、「Auto Settings Neighbor AudioVolume to EntranceVolume」のフラグを有効にする必要があります。
- 注意
- EntranceVolumeの判定にはAudioVolumeとEntranceVolumeとでコリジョン判定が行われて、AudioVolume内にEntranceVolumeが侵入していた場合に、 関連付けがされるようになっています。 このコリジョンのデフォルトプロファイルはTriggerとなっています。 ここで、ユーザによっては判定の設定として、ワールドダイナミックでOverlapとなっているコリジョンの設定を変更していて、 EntranceVolumeをAudioVolumeに関連付けようとして、できないという場合が生じるケースが生じえます。 そういった場合のために、添付図のように「Collision Profile for Detecting EntranceVolume」というEntranceVolumeを検出するための コリジョンプロファイルをAudioVolumeの設定項目に設けています。 こちらに、コリジョンの設定でWorldDynamicsがOverlapとなっているコリジョンを指定することで、EntranceVolumeの関連付けが可能となります。
AtomAudioVolume への EntranceVolume の設定
- AtomAudioVolumeにAtomEntranceVolumeを設定していく方法は以下の通りになります。
- レベル上のAtomAudioVolumeの入り口にしたい境界上にAtomEntranceVolumeを配置します。
- AtomAudioVolumeをレベル上で選択し、詳細パネルの「Auto Setting Entrance Volume」のフラグを一括で有効にし、次に「Auto Setting Neighbor AudioVolume To EntranceVolume」のフラグを有効にします。
- 注意
- 複雑な形状で AtomAudioVolume を作成してしまった場合に、AtomEntranceVolumeの形状を直方体などシンプルな形状で設定することで処理負荷を軽くすることができます。
- 新しく AtomAudioVolume や AtomEntranceVolume を追加、もしくは削除した際には、新しく追加した Volume に隣接しているすべての AtomAudioVolume の「Auto Setting Entrance Volume」と「Auto Setting Neighbor Audio Volume To Entrance Volume」のフラグを無効化して再度有効化を行い、すべての AtomAudioVolume、AtomEntranceVolumeの接続情報を設定しなおしてください。なお、接続情報の洩れを防ぐ際にはすべてのAudioVolume を選択して、二つのフラグの再有効化をすることをお勧めします。
Tips
Volumeの可視化
PIEなどのアプリ実行中におけるVolumeの配置方法
- AtomAudioVolumeやAtomEntranceVolumeなどをレベル上に配置した際に、PIEなどで実行中どこにVolumeを配置したか確認が必要な場面があります。 その際には、コンソールコマンドで"show Volumes"と入力することで、レベル上に配置したVolumeをワイヤーフレームで可視化することが可能になります。
Volumeのレベル上への配置時におけるVolumeの視認性の向上
- AtomAudioVolumeやAtomEntranceVolumeなどは配置時においては、ワイヤーフレームで表示されるようになっています。 そのため、Volumeのサイズが巨大かつ複雑になればなるほど、想定した領域内に正しく配置されているかどうかの確認が難しくなってきます。
配置しているVolumeを調整する機能としてはUnreal EngineのBrush機能があります。 このBrushEditingモードにしておくと、選択しているVolumeを半透明に色付けされた状態で表示されるようになるため、はみ出ている個所などを特定しやすくなります。
そしてはみ出ている個所を見つけた際には、Volumeの面や辺、頂点の移動、削除、追加を行うことで調整していきます。
調整などでVolumeの頂点等を増やした後不要な頂点は極力消していった方がいいため、調整が済んだらBrushEditingパネルのOptimizeボタンを押すことで不要な頂点を削除することができます。
また、開発が進んでくるとレベル上に様々なVolumeが配置されるようになってきます。 こうした状況になった際には、確認したいVolumeのみを表示するようしていきます。 確認したいVolumeのみ表示するには、Viewport内のShowタブから表示したいVolumeのみチェックを入れることで、表示されるVolumeを限定していくことができます。
AudioVolumeの処理負荷
処理負荷が高くなるケース
- 以下のようなケースは処理負荷が高くなる可能性があるため避けるべきです。
- EntranceVolume を設定しない AtomAudioVolume を多数使用している場合
- 複数の AtomAudioVolume が入れ子式に重なり合っている場合
- AtomAudioVolume に多数の EntranceVolume を設定した場合
- AtomAudioVolume のサウンドパラメータ設定に大量に追加した場合 (ex.: 数百種類の AisacControl Value への遷移を追加した場合)
- 複雑な形状の AtomAudioVolume を配置した場合 (ex.: 頂点数が数千個存在する AtomAudioVolume をレベルに配置した場合)
- EntranceVolume の形状が複雑な場合
- Movable フラグと StraddleAudioVolume フラグが有効な SoundAtomCue アセットが多数使用されている場合
処理負荷を軽減する方法
- 以下のような手段で、 AtomAudioVolume の処理に由来する CPU 負荷を軽減することができます。
- 不要になった AtomAudioVolume を SetEnable 関数で Disable 状態にする
- SoundAtomCue の Culling 機能を利用し、リスナーから遠くに位置するサウンド数を間引く
AtomAudioVolumeのコリジョンイベント
- AtomAudioVolumeは OnActorBeginOverlap や OnActorEndOverlap などのイベントを作成することができます。 Unreal Editor 上で、レベルのアウトライナに表示されている AtomAudioVolume を右クリックして "イベントの作成" –> "OnActorBeginOverlap" を選択してください。 下図のように Collision Profile を指定することでイベントの取得が可能となります。
AtomAudioVolumeのグループ化
- AtomAudioVolume のグループ化機能を用いることで、 「インサイドパラメータ」と「アウトサイドパラメータ」の切り替えをグループ単位で適用することができます。
- リスナーの位置に応じたパラメータコントロール で説明したように 「インサイドパラメータ」と「アウトサイドパラメータ」はリスナーが AtomAudioVolume に侵入しているか否かで切り替わります。
- 多くの場合、リスナーはゲーム中に1つだけ存在します。 リスナーがいずれかの AtomAudioVolume に侵入した場合、他の Volume 内に配置されている音源から出力されるサウンドは、 すべて各 Volume の「アウトサイドパラメータ」が適用されることになります。
- リスナーが1つの AudioVolume に属している場合に、離れた AtomAudioVolume 内で再生されているサウンドに対しても 「インサイドパラメータ」を適用したい場合があるかもしれません。 この場合、リスナーが侵入した AtomAudioVolume と同一グループに属す Volume 内のサウンドについては、 すべてに「インサイドパラメータ」を適用することが可能です。
設定方法
- グループ化機能は下記の画面で設定可能です。
- 上図の "AudioVolumeTags" プロパティにエレメントを追加して、Tag 名を付けることが可能です。 同名の Tag 名が付与された AtomAudioVolume 同士は同じグループに属します。
Switch Interpolation Inside 設定に関する補足
- AtomAudioVolume 内の音源から再生されるサウンドには、Bus Send Level や AisacControl Value などのパラメータが適用されます。 これらのパラメータはリスナーの侵入距離に応じて設定値へと遷移します。 AtomAudioVolume の境界面に沿ってパラメータ遷移が実際に行われる領域が生じます。 リスナーがこの領域上を移動する時、パラメータが変化します。
- 下図は AtomAudioVolume のパラメータ遷移領域を図示したものです。
- この白い部屋は AtomAudioVolume そのものを表します。
- 緑色のエリアはパラメータ遷移領域です
- 青色のエリアではパラメータ遷移は行われません
- これはデフォルト設定でのパラメータ遷移領域ですが、 AtomEnctarnceVolume を使用することで、遷移領域の位置と向きを変更することができます。 例えば、上図のドアの位置に EntranceVolume を配置した場合、パラメータ遷移領域は下図のようになります。
- また、AtomAudioVolume の SwitchInterpolationInside フラグの有効にすることで、 下図のようにパラメータ遷移領域を AtomAudioVolume の内側にすることが可能です。
サンプル
- CRIWARE SDK for Unreal Engine にはサンプルプロジェクト CriUE4Sample.uproject が同梱されています。 まずは サンプル に従って、このサンプルプロジェクトを Unreal Engine Editor で開いてください。
- AtomAudioVolume に関するサンプルレベルは、サンプルプロジェクトに含まれている Atom080_Audiovolume レベルが相当します。
動作の説明
- Atom080_Audiovolume は以下のようなレベルです。
- マップは壁の色が異なる3つの部屋で区切られています
- 各部屋はそれぞれ別個の AtomAudioVolume で覆われています
- レベルにはプレイヤーキャラクターのほか、3体の小さな車型のアクターが配置されています
- 各車型アクターの頭上では、サイレンの音が再生されています
- 車型アクターはプレイヤーを見つけると追いかけてきます
- 車型アクターが侵入した部屋の色に応じてサイレン音のピッチが変化します
- 本サンプルでの、車型アクターが部屋を移動した際にピッチが徐々に変更されるという動作は、AtomAudioVolume を使うことで実現しています。
サンプル内のAtomAudioVolumeの設定方法
- 本サンプルの AtomAudioVolume の設定方法を示します。
Step 1
- ベースとなるルームを配置します。
( アウトライナ上の Aisle , WideFloor , NarrowFloor )
Step 2
- ルームに合わせた大きさで AtomAudioVolume を、モードタブから選択してレベル上に配置します。
( アウトライナ上の AtomAudioVolume1 、 AtomAudioVolume2 , AtomAudioVolume3 )
Step 3
- 各ルームの入り口となる場所に AtomEntranceVolume を、モードタブから選択してレベル上に配置します。
( アウトライナ上の AtomEntranceVolume1 、 AtomEntranceVolume2 )
Step 4
- AtomAudioVolumeParameter アセットを配置した AtomAudioVolume の数でコンテンツブラウザ上で作成しアセットブラウザで開きます。
( ADX2Samples/Atom080_AudioVolume/Sounds/AtomAudioVolumeParameterSettings 以下の AAV_Blue , AAV_Green , AAV_Red )
Step 5
- 各 AtomAudioVolumeParameter アセットのパラメータを設定します。
Step 6
- 作成した AtomAudioVolumeParameter をレベル上に配置している AtomAudioVolume に設定します。
Step 7
- 各 AtomAudioVolumeParameter アセット内にある "AutoSettingsEntranceVolume" と "AutoSettingNeighborAudioVolumeToEntranceVolume" のフラグを有効にします。
( EntranceVolume を再配置した際は、すべての AtomAudioVolume を選択しこの2項目の一度無効化し、再度有効化する操作を行うことをお勧めします )
Step 8
- AtomAudioVolume のパラメータ遷移を行いたいサウンドに対応する SoundAtomCue アセットをアセットエディタで開き、 "EnableAudioVolume" フラグを有効にします。
( ADX2Samples/Atom080_AudioVolume/Sounds 以下の SoundAtomCue アセット )
- 音源が AtomAudioVolume 中を移動する場合は、 SoundAtomCue アセットの "IsMovable" フラグを有効にします。 また、音源が AtomAudioVolume の外に侵出する場合は、SoundAtomCue アセットの "IsMovable" と "CanStraddleAudioVolume" フラグを有効にします
Step 9
- 以上の設定を行った後、PIE 等でゲームを実行してサウンドを再生してください。 AtomAudioVolume のパラメータ遷移処理が行われることを確認できます。