CriWare Unreal Engine
Plug-ins for CriWare solutions.
読み取り中…
検索中…
一致する文字列を見つけられません
ADX リソース管理

これまで、リソース割り当て設定を正しく設定するには細心の注意が必要でした。Unreal 5 の CRI ADX プラグインは、サウンドがエディターにインポートまたは再生される方法、スタンドアロン モードで再生される方法、最終的にパッケージ化されてさまざまなファイル アクセス設計を持つターゲット プラットフォームで再生される方法に応じて、異なるアセット読み込み設計を使用しています。そのため、リソース設定はますます複雑になり、扱いにくくなっています。

リソース割り当てを簡素化および最適化するために、ADX リソースの自動管理がいくつか追加されました。

UE5 CriWare プラグイン v2.3.0 では、「動的 ADX ボイス プール管理」が導入され、ゲーム エンジンの状況やゲーム スクリプト アクションに応じて、より優れた動的設計が提供されます。

UE5 CriWare プラグイン v2.4.0 では、「動的 CRI ファイルシステム管理」と「一意のグローバル ボイス プール」が導入され、サウンド再生に使用される読み込みおよびストリーミング リソースの管理が大幅に簡素化されます。

ダイナミック ボイス プール

ボイス プールは、サウンドの再生に使用される複数のソース ボイスのクラスターです。ADX では、再生する前に完全に定義する必要があります。

ソース ボイスには、入力エンコードされたサウンド データを読み取るデコーダー、リサンプラー、およびソース エフェクト チェーンがあります。これは、再生とバスへの出力で使用されます。

ソース ボイスは、メモリ上またはファイルに保存されたエンコードされたデータを読み取ることができます。StreamingType は、ボイス プールのすべてのボイスの読み取りアクセスを決定します。

ストリーミングには 3 つのタイプがあります:

  • メモリ: ボイスは、メモリからエンコードされたサウンド データを読み取ります。
  • ストリーム: ボイスは、ファイルからエンコードされたサウンドを読み取ります (Unreal IODispatcher または FileAsync 経由)。
  • 混合: ボイスは、メモリとファイルの両方からエンコードされたサウンド データを読み取ることができます。

2.4 より前: 最悪のシナリオに基づいて音声プールを設計します。

  • 2 つのグローバル音声プール: 1 つはメモリ専用、もう 1 つは混合 (ストリームとメモリ) 用。
  • 再生するチャンネル、サンプル レート、同時再生するサウンドの最大数に応じて音声プールを設定する必要があります。
  • 最悪のシナリオでデータが正しくロードされ、ストリーミングされるように、十分な大きさの (非常に難解なルールで) ファイルシステム バインダーの最大数を設定する必要があります。

問題

「最悪のケース」を見つけることは困難であり、不可能です。

  • このモデルは、サウンドの数や、ゲームまたは 3D アプリケーションのレベルのストリーミングの性質と実際には互換性がありません。つまり、A 時点での音声プール リソースの必要性は、別の B 時点でのものと異なり、「最悪のケース」とは、いくつかの最大リソース数が使用される時点を見つけることです。

「最悪の場合」の設定は計算が難しく、プールの固定された性質は、ほとんどの場合、プールが完全に関与していないときに、リソースの大幅な損失につながります。

エディタ、スタンドアロン プレイ、パッケージ化されたゲームは、エンジンで異なるメモリ モデルを使用します。

  • アセットをロードするとき、エディタはメモリからサウンドをロードして再生するように強制されます。実際、アセットとそのペイロード (ACB または AWB データ) はまだディスクに保存されていません。その後、エディタによってストリーミングされる可能性があります (プラグインは、作業に使用できる信頼性の高いデータを確保するために、エディタで一時的なメモリ コピーを作成します)。
  • プロジェクト ファイルはアーカイブ (.uasset) に保存されます。それぞれに、エディタによって 1 つずつ個別にロードされるデータのペイロードがあります。
    ただし、プロジェクトがクックされてパッケージ化されると、Unreal はチャンクによって読み取られるグローバル ファイルと、マルチ ストリーミング用のデータのキャッシュを使用します (IODIspatcher)。
    さらに、ターゲット プラットフォームに応じて、SSD の最適化速度のおかげで、目に見えるコピーを要求せずにファイル ストリームからシームレスにデータを読み取ることもできます。

Atom Craft から設計された「オン メモリ」キュー サウンドには、より多くのコピーを作成することで、ターゲット アーキテクチャのメモリ モデルと戦うチャンスがあります。

まとめると、Atom Craft 設定、Unreal Editor、スタンドアロン プレイ、さまざまなターゲット プラットフォームのパッケージ ゲーム、およびゲーム ロジック自体により、コンテキストによってリソースの読み込みプロセスが異なります。

これにより、Atom が使用するリソースのより一般的で柔軟なモデルが求められました。

動的ボイス プールの概要

動的ボイス プールは、プラグインによってオンデマンドで作成および破棄されます。

ボイス プールは、一意のサウンド ソースにリンクされています。 プールは再生時に作成され、サウンドが停止するか再生終了すると解放されます。 また、ボイス プールは、リンクされたサウンド ソースに応じて設定を使用します。

常に動的に作成されたボイス プールを使用するサウンド。 「スタンドアロン」の性質のため、AtomCueSheet からの AtomSoundCue 以外のすべてのサウンド ソースは、再生時に動的な音声プールを生成します。

詳細には、動的に作成された音声プールを使用するサウンド ソースは次のとおりです。

  • WaveBank (AtomSoundWave) からの Wave。
  • ファイルからデータを読み取らない、手続き的に生成されたサウンド (AudioLink...)。
  • 外部制御されたサウンドは、独自の音声プールを作成します。 (Sofdec ムービー...)

動的に作成された音声プールの設定 (チャンネル、サンプリング レート x 最大ピッチ係数、メモリ タイプ...) は、再生するサウンド ソースに応じて設定されます。

Atom サウンド キュー - グローバルまたはダイナミック ボイス プール

キューは Atom Craft によって外部で設計され、複数の波形とさまざまな再生設計を使用するため、グローバル ボイス プールを使用するか、AtomSoundCue を独自の独立したダイナミック ボイス プールから再生するかを選択できるようにしています。

これを設定するには、各サウンド キューの Voices セクションに次の設定があります:

  • 「ダイナミック ボイスを使用する」をチェックします。
  • ボイス制限を設定します (デフォルトは 1)。キューが複数のボイスを同時に使用する場合は、この値をリミッターとして使用できます。

これにより、キューの次の再生時にサウンド ソースのボイス プールが生成されます。プールの設定は、キューの最初の波形設定に応じて調整されます。実際には、Unreal では再生ごとに 1 つのプールが作成されます。

グローバル ボイス プール

これは、任意の SoundCue (ストリーミングまたはメモリ上) をデコードして再生でき、デフォルトで再生に使用される独自のグローバル ボイス プールです。

ダイナミック ボイス (デフォルト) を使用しない AtomSoundCue は、グローバル ボイス プールで再生されます。

グローバル ボイス プール設定は、ADX Atom のプロジェクト設定で使用できます。

または、[サウンド キューのダイナミック ボイス管理を強制する] チェックボックスをオンにすると、グローバル ボイス プールが削除されます。

AtomSoundCue は、ダイナミック ボイス プールを使用して自動的に再生されます。

動的ファイルシステム管理

デフォルトでは、ADX は、ボイス プールの作成またはデータの読み込みが要求されたときに、ファイルシステム リソースを割り当てたり解放したりします。


何も必要ありません。

手動の CRI ファイルシステム設定 (非推奨)

エンジンの起動時に CRI ファイルシステムのリソースを手動で割り当て続ける場合は、プロジェクト設定の ADX Atom セクションで動的ファイルシステム管理を無効にすることができます。

すべてのサウンドがどのような状況でも読み込めるようにするには、CriWare Core 設定で十分な数の FS ローダーとバインダーを設定する必要があります。

  • 同時再生するボイスごとに 1 つのローダー/バインダー。
  • 同時使用する ACB および AWB ごとに 1 つのローダー/バインダー。

ベスト プラクティス

適切なサウンドにはダイナミック ボイス プールを使用します

マルチチャンネル BGM とスタンドアロン キュー。

  • すべてのボイスに 8 チャンネルのグローバル ボイス プールを使用する代わりに、2 チャンネル (ステレオ) のみで設定します。
  • 特に 2 つ以上のボイスが必要な場合は、BGM にダイナミック ボイス プールを使用します。
    注: 別のボイス プールを使用するサウンドは、ADX による仮想化/制限を妨げることもあります。

OnMemory サウンド用に最適化

  • 常にメモリ コピーから再生される SoundCue にダイナミック ボイス プールを使用します。これにより、グローバル ボイス プールに割り当てられる固定ボイスの数を減らすことができます。

波形マテリアルには、Atom Craft で適切なメモリ設定を使用します。

  • サウンドの「ストリーミング」は、パッケージ化されたゲーム データがストリーミングされる (IODispatcher) ため、Unreal Engine のデフォルトの動作です。
  • 「低レイテンシ ストリーミング」は、低レイテンシの再生サウンドの場合、Unreal Engine に最適なオプションです。
  • 「メモリ」は、メモリからインラインで再生することを目的としたサウンド用です (ほとんどの場合、ストリーミングされる場合もあります)。Unreal から Atom へのコピーが必要になるため、メモリがさらに使用される可能性があります。
  • サウンドで高いピッチ値を使用する場合は、ボイス プールのサンプリング レートを上げる必要があります。これらのサウンドに動的ボイス プールを使用する場合は、グローバル ボイス プールのすべてのボイスに高いサンプリング レートを設定しないようにしてください。実際、動的ボイス プールのサンプリング レートは、プロジェクト設定の ADX Atom セットアップからのグローバル ピッチ係数をソース サンプリング レートに乗じたものです。

ADX リソースの読み込みと有効期間

ADX サウンド エンジンは、サウンドを再生するために、サウンド データをソース ボイスに読み込み、ストリーミングする必要があります。

AtomCueSheet または AtomWaveBank の詳細パネルの「読み込み動作」設定により、ADX サウンド エンジンへの読み込み/リリース時間を制御できます。


AtomCueSheet は、キューのバイナリ ロジックを含むペイロードとして ACB データを所有し、Atom Craft によって設定されている場合、エンコードされたサウンドウェーブ データも含まれる場合があります。
AtomWaveBank は、エンコードされたサウンドウェーブ データを含むペイロードとして AWB データを所有します。サウンドを再生する前に、サウンドウェーブ データの最初のチャンクのみが ADX にロードされ、その後、設定に応じてデータがストリームされるか、メモリにインラインで格納されます。

継承なし (デフォルト)

サウンド データは、コンソール変数 'atom.streamcache.AtomSoundBankDefaultLoadingBehavior' で定義されたグローバル ルールを使用して ADX にロードされます。
(0: デフォルト (オンデマンドでロード)、1: ロード時にオーディオ データを保持、2: ロード時にオーディオ データをプライミング、3: オンデマンドでロード (UAtomSoundBank が再生またはプライミングされるまでオーディオ データはロードされません)。)

ロード時に保持

サウンド データは、AtomComponent による再生タイミングで必要に応じて ADX にロードされます。
キューシート リソースは、AtomCueSheet アセットが破棄されるまで破棄されません。

ロード時にプライム

サウンド データは、アセットがロードされると同時に ADX にロードされます。
そのため、ほとんど遅延なく再生できます。

オンデマンド ロード

サウンド データは、AtomComponent からの再生タイミング、または CueSheet の PrimeSound() 関数呼び出しによってプライムされたときに、必要に応じて ADX にロードされます。
そのため、キューシートがロードされる前にキューを再生しようとすると、再生が開始されるまでに少し時間がかかります。

インラインを強制

サウンド データは、アセットがロードされるときにロードされ、メモリに完全にコピーされます。ADX は、読み取り/書き込みメモリ コピーを通じてサウンド データにアクセスします。

注意
この設定は大量のメモリを使用するため、開発目的で使用する必要があります。

注: AtomSoundCue の SoftObject の使用について:
  • SoftObjectPointer は、Unreal へのアセットの読み込み時間を制御するために作成されます。これで完了です。AtomSoundCue は AtomCueSheet アセットのサブオブジェクトであるため、アクセスされると、依存関係によって AtomCueSheet アセットが Unreal に直ちに読み込まれるように強制されます。ただし、そのペイロード (ACB データ) はこの時点では読み込まれない可能性があります。
  • ADX は、Unreal の読み込み管理 (IODispatch) を介して CRI FileSystem を使用して、AtomCueSheet または AtomWaveBank の ACB または AWB ペイロードにさまざまなタイミングでアクセスし、再生用のサウンド データをストリーミングします。
  • これは、AtomCueSheet の Loading Behavior プロパティによって制御されます。
  • その結果、キューに SoftObject ポインターまたはパスを使用しても、「Retain on Load」読み込み動作を除き、読み込みパフォーマンスに影響しない可能性があります。この動作により、AtomSoundCue アセットが Unreal にロードされると同時に、ACB データが ADX にロードされます。AtomCueSheet がストリーミング データ (ウェーブバンクまたは Atom Craft 設定からのハイブリッド ロード) のみを使用する場合、再生を開始するために必要な最初のデータ チャンクのみがロードされます。