Wwise SDK 2024.1.1
|
メモリの使用量を定められた制限内に抑えるのは、難しいことがあります。以下は、メモリ使用量を抑えるのに役立つ、幾つかのヒントです:
Objectメモリの使用量は、メモリにロードしたサウンド数やイベント数、そしてゲームオブジェクトの量によって直接、左右されます。これはプロジェクトがサウンドデザインの実装に必要とするオブジェクトすべてのプロパティを含んでいます。また、すべてのゲームオブジェクトとそれらの関連する情報 (ゲームシンク値、位置、向きなど)も含みます。より多くのバンクをロードすると、より多くのメモリアロケーションが必要となります。必要なサイズは、一つのシナリオ、レベル、マップ、ゲームエリアなどで一度に再生する可能性のあるサウンド数に依存します。このアロケーションを減らすには、以下のような心がけが役立ちます:
Processingカテゴリのメモリは、サウンドの再生に使います。これには解凍のためのバッファを含み、エフェクトを適用し、オーディオソースをミックスします。一度に再生するサウンドの数に直接影響されます。また、同時に使うエフェクトの合計数や種類にも影響を受けます。削減するには、同時にいくつのサウンドを聞かせたいのかを決める必要があります。ゲームによって、サウンドが10個以上聞こえるシナリオがほとんどないものもあれば、100個のゲームもあります。最悪のケースを考える必要があります。
ガイドラインとして、一部のゲーム (Xbox One) でプロファイリングを行い、次の数値を得ました:
処理に使用するメモリ量を減らすには、同時ボイス数を減らしてください。それには次を利用します:
注釈: また、バスの数も制限できます。 |
注釈: プログラム的にボリュームのしきい値をランタイムで変更できます。「ボリュームしきい値以下」の状態により多くのボイスを送るために、より処理が重くなるゲームの箇所でこれを利用できます。 |
サウンドバンク(SoundBank)のメモリ消費は主に、中にあるサウンドデータに起因します。サウンドデータ(メディア)のメモリ消費は、以下のテクニックで抑制できます。
Wwise uses an internal pool of memory to manage some temporary allocations that persist for less than one audio-render tick, which are represented in the Advanced Profiler's Memory tab as "Temp Alloc". These temporary allocations exist for a specific amount of time, have very little overhead, are handled internally by the sound engine, and cannot be forwarded to developer-provided memory allocation hooks. Instead, the only allocations in this regard that are observed by the Advanced Profiler and memory allocation hooks are the larger memory blocks that the temporary allocations are made from. Therefore, it might be desirable to manually tune the management of "Temp Alloc" memory blocks, in order to better optimize memory usage in your game.
During AK::MemoryMgr::Init
, AkMemSettings::tempAllocSettings
controls the behavior of the memory blocks for each Temp Alloc category. Notably, this includes configuring the size of the memory blocks, the minimum number of blocks that the system keeps allocated at all times, and how many blocks have to be unused for a tick before the system starts freeing memory. You can use AK::TempAlloc::GetStats()
to see how much memory the Temp Alloc system uses in your game at runtime, and better fine tune configuration of the system.
The following are some suggestions depending on your game's requirements, or other behavior observed during profiling:
AK::TempAlloc::InitSettings::uMinimumBlockSize
to a lower value than the default, so that it better matches the memory usage of your game's needs at any given time.AK::TempAlloc::Stats::uPeakMemUsed
to view the Temp Alloc system's peak memory usage, and then ensure that the AK::TempAlloc::InitSettings::uMinimumBlockCount
is set to a high enough value so that all of the blocks you might use are allocated when the sound engine is initialized, and never freed afterward.AK::TempAlloc::InitSettings::uMaximumUnusedBlocks
to a high value to ensure that the system can allocate new blocks, but not free them, even during periods of low memory load.AK::TempAlloc::InitSettings::uMinimumBlockSize
so that using more workers does not cause a significant increase in used memory in your game.Some debugging options are available in AK::TempAlloc::InitSettings
. In the Debug and Profile configuration of the sound engine, AK::TempAlloc::InitSettings::bDebugDetailedStats
and AK::TempAlloc::InitSettings::bDebugEnableSentinels
are enabled by default in order to improve tracking of usage statistics, and to provide some easy detection of buffer overruns. Disable these options when the highest performance, or most accurate profiling data, is required for your application. Support for these options is removed entirely in the Release configuration of the sound engine.
Wwise has a system called the "Bookmark Allocator" (similar to "Temp Alloc") for handling short-lived memory allocations that exist only for a single function or code block. This allows Wwise to perform temporary memory allocations as if they were on a stack, but instead of relying on the memory allocated for the thread's stack being sufficiently large to handle all possible scenarios, the Bookmark Allocator uses normal memory allocations to provide the necessary resources.
AkMemSettings::bookmarkAllocSettings
is available to control the behavior of memory blocks for the "Bookmark Allocator" memory category for allocating and freeing the underlying blocks of memory. Debug settings are available as well to detect buffer overruns, and clearing allocated memory to a deterministic invalid value before and after use. You can use AK::BookmarkAlloc::GetStats for information on how the "Bookmark Allocator" is being used.
The following are some suggestions depending on your game's requirements, or other behavior observed during profiling:
AK::BookmarkAlloc::Stats::uRecentBlocksFetched
might result in excessive thread contention in multi-threaded scenarios. It might therefore be desirable to increase AK::BookmarkAlloc::InitSettings::uMinimumBlockSize
so that the blocks used by the "Bookmark Allocator" are larger, and do not need to temporarily request new blocks as often. You can use AK::BookmarkAlloc::Stats::uRecentPeakMemUsed
to help determine what the minimum block size should be.AK::BookmarkAlloc::Stats::uPeakMemUsed
in order to reduce the size of AK::BookmarkAlloc::InitSettings::uMinimumBlockSize
if you find that you are not using all of the memory being provided.AK::BookmarkAlloc::InitSettings::uMaximumUnusedBlocks
so that the memory use is more consistent over time. Alternatively you can increase AK::BookmarkAlloc::InitSettings::uMinimumBlockSize
so that the first block acquired by a job is all that is required.