-Blenderでパーティクルを使う手順と注意点-

6. キャッシュシステム

基本的に粒子シミュレーションの結果はメモリ上に展開されてゆきますが、
時間のかかる計算結果を保存しておく、別のPCなどを駆使してレンダリングをする、といった場合にファイルに保存してとっておくことができます。

■ ベイク等

ベイク(焼きこみ)を実行すると、シミュレーションが実行されて、
その結果が(デフォルトではメモリー上に)保存されて、その後保護モードになります。

とりあえずシミュレーションはこれで確定、もう変えなくてよい、という時や、
相互作用するオブジェクトを編集しているのだけれども、毎回シミュレーションの計算して困る、
というような時に使うようです。

一旦ベイクすると、有効な間はパラメータをいじってもシミュレーション結果には反映されません。

Free Bake でベイクモードが解除されます。
ところで、とりあえず最初の方で粒子を生成して、
運動が落ち着いてきた途中からがシーンのメインという場合があるかと思います。

そういう時はStartとEndを後ろのほうに設定するでしょう。
シーンの最初の時間で、「Update All To Frame」を使うと、
1からStartのフレームまでの計算が行われて(基本的にキャッシュに溜まるので)、その後の編集を楽に行えます。

Start以降のオブジェクトを動かす度に、テストのために1からシミュレーションをスタートするのではなくて、
Start フレームからアニメーションのスタートをするだけで済みます。
(Start以前にParticleSystemに影響するような変更を加えたら、シミュレーションはしなおさないとダメですが…)

■ ディスクキャッシュ

Disk Cache にチェックをすると、シミュレーション結果はファイルへと保存されます。
Cache Step を1以外にすると、数ステップおきに保存して…などできるようですが、
1ステップ1ファイルが分かりやすいので1にしておきます。
保存先は、blendcache_ファイル名 というフォルダになります。ファイル名が確定していないといけないので、.blendファイルは先に保存しておきます。

さて、デフォルト状態だと、よくわからない数字の羅列になりますが、後半はフレーム数なのでわかりやすいですね。
最後の00は粒子システムの番号になっています。

さて、frame 1 からシーンがスタートしているのに frame 0 のファイルがあるのが少し妙ですが、
frame0 には粒子の生まれるタイミングや寿命といった情報が保存されているようです。
そのほかのファイルは、そのフレームの粒子の位置や(有効なら)回転の情報が保存されています。
数字の羅列ではなく、ちゃんとした名前にしたい場合には、ここに名前を入力すると、その名前で保存されます。
手動での再利用などを考えるならば、ここに名前を設定しておいたほうが良いようです。
基本的にメモリと同じように使っているようなので、Alt+Aなどでアニメーションさせると、ファイルが次々に生成されてゆきます。
また、変更を加えて時間を戻すと(メモリ上のデータが更新されるのと同様に)ファイルは破棄されます。

後に述べる方法で再利用しようと思ったらファイルが消えてたということも良くあるので気を付けてください。

■ 手動でキャッシュの差し替え

さて、エミッタから粒子を生成させるのではなくて、ある初期状態の続きをシーンに使いたいという時はどうするのでしょうか?

まだ、このファイルを読んで、ここからシミュレーションの続きを再開させなさい、というそのものずばりの機能は(自分の知っている限り2.71時点で)無いようです。
(もし自分が見落としているだけだったら誰か教えて!)

若干トリッキーな方法ですが、無理やりディスクキャッシュファイルを変更することで実現を考えてみます。

これは、Vortex(渦)とForce(重力)を使って250フレームほど計算を回した後の動画です。

このようにある程度計算をすすめて落ち着いた状態の粒子システムを初期状態に使ってシーンを構築したいという場合、
メモリ上にあるデータにアクセスはできないので、ディスクキャッシュのファイルを無理やり差し替えるという方法が使えるようです。

(スクリプトで制御すれば、ファイルを別途読んでメモリ上のデータを置き換えるとかできそうですが、
以下はスクリプトは使わずに実現する方法、ということになります)
計算の最後のキャッシュを消されないようにコピーして名前を変更しておきます。
1 frame まで行ってしまっては、普通に計算が再開されてしまうので、Startを少し遅らせておきます。
この時、粒子の生まれるタイミングや寿命と矛盾が生じないように、
エミッタからすべての粒子が生まれた後のタイミングにしておきます。
さっき取り置いておいた終状態のファイルを、さらにコピーして start frame のキャッシュ名にして、blenderにこのフレームは計算済みと錯覚させます。
成功すれば、10 frame 目が先ほどの250フレーム目ということになるので、
ここからさらに別の場などを入れてシミュレーションを再開できます。
吹き上げを入れてみました。

できればこういうトリッキーなことをしないで、シミュレーション途中の状態が保存できればいいのですがね。
パーティクルによる髪の毛とかどうしているんだろう?

inserted by FC2 system