バージョン
ゲームのリソース制限やデザイン上の制約に対応するためには、ゲームのどの時点においても、サウンド、ミュージック、モーションオブジェクトなどの再生を、最適化する必要があります。多様なオブジェクトの同時再生を管理するには、以下の3つの手法があります。
再生できるサウンド、ミュージック、モーションの各種インスタンスの数を、ゲームオブジェクトごとに制限する、またはActor-Mixer Hierarchyオブジェクトに対してグローバルに制限する。
1つのバスを通るサウンド、ミュージック、モーションの各種インスタンスの合計数を、制限する。
ゲーム全体のサウンド、ミュージック、モーションの各種インスタンスの合計数を、制限する。
どの制限値の場合も到達すると、Wwiseがオブジェクトのプライオリティ設定を利用して、制限を超えた場合のオブジェクトに設定されている動作を元に、どのオブジェクトを捨てるのかを判断します。複数のオブジェクトが同じプライオリティの場合は、捨てるべきインスタンスとして再生中の最新または最古のインスタンスを選択できます。
アクターミキサーまたはインタラクティブミュージックのレベルで再生制限を設定すると、同じ構造の中で再生できるインスタンス数を、グローバルまたはゲームオブジェクトごとにコントロールすることになります。もし子オブジェクトで親レベルに設定した再生制限をオーバーライドすると、再生できるインスタンスの合計数は、その構造内で設定された制限数の合計に等しくなります。つまり、制限が親で「20」、子で「10」であれば、可能なインスタンスの最大数は「30」です。
一方、マスターミキサーレベルで再生制限を設定すると、バスを同時に通過できるサウンド、ミュージック、モーションの各種インスタンスの合計数を指定することになります。オブジェクトのプライオリティはアクターミキサーまたはインタラクティブミュージックのレベルで既に個別に指定されているので、バスの再生プライオリティ設定はありません。
プロジェクトレベル、つまりゲームレベルで再生制限を設定すると、同時にアクティブどなれるサウンド、ミュージック、モーションの各種インスタンスの合計数を指定することになります。各サウンドのAdvanced Settingsで個別に設定したVirtual Voiceの動作が、適用されます。
再生制限を設定するには
Property Editorに、最上位の親オブジェクトを1つロードする。
Advanced Settingsタブに切り替える。
注記 | |
---|---|
このオブジェクトが最上位のオブジェクトでない場合、Playback Limitオプションを設定する前にOverride parentオプションを選択する必要があります。 |
グループボックスPlayback Limitで、Limit sound instances to xオプションを選択する。
再生制限のオプションが選択可能となります。
該当するテキストボックスに、1つのゲームオブジェクトで同時に再生できる最大インスタンス数を入力する。
再生制限のスコープを設定するために、以下のオプションを1つ選択する。
Global は、グローバルに制限を適用する。
Per game objectは、ゲームオブジェクトごとに制限を適用する。
注記 | |
---|---|
バスでは、制限が常にグローバルなので、このオプションは選択できません。 |
再生制限に到達した場合の処理として、以下のオプションを1つ選択する。
Kill voiceは、最低プライオリティのインスタンスの再生を停止する。
Use virtual settingsは、事前に定義したそのサウンドのバーチャルボイス動作を実行する。バーチャルボイス動作とは、Kill(キルする)、Send to virtual voice(バーチャルボイスに送る)、Continue to play(再生を続ける)などである。
再生制限に到達したものの、最低プライオリティのサウンド、ミュージック、またはモーションオブジェクトが複数ある場合の処理として、When limit is reached and priority is equal(制限に到達してプライオリティが等しい時)リストから、以下のオプションを1つ選択する。
Discard oldest instanceは、再生中のインスタンスの中で最低プライオリティ、かつ最古のものを停止させる。
Discard newest instanceは、再生中のインスタンスの中で最低プライオリティ、かつ最新のものを停止させる。
Project/Game制限は、Wwiseのプロジェクト設定でプラットフォームごとに編集できます。またサウンドエンジンが正しく初期化されれば、Wwise SDK APIを使ってゲームから変更することもできます。
ボイス制限のシステムを使う時に、以下を知っておくと良いでしょう。
バーチャルボイスは、有効なボイスとして数えられない。
バーチャルボイス設定が“Continue to play”であるサウンドが原因で、制限を超えてしまう可能性がある。
例えば、以下の例を検討します。
バスで設定された制限は、同時に最大4つのサウンド。
このバスの“Over limit behavior”は、“Use virtual voice behavior”に設定されている。
ボリューム閾値は、-60 dB
現在のフレームで、このバスで、以下の8つのボイスが、再生されている。
サウンド名 |
プライオリティ |
ボリューム |
バーチャル動作の設定 |
---|---|---|---|
Sound_1 |
100 |
0 dB |
Go Virtual |
Sound_2 |
90 |
-90 dB |
Go Virtual |
Sound_3 |
80 |
-90 dB |
Continue to play |
Sound_4 |
70 |
0 dB |
Go Virtual |
Sound_5 |
60 |
0 dB |
Kill voice |
Sound_6 |
50 |
0 dB |
Kill voice |
Sound_7 |
40 |
0 dB |
Go Virtual |
Sound_8 |
30 |
0 dB |
Continue to play |
結果を下表に示します。
サウンド名 |
結果 |
理由 |
---|---|---|
Sound_1 |
再生 (1/4) |
最高プライオリティであり、かつボリューム閾値より上。 |
Sound_2 |
バーチャルになる |
ボリュームが閾値未満。 |
Sound_3 |
再生 (2/4) |
ボリューム閾値より下でも、再生し続ける。 |
Sound_4 |
再生 (3/4) |
- |
Sound_5 |
再生 (4/4) |
- |
Sound_6 |
キルされる |
制限超過であり、より高いプライオリティのサウンドが4つ、既に再生中。 |
Sound_7 |
バーチャルになる |
制限超過であり、より高いプライオリティのサウンドが4つ、既に再生中。 |
Sound_8 |
再生 (5/4)* |
* バーチャルやキルにできないサウンドで、より高いプライオリティが再生中の4つのサウンドを置換えることができない特別な状況であり、制限超過しても再生される。 |
FAQ
Q: 設定した制限が守られていないようです。なぜか。
A: そのサウンドのバーチャル動作が、互換性の理由からデフォルト設定である“Continue to play”に設定されていないか確認してください。この設定のサウンドは全て、制限を超えても落されず、バーチャル化されません(ただし、制限を超えた時の動作が、明確に“Kill”とされている場合を除く)。制限超過に“Use Virtual Voice settings”の設定を使い始めた時点で、CPU節約のために落せる、またはバーチャル化できるサウンドは全て、この設定とする必要があります。
Q: 大体の時は制限が守られているようだが、プロファイラを見ると、“Continue to play”に設定されていないサウンドによって、指定した制限数を時々超えることがある。
A: サウンドがバーチャルになる時、そのサウンドが数ミリ秒間(1オーディオフレーム分)アクティブの状態で残り、フェードアウトすることでクリッキングを防止します。例えば、制限が「1」で1つのサウンドが既に再生中であれば、より高いプライオリティの別のサウンドが入ってくると、最初のサウンドがバーチャルになる過程でフェードアウトするため、アクティブボイス数が一時的に「2」となります。
Q: なぜ “Send to virtual voice”を、制限を超えた時のデフォルトとしないのか。なぜ全てのサウンドのデフォルトが“Continue to play”なのか。
A: ソースコーデックによっては、バーチャルモードの時に完全にアキュレートでないものや、バーチャルボイスの“Play from elapsed time”を実行するのにシークテーブルをソースに追加しなくてはならないものがあります。このような問題があるため、デフォルトで全てが問題なく動くことを保障するために、デフォルトに採用していません。例えば、Vorbisで“Play from elapsed time”のバーチャル動作を正しく実行するには、シークテーブルが必要です。