【Blender 2.92】「金魚鉢に水を注ぐ」流体アニメーション【2021年5月30日】

2021年8月12日

5月30日に作った「金魚鉢に水を注ぐ」アニメーションの解説です。

ささらBch(@sasara_Bch)さんの「夢色金魚鉢」に流体シミュレーション(物理演算)を使って水を注いでみました。

Blenderで流体シミュレーションを行うためのコツや注意点について、備忘のために記事にまとめました。

ご意見・質問等はクララのTwitter(https://twitter.com/klala_lab)まで(^^)/

広告

作品の意図

2021/5/27の「#深夜のモデリング60分一本勝負」(以下ワンモデ)のお題が「金魚鉢」でして、TwitterのTLに流れてくる金魚鉢たちを見て、私も作ってみたくなりました!

ただ、口の部分のヒラヒラを自力でモデリングする自信がなかったので、ささらBch(@sasara_Bch)さんの「夢色金魚鉢」の動画を参考にさせていただきました🙇💦

ささらさんの動画の手順に従って作ったところ、冒頭に載せたツイートのとおり綺麗な金魚鉢が完成しました😊✨

ただ、空のままにしておくのも勿体ないので、最近覚えた流体シミュレーション(物理演算)を使って水を注いでみました。

ちなみに、流体シミュレーションの方法は、以前「サイコロアニメーション」の記事で紹介した、うめちゃんさん(@zero_blender)さんのUdemy講座「つくって学ぶ物理アニメーション」の中で学びました(以下リンク)。

さまざまな物理演算の方法について、基礎から体系的に学ぶことができるので、非常におすすめです!👍✨✨

2021年最新版【はじめての物理】つくって学ぶ物理アニメーション

https://www.udemy.com/course/2021-ass/?referralCode=E719AEB3A5C765F1FDAA

使用した手法

今回は、水を注ぐ流体シミュレーションの方法のみ紹介し、金魚鉢のモデリング方法には一切触れません(笑)

金魚鉢のモデリング方法は、↑のささらBchさんの動画でわかりやすく紹介されているので、そちらを参照ください😅

「金魚鉢に水を注ぐ」流体アニメーション
  • クイックエフェクト→液体
  • 流入口の設定
  • ドメインの設定
  • エフェクターの設定
  • パーティクルの作成

作成手順

流体シミュレーションで水を注ぐ方法について、順を追って説明します。

クイックエフェクト&流入口の設定

水を注ぐためには、まず水源のメッシュオブジェクトを用意する必要があります。

形状は何でもよいのですが、今回はICO球を用意しました。

オブジェクトモード→「Shift+A」でICO球を追加し、「S」で縮小(金魚鉢の口の1/10程度の大きさ)した後、「G」で金魚鉢の上空の水を注ぎたい場所に移動します。

つぎに、クイックエフェクトで流体シミュレーションを追加します。

ICO球を選択後、左上の「オブジェクト(Object)→クイックエフェクト(Quick Effects)→クイック液体(Quick Liquid)」を選びます。

すると、以下のような「LiquidDomain(リキッドドメイン)」という名の直方体が現れます。このドメインが物理演算を行う領域です。

上の図だと金魚鉢の一部が少しドメインから出てしまっています。

なので以下のように、金魚鉢とICO球が余裕をもってすっぽり収まるようにドメインを移動(G)・拡縮(S)させます(立方体メッシュオブジェクトと同じ要領で移動・変形できます)。

ドメインの設定は後で行うとして、次にICO球に「流入口」を設定します。

ICO球を選択し、物理演算プロパティの設定(Settings)から「フローの挙動(Flow Behavior)→流入口(Inflow)」を選択します。これでICO球から水が湧き出すようになります。

アニメーションを再生すると、以下のように水面の動きが青や緑色の点として表示されます。これで流入口の設定は完了です。

ドメインの設定

ドメインを選択し、物理演算プロパティから以下設定を変更しました。

  • 「設定(Settings)→分解の解像度(Resolution Divisions)」:32→64。…アニメーションの解像度を上げるため。
  • 「拡散(Difusion)」にチェック
    • プリセット(Presets)から「水(Water)」を選択。…水の動きを表現するため。
  • 「パーティクル(Particles)→飛沫(Spray)」にチェック …しぶきをパーティクルで表現するため。
    • パーティクルのオブジェクトはのちほど設定します。
  • 「メッシュ(Mesh)」にチェック …水をメッシュにベイクするため。
  • 「キャッシュ(Cash)」
    • 「終了フレーム(Frame End)」:250→150 …アニメーションのフレーム数に合わせる。
    • 「タイプ(Type)」:リプレイ(Replay)→モジュール(Module) 
      • 「リジューム可能(is Resumable)」にチェック …アニメーションをレンダリングするために、キャッシュをベイクするための設定。

キャッシュタイプを「モジュール」に設定することで「データをベイク(Bake Data)」のボタンが有効になるので、こちらを選択しベイクします。

すると、以下のようにタイムライン1から150までのデータがベイクされます。

(ベイク中)

(ベイク完了後アニメーション)

ただしこのままだと水が金魚鉢を貫通してしまうため、金魚鉢を「エフェクター」として設定します。

広告

エフェクターの設定

金魚鉢を選択し、物理演算プロパティから「流体(Fluid)→タイプ(Type)→エフェクター(Effector)」を選択します。

ポイントは、設定(Setting)から「表面の厚さ(Surface Thickness)」をある程度大きい数字に設定することです(今回は1.0)。

表面の厚さ=0.1だと、水の大部分が金魚鉢から漏れてしまっています(ToT)💦

表面の厚さ=1.0まで大きくすることで、水漏れを最小限に抑えることができました。

(しぶきが少し漏れてしまっていますが、アニメーション的には許容範囲なので良しとしました😅)

パーティクルの作成

水しぶきを表現するために、ドメインの設定で「パーティクル→飛沫」をONにしましたので、飛沫パーティクルのオブジェクトを作成します。

「Shift+A」で「メタボール(Metaball)→ボール(Ball)」を追加します。

(ICO球でもよいのですが、メタボールにすると近くのメタボール同士くっつくので、水滴の表面張力を表現できます。)

水滴の透明感を出すために、マテリアルはグラスBSDF(Glass BSDF)に設定し、ブレンドモードは「アルファブレンド(Alpha Blend)」、「スクリーンスペース反射」をONにしました。

メタボールの解像度(Resolution)を小さくすればするほど飛沫の表面が滑らかになりますが、その分物理演算が重くなってしまいます。今回は0.2mに設定しました。

飛沫パーティクルのオブジェクトが完成したら、ドメインを選択しパーティクルプロパティから以下を設定します。

  • レンダリング方法(Render As):オブジェクト(Object)
  • スケール(Scale):(アニメーションを見て後で設定)
  • インスタンスオブジェクト(Instance Object):Mball

※エミッターを表示(Show Emitter)のチェックは付けたままにしておきます(外すとレンダリング時に液体が表示されなくなってしまいました…😅)

設定が終わったら、物理演算プロパティから「パーティクルをベイク(Bake Particles)」と「メッシュをベイク(Bake Mesh)」を選択しパーティクルとメッシュをベイクします。(あらかじめ「データをベイク」を選択してキャッシュをベイクしておきます。)

あとは自分が納得のいく出来になるまで、先ほど紹介した「ドメイン」「エフェクター」「パーティクル」の設定を調節してゆきます😅💦

設定を調節してベイクし直す際には「データを開放(Free Data)」を選択する必要があります。

ただし、Blenderのバージョンによってはキャッシュが残ってしまい変更した設定が反映されないことがあります。そのような場合は、「キャッシュ>タイプ>モジュール」をいったん「リプレイ」に変更したあと「モジュール」に変更することでキャッシュがリセットされて変更が反映されるようになるようです。

設定を済ませ、動画をレンダリングしたところ以下のようにアニメーションが完成しました!!

※動画のレンダリング方法は「サイコロアニメーション」の記事で紹介したので、そちらを参照ください。

(分解解像度64、Cycles)

(分解解像度64、Eevee)

(分解解像度256、Eevee)分解解像度を上げることで水面の動きはかなり滑らかになりました。ただ、金魚鉢に接する面が波打ってしまっていて、まだまだリアルには程遠いです…😅

補足:水が金魚鉢から浮いて見える場合の対処法

分解解像度の値を高くすると、エフェクターから漏れる水の量が増えてしまう現象が起きました😅

そのため、水漏れ防止のためにエフェクターの「表面の厚さ」をさらに上げました(分割解像度64で1→256で10)。

すると、下の図でわかるように、中に入った水が金魚鉢から浮いて見えてしまいます。

これは私なりの解決方法ですが、金魚鉢のメッシュをコピー・複製し、水が浮いて見えないようにコピーした金魚鉢を縮小しました。

コピーした金魚鉢のエフェクターは削除しておきます。

右上のシーンコレクションで、コピー元の金魚鉢の「👁」マークと「📷」マークを外せば、コピーした金魚鉢のみ表示・レンダリングされるようになります。

広告

まとめ

流体シミュレーションによるアニメーション作成を通して、流体アニメーションのコツや注意点(そして難しさ…)を学ぶことができました。

今回作成したアニメーションはまだまだリアルには程通い出来です😅

ただ、今後も流体シミュレーションを使う機会はたびたびあると思うので、学んだことをまた別の機会に紹介できればと思います。

参考チュートリアル

ささらBchさん Blender M01-037【夢色金魚鉢】

うめちゃんさんのUdemy講座

2021年最新版【はじめての物理】つくって学ぶ物理アニメーション

https://www.udemy.com/course/2021-ass/?referralCode=E719AEB3A5C765F1FDAA

広告