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
13/8/2022

UFO精霊馬作ってみた

  

Comments (0) やってみた Tags: , — Kyo ICHIDA @ 2022/08/13 01:45