バージョン
ゲームのリソース制限やデザイン上の制約に対応するためには、ゲームのどの時点においても、オブジェクトなどの再生を最適化する必要があります。プロジェクトに存在する多様なオブジェクトの同時再生を管理するには、以下の手法があります:
ゲームオブジェクトごと、または、グローバル(全体)で1つ以上のActor-Mixer Hierarchy または Interactive Music Hierarchy オブジェクト、その子たちに対して、再生できるインスタンス数を制限する;
バスを通過するインスタンス総数を制限する
ゲーム全体のインスタンス総数を制限する
制限に到達すると、このオブジェクトのプライオリティ設定に従って、制限に到達した場合の対応として選択した動作に基づきどれを捨てるのかをWwiseが判断します。複数のオブジェクトが同じプライオリティの場合は、捨てるべきインスタンスとして再生中の最新または最古のインスタンスを選択できます。
アクターミキサーまたはインタラクティブミュージックのレベルで再生制限を設定すると、同じ構造の中で再生できるインスタンス数を、グローバルまたはゲームオブジェクトごとにコントロールすることになります。もし子オブジェクトが親レベルで設定した再生制限を無視すると、制限階層の一部ではなくなります。その代わりに、再生するインスタンスの総数はそれらの合計になります。つまり、例えば、親の制限が「20」で、 Ignore parentに設定された子オブジェクトの制限が「10」であれば、可能なインスタンスの最大数は「30」です。しかし、子が Ignore parentに設定されていなければ、インスタンスの最大数は親と同様にに20です。以下のイラストに見られうように、親が無視されるかどうかにかかわらず、制限は子オブジェクトに配置されます。これは特定のオブジェクトとその子孫のための最大インスタンス数の細かな再生制御を可能にします。
一方、Master-Mixerレベルで再生制限を設定すると、バスを同時に通過できるサウンド、ミュージック、モーションの各種インスタンスの合計数を指定することになります。オブジェクトのプライオリティはアクターミキサーまたはインタラクティブミュージックのレベルで既に個別に指定されているので、バスの再生プライオリティ設定はありません。
プロジェクトレベル、つまりゲームレベルで再生制限を設定すると、同時にアクティブどなれるの各種インスタンスの合計数を指定することになります。各サウンドのAdvanced Settingsで個別に設定したVirtual Voiceの動作が、適用されます。
再生制限を設定するには:
Property Editorに、オブジェクトを1つロードする。
Advanced Settingsタブに切り替える。
Playback LimitグループでLimit sound instances toオプションを選択する。
再生制限のオプションが選択可能となる。
該当するテキストボックスに、1つのゲームオブジェクトで同時に再生できる最大インスタンス数を入力する。
Playback Limit(再生制限)のスコープを設定するために、以下のオプションを1つ選択する。
Globalは、グローバルに制限を適用する。
Per game objectは、ゲームオブジェクトごとに制限を適用する。
注釈 | |
---|---|
バスでは、制限が常にグローバルなので、このオプションは選択できません。 |
Playback Limit(再生制限)に到達した場合の処理として、以下のオプションを1つ選択する。
Kill voiceは、最低プライオリティのインスタンスの再生を停止する。
Use virtual settingsは、事前に定義したそのサウンドのバーチャルボイス動作を実行する。サウンドバーチャル動作とは Continue to play(再生を続ける)、 Kill voice(キルする)、 Send to virtual voice(バーチャルボイスに送る)、 Kill if finite else virtual(無限でなければキル、そうでなければバーチャル)です。
Playback Limitに到達したものの、最低プライオリティのオブジェクトが複数ある場合の処理として、When priority is equalリストから、以下のオプションを1つ選択する。
Discard oldest instanceは、再生中のインスタンスの中で最低プライオリティ、かつ最古のものを停止させる。
Discard newest instanceは、再生中のインスタンスの中で最低プライオリティ、かつ最新のものを停止させる。
プロジェクトつまりゲームの制限は、WwiseのProject Settingsでプラットフォームごとに編集できる。またサウンドエンジンが正しく初期化されれば、Wwise SDK APIを使ってゲームから変更することもできる。
ボイス制限のシステムを使う時に、以下を知っておくと良い。
バーチャルボイスは、有効なボイスとして数えられない。
バーチャルボイス設定がContinue to playであるサウンドが原因で、制限を超えてしまう可能性がある。
バーチャルボイスに送られたサウンドは、通常、フィジカルボイス(バーチャルではない)に反応してPlay from beginning(最初から再生), Play from elapsed time(経過した時間から再生), or Resume(再開) に設定されます。しかし、Kill if finite else virtual オプションの場合、バーチャルボイスに送られたサウンドは、いつもフィジカルボイスに反応してPlay from elapsed timeに設定されます。
例えば、以下の例を検討します。
バスで設定された制限は、同時に最大4つのサウンド。
このバスのWhen limit is reachedは、Use virtual voice settingsに設定されている。
ボリューム閾値は、-60 dB
現在のフレームで、このバスで、以下の8つのボイスが、再生されている。
サウンド名 |
Priority |
Volume |
バーチャル動作の設定 |
---|---|---|---|
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節約のために落せる、またはバーチャル化できるサウンドは全て、この設定とする必要があります。
選択されたオブジェクト階層内にあるサウンドオブジェクトにのみ制限が適用されることにも注意してください。 もし、子オブジェクトが Ignore Parent オプションを有効にすると青芸階層の一部ではなくなり、親の制限によってコントロールできなくなります。
Q: 大体の時は制限が守られているようだが、プロファイラを見ると、Continue to playに設定されていないサウンドによって、指定した制限数を時々超えることがある。
A: サウンドがバーチャルになる時、そのサウンドが数ミリ秒間(1オーディオフレーム分)アクティブの状態で残り、フェードアウトすることでクリッキングを防止します。例えば、制限が「1」で1つのサウンドが既に再生中であれば、より高いプライオリティの別のサウンドが入ってくると、最初のサウンドがバーチャルになる過程でフェードアウトするため、アクティブボイス数が一時的に「2」となります。
Q: なぜ “Send to virtual voice”を、制限を超えた時のデフォルトとしないのか。なぜ全てのサウンドのデフォルトが“Continue to play”なのか。
A: 一部のソースコーデックは、バーチャルモードでは完全に正確でないことや、return to physical voiceにPlay from elapsed timeオプションを使用するバーチャルボイスとして機能するためにソース内にシークテーブルを追加する必要がある場合があります。このような問題があるため、デフォルトで全てが問題なく動くことを保障するために、デフォルトに採用していません。例えば、VorbisでPlay from elapsed timeのバーチャル動作を正しく実行するには、シークテーブルが必要です。