【blender】効率的なクロスシミュレーションのベイクと、ベイクデータの部分的な差し替え
※この記事は筆者の備忘録ですが、何か間違いや改善点があれば教えてくださると嬉しいです。
この記事でできること
blenderのディスクキャッシュ機能を用いて、
- 長いシーンのシミュレーションベイクを小分けで行ったり、
- 気に食わない部分のベイクのみを差し替えたり、
- ベイクデータを確実に保存したり
することができます。
動機
blenderでアニメーション(キャラクターを躍らせるアニメーション)を作っていたのですが、どうにもスカートのクロスシミュレーションについて、とても不便な点が出てきました。
- ベイクしないと途中から再生してもシミュレーションをプレビューできない
-
フレーム数がやオブジェクト数が多いと、鬼のようにベイクに時間がかかる。
(6000フレームベイクしたいのですが、3時間たっても半分くらいしかベイクができていませんでした。
また、はじめは10fpsくらいでしたが、後半は1fps以下というように後の方になるほど、長い時間がかかっているように感じました)
- ベイクがいつの間にか消える。(おそらく間違って消してしまっているのですが、、)
そこで、複数のシーンを使って、クロスのベイクを効率的に行う方法を考えてみました。
用意したシーン
・以前の記事で作成したスカートにクロスの入っているモデル【以下、メインシーン】
構造は下の記事の通りになっています。
ここにステージ、もう一体のモデル、照明、シェーディング..etc.を追加していったらとても重いシーンになってしまいました。
・何もないシーン【以下、tempシーン】
何もないシーンを、そのまま保存しておきます。保存場所はどこでもOKです。また念のためフレームレートをメインシーンと統一しておきます。
作業内容
【メインシーン】のクロスのプロパティ画面です。
今回は、[30_skirt_main]という名前のキャッシュを作成します。(何らかの名前を付けておいた方が、後々わかりやすくなります。)
開始時間、終了時間を設定し、[クロスのキャッシュ>ディスクキャッシュ]にチェックを入れておきます。
ここにチェックを入れることで、キャッシュデータが blendcache_[blenderのファイル名] というフォルダに保存されるようになります。このフォルダはメインシーンと同じディレクトリに自動で作成されます。
このフォルダの中に、軽いシーンでベイクしたデータを無理やり入れて、ベイクを行ったとblenderに勘違いさせることが今回のメインです。
この状態で[ベイク]を押してベイクをスタートします。
通常ならこれでベイクが行われるのですが、このシーンでは非常に重く待てたものでないので、[ESCキー]を押してベイクを強制終了します。
次に、クロスオブジェクトと、衝突用のオブジェクトたちを【tempシーン】にCtrl+C、Ctrl+Vでコピーします。
同様に、同じ名前のキャッシュセットが存在し、ディスクキャッシュに✔が入っているはずです。
この際、シーンに名前を付けて保存しておかないと、ディスクキャッシュができません。
とりあえず終了フレームを500に設定し、ベイクしてみます。作成されたblendcache_[tempシーンのファイル名] フォルダを確認すると、500個のファイルが作成されているはずです。
これらのファイルをすべて、blendcache_[メインシーンのファイル名] フォルダにコピーします。(すでにある分については、置き換えします。)
【メインシーン】に戻り、ファイルを保存し、再度ファイルを開くと、500フレームまでベイクが行わていることがわかります。
次に、【tempシーン】で[ベイクを削除]し、501~1000フレーム目までベイクを行います。
これを同様にコピーし、シーンを再読み込みすると、1000フレーム目までベイクが行われいます。
今回の500→501フレームのように、ベイクの切れ目ではどうしても不自然になってしまうので、カットの切れ目やクロスの形がデフォルトに近いフレームで切っていきます。
このように、blendcache_[blenderのファイル名] 内のデータを置き換えることで、長いシーンのシミュレーションベイクを比較的早く行うことができます。
また、シーンをプレビューして、気に食わない部分などかあったら、そのカットだけ再度シミュレーションを行い、ファイルを差し替えることも可能です。
(クロスのパラメータなどを変えてしまった場合にうまく渡せるかは未確認です。)
また、このフォルダをZipに圧縮するなどして保存することで、ベイクを安全に保護できます。