[キャッシュ](Cache)オペレータは、パーティクルの状態をメモリに記録します。大規模または複雑なパーティクル システムでは、再生および特にバックトラッキングに大量の処理が必要で時間がかかるため、これは特に有用です。
[キャッシュ](Cache)が有効な場合、初めてフレームを再生するときやフレームに移動するときに、そのフレームまでのパーティクル モーションが計算されてキャッシュに記録されます。以降、このフレームまたはそれ以前のフレームの再生では、パーティクル アクションは再計算されず、キャッシュ内のデータが使用されます。キャッシュをオンにすると、パーティクル システムは各フレームを一度だけ計算する必要があります。以後、再生およびフレーム間の移動が飛躍的に速くなります。
フロー全体をキャッシュするには、[キャッシュ](Cache)オペレータをグローバル イベントに追加します。ローカル イベントを個別にキャッシュする場合は、[キャッシュ](Cache)オペレータをそのイベントに追加します。
パーティクル システム内でキャッシュを実装する最善の方法を判別するには、[パーティクル ビュー](Particle View) [経過を更新](Track Update) [進行を更新](Update Progress)をオンにして、アニメーションを再生するか、現在のフレームから比較的離れたフレームに移動します。パーティクル図を観察し、一瞬よりも長くハイライト表示されるアクションを保持するイベントや他よりもアクティブなイベントに注目します。この種のイベントはすべてキャッシュの恩恵を受けます。
注: ビューポート用とレンダリング用に 1 つずつ使用する場合を除き、1 つのイベントに複数の[キャッシュ](Cache)オペレータは使用しないでください。同様に、ビューポート用とレンダリング用に 1 つずつ使用する場合を除き、同一のフロー内でグローバルの[キャッシュ](Cache)オペレータとローカルの[キャッシュ](Cache)オペレータを使用しないでください。
ヒント: リアルタイム再生を使用する際、再生が十分に高速でない場合に[キャッシュ](Cache)オペレータを使用して速度を上げることができます。最善の結果を得るために、[ビューポート](Viewport)のインテグレーション ステップをリアルタイム再生と同じ速度に設定して、キャッシュのサンプリングを[インテグレーション ステップ](Integration Step)に設定します。たとえば、リアルタイム再生速度が 1/4x に設定されている場合、[インテグレーション ステップ](Integration Step)の[ビューポート](Viewport)も[1/4 フレーム](1/4 Frame)に設定し、[キャッシュ](Cache)オペレータの[サンプリング](Sampling)パラメータを[インテグレーション ステップ](Integration Step)に設定する必要があります。これで、リアルタイム再生は毎秒のフレーム数の 4 倍を表示し、[キャッシュ](Cache)オペレータが毎秒のフレーム数の 4 倍を格納するため、この 2 つが同期されます。リアルタイム再生速度を 2x または 4x に設定する場合は、[インテグレーション ステップ](Integration Step)の[ビューポート](Viewport)を[フレーム](Frame)に設定します。
手順
例: [キャッシュ](Cache)オペレータを使用するには:
- 3ds Max を起動またはリセットしてから、パーティクル フロー システムを追加します。
- パーティクル ビューを開きます。
- パーティクル ビュー内で、[オプション](Options)メニュー [経過を更新](Track Update)を選択し、[進行を更新](Update Progress)をオンにします。
これにより、システムがアクションを実行する際に、パーティクル ビュー内でアクションをハイライト表示することで、パーティクル システムの計算が監視されます。
- パーティクル ビュー内で、[間隔を保持](Keep Apart)オペレータを[Event 01]に追加します。
[間隔を保持](Keep Apart)は、計算を集中的に実行するオペレータです。
- タイム スライダのトラック右端をクリックして、フレーム 100 に移動します。
フレーム 0 と フレーム 100 の間のパーティクル モーションがすべて計算されるため、遅延が発生します。パーティクル フローが履歴に依存するシステムであるため、これは必要な動作です。同時に、各フレームでシステムのアクションが実行される際、パーティクル ビュー内で短時間ハイライト表示されます。
- タイム スライダのトラック中央をクリックして、フレーム 50 に移動します。
システムによりフレーム 0 ~ 50 までのすべてのパーティクル モーションが計算される際、さらに遅延が発生します。
- パーティクル ビュー内で、[キャッシュ](Cache)オペレータをコンテナから[Event 01]にドラッグします。そのオペレータを、イベント内の任意の場所に挿入します。
マウス ボタンを放すと、[キャッシュ](Cache)オペレータがアニメーションの開始から現在のフレームまでパーティクル モーションを自動的にキャッシュするため、遅延が発生します。その間、フレームごとに各アクションが短時間ハイライト表示されます。
- フレーム 20 付近に移動します。
ハイライト表示されるオペレータは、[キャッシュ](Cache)オペレータ(高速) と[表示](Display)オペレータだけです。計算の遅延は発生しません。0 ~ 50 までのフレームすべてがキャッシュ済みのためです。
- フレーム 100 に移動します。
今回の遅延は、フレーム 50 ~ 100 のパーティクル モーションがキャッシュされることが原因です。
- 別のフレームに移動して、タイム スライダをドラッグします。
すべてのパーティクル モーションがキャッシュされているため、遅延は発生しません。ただし、設定値を変更すると、[キャッシュ](Cache)オペレータによりパーティクル モーションが自動的に再計算および格納されます。
- フレーム 100 に移動して、パーティクル ビュー内で[間隔を保持](Keep Apart)オペレータをクリックし、キーボードを使用して[フォールオフ ゾーン](Falloff Zone)値を 8.0 に変更します。
既定値では、保存されたいずれかのパラメータが変更されると、[キャッシュ](Cache)オペレータは自動的にキャッシュを更新します。このため、フレーム 100 で[フォールオフ ゾーン](Falloff Zone)値を変更すると、アニメーション全体の計算およびキャッシュが再実行されます。
次に、手動キャッシュの動作を簡単に説明していきます。
- [キャッシュ](Cache)オペレータをクリックして、[更新](Update)を[手動](Manually)に設定します。
パラメータが変更されても[キャッシュ](Cache)オペレータは格納されたデータを自動的に更新しなくなります。
- [間隔を保持](Keep Apart)オペレータをクリックし、[フォールオフ ゾーン](Falloff Zone)値を 9.0 に変更してから、タイム スライダをドラッグします。
アニメーションは依然としてキャッシュされたデータから再生されるため、遅延は発生しません。ただし、パーティクル システム内でパラメータが変更されたため、キャッシュされたデータは無効になります。
- [キャッシュ](Cache)オペレータをクリックし、[手動更新](Manual Update)領域で[更新](Update)をクリックします。
3ds Max がパーティクル ビューを閉じ、アクティブ セグメントのキャッシュを更新してから、パーティクル ビューを再度開きます。 これで、キャッシュされたデータは正確なものになります。
他の手動更新オプションを使用すると、アニメーション全体またはカスタムのフレーム範囲のキャッシュを更新できます。
これまで見てきたように、[キャッシュ](Cache)オペレータは非常に有力な機能です。[キャッシュ](Cache)オペレータが存在し、かつアクティブな場合、アクション パラメータを変更する場合を除き、[キャッシュ](Cache)オペレータがパーティクル システムの再計算よりも優先されます。アクション パラメータが変更されると、キャッシュされたデータは自動的に更新されます。このオペレータを適切に使用すれば、パーティクル システムの設定およびテストに費やす時間を大幅に節約できます。
インタフェース
ユーザ インタフェースは、[パーティクル ビュー](Particle View)ダイアログ ボックスの右側のパラメータ パネルに表示されます。
- 使用時
- ビューポート内での再生時かレンダリング時、またはその両方で、パーティクル モーションをキャッシュします。既定値は[ビューポート](Viewport)です。
重要: ビューポート内およびレンダリング用に同数のパーティクルを使用する場合にのみ、[ビューポート/レンダリング](Viewport/Render)オプションを選択します。つまり、グローバル イベント(またはパーティクル フロー ソース)の放出ロールアウトの 2 つの
マルチプライヤ量の設定が同じである必要があります。それ以外の場合に選択すると、予期しない結果が起こる可能性があります。
- 更新
- パーティクル システム内でパラメータを変更すると、キャッシュされたデータが無効になる可能性があります。この設定により、キャッシュの更新をパーティクル フローが自動的に実行するか、ユーザが手動で実行するかが決まります。既定値は[常時](Always)です。
- [常時](Always) [キャッシュ](Cache)オペレータの範囲内にある任意のパラメータを変更すると、格納されたデータが現在の範囲の始点(次のパラメータを参照)から現在のフレームまで自動的に更新されます。
- [手動](Manually) [更新](Update)ボタンをクリックするか、キャッシュをクリアして別のフレームに移動する場合にのみ、更新が行われます。
- 範囲
- [キャッシュ](Cache)オペレータが機能するフレーム範囲を設定します。既定値は、[アクティブ セグメント](Active Segment)です。
- [開始時間](Start Time)、[終了時間](End Time)
- [範囲](Range)が[カスタム](Custom)に設定されている場合(前述を参照)の、キャッシュ対象範囲の最初と最後のフレーム。既定値は、それぞれ 0 と 30 です。
注: フレーム範囲のタイム フレームは、アニメーション全体を基準にした絶対値時間です。[キャッシュ](Cache)オペレータをローカルに使用し、イベント内にパーティクルが存在しないフレーム範囲を指定する場合、パーティクル フローはキャッシュを使用しません。
- サンプリング
- [キャッシュ](Cache)オペレータがアニメーションのサンプリングおよびキャッシュを行う頻度を決定します。既定値は[フレームごと](Every Frame)です。
- [フレームごと](Every Frame)アニメーション データをフレームごとにキャッシュします。
- [インテグレーション ステップ](Integration Step) パーティクル フローは、[使用時](Use At)設定(前述を参照)で指定した[インテグレーション ステップ](Integration Step)設定を使用して、インテグレーション ステップごとにアニメーション データをキャッシュします。[使用時](Use At)が[ビューポート/レンダリング](Viewport/Render)に設定されている場合、2 つの[インテグレーション ステップ](Integration Step)値の低い方の値を使用します。たとえば、[ビューポート](Viewport)が[1/2 フレーム](Half Frame)に、[レンダリング](Render)が[1/8 フレーム](1/8 Frame)に設定されている場合、サンプリング レートは毎フレーム 8 になります。
- [N番目のフレームごと](Every Nth Frame) [N]値(下記を参照)で指定されたフレーム間隔で、アニメーション データがキャッシュされます。
- N
- [サンプリング](Sampling)が[N 番目のフレームごと](Every Nth Frame)に設定されている場合、キャッシュのフレーム間隔を設定します。既定値は 5 です。
たとえば、[N]を既定値の 5 に設定すると、5 フレームごとにアニメーション データがキャッシュに格納されます。
- キャッシュ テストの結果
- パーティクル データをキャッシュする場合、テスト操作の結果もキャッシュします。既定値ではチェックマークが付いています。
[キャッシュ](Cache)をローカル オペレータとして使用し、次のイベントが[キャッシュ](Cache)オペレータを保持しない場合、このオプションは重要です。次のイベントが適正に動作するには、現在のイベントからパーティクルを受け取る必要があります。これらのパーティクルは、テスト操作により生成されます。[キャッシュ](Cache)オペレータはテスト操作を記録して、後で再生できます。
[キャッシュ](Cache)オペレータをグローバル オペレータとして使用する場合は、テスト結果をキャッシュする必要はありません。これは、システムがキャッシュ データをイベントごとにキャッシュしており、テスト結果なしで任意のフレームに移動できるためです。
- キャッシュをファイルに保存
- このチェック ボックスにチェックマークが付いている場合、ディスクに保存するシーンと一緒に、キャッシュしたデータが含められます。これにより、保存されるファイルのサイズが非常に大きくなりますが、ファイルの再ロード時にパーティクル モーションを再計算する時間が短縮されます。既定値ではチェックマークが付いていません。
通常、キャッシュされたデータは、[保存](Save)または[名前を付けて保存](Save As)コマンドの実行時に作成されるディスク ファイルにのみ保存されます。次の 2 つのオプションを使用して、キャッシュされたデータを他の種類のファイルに含めるよう3ds Max に設定することもできます。
- キャッシュを一時保存ファイルへ
- キャッシュされたデータを、[編集](Edit)メニュー [一時保存](Hold)を実行して作成される一時保存ファイルに保存します。既定値ではチェックマークが付いていません。
[手動で更新](Manual Update)領域
以下のコントロールを使用すると、フレーム範囲内のキャッシュを手動で更新またはクリアしたり、キャッシュ全体をクリアできます。
- 更新
- 現在の範囲(以下で定義)内のパーティクル モーションを計算してキャッシュに保存し、既存のキャッシュ データを置き換えます。このオプションを利用できるのは、[範囲](Range)が[アクティブ セグメント](Active Segment)または[カスタム](Custom)に設定されている場合のみです。
更新中に、3ds Max のパーティクル ビューが一時的に閉じられ、[キャッシュ更新を進行](Cache Update Progress)バーが表示されます。その間、キャッシュされた範囲をタイム スライダが移動します。 既定値では、同時にビューポート内でアニメーションが再生されます。この動作および速度計算を避けるには、[ビューポートを更新](Update Viewports)のチェックマークを消します。
手動更新中にキャッシュがメモリを使い果たしてしまうと、パーティクル フローは更新処理を停止して、警告を表示します。[OK]をクリックすると処理が続行されます。可能であれば、続行前に[リミット](Limit)の値が大きくされます。
- クリア
- キャッシュされたデータをすべて削除します。
キャッシュ バッファをクリア後に別のフレームに移動するか、いずれかのアクション パラメータを変更すると、[更新](Update)が[手動](Manually)に設定されている場合でも、パーティクル モーションが自動的にキャッシュされます。
- 範囲
- [更新](Update)をクリックするときに[キャッシュ](Cache)オペレータにより再計算されるフレーム範囲を設定します。既定値は、[アクティブ セグメント](Active Segment)です。
- [開始時間](Start Time)、[終了時間](End Time)
- [範囲](Range)が[カスタム](Custom)に設定されている場合(上を参照)の、更新される範囲の最初と最後のフレームです。既定値は、0 および 30 です。
- ビューポートを更新
-
このチェック ボックスにチェックマークが付いている場合、キャッシュの手動更新中にビューポート内でアニメーションが再生されます。チェックマークが付いていない場合、手動更新中にビューポート内にアニメーションが表示されないため、特に大規模または複雑なパーティクル システムでは、キャッシュの処理速度が向上します。既定値ではチェックマークが付いています。
[メモリ使用量 (K)](Memory Used (K))領域
[キャッシュ](Cache)オペレータは、システム メモリ内にデータを格納します。このオペレータが使用するメモリ量の上限を指定できます。[リミット](Limit)設定およびキャッシュされるデータの量が利用可能な空きメモリを超えた場合、コンピュータ システムは代わりにハード ディスク ベースの仮想メモリを使用します。このため、キャッシュの処理速度が低下します。パーティクル フローがキャッシングを行う場合、残りのフレームの計算は迅速に行われます。
この領域を使用してデータのキャッシュに使用されるメモリの量を監視することもできます。
- リミット
- パーティクル データのキャッシュに使用されるシステム メモリの最大量を、キロバイトで指定します。既定値は 100,000 (97.6 MB)です。
- 合計
- キャッシュ データにより現在使用されているメモリの量。単位はキロバイト、読み込み専用です。
注: パーティクルの存在しないアニメーション フレームでも、ある程度のキャッシュ メモリが消費されます。これは、パーティクルのアクティビティがレンダリング ネットワーク全体およびすべてのフレームに定期的にアクセスしていないマシンでも一貫していることを保証するため、[変動](Variation)などのランダムに計算された値の状態もキャッシュに格納されるためです。
- 現在のフレーム
- 現在のフレーム用のキャッシュ データに使用されるメモリの量。単位はキロバイト、読み込み専用です。