menu
バージョン
2024.1.3.8749
2024.1.3.8749
2023.1.11.8682
2022.1.18.8567
2021.1.14.8108
2019.2.15.7667
2019.1.11.7296
2018.1.11.6987
2017.2.10.6745
2017.1.9.6501
2016.2.6.6153
2015.1.9.5624
2024.1.3.8749
2023.1.11.8682
2022.1.18.8567
2021.1.14.8108
2019.2.15.7667
2019.1.11.7296
2018.1.11.6987
2017.2.10.6745
2017.1.9.6501
2016.2.6.6153
2015.1.9.5624
Wwise SDK 2024.1.3
|
メモリの使用量を定められた制限内に抑えるのは、難しいことがあります。以下は、メモリ使用量を抑えるのに役立つ、幾つかのヒントです:
Objectメモリの使用量は、メモリにロードしたサウンド数やイベント数、そしてゲームオブジェクトの量によって直接、左右されます。これはプロジェクトがサウンドデザインの実装に必要とするオブジェクトすべてのプロパティを含んでいます。また、すべてのゲームオブジェクトとそれらの関連する情報 (ゲームシンク値、位置、向きなど)も含みます。より多くのバンクをロードすると、より多くのメモリアロケーションが必要となります。必要なサイズは、一つのシナリオ、レベル、マップ、ゲームエリアなどで一度に再生する可能性のあるサウンド数に依存します。このアロケーションを減らすには、以下のような心がけが役立ちます:
Processingカテゴリのメモリは、サウンドの再生に使います。これには解凍のためのバッファを含み、エフェクトを適用し、オーディオソースをミックスします。一度に再生するサウンドの数に直接影響されます。また、同時に使うエフェクトの合計数や種類にも影響を受けます。削減するには、同時にいくつのサウンドを聞かせたいのかを決める必要があります。ゲームによって、サウンドが10個以上聞こえるシナリオがほとんどないものもあれば、100個のゲームもあります。最悪のケースを考える必要があります。
ガイドラインとして、一部のゲーム (Xbox One) でプロファイリングを行い、次の数値を得ました:
処理に使用するメモリ量を減らすには、同時ボイス数を減らしてください。それには次を利用します:
info | 注釈: また、バスの数も制限できます。 |
info | 注釈: プログラム的にボリュームのしきい値をランタイムで変更できます。「ボリュームしきい値以下」の状態により多くのボイスを送るために、より処理が重くなるゲームの箇所でこれを利用できます。 |
サウンドバンク(SoundBank)のメモリ消費は主に、中にあるサウンドデータに起因します。サウンドデータ(メディア)のメモリ消費は、以下のテクニックで抑制できます。
Wwiseはメモリの内部プールを使用して一時アロケーションを管理しますが、アロケーションが存続するのは1つのオーディオレンダリングティックが終了するまでです。一時アロケーションはAdvanced Profiler's Memoryタブでは「Temp Alloc」と表示されます。こうした一時アロケーションが存在するのは一定時間であるため、オーバーヘッドがほとんど発生しません。またサウンドエンジンで内部的に処理され、デベロッパが提供するメモリアロケーションフックには転送されません。これに関連するアロケーションでAdvanced Profilerとメモリアロケーションフックによって監視されるのは、一時アロケーションの作成元となる大きなメモリブロックのみです。このため、ゲームでのメモリ使用量を最適化するためには、「Temp Alloc」メモリブロックの管理を手動で調整することが望ましい場合があります。
AK::MemoryMgr::Init
の実行時に、 AkMemSettings::tempAllocSettings
によってTemp Allocカテゴリごとにメモリブロックの動作が制御されます。特に注目すべきは、メモリブロックのサイズ、システムがアロケーションを存続する最小ブロック数、およびシステムがメモリの解放を開始する前に1回のティックで確保する未使用のブロック数の設定が含まれていることです。 AK::TempAlloc::GetStats()
を使用してゲーム実行中にTemp Allocシステムが使用するメモリ量を確認し、システム設定をより適切に微調整できます。
以下は、ゲームの要件やプロファイリング中に観察された動作に応じた推奨事項です。
AK::TempAlloc::InitSettings::uMinimumBlockSize
をデフォルト値より小さい値に設定することが望ましい場合もあります。AK::TempAlloc::Stats::uPeakMemUsed
を測定してTemp Allocシステムのピーク時のメモリ使用量を確認してから、使用する可能性のあるブロックがすべてサウンドエンジンの初期化時に割り当てられ、後に解放されないくらい十分な大きさの値が AK::TempAlloc::InitSettings::uMinimumBlockCount
に設定されていることを確認してください。AK::TempAlloc::InitSettings::uMaximumUnusedBlocks
を大きな値に設定することで、システムは新しいブロックを割り当てるが、メモリの負荷が低い時でもブロックを解放しないようにすることができます。AK::TempAlloc::InitSettings::uMinimumBlockSize
を小さな値にすることが望ましい場合があります。AK::TempAlloc::InitSettings
にはデバッグオプションがいくつか用意されています。サウンドエンジンのDebugおよびProfile設定では、メモリ使用量統計のトラッキングを改善してバッファオーバーランを簡単に検出できるように、 AK::TempAlloc::InitSettings::bDebugDetailedStats
および AK::TempAlloc::InitSettings::bDebugEnableSentinels
がデフォルトで有効になっています。アプリケーションでパフォーマンスの最大化や最も正確なプロファイリングデータが必要な場合は、これらのオプションを無効にします。サウンドエンジンのReleaseコンフィギュレーションでは、これらのオプションに関するサポートが完全に削除されています。
Wwiseには、1つの関数やコードブロックが実行される間だけ存在する短期メモリアロケーションを処理するための「Bookmark Allocator」と呼ばれるシステム(「Temp Alloc」と似たシステム)が備わっています。これにより、Wwiseは一時メモリのアロケーションをメモリがスタック上にあるかのようにして実行できます。ただし、Bookmark Allocatorは考えられるすべてのシナリオに対応するために、スレッドの十分な大きさのスタックに割り当てられたメモリに依存するのではなく、通常のメモリアロケーションを使用して必要なリソースを提供します。
AkMemSettings::bookmarkAllocSettings
を使用すると、下層のメモリブロックの割り当てと解放を実行するために用意されている「Bookmark Allocator」メモリカテゴリのメモリブロックの動作を制御できます。バッファオーバーランを検出して、決定的な無効値に割り当てられたメモリを使用の前後にクリアするためのデバッグ設定も用意されています。AK::BookmarkAlloc::GetStatsを使用して「Bookmark Allocator」のしくみを知ることができます。
以下は、ゲームの要件やプロファイリング中に観察された動作に応じた推奨事項です。
AK::BookmarkAlloc::Stats::uRecentBlocksFetched
を大きな値にすると、マルチスレッドシナリオで過剰なスレッド競合が発生することがあります。このため、「Bookmark Allocator」で使用されるブロックを大きくし、新しいブロックの一時的な要求が頻繁に発生しないように、 AK::BookmarkAlloc::InitSettings::uMinimumBlockSize
の値を上げることが望ましい場合もあります。必要な最小ブロックサイズを決める際に AK::BookmarkAlloc::Stats::uRecentPeakMemUsed
が役立ちます。AK::BookmarkAlloc::Stats::uPeakMemUsed
を測定して AK::BookmarkAlloc::InitSettings::uMinimumBlockSize
のサイズを小さくすることもできます。AK::BookmarkAlloc::InitSettings::uMaximumUnusedBlocks
の値を上げることが望ましい場合もあります。または、ジョブによって取得される最初のブロックで必要なすべてのメモリ量を確保できるように AK::BookmarkAlloc::InitSettings::uMinimumBlockSize
の値を上げることもできます。