00物理演算の一つ、「流体(Fluid)シミュレーション」。
液体の動きをシミュレーションしてくれる。

水・はちみつ・油のプリセットが用意されていて
簡単な手順でリアルな液体が表現できる。

そんなお手軽物理演算を使って、グラスにお水を注いでみるまでの覚え書き。


流体シミュレーションの注意

  • 大量にメモリを消費する。解像度を高くするほど膨大になりPCに負担がかかる。下手するとクラッシュ。
  • モディファイア(細分化曲面など)が使われていると、メモリへの負担は爆発的に増大する。
  • シミュレーションは大量の一時ファイル(.bobj.gz)が作成され、自動的には消去されない。流体シミュ専用ディレクトリを作ること。
  • .bobj.gzファイルを削除することで、シミュレーションを削除することになる。
  • 流体オブジェクトは、必ずドメインオブジェクトの中に配置すること。
  • 流体オブジェクトにするメッシュは、法線が外側を向いていなければならない。(つまりは、面が裏返しだと駄目)。
  • 流体や障害物に指定するオブジェクト同士を重ねてはならない。
  • Blender2.73で日本語入力がサポートされたが、半角英数以外のディレクトリにファイルを保存すると、物理演算が機能しない


流体のタイプ

 コントロール(Control) : 流体の形状を変形させるようコントロール。
 パーティクル(Particle) : 飛沫。しずく・浮かぶ泡・トレーサー(霧みたいなもの)の3タイプがある。
 流入口(Inflow) : 液体が出てくる。給水栓。
 流出口(Outflow) : 液体が吸収されてなくなる。排水口。流入口とセットで使うとよいみたい。
 障害物(Obstacle) : 障害物。表面の滑り方(粘つき)を、滑る・滑らない・部分的に滑るの3タイプから選ぶ。
 液体(Fluid) : そこにあるだけの液体。流入口のように生成はされない。
 ドメイン(Domain) : 液体シミュレーションの領域。必ず必要。

Blenderのバージョンによって、日本語訳がちょっと違う。
流入口→発生源、などになっている。


シミュレーションの手順

流体にするオブジェクト(流入口)
水を注ぐ器のオブジェクト(障害物)
流体シミュレーション領域(ドメイン)の、3つのオブジェクトで構成される。

流体の作成

メッシュから「UV球」を作成し、流したい位置に移動させる。
この大きさで水が出てくるので、サイズも調整しておく。

01

UV球(Sphere)を「Water」にリネームした。


UV球を選択状態で
プロパティエディタ > 物理演算 タブから [流体]ボタンをクリック。

02


流体の“タイプ”「流入口」にする。

03

“ボリュームの初期化”「両方」に、“流入速度”にも数値を入れる。

【ボリュームの初期化】
 ボリューム:オブジェクトの内部を液体にする。閉じたメッシュのみ有効。
 外殻:メッシュの表面が薄い液体。開いたメッシュでも有効。
 両方:オブジェクト+外殻。よくわからないときは、とりあえずこれで。

【流入速度】
 水が発生する方向と速度。単位はメートル/秒
 数値が高いほど勢いよく放水される。
 Z方向を+の数値にすると上空に噴射する。下に落としたいときは-で。


障害物の作成

グラスを障害物に指定する。

グラスのオブジェクトを選択状態で
プロパティエディタ > 物理演算 タブから [流体]ボタンをクリックし、
流体のタイプを「障害物」にする。

05

“ボリュームの初期化”は「外殻」「両方」にする。
“スリップタイプ”は「部分的なスリップ」「自由スリップ」にする。
スリップタイプは、水の障害物への滑り方。
「自由スリップ」にするとつるつる滑っていく。
「部分的なスリップ」は「自由スリップ」と「全く滑らない」の中間くらい。


流体ドメインの作成

ドメインは流体シミュレーションが行われる範囲で、土台みたいなもの。
流体は必ずこの中に配置しなければならない。
ドメインに指定するオブジェクトの形状はなんでもよいが、常に箱型として扱われるので「立方体」が最適である。

立方体の作成

3Dビューのシェーディングを「ワイヤーフレーム」表示にして、
「立方体」プリミティブを作成、流体オブジェクトたちを囲むようにリサイズする。

06

立方体(Cube)は「Domain」とリネームした。
プロパティエディタ > 物理演算 タブから [流体]ボタンをクリック。


流体のタイプを「ドメイン」にする。

08

自動生成されるシミュレーション結果を保存するフォルダを作成して指定する。
エクスプローラから手動削除をしばしば行うので、
.Blendファイルと同じディレクトリだと分かりやすい。(デフォルトでファイルと同じディレクトリ)

「解像度」では、流体のメッシュの細かさを指定する。
数値をあげるほど細かく、滑らかに液体が表現されるが、メモリの負担と計算時間は膨大にかかる。

「時間」では、秒単位でシミュレーションの開始と終了時間を限定できる。
開始時間を遅らせると、フレーム1ですでに水が流れている途中の状態から始まる。


シミュレーションの開始 〈ベイク〉

シミュレーションはタイムラインのフレームごとに行われる。
デフォルトの250では長すぎるので25にした。
ドメインにしたオブジェクトの[流体]パネルの「ベイク」ボタンを押すと、シミュレーションが開始される。

11

情報メニューのヘッダにあるプログレスバーで、進行状況が確認できる。
途中でやめたくなったら、隣の×ボタンで中止できる。


計算が終了した後は、タイムラインの[アニメーション再生]ボタンを押す。
水がじゃんじゃん流れていくのが確認できる。

12


パーティクル(飛沫)を作る

ドメインにした流体オブジェクトの
[流体パーティクル]パネルにある「生成」に0以上の数値を入れると、水しぶきが発生する。

13

生成に数値を入れたら、
[流体境界]パネルのサーフェイス: 「細分化」には、必ず「2」以上の数値を入れること。

この設定でシミュレーションすると…

14

飛沫が発生する。


メッシュの解像度を上げて、最終的なベイクを行う。
一時保存フォルダに作られた.bobj.gzファイル群を手動削除しておく。

滑らかなお水にするには解像度500くらい必要みたいだけれども、
計算の終るのが待てないので250にした。
プレビューはいらないので1に。

15

この設定でベイクすると…


17

こうなる…。(わかりやすいように色を付けた)。
激し過ぎて、なんだか振りまくった炭酸飲料のようである。


モディファイアの適用

タイムラインのフレームから、お気に入りのフレームを選ぶ。

プロパティエディタ > モディファイア タブ から
Fluidsimの「適用」ボタンを押す。

20

流体のメッシュを「編集モード」で編集できるようになる。
流体シミュレーションの設定はすべてクリアされるので慎重に…。

参考にさせていただいたチュートリアル動画では、
オブジェクトを複製してから「適用」させていたけれど、それを行うと高確率でBlenderが落ちる。
動画でも落ちていた…。
軽いメッシュなら大丈夫かも。


流体メッシュの編集

「編集モード」にて、ドメインにぶつかって弾かれた飛沫を削除する。
矩形・投げなわ・円選択などを使って選択。

22

頂点を半端に残してしまわないよう、
選択後にリンクCtrl+Lキー)で、つながったメッシュを選択すること。


Xキー(Deleteキー) > 頂点 で削除していく。

23


グラスの面に接する表面の凸凹を、「スカルプトモード」のスムーズブラシで滑らかに整える。

24

飛沫が邪魔してうまくスカルプトできなかった…。


レンダリング

「Cyclesレンダー」でレンダリングしてみる。
設定するマテリアルは、流入口ではなくドメインのオブジェクトの方なので注意。

untitled

…とても荒々しい。滝か。


設定を見直してやり直してみる。

流入口の流入速度を控えめにした。

25


解像度を落として、パーティクルもやめて…

26

ベイク。

スカルプトでちょいちょい直して…

レンダリング。

untitled2

落ち着いた。


気が付いたこと

流体のメッシュに対して容器にするグラスが薄いと、容器から流体がはみ出す。
  • 打開策(1)
    • 解像度を上げてメッシュを細かくする。
  • 打開策(2)
    • 容器とは別に、ダミーの分厚いオブジェクトを用意する。
  • 打開策(3)
    • シミレーション後に編集モードで、はみ出した流体を縮小する。
    


参考リンク