イコウ キャンペーンイコウ キャンペーン

チュートリアル / Bifrostはじめました
第5回:モーションフィールドの実践

2018.03.05

  • Maya
  • シミュレーション
  • チュートリアル
  • 中級者
  • 学生・初心者

前回の記事でモーションフィールドを使って人為的な揺らぎをシミュレーションに与えるという事例を紹介しましたが、シーンの制作そのものはMayaのシーンを提供したこともあり特に必要ないと思っておりました。その後「滝の作り方がわからない」という声を多数いただきましたので解説したいと思います。必要のない方はこちらにお進みください。ただ私の例はあくまでも制作例の一つでしかありませんのでその旨ご了承ください。

まずは水の発生元を作っていきましょう。

簡単な容器のようなものを作り、そこから水が溢れていくようにします。
ポリゴンでCubeを取り出します。

ポリゴンでCubeを取り出します。

単純にコピーして縮小し、適切な場所に移動します。こんな感じです。

単純にコピーして縮小し、適切な場所に移動します

ブーリアンを使って外側のCubeから内側を引き算します。
ブーリアンメニューから論理差を使用します。下記のようにくり抜かれるはずです。

ブーリアンを使って外側のCubeから内側を引き算します。

移動とスケールを調整します。
また、水の発生源としてなんでも構いませんので物体をこの入れ物の中に配置してください。入れ物がBifrostのコライダー、Cubeが発生源になります。

移動とスケールを調整します。

モデリングはこれくらいにしまして(と言っても一瞬で終わるレベルですが)Bifrostの設定を行います。発生源になるCubeを選択し、Bifrost流体> 液体を選択します。
この際にemitterプロパティの中の連続放出にチェックを入れてください。

発生源になるCubeを選択し、Bifrost流体>	液体を選択します。

そうすると、Cubeの容量の流体だけではなく、常に流体が供給されるようになります。
次に入れ物を選択し、Bifrost流体>コライダーで衝突の設定を行います。入れ物と流体の間ではシンプルな衝突の計算を行うだけなので、適応性のチェックボックスを外し、計算を簡素にします。

入れ物を選択し、Bifrost流体>コライダーで衝突の設定を行います。

再生してみましょう。
おそらく何も表示されないはずです。これは2つの原因があります。一つ目はアウトライナーでbifrostLiquidを選択していないこと、そして二つ目は前回のコラムで書いた単位の問題です。つまり、ボクセルの計算単位に対してオブジェクトが小さすぎることが原因です。そこでマスターボリュームの値を0.5(50cm)から0.1(10cm)に変更しましょう。そうすると流体が見えてくるはずです。

マスターボリュームの値を0.5(50cm)から0.1(10cm)に変更しましょう。

各種調整を加えていく

このままにしておくとパーティクルの数が増え、重くなってしまうのでKillPlaneで適当なところで消滅するようにしてください。
では再生してみましょう。勿論リアルタイムで見ることができるようにキャッシュを使ってください。

よくある流体シミュレーションですね。ではこれからモーションフィールドを組み合わせていきましょう。
Bifrost流体>モーションフィールドを選択します。
丁度発生源のところに「方向」のモーションフィールドが生成されます。

丁度発生源のところに「方向」のモーションフィールドが生成されます。

今再生しても、一様な動きが足されるだけです。
そこでここでは境界を設定し、尚且つシリンダーに変更します。
あとは位置や回転を調整して適切な場所に移動してください。

境界を設定し、尚且つシリンダーに変更します。

このまま再生しても効果は一方向にしかかかりませんので、面白くありません。そこでノイズ乱気流のパラメータを追加しフィールドの方向にもいくつかチェックを入れます。

ノイズ乱気流のパラメータを追加
フィールドの方向にもいくつかチェックを入れます。

更に揺らぎが入るように乱流のパラメータに大きめの値を入れてあげます。

揺らぎが入るように乱流のパラメータに大きめの値を入れてあげます。

これで準備が整ったのですが、見栄えが良くなるように少しパラメータを変更しましょう。
現在パーティクルの速度の変化とともに青い色から白い色に変化するように設定されています。そこで添付のようにカラーチャネルの最大値や色の変化を変えてあげます。

見栄えが良くなるように少しパラメータを変更しましょう。

最後にBifrost > 泡で泡の設定も行ってください。私の場合泡の色も白一色から少し変えていますが、それはお好みで。
では再生してみましょう。

前回と少し異なりますが、そこはご愛敬で。ちなみに土管の障害物はコリジョンの設定を行うだけなので、前回のシーンを見てみてください。

前回宣言していたシーンを構築する

では前回作りますよー!と言っていた水の塊の作り方に移っていきましょう。
こちらのシーンです。

実は設定は全然難しくありません。ただ、見栄えの良い結果を出すにはコンピューティングパワーが必要です。
私の場合シーン構築そのものはいつもMacBook Pro(Windowsで動いています)を使用して作業しています。2世代前のMacBookProなので、決して早くはないのですが、どこででも作業できるのと、意外とハードウエアとして堅牢にできているので未だに愛用しています。(そろそろRazer BladeかSurface Book2に変えたいです)ただ設定が終わって真面目に計算させるにはマシンパワーが足りなくなるので、別のマシンを使用します。レンダリングと一緒ですね、大量のパーティクルを計算させる際にはコアの数が多いマシンの方が効率が良くなります。
今回のシーンはこんな感じで計算してくれました。今回使用しているマシンはCPUの周波数は高くないのですが、CPUの物理コア数が20コアと多かったのでコーヒー作って飲むには丁度良い時間で処理を終えてくれました。

計算結果

Mayaのシーンをこちらに置きましたので、ご自分のPCでシーンを開いてみてください。
MayaScene:kyu.mb

Mayaのシーン

非常にシンプルなシーンであることがわかります。
流体とモーションフィールドが一つあるだけの簡単なシーンです。ちなみにシーン構築用に解像度は下げており、マスターボクセルサイズは1.0に設定してあります。
これをアニメーションで見てみましょう。

動画を見ていただくとわかりますが、モーションフィールドは中心に向かうように力を設定し、尚且つそれぞれのベクトルがアニメーション化するように設定してあります。このモーションフィールドの揺らめきにより流体が計算され、結果的に面白い動きが生成されています。

シーン構築

では実際にシーンを構築していきましょう。
プリミティブから球を選びます。適当な大きさに調整してください。このとき、小さいままでもと思うかもしれませんが、連載の第3回で説明した単位の問題を思い出してください。と言うわけで、それなりの大きさに変更しました。(グリッドを見てみてください)

それなりの大きさに変更しました。

では流体を発生させましよう。Bifrost流体>液体を選択します。これにモーションフィールドを設定していきます。また今回の計算には重力の影響はキャンセルしたいので、事前にbifrostLiquidのアトリビュートから重力のパラメータは0に変更しておいてください。

Bifrost流体>液体を選択します。これにモーションフィールドを設定していきます。また今回の計算には重力の影響はキャンセルしたいので、事前にbifrostLiquidのアトリビュートから重力のパラメータは0に変更しておいてください。

あとはモーションフィールドを設定します。境界を有効にし、境界シェイプをSphereに変更します。モーションフィールドのスケールを調整して、Bifrost流体の大きさを超えるように設定します。
同じくらいの大きさだと、流体が大きく動いたときに流体がモーションフィールドの範囲を超え、飛散してしまう可能性があるためです。

モーションフィールドを設定します。
境界を有効にし、境界シェイプをSphereに変更します。

アニメーションを再生してみましょう。このままでは一切何も動きません。重力もありませんし、何ら流体を動かす力が働いていないからです。そこでフィールドの方向として同心円の有効化にチェックを入れます。そのままだと飛散してしまうので、パラメータを-4、つまり中央に集まるように設定します。

パラメータを-4、つまり中央に集まるように設定します。

更にどのように力が働くかを見るために速度の描画にチェックを入れます。揺らぎを与えるために乱気流にチェックを入れます。

どのように力が働くかを見るために速度の描画にチェックを入れます。
揺らぎを与えるために乱気流にチェックを入れます。

あとは好みの問題ですが、私の場合ですと境界コントロールの中のBoundaryFalloffに値を入れます。私の場合は-1の値を入れています。
つまり境界の外側から内側に行くにしたがってモーションフィールドの力の強さが弱くなるように設定したわけです。

境界コントロールの中のBoundaryFalloffに値を入れます。
境界の外側から内側に行くにしたがってモーションフィールドの力の強さが弱くなるように設定したわけです。

モーションを再生してみてください。

モーションフィールドのベクトルに合わせて流体がアニメーションしている様子がわかります。Bifrost流体>泡を設定し、再生してみてください。激しく移動した際には表面から泡が発生するようになりますのでリアルな結果が得られます。

最終的にはマスターボクセルの値を小さくし計算を行ったものが最初の動画のようになります。

また、今回の制作を収録しましたので、こちらもご覧ください。

また、Mayaシーンもこちらにありますのでダウンロードしてみてください。(計算の細かさはご自由に変更ください)
MayaScene: kyu_Sample.mb

次回はガイドシミュレーションに移っていきたいと思います。
ガイドシミュレーションってOcceanShaderとかBossでBifrostをコントロールするものと思っていませんか?勿論それもできるんですが、本質的にはローレゾのシミュレーションで計算したものをベースにハイレゾのシミュレーションを付け加えていくというものです。またBifrostには計算の最適化のための仕組みが色々と備わっています。ガイドシミュレーションもその中の一つです。次回以降ではここら辺をまとめて紹介していきたいと考えています。

折角なのでこのアニメーションに衝突を加えたものをArnoldでレンダリングしてみました。

著者

門口 洋一郎

門口 洋一郎

オートデスク株式会社
技術営業本部
M&Eマネージャー

製品購入に関するお問い合わせ
オートデスク メディア&エンターテインメント 製品のご購入に関してご連絡を希望される場合は、こちらからお問い合わせください。