Wwise SDK 2019.1.11
|
以下は、各メモリプールの概要とその使用方法です。
初めてサウンドエンジンを使う時に、最悪のシナリオでも稼働できるだけの充分なリソースを確保しておくため、サウンドエンジンの内部メモリプールのデフォルトサイズは非常に大きくなっています。各プールのデフォルトサイズは以下の通りです。
注釈: ストリーミングマネージャを実装するためにサンプルコードを使用する場合は、ストリーミングバッファ用にも、8MBが配分されます(Stream I/O)。 |
デフォルトメモリプールのサイズは、最終的に作成するゲームの種類によって変わります。例えば、ゲームのオーディオアセットが合計数ギガバイトあっても、一度に4、5個以上を再生することは稀で、エフェクトも皆無または少数であれば、デフォルトメモリプールの必要メモリがより大きくても、ローワーエンジンメモリプールの必要メモリは小さいかもしれません。一方、ゲームのサウンド数は少なくても、全て同時に再生して、リバーブやエコーなど多くの環境エフェクトを使う場合、例えばファーストパーソンシューティングゲームなどでは、デフォルトメモリプールの必要メモリがより小さくなり、ローワーエンジンメモリプールの必要メモリはより大きくなるかもしれません。ローワーエンジンメモリプールのサイズは、最終的にサウンドエンジンで何をするのかによります。ゲームで、多数のボイス(バーチャルボイスも含め)を同時に再生して、大量のエフェクトを処理する計画であれば、このプールの必要メモリが増えます。
PCで、バンクをロードせず、サウンドを再生しない状態では、メモリ消費量は約150KBになると予想されます。正確なメモリ消費量を知るには、Wwiseの、Profilerレイアウトで、Performance Monitorの、Total Used Memory(メモリ消費合計)の数値を確認してください。当然、ロードされるアセット数、再生されるボイス数、ゲームオブジェクトのポジション数などが増えると、この値も増えます。
それぞれのメモリプールに必要なメモリを左右する条件として、オーディオ品質、ロードするサウンド数、同時に再生するボイス数、サウンド構造の複雑性、使用するエンコード方式、処理するエフェクトの種類と数、3Dポジションが設定されているサウンド数、スイッチ数など、多数あります。
必要なメモリを確実に知る唯一の方法は、以下の通りです。
一般的に、それぞれのプールの最適サイズは、ピークのメモリ使用値よりも約15〜20ほど大きい値となる。
デバッグ専用の割り当ては、Communications、Monitor、および Monitor Queue メモリプールでなされており、Release バージョンでは作成されません。これらのプールのサイズを除くと、リリースバージョンのメモリ使用量の目安がつく。
注釈: Memory タブで、ゲームに接続せずにWwise自体からプロファイル情報を取り込んで、サウンドエンジンメモリの使用量を調べることもできます。 |
多くの場合、デフォルトのメモリプールサイズ(1プールあたり16MB)からスタートするのが良いでしょう。これだけ大きいプールサイズであれば、実際のメモリ消費が簡単に分かり、プールごとに適宜、小さくできます。ただし、各種プールに割り当てることができるメモリ量が、これよりも制約されている場合(16MBが多すぎる場合)は、以下の数値からスタートしてみてください。
プールごと2 MBもあれば、すべてとはいかなくとも、シナリオの大部分を扱うことができます。ストリーミングのバッファサイズは、ストリーミングするサウンドの数、サウンド品質、ストリーミングサウンドの時間の余裕などによって変わります。8MBというデフォルト値は、ほとんどのゲームではメモリの無駄遣いと受け取られますが、前述の通り、大きくスタートして、メモリ使用量が明確になった時点で削減するのが、最適の方法です。ストリーミングバッファメモリの詳細については、 Audiokinetic ストリームマネージャ初期化設定 を参照してください。
プラットフォームごとにプールサイズを設定する時に大事なのは、メモリプールのサイズは、プラットフォームの種類よりも、オーディオの内容と使用方法によって決まるということです。そこで、各種プールのサイズは、どのプラットフォームでも同じサイズからスタートして、Profilerのメモリ消費指数を参考にしながら、それぞれのプラットフォームに合わせます。
各メモリプールに対して最適なサイズはどれくらいでしょうか?これは多くの要素に依存します。例えば:
各メモリプールでは、異なった最悪のシナリオが起こり得ます。例えば、64サウンドを同時に再生すると、ローワーエンジンプールの使用量が増加しますが、アッパーエンジンプールの使用量はわずかしか増加しません。一方、20個のバンクを同時にロードすると、ローワーメモリプールの使用量に影響を与えずにアッパーエンジンメモリの使用量が増加します。従って、状況によってメモリの使用のされ方が異なってくる場合があるため、すべてのテストに1つのみの最悪のシナリオを使用しないことをお勧めします。
テスト対象となる特定の状況の1つは、レベル間でサウンドバンクがロードおよびアンロードされる時に発生します。この状況では、アッパーメモリプールにピークが発生するためです。例えば、ゲームのレベル1とレベル2からのバンクが短い間隔で同時にロード出来る場合には、このピークが発生します。
警告: PCのピークメモリ使用量を確認するためのテストを実行する時には、ゲームを実行しているPC のセットアップ構成が5.1 以上に設定されていることを確認する必要があります。これは、スピーカーのセットアップがステレオである場合にはサウンドエンジンが最適化を行い、5.1に比べて使用メモリを少なくするために必要となります。 |
「メモリ不足」状態に対しては、この状況の発生時によって、サウンドエンジンが異なった反応をします。例えば、以下のようなシナリオにおけるメモリ不足の場合、次のような事象が発生します:
Wwise Profiler を使用すると、ゲーム中で発生するあらゆるメモリ割り当ての失敗に対して、警告通知がキャプチャログに送信されます。ゲームプレイ中の各ポイントで、メモリ内でどのメモリプールが欠けていたかを調べるためにこの通知リストをチェックすることができます。
以下のような事項により、メモリの使用率が高くなります:
更なる詳細は以下のセクションからご覧いただけます:
サウンドエンジンの初期化時に、サウンドエンジンの1つ以上のメモリプールに対するメモリしきい値を定義するオプションがあります。
サウンドエンジンの初期化パラメータの値を変更することで、メモリプールのしきい値を定義することが可能です: AkInitSettings::fDefaultPoolRatioThreshold および AkPlatformInitSettings::fLEngineDefaultPoolRatioThreshold
デフォルトでは、デフォルト値1(または100%)の使用により、メモリしきい値は無効になっています。0から1の間の任意の値を設定することにより、これを有効にすることができます。
メモリしきい値が無効にされると、メモリアロケータが正常に動作します。有効にすると、使用されているメモリの比率が指定されたしきい値を下回っていることをエンジンが定期的に確認します。しきい値を上回ると、システムは優先度の最も低いサウンドを破棄し始めます。
メモリしきい値が使用されていない状況では、エンジンはサウンド優先順位を優先しますが、メモリ不足の状態においては、優先度の高いサウンドを再生するのに十分なメモリがエンジンにない場合があり、この場合にはこのサウンドが破棄されます。メモリしきい値が使用される場合には、優先度の高いサウンドのためのスペースを解放するために、優先度の低いサウンドが破棄されます。
一般的には、AkPlatformInitSettings::fLEngineDefaultPoolRatioThreshold パラメータのしきい値を定義します。AkInitSettings::fDefaultPoolRatioThreshold パラメータ上へのしきい値の設定は、これがバンクのロードにも使用されるため予期しない動作を引き起こす場合があります。