チュートリアル / GEMBAコンバート道
第4回:シミュレーション編

2016.08.09

  • 3ds Max
  • Maya
  • エフェクト
  • シミュレーション
  • チュートリアル
  • データ
  • 上級者
  • 中級者
  • 映画・TV

こんにちは、GEMBAの水橋です。
今回はシミュレーション編というサブタイになってますが、「シミュレーションっていうのを使ってアニメーションとかするならこういうコンバートが必要だよ編」です。長いので略しました。

第4回:シミュレーション編

まず、シミュレーションとはなにがあるのか。

キャラクター系

● クロスシミュレーション
● ヘアーシミュレーション
● 筋肉シミュレーション
● 群集シミュレーション

アニメーション系

● 剛体シミュレーション

環境系

● 天候(ライティング)シミュレーション

エフェクト系

● 破壊シミュレーション
● 流体シミュレーション

はい、良く話にあがるのはこんな感じでしょうか。
プロパティ値や環境を与えて、プログラムでアニメーションなどの結果を計算するというのがシミュレーションの主です。

とりあえずやってみる

手当たり次第にシミュレーションをしたものをプレビューしてみました。 (雑ですみません。)

ソフト間のシミュレーションデータのコンバート
必要なのはキャッシュ

シミュレーションしただけでは満足しちゃだめです。
3ds MaxでもMayaでもなんでも、結局はレンダリングが必要になってきます。
レンダラーに依存してしまうものもありますが、他のソフトと連帯するには何かしらコンバートが必要になります。
上のプレビューは3ds Maxのプレビューですが、 シミュレーションに以下のソフトを使ってます。

● おじさんの炎(Houdini)
● おじさんの布(Marvelous Designer)
● 足元の水(Maya Bifrost)

図で説明すると

ソフト間のシミュレーションデータのコンバートを説明した図

こんな感じでキャッシュのやり取りをしています。
黄色い丸がExport/Importでコンバートが発生しているところです。

ここで、おじさんがいろいろなソフトを旅している姿をスナップショットで紹介。

Alembicで書き出されるおじさん。(3ds Max)

他のソフトにアニメーションを持っていくためのコンバートです。
AlembicのMerge(複数オブジェクトを1つのオブジェクトにする機能)でエクスポートした後、一度インポートしています。
その後、MarvelousDesigner用にObjとPointCacheで書き出しました。
Alembicで1オブジェクトにすることによって、 1つのPointCacheにまとめることができます。

Alembicで1オブジェクトにすることによって、 1つのPointCacheにまとめることができる。

Houdiniで手から煙が出ているおじさん。(Houdini)

GeometryをAlembicで読み込みます。
手の部分からPyroでシミュレーションしています。
結果をVDB形式の連番でエクスポートしました。
3ds MaxにはVrayVolumeGridを使って読み込んでいきます。

GeometryをAlembicで読み込む

MayaのBifrostに沈められそうになるおじさん。(Maya)

おじさんはAlembicで読み込みます。
流体系のジオメトリはトポロジが常に変化しているので、Alembicで読み込みます。
3ds Maxのビューポート上の負荷が高くなってしまうので、 レンダリングするだけならVrayProxyを使用すると軽快に読み込めたりします。

おじさんはAlembicで読み込む。

MarvelousDesignerで布をかけられるおじさん。(MarvelousDesigner)

おじさんのアニメーションをObjとPointCacheでAvatarとして読み込んでいます。
衣服を作成し、シミュレーションをかけました。
布部分をObjとPointCacheで書き出しています。

おじさんのアニメーションをObjとPointCacheでAvatarとして読み込んでいます。衣服を作成し、シミュレーションをかけました。布部分をObjとPointCacheで書き出しています。

安全なシミュレーションを行うために
大事なのは仕様

シュミレーションのコンバートの仕方はわかったけど、その前に大事なことが。
単位設定だったり、FPSなど、シミュレーションに必要な環境を予め整えておく事がとても重要です。仕様がバラバラでShotが作成されていては、シミュレーションもレンダリングもできません。

一部ですが、具体的なシーンの仕様をいくつか紹介します。

・キャラクターのアニメーション

モーションのインポート・エクスポートなど第2回「モーション・セットアップ編」を参照してください。割愛。

・クロスシミュレーション

クロスのシミュレーションは初期ポーズ(衣服が交錯していない状態)からシミュレーションをかけます。干渉した状態からシミュレーションをかけると計算ができないため、モーションを加工することになります。

下の画像のようにボーンやコントローラーに初期ポーズのアニメーションキーを入れてから クロスシミュレーションをかけるようにしています。

クロスシミュレーション

・破壊・流体系シミュレーション

単位設定を統一しておかないと、 ダイナミクスやフルイドのシミュレーションの結果は大きく狂います。
3ds Maxだと実寸サイズが良いというのは耳にしますが、 シミュレーションにかかる時間だったり関連するソフトだったり、状況によって求められるものが異なるので、検証が必要だと思います。
どちらにせよ、単位設定が適当だと簡単な爆発エフェクトも一筋縄ではいかなくなります。

・その他(ハイスピード処理)

シミュレーションをかける上で、ハイスピード処理(以下HS)は鬼門です。
リアルな安定したシミュレーションをするにはアニメーションは高FPS(600FPSとか)で作成する必要がありますが、コストが高くなります。
各会社さんで手法や仕様など、いろいろ異なるので、予め決めておきましょう。
(・・・皆様どうしているのか気になります)

シミュレーションのデータの集積
キャッシュならなんでもこい

アニメーション・シミュレーションのデータをキャッシュにするのには理由があります。

● 作業シーンをシンプルにできる
● 分業のスタイルをとりやすい
● シーンデータの再構築がしやすい
● あとからアニメーションを更新できる
● シミュレーションの内容に左右されずにレンダリングできる
● 異なるソフト間を行き来できる

主にライティングやレンダリング・エフェクトの工程で、 キャッシュを受け取るだけのシーンを作っておけば、 前工程の作業のやり直しや並行作業などができ、複数人での同時作業も可能になります。

また、デメリットは以下の事があります。

● 想定外の対応が苦手
● データ(キャッシュ)の容量が肥大化しやすい
● 変換の手間が発生

コンバート道では大活躍のAlembicですが、トポロジー情報まで含んだキャッシュはファイルサーバーを圧迫したり変換や転送に時間がかかるので、GEMBAではFBXやPointCacheメインのワークフローでコストを削減したりしてます。
最大効果を出すには、環境に合わせて取捨選択が必要になってきます。

おまけ
スクリプト

キャラのポイントキャッシュを書き出す/読み込むスクリプトです。
1オブジェクトだったら、1つのキャッシュで済むのですが、大量のオブジェクトのPointCacheを保存するとき・読み込むときに重宝しているスクリプトです。
便利なのでぜひ使ってみてください。

ダウンロードリンク

最後に、3ds Maxでクロスシミュレーションしたものをレンダリングしてみました。