Blenderの流体シミュレーションで「コップに水を注ぐ/後編」
※記事製作時のバージョン:Blender3.2
簡単な見本を作りながら、流体シミュレーションの使い方を紹介していくシリーズ。
第10回は、「コップに水を注ぐ」やり方・後編です。
今回の記事は長いので、前・後編に分けています。
<前編>
- コップのモデリング
- シミュレーションの基本設定
<後編>
- コップから水が漏れる現象の対処法
- コップに水が食い込む現象の対処法
- 流体に気泡を追加する方法
前編を未読の方はこちらのリンクからどうぞ。
では、前編の続きから始めます。
4. 「表面の厚さ」を設定する
まず、コップ(コリジョン)の「表面の厚さ」を「0.5」にします。
これで水のコップへの食い込みが軽減されて、自然な見た目になります。
表面の厚さ(Surface Thickness)
コリジョンに追加される「見えない厚み」を設定するパラメーターです。
この数値を大きくするほどコリジョンの実質的な厚みが増え、元のメッシュから離れた位置で流体が跳ね返るようになります。
今回の見本では「表面の厚さ」を「0.5」にしていますが、液体とコリジョンの食い込み具合はシミュレーションの設定によって変化するので、状況に合わせて調整します。
「表面の厚さ」の単位についてはマニュアルにも明記されていませんが、ドメインのボクセルサイズが基準になっているようです。
「表面の厚さ」を「1」にすると、ボクセルサイズと同じ厚みがコリジョンに追加されます。
※ボクセルサイズは、「ドメインオブジェクトの寸法」と「分割の解像度」によって決まります。
5. コリジョン専用のオブジェクトを作製する
「表面の厚さ」を大きくするとコリジョンの実質的な厚みが増えるので、水漏れも軽減されます。
コリジョンオブジェクトの元の厚さによってはこの段階で水漏れしなくなることもありますが・・・今回は少し残っていますね。
これ以上「表面の厚さ」を大きくすると、今度はコップの中で水が宙に浮いてしまい不自然な見た目になるので、その方法は使えません。
そこで、完全に水漏れを無くすためにコリジョン専用のオブジェクトを用意します。
1. コップを選択 >「Shift + D(コピー)」>「Esc(コピー後の移動状態を解除)」
これで、元と同じ位置にコップのコピーが追加されます。
コピーしたコップは中の面だけを残して、外側を削除します。
2. コピーしたコップを編集モードに切り替え
3. 側面を選択 >「X(削除)」>「頂点」
オブジェクトモードに戻り、モディファイアーで厚みをつけます。
4. 「ソリッド化」モディファイアーを追加
- 幅:0.4
この厚みが流体シミュレーションでも働くようにします。
5. モディファイアーの順序を「ベベル」>「ソリッド化」>「流体」に変更
これで、完全に水が漏れなくなります。
※ソリッド化の「幅」の値は、「水漏れしない程度の充分な幅」で適当に設定したものです。実際はもっと低い値でも大丈夫だと思います。
このオブジェクトはコリジョン専用なので、レンダリング非表示にします。
6. アウトライナーのカメラマークを「OFF」にする
※3Dビューポートでの表示・非表示は、必要に応じて切り替えてください。
以上で水漏れの補修は完了です。
6. パーティクルで気泡を作る
これで、液体の動きについての問題点は解消できました。
マテリアルや背景などの設定をすると、下の画像のようになります。
最後に、より水らしく見えるようにするため、気泡を追加します。
1. ドメイン >「物理演算プロパティ」>「パーティクル」>「パーティクルをベイク」をクリック
これで、流体に追加のパーティクルが生成されます。
ここで生成されるパーティクルは次の3種類です。
- 飛沫(Spray):空中に発生する水しぶき
- 泡沫(Foam):水面に発生する泡
- 気泡(Bubbles):水中に発生する泡
各パーティクルはチェックボックスをONにすると有効になり、画面に表示されます。
ここでは気泡を使用するので、「気泡」をONにします。
-------- 2022/11/04 追記 --------
ここでは「先にパーティクルをベイクしてから、飛沫・泡沫・気泡にチェックを入れる」という手順で操作していますが、その後確認したところ
「先に飛沫・泡沫・気泡にチェックを入れないと、パーティクルがベイクできない」
ということが分かりました。
しかし、上の手順で操作している画像が残っているのが謎です。
今同じバージョンで操作しても再現できないので、この記事を作製した時に何が起こったのか・・・?
ともかく、ここの操作は
[気泡をONにする]>[パーティクルをベイクする]
の順に置き換えてください。
-------- 追記終了 --------
パーティクルは、そのままではレンダリングに表示されません。
レンダリングで気泡を表示するには、パーティクルをオブジェクトに変換します。
2. 適当な位置に「UV球」を追加
3. UV球 >「スムーズシェーディング」
4. UV球のマテリアルを下の画像のように設定
※「あれ、グラスシェーダーで設定しないの?」と思うかもしれませんが、後で詳しく説明します。
気泡のパーティクルをUV球に変換します。
5. ドメインのパーティクルプロパティから「Bubbles」を選択し、「レンダー」のパラメーターを次のように設定
これで気泡がUV球に変換され、レンダリングで表示されるようになります。
しかし・・・コップの中が真っ白! これ全部気泡です。
これでは気泡が多すぎるので、パーティクルの発生量を減らします。
ベイクしたパーティクルはパラメーターを変更できないので、一度ベイクを破棄します。
6. ドメイン >「物理演算プロパティ」>「パーティクル」>「パーティクルを解放」をクリック
これでパラメーターを操作できるようになります、
7. ドメイン >「物理演算プロパティ」>「パーティクル」のパラメーターを次のように設定
- 波頭パーティクルサンプリング:10
- 混入空気パーティクルサンプリング:5
- パーティクル最大寿命:15
※パーティクルサンプリング:1フレーム当たりに発生するパーティクルの最大数
これで気泡の量が減り、自然な見た目になります。
以上ですべての設定は完了。
構図を決めてレンダリングすれば完成です。
※気泡を変換するためのUV球は、カメラから見えない位置に移動するか、アウトライナーのカメラマークを「OFF」にしてレンダリング非表示にします。
Point:気泡のマテリアルをグラスで作らないワケ
上の手順では、気泡(UV球)のマテリアルを放射と透過で作りました。
が、気泡というのは「液体の中にある空気」なので、現実的に設定するなら「UV球の面を反転させて、グラスマテリアルを設定する」という作り方になるはずです。
しかし、実際にそのように設定すると、逆に不自然な見た目になってしまいます。
なぜこのような結果になるのでしょう?
これは推測ですが――
- 現実の気泡は非常に細かく複雑な形状になるため、光の乱反射が発生し、白く輝くような見た目になる。
- ここでは均一なUV球で気泡を表現しているため、そのような乱反射は生じない。
つまり「マテリアルは現実的でも、形状が現実的ではない」ことが原因だと思います。
(Cyclesのコースティクス表現の限界で、水やガラスが暗めになるのも一因かもしれません。)
このように現実に基づいた設定よりも、トリック的に作ったマテリアルの方が自然な見た目になることもあります。
以上、「コップに水を注ぐ/後編」でした。
おまけ:謎の光る水のマテリアル