物理演算の一つ、「流体(Fluid)シミュレーション」。
液体の動きをシミュレーションしてくれる。
水・はちみつ・油のプリセットが用意されていて
簡単な手順でリアルな液体が表現できる。
そんなお手軽物理演算を使って、グラスにお水を注いでみるまでの覚え書き。
流体シミュレーションの注意
- 大量にメモリを消費する。解像度を高くするほど膨大になりPCに負担がかかる。下手するとクラッシュ。
- モディファイア(細分化曲面など)が使われていると、メモリへの負担は爆発的に増大する。
- シミュレーションは大量の一時ファイル(.bobj.gz)が作成され、自動的には消去されない。流体シミュ専用ディレクトリを作ること。
- .bobj.gzファイルを削除することで、シミュレーションを削除することになる。
- 流体オブジェクトは、必ずドメインオブジェクトの中に配置すること。
- 流体オブジェクトにするメッシュは、法線が外側を向いていなければならない。(つまりは、面が裏返しだと駄目)。
- 流体や障害物に指定するオブジェクト同士を重ねてはならない。
- Blender2.73で日本語入力がサポートされたが、半角英数以外のディレクトリにファイルを保存すると、物理演算が機能しない。
流体のタイプ
コントロール(Control) : 流体の形状を変形させるようコントロール。
パーティクル(Particle) : 飛沫。しずく・浮かぶ泡・トレーサー(霧みたいなもの)の3タイプがある。
流入口(Inflow) : 液体が出てくる。給水栓。
流出口(Outflow) : 液体が吸収されてなくなる。排水口。流入口とセットで使うとよいみたい。
障害物(Obstacle) : 障害物。表面の滑り方(粘つき)を、滑る・滑らない・部分的に滑るの3タイプから選ぶ。
液体(Fluid) : そこにあるだけの液体。流入口のように生成はされない。
ドメイン(Domain) : 液体シミュレーションの領域。必ず必要。
Blenderのバージョンによって、日本語訳がちょっと違う。
流入口→発生源、などになっている。
シミュレーションの手順
流体にするオブジェクト(流入口)
水を注ぐ器のオブジェクト(障害物)
流体シミュレーション領域(ドメイン)の、3つのオブジェクトで構成される。
流体の作成
メッシュから「UV球」を作成し、流したい位置に移動させる。
この大きさで水が出てくるので、サイズも調整しておく。
UV球(Sphere)を「Water」にリネームした。
UV球を選択状態で
タブから [流体]ボタンをクリック。
流体の“タイプ”を「流入口」にする。
“ボリュームの初期化”を「両方」に、“流入速度”にも数値を入れる。
【ボリュームの初期化】
ボリューム:オブジェクトの内部を液体にする。閉じたメッシュのみ有効。
外殻:メッシュの表面が薄い液体。開いたメッシュでも有効。
両方:オブジェクト+外殻。よくわからないときは、とりあえずこれで。
【流入速度】
水が発生する方向と速度。単位はメートル/秒。
数値が高いほど勢いよく放水される。
Z方向を+の数値にすると上空に噴射する。下に落としたいときは-で。
障害物の作成
グラスを障害物に指定する。
グラスのオブジェクトを選択状態で
タブから [流体]ボタンをクリックし、
流体のタイプを「障害物」にする。
“ボリュームの初期化”は「外殻」か「両方」にする。
“スリップタイプ”は「部分的なスリップ」か「自由スリップ」にする。
スリップタイプは、水の障害物への滑り方。
「自由スリップ」にするとつるつる滑っていく。
「部分的なスリップ」は「自由スリップ」と「全く滑らない」の中間くらい。
流体ドメインの作成
ドメインは流体シミュレーションが行われる範囲で、土台みたいなもの。
流体は必ずこの中に配置しなければならない。
ドメインに指定するオブジェクトの形状はなんでもよいが、常に箱型として扱われるので「立方体」が最適である。
立方体の作成
3Dビューのシェーディングを「ワイヤーフレーム」表示にして、
「立方体」プリミティブを作成、流体オブジェクトたちを囲むようにリサイズする。
立方体(Cube)は「Domain」とリネームした。
タブから [流体]ボタンをクリック。
流体のタイプを「ドメイン」にする。
自動生成されるシミュレーション結果を保存するフォルダを作成して指定する。
エクスプローラから手動削除をしばしば行うので、
.Blendファイルと同じディレクトリだと分かりやすい。(デフォルトでファイルと同じディレクトリ)
「解像度」では、流体のメッシュの細かさを指定する。
数値をあげるほど細かく、滑らかに液体が表現されるが、メモリの負担と計算時間は膨大にかかる。
「時間」では、秒単位でシミュレーションの開始と終了時間を限定できる。
開始時間を遅らせると、フレーム1ですでに水が流れている途中の状態から始まる。
シミュレーションの開始 〈ベイク〉
シミュレーションはタイムラインのフレームごとに行われる。
デフォルトの250では長すぎるので25にした。
ドメインにしたオブジェクトの[流体]パネルの「ベイク」ボタンを押すと、シミュレーションが開始される。
情報メニューのヘッダにあるプログレスバーで、進行状況が確認できる。
途中でやめたくなったら、隣の×ボタンで中止できる。
計算が終了した後は、タイムラインの[アニメーション再生]ボタンを押す。
水がじゃんじゃん流れていくのが確認できる。
パーティクル(飛沫)を作る
ドメインにした流体オブジェクトの
[流体パーティクル]パネルにある「生成」に0以上の数値を入れると、水しぶきが発生する。
生成に数値を入れたら、
[流体境界]パネルのサーフェイス: 「細分化」には、必ず「2」以上の数値を入れること。
この設定でシミュレーションすると…
飛沫が発生する。
メッシュの解像度を上げて、最終的なベイクを行う。
一時保存フォルダに作られた.bobj.gzファイル群を手動削除しておく。
滑らかなお水にするには解像度500くらい必要みたいだけれども、
計算の終るのが待てないので250にした。
プレビューはいらないので1に。
この設定でベイクすると…
こうなる…。(わかりやすいように色を付けた)。
激し過ぎて、なんだか振りまくった炭酸飲料のようである。
モディファイアの適用
タイムラインのフレームから、お気に入りのフレームを選ぶ。
タブ から
Fluidsimの「適用」ボタンを押す。
流体のメッシュを「編集モード」で編集できるようになる。
流体シミュレーションの設定はすべてクリアされるので慎重に…。
参考にさせていただいたチュートリアル動画では、
オブジェクトを複製してから「適用」させていたけれど、それを行うと高確率でBlenderが落ちる。
動画でも落ちていた…。
軽いメッシュなら大丈夫かも。
流体メッシュの編集
「編集モード」にて、ドメインにぶつかって弾かれた飛沫を削除する。
矩形・投げなわ・円選択などを使って選択。
頂点を半端に残してしまわないよう、
選択後にリンク(Ctrl+Lキー)で、つながったメッシュを選択すること。
で削除していく。
グラスの面に接する表面の凸凹を、「スカルプトモード」のスムーズブラシで滑らかに整える。
飛沫が邪魔してうまくスカルプトできなかった…。
レンダリング
「Cyclesレンダー」でレンダリングしてみる。
設定するマテリアルは、流入口ではなくドメインのオブジェクトの方なので注意。
…とても荒々しい。滝か。
設定を見直してやり直してみる。
流入口の流入速度を控えめにした。
解像度を落として、パーティクルもやめて…
ベイク。
スカルプトでちょいちょい直して…
レンダリング。
落ち着いた。
気が付いたこと
流体のメッシュに対して容器にするグラスが薄いと、容器から流体がはみ出す。
- 打開策(1)
-
- 解像度を上げてメッシュを細かくする。
- 打開策(2)
-
- 容器とは別に、ダミーの分厚いオブジェクトを用意する。
- 打開策(3)
-
- シミレーション後に編集モードで、はみ出した流体を縮小する。
参考リンク