はじめに
ADXアンバサダーとして記事を書いておりますSigと申します。
この記事ではUE5とADX for UEを連携させた際のサウンド再生について、適切なロード管理をすることで発声のラグを抑えるテクニックについてのTipsを紹介します。
UE5ではアセットを必要に応じてロードすることでパフォーマンスを改善することができます。
ADX for UEでも必要なキューシートのみをロードするなどの実装が可能ですが、その場合はロード管理を行う必要があります。
ロードが適切に行われていないと、初回再生するキューの発声が遅れるなどの現象が発生することがあり、ゲームプレイや演出などのフィールが悪化する可能性があります。
この記事では用途別のロード管理について触れていくので、プロジェクトに合わせて最適なものを選んでみてください。
当記事ではUE5.7 及び 「ADX LE UE SDK(2.05.01)」を使用します。
また、基本的にブループリントのみでの実装を行います。
ADX for UEはインディー向けの「LE版」であれば、無料で使用できます。
https://game.criware.jp/products/adx-le/
前提
「ADX for UE LE」を使用します。導入や簡単な使い方は以下の記事にあります。
ADX for UEの導入で、一歩上のサウンド表現を(導入編)
ADX for UEの導入で、一歩上のサウンド表現を(実践編)
実装
ADX for UEでキューを再生する際、もし対象のキューが含まれているキューシートが未ロードの場合は自動的にロードが行われます。そのためロードを意識せずともサウンドを再生することは十分に可能です。
ですが、以下の手法を活用することで突発的なサウンド再生のラグを抑えることが可能です。
また、使用するキューシートが多い場合、適切にアンロードすることで動作の改善も見込めます。
Blueprintでロードを管理する
Blueprintからキューシートを明示的にロードするには、次のようなノードを使用します。
Prime Cue Sheet for Playback
キューシートをロード開始するノードです。
デリゲートにより、ロードが完了されたタイミングでイベントを発火することができます。
実際に使用する際は、赤いアウトプットピンから線を伸ばしカスタムイベントを作成します。

カスタムイベントのアウトプットピンからはロードされたキューシートが取得できます。

ロードされたキューシートからキューを取得すれば、普段通りの方法で遅延のないサウンドを再生できます。

Prime Sound for Playback
こちらはキューを指定してロードするノードです。
Prime Cue Sheet for Playbackと同じ感覚で扱えます。

こちらはキューを指定しているので、そのままサウンド再生系ノードに接続することが可能です。

注意点として、UE5デフォルトのサウンドをロードする同名のノードがあります。
使用する際は必ずノードのカテゴリを確認しておきましょう。

ロード状態の確認
再生したいキューを含むキューシートがロードされているか確認するには、is Loadedノードを使用します。
まずはキューシートを取得するため、新規に変数を作成します。
My Blueprintパネルで変数を追加します。

変数をGetし、Is Loadedノードの結果で処理を分岐できます。
この例では、ロードが完了している場合のみ対象のキューを再生します。

ソフトリファレンスのキューシートのロード
アセットをソフトリファレンスとして持つことで、
このように変数として記憶したアセットはハードリファレンスと呼ばれます。レベルと共にロードされ、メモリに残り続けます。

対して、ソフトリファレンスのアセットは必要に応じて読み込むものになります。
いつもはアセットを直接読み込んでおらず、参照情報だけを持ちます。
メモリに優しい反面、明示的にロードする必要があります。

ソフトリファレンスのアセットの変数を作るには、変数の型を選ぶ際、下部の「Soft Object Reference」を選択します。

この状態ではハードリファレンスのアセットと異なり、直接再生することは出来ません。

無理やり再生しようと処理を組んだところ、サウンドは再生されず参照エラーが表示されます。

ソフトリファレンスのアセットを明示的にロードするには、Async Load Assetノードを使用します。

アウトプットから線を伸ばし、キューシート参照として繋げます。

そのままでは型が特定されていないため、Cast to AtomCueSheetノードを挟みます。

これでソフトリファレンスのアセットがロードされ、キューシートとして取得でき、再生されるようになりました。

ロード状態の確認
キューシートが正常にロードされているかを確認する方法として、Atom Resource Usageがあります。
これは「Tools」から呼び出せるデバッグ機能で、ロード済みのキューシート一覧が表示されます。


用途別のロード手法
1. リアルタイム性重視の音(頻度高)
攻撃のヒット音、足音などのアクション系のサウンドやUIで頻繁に再生される決定やカーソル移動の際のサウンドはすべて遅延なく再生される(事前にロードされている)ことが望ましいです。
そのため、これらのキューは汎用アクション系、汎用UI系などとして同じキューシートにまとめておきます。
レベルやゲームの開始とともにロード処理を行うことで、プレイヤーがアクションや操作を行う前にロードが完了し、初回も遅延しない再生が可能になります。
次のノード例では、レベル開始時のカットシーン再生と同時に汎用アクション用サウンドのキューシートをロードしています。
2. リアルタイム性重視の音(頻度低)
特定の場所でしか再生されないが、遅延なく再生されてほしいサウンドはレベルブループリントなどを使ってロードするのが良いでしょう。
この例ではプレイヤーが特定の部屋(ボリューム)に進入した際にキューシートがロードされます。

3. 遅延を気にしない音
環境音やちょっとしたギミックのサウンドでは、遅延を許可してしまい負荷を抑えるという手もあります。
キューシートを開き、「Loading Behavior」を「Load on Demand」にしておくと再生前に実ロードが発生するため、本当に必要になったときのみロードされる挙動となります。

特に風の音やゆっくりと鳴り始める音など、アタックが多めのサウンドは遅延しても違和感を感じない場合が少なくありません。
非同期的なロードは直感的に分かりづらい部分がありますが、適切に使うことでよりスムーズな体験やパフォーマンスを実現できます。
用途に応じて活用してみてください。



