ロワーエンジンメモリプール(Lower engine memory pool)のメモリは、サウンドの再生に使われます。一度に再生中のサウンド数によって直接、影響されます。また、同時に使うエフェクトの合計数や種類によっても影響を受けます。ここで削減するには、同時にいくつのサウンドを聞かせたいのかを決める必要があります。ゲームによって、サウンドが10個以上聞こえるシナリオがほとんどないものもあれば、100個のゲームもあります。メモリプールのサイズを設定する時は、常にワーストケースシナリオを採用してください。
ほぼ比例関係にありますが、実際には、使用するコーデックや適用するエフェクトの数など、様々な条件によって変わります。
また、170個ものサウンドを同時再生することで、ゲームの価値が実際に上がるのかどうかを、改めて考える必要もあります。ある点を超えると、人間の耳には個々のサウンドが聞き分けられなくなり、単なるノイズとなってしまいます。ゲームにとって最も価値のあるボイス数を見つけ出す必要があります。これにはもちろん、試行錯誤が伴います。ゲームのシナリオを複数、プロファイリングして、Advanced Profilerの、Memoryタブを使って、リソースがどれだけ使われているのかを、確認してください。
ロワーエンジンプールのメモリ消費量を削減するには、一度に再生するボイス数を減らす必要があります。以下の戦略のいずれかを使えば、減らせます。
再生制限: Advanced Settingsの設定。例えば、跳弾50弾分のサウンドが聞こえる必要が、本当にあるのか。おそらく、不要であり、15弾程度の無理のない数に制限することができます。また、バスの数も制限できます。
再生プライオリティ: Advanced Settingsの設定。例えば、弾丸は、ダイアログほど重要でないとします。そこで、サウンド数が多すぎる場合は、まず弾丸の再生を落します。Playback Limitsと組み合わせて使います。
Distance-based Priority Offset: Advanced Settingsの設定。一般的に、遠くにあるオブジェクトは、近くのものほど重要ではありません。例えば、10m先にある弾丸の音は、もっと近くに弾丸サウンドが15個ある場合は、聞こえる必要がありません。
Memory Threshold: SDKの設定。サウンドエンジンの様々なメモリプールを初期化する時に、プールの使用率に上限を設けて、超えるとプライオリティ設定に基づいてボイスをキルする(消す)ように設定できます。これで、メモリに固定の使用制限がかかり、メモリ不足(Out of Memory)の状況をほぼ完全に回避できます。なお、メモリにフラグメンテーションが起きるので、全てを使い切ることが不可能なため、スタート地点として「0.9」つまり90%程度が適切です。
Volume Threshold: Project Settingsの設定。これは、小さすぎて聞こえないようなサウンドをキルする(消す)ために使います。この設定と共に使われるのは、閾値以下の動作設定(Below Threshold Behavior)や、遠くに行けば一般的に音が小さくなる減衰(Attenuation)設定です。デフォルト値は「-80」です。
ボリューム閾値以下の動作(Below Volume Threshold Behavior): Advanced Settingsの設定。負荷が最も低い動作(CPU、メモリ)は、「Kill Voice(ボイスを消す)」です。このオプションは、短いサウンドやループするアンビエンスサウンドに使うと便利で、ボイスは消されますが、ループは消されません。次に望ましいオプションは、「Send To Virtual(バーチャルボイスリストに送る)」+「Play from beginning(最初から再生)」であり、その次は「Send To Virtual(バーチャルボイスリストに送る)」+「Resume(再開)」、その次は「Send To Virtual」+「Play from elapsed time(経過した時間から再生)」と続きます。最も負荷が高いのは「Continue to play(再生を続ける)」と、「Play from elapsed time(経過した時間から再生)」のオプションです。なお、Wwiseのデフォルト値は「Continue To Play(再生を続ける)」なので、注意してください。