流体シミュレーション | Cycles Renderを試す 02

前回の記録: グラスを作る | Cycles Renderを試す 01 今回は前回作ったグラスに水を注いでみたいと思います. Blenderの流体シミュレーションを用いることで,水の複雑な動きから,細かく飛び散った水しぶきまでを簡単に再現することが出来ます. まるでピッチャーから水を注いでいるような場面を作って行きましょう.

水を注ぐには

知っておくこと
  • 範囲: Domain
  • 障害物: Obstacle
  • 水源: Fluid, Inflow
"範囲(Domain)"はシミュレーションをする範囲を決めるオブジェクトです. 一般的には立方体や直方体が用いられます. CGの世界の水槽だと考えると良いかもしれません. 小さな水槽ならばシミュレーションに要する時間は短くなりますが,入る水の量は少なくなります. 大きな水槽を用意すれば,より規模の大きなシミュレーションを行えますが,計算にかかる時間はその分増えます. 適切な大きさの水槽を用意することが肝心です. "障害物(Obstacle)"とは水がぶつかるオブジェクトのことです. 水がぶつかる物,すなわち前回作ったグラスになります. "水源(Inflow)"とはその名の通り水の出所です. どんなオブジェクトでも良いのですが,今回は球(UV Sphere)を水源にします.

範囲

まずはシミュレーションする範囲(Domain)を決めます. オブジェクトモード(Tabキーで切り替え),ワイヤフレーム表示(Zキーで切り替え)にしたら,Shift+AキーのMeshからCubeを選択して立方体を追加しましょう. 立方体を適当な大きさまでスケール(Sキー)したら,グラスが収まるように位置を合わせましょう(Gキーを押すか,矢印をドラッグして位置を調整しましょう).
投影法は平行投影(Num5キーで切り替え)にし,Num1キーで正面からの眺めにすると位置を合わせやすいです. 下の画像の様に,グラスの底が水槽(Domain)の底に乗っているような位置がベストです.
Sキーに続けてYキーを押すことで,Y軸に沿ってのみスケール出来るようになります. 今回使う水槽に奥行きはそれほど必要ではないため,下の画像の様に可能な限り小さくしておくことでシミュレーションに要する時間を削減出来ます.
さて,適当な大きさの直方体を用意できたので,これを水槽(Domain)として使うために必要な設定を行ってみましょう. 直方体を右クリックで選択して,インスペクタのフィジックス(Physics)タブを開きましょう. ボールが跳ねているマークのタブです.
Blenderで物理シミュレーションを行う時にはこのタブから各種設定を行います. 今回は流体(Fluid)シミュレーションを行いたいので"Fluid"を選択します.
Type:の欄にある"None"をクリックすると,現在選択中のオブジェクトにどの役割を与えるかを選択するための一覧が表示されます.
"役割"と書きましたが,これは最初に説明した"範囲","障害物","水源"のどれかを指します. 今選択している直方体は"範囲(Domain)"にしたいので,"Domain"を選択しましょう.
Domainの設定項目を調整することで,どのような流体シミュレーションを行うのかを細かく設定することが出来ます. 各項目をすべて展開(▶をクリック)したら次の設定を変更しましょう. 太字の数値は変更が必要な部分です.
  • Resolution:
    • Final: 180
    • Preview: 100
  • Time:
    • Start: 0.000
    • End: 2.000
  • Viscosity Presetes: Water
  • Real World Size: 0.500
  • Surface:
    • Smooth: 2.000
    • Subdivisions: 2
  • Generate: 0.100
解像度(Resolution)やシミュレーションの再生時間(Time)などを変更しました. "Real World Size"とは実世界での水槽の大きさをメートルで指定する設定項目です. オブジェクトのスケール(大きさ)に関わらず,シミュレーションする流体の規模を設定出来ます. 今回は0.5メートルですが,5メートルなどに変更すると水の動き方がグラスからプールのようになります. 念のため,下に各種設定後のインスペクタを画像で載せます. 合わせて参照ください.
もうひとつ. シミュレーションの再生時間を0から2秒までに変更したので,タイムラインもそれに応じて変更しましょう. Blenderは初期状態では1秒間に24フレームの動画を作成するよう設定されています(インスペクタから変更可能です). 今回は2秒間のシミュレーションが収まれば良いので,24フレーム×2秒=計48フレームあれば丁度良い計算になります. タイムラインのEnd:を48へと変更しましょう.
これで正しい再生速度のシミュレーションを得ることが出来るようになります. 以上で範囲(Domain)の設定は終わりです. 次は障害物の設定を行いましょう.

障害物

障害物は前回作ったグラスです. グラスを右クリックで選択したら,Domainと同様,PhysicsインスペクタからFluidを選択しましょう. 今回Type:は"Obstacle(障害物)"を選択します.
変更の必要な設定項目は下記です.
  • Volume Initialization: Both
以上で障害物の設定は終わりです. 次は水源をセットしましょう.

水源

今回,水源には球体を用います. 球から横方向に水がこぼれてゆけば,まるでピッチャーから水が注がれているように見えることでしょう. 下に完成イメージを載せました. 水の出ているピンポン球が水源(Inflow)です.
Shift+AキーのMeshからUV Sphereを選択して球を追加しましょう. 球をグラスの斜め上まで移動させたら,スケールで球を小さくします. この時の球の大きさが,そのまま水の大きさ(こぼれ落ちる太さ)になります. 上の画像を参考に,球の大きさを決めましょう.
さて,お好みの大きさになった所で,PhysicsインスペクタからFluidを選択し,この球を水源(Inflow)として設定して行きます.
変更の必要な設定項目は下記です.
  • Inflow Velocity:
    • X: 0.700
    • Y: 0.000
    • Z: 0.000
この設定(初期速度)をすべて0.000にすると,水は球から真下に向かって落ちて行きます(重力だけが水に加わる力になります). Xだけ0.700にすることで,上の完成イメージのように横方向(X方向)に速度を持って水が落ちて行くようになります. 大きな値にすれば,それだけ横へ向かって(X方向へ向かって)こぼれる力が増します. この値は球の位置に依って変わるため,シミュレーション結果を見て微調整すると良いでしょう. 以上で流体シミュレーションに必要な設定は完了しました. 次は実際にシミュレーションを実行してみましょう.

Bake - シミュレーションの実行

Domain(範囲)を右クリックで選択して,Physicsインスペクタを表示すると"Bake"と書かれたボタンが見えます.
このボタンを押すと,シミュレーションに必要な計算が実行されます. このレンダリング前の計算(下処理)をBakeと呼びます. Bakeボタンにはこの処理に必要なメモリ容量も記されています. 上画像の場合,326.7MBのメモリが必要とあります. もし,この数値が大きすぎる場合にはDomainの直方体をスケールで小さくするか,Resolutionの値を小さくし,適切なメモリ容量になるよう微調整します.
準備が整ったらCmd+S(WindowsはCtrl+S)キーで念のため保存をしてからBakeボタンをクリックしましょう. するとヘッダー(レンダリングエンジン表示欄横)にプログレスバーが表示されます. 水が1フレームずつ計算され,その結果がワークスペースに順次表示されて行きます. Bakeが完了すると,次のようなシミュレーション結果を得られます.
以上で,流体シミュレーションは完了です! 水のこぼれ方が気に入らない場合はDomainのReal World Sizeや水源の位置,大きさを調整したり,初期速度のX値を0.700から変更してBakeしてみましょう. 次は流体の見た目を設定してみましょう.

流体を水にする

BakeするとDomainが流体になります. Domain(流体)を右クリックで選択したらインスペクタのマテリアルを開きましょう.
"New"をクリックするとマテリアルが表示されます. "Diffuse BSDF"を"Glass BSDF"へと変更したら,IOR(屈折率)を1.333に設定しましょう. これでほぼ常温の水の屈折率を再現出来ます.
色も白へと変更すると良いでしょう. 試しにShift+Zキーでレンダリングを行ってみると,シミュレートした流体がまさに水のように見えるはずです.
上の画像では見やすさのため,背景に青いパネルを置きました. さて,次回は水が落ちる一瞬を切り取って,レンダリングするまでを記録する予定です.
レンダリング | Cycles Renderを試す 03
6670994829987371754 https://www.storange.jp/2016/07/cycles-render-02.html https://www.storange.jp/2016/07/cycles-render-02.html 流体シミュレーション | Cycles Renderを試す 02 2016-07-08T10:39:00+09:00 https://www.storange.jp/2016/07/cycles-render-02.html Hideyuki Tabata 200 200 72 72