27/11/2022

Blenderの流体シミュレーションの障害物で地味に困った話

誰も困ってない問題に勝手に悩んで無理やり何とかする需要なき続編です😅

Blenderの流体シミュレーションで水をリアルにするには?

コップにスプーンを入れてみただけなのに…

前回の続きで、落ちてくる水がスプーンに当たってちょっと跳ねる、みたいな感じにしたかったんです。
いかにもありそうですよね?

そしたら思いがけず、困ったことになりました。

失敗例1
WebP対応ブラウザでは絵が動きます

(おわかりいただけたでしょうか…)

スプーンの周囲にエフェクター(コリジョン)による「水の入り込めない空間」があるために、スプーンに水飴がまとわりついているような感じになってしまったのでした。

Blender fluid simulation effector Collision problem
ほんとは最終的に右のようになって欲しいわけです。

しかしエフェクター(コリジョン)を設定しないと水がスプーンを無視してつき抜けてしまいます。

さてどうしたものか🤔

思いついた解決策は、
スプーンを障害物にするのを途中でエフェクターをOFFにしてみる
ことでした。

そうすることで水がスプーンを突き抜けて、結果的にスプーン表面と水の間の隙間がなくなります。

スプーンに水が当たる部分が水没するタイミングで、
「エフェクターを使用」のチェックを外すようにフレームアニメーションを設定してみます。[やり方は後述]

これでよし!

(…レンダリング中…)

がっ!

OFFにした瞬間、ちょっと水位が下がる!😱

失敗例2
WebP対応ブラウザでは絵が動きます

カクって下がる、、、orz

いきなりOFFにするとそのスペースに水が一気に入り込むため、その分水位が下がってしまうようです。
よく見ないと気づかないかもですが…
スプーンの周囲のモヤモヤが瞬時に消える不自然さも気になります。

ではOFFにするのではなく「表面の厚さ(Surface Thickness)」の値を0に減らすようなアニメーションするのは?

試してみたところ、0.00000にしてもやはりスプーンの周囲に空間が残って水飴状態に…。

だったらもうしょうがない、力技で無理やり何とかしてみます。

スプーンを分割して、わちゃわちゃしてる間に下の方から消す!

一度に消すのではなく、半分ずつ消すことで隙間だった空間に水が流れ込む量を減らして誤魔化す作戦です。

  1. スプーンを複製
    水がぶつかる障害物としてエフェクター用にスプーンを複製します。
    元のスプーンからは流体モディファイアを削除して物理演算の対象にならないようにしておきます。
    スプーン
  2. 複製したスプーンからソリッド化モディファイヤを削除
    このスプーンは平面に「細分化」モディファイアで分割を増やし「ソリッド化」で厚みを付けていますが、今回障害物エフェクターとして使うには厚みは不要ですし平面の方が体積が無くなり都合がいい(はず)なのでモディファイアは削除します。

  3. スプーンを上下に分割
    スプーンを上下に二分割して別々のオブジェクトにします。
  4. 下のスプーンのエフェクターを40フレーム目で削除
    39フレームにスプーンの「物理演算プロパティ」から、「流体」を「エフェクター」に、「表面の厚さ」を0.00000にして「エフェクターを使用」にチェックしてキーフレームを設定します。
    そして次の40フレーム目で「エフェクターを使用」にチェックを外してキーフレームを打ちます。
  5. 下のスプーンのエフェクターを52フレーム目で削除
    同様にスプーンに水がぶつかる部分が水没するタイミングで「エフェクターを使用」にチェックを外すキーフレームを設定します。

それでレンダリングした結果がこちらです。

Fluid simulation

正直、かなり苦し紛れの方法ですがっ。😅

もっと簡単ないい方法があるよ!という方、是非ご教唆ください!

追記:
何と本当に灰ならしさんにご教唆いただけました