-Blenderで流体シミュレーションをするときの手順と注意点-


流体シミュレーションは、bleder 2.82 以降は 従来の El'Beem という流体ライブラリを用いたものから、Mantaflow という フレームワーク を用いたものに差し変わりました。
このフレームワークは、煙シミュレーションにも使用されるようになっています。

より新しい Mantaflow の方が何かと高性能のようですが、シミュレーションの手順や実行方法も、ある程度似てはいるのですが変化しています。
2.82用に流体の解説の更新を行いました。

0. Quick Effect

基本的な設定済みのセットは、オブジェクト、例えばデフォルトキューブを選んだ状態で、
オブジェクトメニューの Quick Effect > Quick Liquid(クイック液体) を実行することで得ることができます。

Quick Liquid を使うことで、ここで示している手順の最初の数手順は省略することができますが、
やはり仕組みを理解するために、慣れるまでは何度か一からセッティングしてみるのがお勧めではあります。

1. 容器の設定と、液体を描画する設定

■環境を設定する

煙シミュレーションと同じく物理シミュレーションは、結果をキャッシュファイルにどんどん保存していきます。
RAMディスクのある環境であれば、負荷の軽減とパフォーマンスアップのために、RAMディスク上で作業することを強く推奨します。

■Domainになる箱を作る

まずは液体シミュレーションをする箱をつくります。名前は何でも良いのですが、Blenderと共通の用語を使った方がわかりやすいので、名前をDomainとしておきます。(領域という意味)



箱の Fluid (流体)シミュレーションを有効にして Type に Domain(ドメイン)を選択します。
また、Domain Type にはガスと液体を選べるので、Liquid(液体)にします。
解像度(Resolution Divisions)等のパラメータを計算速度との兼ね合いで設定します。
CFL Number は小さいほど計算が正確に(そして遅く)なるようです。

ボーダーコリジョンの設定で、ドメインの境界が閉じているか開いている(流体が流れ出る)かどうかを面ごとに設定します。(*)

(*)従来はドメインの境界は必ず閉じていて、ドメイン内に液体がどんどん貯まっていき、流れ出るようにするには別途 Outflow オブジェクトの配置が必要でした。
新システムでは、単に壁の設定をするだけなので簡単になっています。

Cacheの項目で、キャッシュに関する設定をします。
キャッシュファイルは、デフォルトでは、設定の Temporary Files (一時ファイル) で設定されたフォルダに作成されるはずです。
やはり RAMディスクがあるならそこを利用するのがお勧めです。

Frame Start と End でシミュレーションを実行する時間範囲を決めます。
シミュレーション結果を保存(ベイク)するキャッシュ(Cache)関係の設定は、キャッシュパネルにまとめられています。
タイプは幾つかあり、Replay(*1)ではプレビュー時に自動でシミュレーションとベイクを行います(従来のケムリなどに近い振る舞い)。
明示的にベイクボタンを押してベイクを実行するモードは Modular と Final があります。
Modular は幾つかの要素ごとにバラバラに独立してベイク(*2)ができ、Final の場合はまとめて全部ベイクします。

(*1)Replay は軽い設定にして何度もトライ&エラーを試みるときに使うのが良いようです
いざ実際にレンダリングするときには Modular や Final できっちりとベイクしてレンダリングをしなければいけません。

(*2)流体のシミュレーション本体、その結果から作る表面のメッシュ情報、各種のパーティクルなど何種類か重いデータがあるので、
それぞれ独立にベイクするか、全部まとめて処理するかを選べるということになっています。

Modular の時はそれぞれの要素ごとにベイクします。Resume(再開)機能などもあるので、Finalよりもトライ&エラーしやすいです。

Final の時は、Cache パネルに Bake All (すべてベイク)というボタンが表示されます。


■液体の出入り口の設定をする。
液体の流入口となるオブジェクトを作成します。
図ではドメインの上面の境界にかぶせるように配置しましたが、中にすっぽり入っていてもかまいません。
境界とかぶせるようにする場合には、境界と干渉しないようにドメインの上の境界を開けておくようにします。
タイプを Flow の Liquid(液体)に設定します。
Flow Behavior(フローの挙動) を、Inflow(インフロー) にすると蛇口のようにそこから液体が流れ込み続けます。
Geometry(ジオメトリ)の場合は、単にオブジェクトの形に液体が存在する状態になります。
プールの水のようなたまった水や、水滴を1滴だけ落とすような場合にはGeometryにします
初期速度(Initial Velocity)の設定をします。
速度0で落下する流体であればデフォルトの数値設定で良いのですが、初期に外れているチェックボックスを入れておきます。
(2.82の時点で、初速度の設定のチェックを入れ忘れている場合の挙動が不審です。)

■シミュレーション開始
Replay 設定にしてプレビュー再生をするか、Domainに設定した箱で、Bake Data(データをベイク)を実行するとシミュレーションを開始します。
結果はキャッシュファイルに保存されてゆきます。
進行状況は Blender の画面下部にプログレスバーとして表示されています。
計算の中断ボタンが無くなったので、中断はキーボードESCキーから行います。

■シミュレーション結果表示。
計算が済んだフレームを表示させると、液体表面が点の集合体として表示されます。
ただし、計算結果の表示はしていますが、ドメインの箱もそのまま表示されています。
そのため、表示モードを X-ray (Alt-Z) にしておかないと、ドメインの箱の中で肝心の流体が見えないので注意が必要です。
この状態は、流体の計算だけはできていますが、それを表示するための表面のメッシュの計算が済んでいません。
レンダリングしてもドメインの箱だけが表示されるだけです。
メッシュを有効にしてベイクを行います。

(ベイクの設定で Modular にすると流体の計算とメッシュの計算をばらばらにベイクできます。
メッシュの計算をせずにシミュレーションで試行錯誤して、上手くいったら最後にメッシュをベイクする、
といった手順で無駄な計算を省くことができるということになります)
メッシュのベイクが済めば、ドメインの形状が流体の表面の形になるので、普通に表示が行えます。
ドメインのマテリアルの設定(半透明など)を行ってレンダリングをします。
半透明や屈折といった表現は Eevee の苦手とする分野なので、水などの表現を Eevee 正確に行うのは、多少難しいかもしれません。
(ここではマテリアルの設定には踏み込みません)

inserted by FC2 system