【blender】効率的なクロスシミュレーションのベイクと、ベイクデータの部分的な差し替え

aobayu.hatenablog.com

※この記事は筆者の備忘録ですが、何か間違いや改善点があれば教えてくださると嬉しいです。

 

この記事でできること

blenderのディスクキャッシュ機能を用いて、

  • 長いシーンのシミュレーションベイクを小分けで行ったり、
  • 気に食わない部分のベイクのみを差し替えたり、
  • ベイクデータを確実に保存したり

することができます。

 

動機

blenderでアニメーション(キャラクターを躍らせるアニメーション)を作っていたのですが、どうにもスカートのクロスシミュレーションについて、とても不便な点が出てきました。

  • ベイクしないと途中から再生してもシミュレーションをプレビューできない
  • フレーム数がやオブジェクト数が多いと、鬼のようにベイクに時間がかかる。

    (6000フレームベイクしたいのですが、3時間たっても半分くらいしかベイクができていませんでした。

    また、はじめは10fpsくらいでしたが、後半は1fps以下というように後の方になるほど、長い時間がかかっているように感じました)

  • ベイクがいつの間にか消える。(おそらく間違って消してしまっているのですが、、)

 

そこで、複数のシーンを使って、クロスのベイクを効率的に行う方法を考えてみました。

 

用意したシーン

以前の記事で作成したスカートにクロスの入っているモデル【以下、メインシーン】

構造は下の記事の通りになっています。

aobayu.hatenablog.com

 

ここにステージ、もう一体のモデル、照明、シェーディング..etc.を追加していったらとても重いシーンになってしまいました。

 

何もないシーン【以下、tempシーン】

何もないシーンを、そのまま保存しておきます。保存場所はどこでもOKです。また念のためフレームレートをメインシーンと統一しておきます。

 

作業内容

 【メインシーン】のクロスのプロパティ画面です。

f:id:aobayu:20190331221222p:plain

 今回は、[30_skirt_main]という名前のキャッシュを作成します。(何らかの名前を付けておいた方が、後々わかりやすくなります。)

開始時間、終了時間を設定し、[クロスのキャッシュ>ディスクキャッシュ]にチェックを入れておきます。

ここにチェックを入れることで、キャッシュデータが blendcache_[blenderのファイル名] というフォルダに保存されるようになります。このフォルダはメインシーンと同じディレクトリに自動で作成されます。

このフォルダの中に、軽いシーンでベイクしたデータを無理やり入れて、ベイクを行ったとblenderに勘違いさせることが今回のメインです。

 

この状態で[ベイク]を押してベイクをスタートします。

通常ならこれでベイクが行われるのですが、このシーンでは非常に重く待てたものでないので、[ESCキー]を押してベイクを強制終了します。

 

次に、クロスオブジェクトと、衝突用のオブジェクトたちを【tempシーン】にCtrl+C、Ctrl+Vでコピーします。

f:id:aobayu:20190331222333p:plain

同様に、同じ名前のキャッシュセットが存在し、ディスクキャッシュに✔が入っているはずです。

この際、シーンに名前を付けて保存しておかないと、ディスクキャッシュができません。

 

とりあえず終了フレームを500に設定し、ベイクしてみます。作成されたblendcache_[tempシーンのファイル名] フォルダを確認すると、500個のファイルが作成されているはずです。

f:id:aobayu:20190331223142p:plain

これらのファイルをすべて、blendcache_[メインシーンのファイル名]  フォルダにコピーします。(すでにある分については、置き換えします。)

 

【メインシーン】に戻り、ファイルを保存し、再度ファイルを開くと、500フレームまでベイクが行わていることがわかります。

f:id:aobayu:20190331223454p:plain

青いラインが入っていて、ベイクが行われていることがわかります。

次に、【tempシーン】で[ベイクを削除]し、501~1000フレーム目までベイクを行います。

これを同様にコピーし、シーンを再読み込みすると、1000フレーム目までベイクが行われいます。

今回の500→501フレームのように、ベイクの切れ目ではどうしても不自然になってしまうので、カットの切れ目やクロスの形がデフォルトに近いフレームで切っていきます。

 

 

このように、blendcache_[blenderのファイル名] 内のデータを置き換えることで、長いシーンのシミュレーションベイクを比較的早く行うことができます。

また、シーンをプレビューして、気に食わない部分などかあったら、そのカットだけ再度シミュレーションを行い、ファイルを差し替えることも可能です。

(クロスのパラメータなどを変えてしまった場合にうまく渡せるかは未確認です。)

また、このフォルダをZipに圧縮するなどして保存することで、ベイクを安全に保護できます。