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

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

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

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

  

20/11/2022

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

コップに水を注ぐ流体シミュレーション

いつもBlenderの勉強をさせていただいている灰ならしさんのこちらの記事を参考に、初めて流体シミュレーションというものをやってみました。

初めはパーティクルのベイクが出来たり出来なかったりでよくわからなかったのですが、灰ならしさんの記事の丁寧な解説のおかげでどうにか出来るようになりました。

※どこでつまづいたかというと、パーティクル計算のやり直し方がわかりませんでした。
「物理演算プロパティ」の「キャッシュ」でタイプが「リプレイ」なら他の設定に変えて戻す、
同じくタイプが「モジュール」なら「流体」で「データを解放」
タイプが「全て」なら「全て開放」するだけでした。

後編の記事でコップから水が漏れる現象の対処法やよりリアルに見える方法を解説してくださっています。

ところがいかんせん未熟者ゆえ、やってみたところサラサラした水っぽい感じではなく、やや粘り気というかトロみのある液体に見えてしまいます。

これは何故なのか、どうしたら改善できるか考えてみました。

先ず思いついた仮説は「ブーリアンでコップと水の接する面を平らにカットしてみる」ことでした。

ブーリアン演算の有無

コップに水を注ぐ流体シミュレーションが自然に見えない理由と対策

  1. 水面がデコボコ
    流体シミュレーションはパーティクルの集まりなので、水面が完全に平らになりません。
    どうしても表面が凸凹になり、その結果ゼリーのような、粘性のある液体に見えてしまうようです。

    理屈ではパーティクルを非常に小さくすれば平らに近づくのでしょうが、データ量と計算時間等を考慮すると限界がありそうです。

    そこで、パーティクルのドメインとコップの内側を引き伸ばした円柱状の形状とでブーリアン演算の「交差」にすることで、コップと水が接する側面のデコボコした部分をカットします。

    パーティクルドメインにブーリアンをかける
    Boolean operations to remove unnatural parts of water particles
    青く見える部分がカットされる

    追記
    そもそもパーティクルにブーリアンかけられるの?っていう話ですが、かけられました。
    ただしメッシュをベイクした状態でないとブーリアンが反映されません。
    また、不自然なレンダリング結果にならないように、ブーリアン形状にスムーズシェードはかけないで、なめらかにしたい場合はポリゴンを増やして対応しています。

  2. 水面がなかなか止まらない
    そして流体シミュレーションはなかなか止まりません。
    フレーム数を増やして実験しても、水面を真っ平らな状態で完全に静止させることが出来ませんでした。

    なので水面も側面同様ブーリアンをかけることで平らにしてみます。

  3. 水の落ちるスピードが遅い
    もうひとつのポイントは水の落ちるスピードです。
    実際に蛇口からコップに水を注いで観察してみたところ、水の落ちる速度が現実ではかなり速いことに気づきました。

    CGで再現する際、ゆっくりの方がシミュレーションとしては面白いのですが、そうするとやはり粘性のある液体のように見えてしまいます。

    これは速度を速めることで解決できそうです。

それでレンダリングしたアニメーションがこちらです。

https://twitter.com/ky0/status/1594213587710795776?s=46&t=UXVJorLDJLu7wxD_wEGnJQ

スピードを倍にすることでだいぶ水らしいサラっとした感じになりました。

最後の水面を静止させるためのブーリアンは、よく見ると水面が下がるのが見えてしまうため、結局After Effectsで最終フレームをゆっくりブレンドすることにしました(邪道!)
水面用のブーリアン(差分)オブジェクトをゆっくりと下げるわけですが、そのタイミングを調整するたびにレンダリングし直すのはツラいので、After Effectsを使う方が簡単なんですよね(言い訳!)

しかし、このあとスプーンをコップに入れたところ、思いがけない問題が表面化するのでした…(つづく

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

  

26/9/2022

コード進行フェチのメモ帳

インディーズ系多め。有名曲は「感動のコード進行・連想ゲーム編」プレイリストにて

普段BGMとしてプレイリストを再生する場合、SpotifyであれYouTubeであれ、有料プランに加入しない限り宣伝が挟まりますよね。
ですが上のようにYouTubeのプレイリストをブログやSNSに埋め込んだ場合は、有料プランに入っていなくても宣伝が入らずに連続再生できることに気づきました。
続きを読む

  

17/9/2022

AI(Stable Diffusion)に猫の王様を描かせてみたけど…

せっかくNVIDIA製GPUがあるので流行りのAIによる作画やってみようと思いまして。
GIGAZINEの記事を参考にWindowsノートパソコンでStable Diffusionを使えるようにインストールしてみました。
NMKD Stable Diffusion GUIが最も簡単でした。

img2imgにルルちゃんの写真を指定。
ルルちゃん
こうすることで同じような画角になるようです。

ちなみに呪文はこんな感じです。
Photo, Cat King wearing gorgeous crown and red cloak, taken with SONY α7 IV and FE 35mm F1.4 GM Lens, F2.4, iso 200

設定を調整しながら200枚ほど描かせてみました。
Step値が低ければ1枚数秒で出力されます。
最高にしても200枚描くのに1時間ほど。速い!
続きを読む

  

Comments (0) グラフィック Tags: , , , , — Kyo ICHIDA @ 2022/09/17 23:42
27/8/2022

Blenderでコースティクスを使ってみたくて ③

BlenderとLuxCoreRenderという組み合わせでコースティクスが描画できるようになったところで。
水中に射し込む光跡みたいなやつも再現したいじゃないですか。
あれ、どうやるんだろう?

ということで水位を高くしてやってみたところ、LuxCoreのおかげで光跡は労せずに出ました。
さすが物理ベースレンダラー。

だけど何だろう、壁への照り返しが何やらたいへんなことに。まるでモクモク煙が上がっているかのような大袈裟な感じ…。
この壁への反射をもう少し落ち着かせることができないものでしょうか?

パラメータをいろいろいじって試行錯誤してみたところ、水の外側、つまり空気の設定によって変化が見られました。

こちらの解説動画を参考に、水面の表裏にそれぞれInterior Volume(水中用のボリューム)とExterior Volume(空気用ボリューム)のLuxCoreノードを設定しています。

LuxCoreの水面ノード設定例

この水の外側、空気の「均質ボリューム」の「Scatter Scale」の値を上げていくとコースティクスの範囲が狭まり、壁への反射が減っていくことがわかりました。

動画をレンダリングしたときはScatter Scaleの値を0にしてしまっていたのでした。

LuxCore Homogeneous Volume Scattering Scale

Scatter Scaleを上げると壁の光も柔らかくなり、光源の強さは変えていないのに明るくなる点も興味深いです。
けれどもこの数値を上げるにつれ、逆に水面は不自然になってしまうようです。

う〜む、やはりなかなか難しい…他にも見落としている設定等がある気がしてきました。

知識が足りずなかなか思うように行かないものの、そこがまた楽しくもありますね。
いずれにせよ、CGっぽさを緩和するのに空気が重要なファクターらしいということは、今更なのでしょうが貴重な気付きでした。

Scatter Scale 0

Scatter Scale 0.100
ついでに被写界深度ON 焦点距離 35mm F値 8.0

夏休みの自由研究はまだ続きそうです。

  

Comments (0) 3DCG Tags: , , , , — Kyo ICHIDA @ 2022/08/27 03:29