なんだか色々ハマったりしたのでメモ。
ただ、できてくるとテンションあがるw
ちなみに作成に利用したバージョンは2.68aです。
なにはともあれ準備
まず、流体のシミュレーションを行うにあたって最低2つの要素が必要になります。
- 流体(液体)
- 流体をシミューレションする空間
- 障害物などシミュレーションに必要なものを配置
1は当たり前ですね。2がなんとなく「?」となりますが、流体の計算は非常に高価な演算です。そのため、なんでもかんでも計算してしまうとすぐに計算量がとんでもないことになってしまうので、まずは「ここの中は流体の計算をしますよ」という空間を定義しなければなりません。
3については必須ではありませんが、だいたいの場合に置いてなにかしらの障害物や液体をためておくものがあるでしょう。それを準備します。
シミュレーション空間 - Domainを作成
まず最初にシミュレーション空間を作成します。
空間は最終的には立方体になるようなので単純にCubeを利用します。
以下のように比較的大きめなものを準備します。
流体を準備
次に、流体を準備します。
上記で作成したCube内に視点を移動し、Sphereを追加します。(今回はこれにしましたが特に初期形状はなんでも構いません)
Sphereを選択した状態で「Physics」から、「Fluid(流体)」を選択します。
さらにTypeもFluidにします。これで流体の準備ができました。
障害物を設置
最後に障害物を設置します。(ちなみに流体シミュレーションではこれ以外にも流体を流し込むオブジェクトや吸収するオブジェクトなど色々なものも配置できますが、今回は基本だけなので割愛します)
今回は斜めの板を設置してみました。
これを、流体の障害物に設定します。設定は以下のようにしてください。
Type: Obstacleが障害物、という意味です。
今回はVolume InitializeをBoth、Slip Typeを FreeSlipに設定しました。
シミュレーションを実行
さて、これで今回のサンプルに必要なものが揃いました。
これらを利用してシミュレーションを実行します。
実行には、最初に準備した「Domain」の設定項目内にある「Bake」を実行することでキーフレームに計算結果が出力されます。
計算には結構時間がかかるのでしばらく待ちます。
計算が終わったらAlt+Aでアニメーションさせてみましょう。
初期設定のままだとだいぶポリゴンがあらいですが、しっかりと液体のシミュレーションが行われているのが分かると思います。
背景を透過させる
今回これを作ろうとした理由は、流体シミュレーションを書き出してコンテンツに合成して使おうと思ったためです。
なので、背景とか色々レンダリングされてしまうと合成に使えないので、以下の設定で背景も透過させます。
Shading内にある「Alpha」を「Transparent」に、書き出しフォーマットをPNGにしてRGBAを選択します。これで背景が透過されてレンダリングされます。
レンダリングを軽くする
流体は大体の場合において透明でしょう。
ただ、レンダリングは注意しないとだいぶ重い処理になってしまうので、色々試したところ、今回のようなケースの場合は「Renderer」の設定の「Shading」にあるRay tracingをオフ、AlphaをTransparentにすることで透過した質感を残しつつだいぶ素早くレンダリングできることに気がついたのでメモ。テスト用にさっとレンダリング結果を確認できるようにしておくことは試行錯誤を繰り返す上でだいぶ重要。
参考記事
以下の記事を参考にさせてもらいました。