以前に流体のシミュレーションについて、Blenderを使ったものを記事にしましたが、今回はそれの続編として、流体と弾性体の連成シミュレーションについて、Blenderで実施したので、記事にしたいと思います。
前回の記事
一応こんな感じにできました。
流体シミュレーションについて
Blenderで流体のシミュレーションをするのは、すごく簡単で、流体を計算する領域を作成し、流体を発生させる物体を作成すればよいです。
ただ、このままでは流体のみのシミュレーションしかできず、流体の中で物体が移動するような、いわゆる連成シミュレーションはできないと思います(できたらすみません)。
私が今回やりたかったのは、物体が水にぶつかって移動したり、水の上をぷかぷか浮かんだりするシミュレーションでした。
そこで、色々試してみましたので、その備忘録を記載します。結論としては、無料のアドオンである「Molecular+」を使用すると流体と弾性体の連成シミュレーションができました。
物理演算の流体シミュレーション
一番簡単な方法で流体シミュレーションを行ってみました。作成したレイアウトは以下です。シンプルに流出口から水を発射して、その先にある立方体が動くか、シミュレーションを行いました。
流体ドメインの設定はこちら、
立方体の設定はこちら、サイズは1m四方です。
流出口の設定はこちら、
床の設定はこちら、
設定のパラメータは試行錯誤的に実施したので、物理的な意味はないと思ってください。
結果がこちら、流体の計算はできており、立方体をエフェクターに設定したおかげで障害物として機能していますが、立方体自体は動きません。
流体(パーティクルシステム)によるシミュレーション
流体の表現方法として、物理演算を使う以外に、パーティクルシステムを使う方法があります。パーティクルシステムでは、流体計算の手法にSPH法を使っているみたいです。
そこで、立方体はこのままにして、流出口の物理演算の流体を削除し、あらたにパーティクルシステムを設定し、流体が出るように変更しました。
パーティクルシステムの詳しい使い方はこちらがわかりやすいです。
また、先ほど使用した流体のドメインがいらなくなったため、削除し同じ場所に壁を作成しました。以下にレイアウトを載せておきます。
流体(パーティクルシステム)の設定はこちら、
レンダーのオブジェクトはメタボールを作成し、付与しています。メタボールの設定はこちら、
壁の設定はこちら、底面以外は下図の左で、底面は立方体とのやりとりがあるため、下図の右側のようにリジッドボディを付与しました。
結果はこちら。計算の都合上、パーティクルシステムの流体の粒子数を少なくしているので、つぶつぶ感はありますが、流体の計算はできていますが、やはり、立方体は動きませんね。
Molecular+によるシミュレーション
何か方法はないかと色々調べた結果、無料のアドオンとして、分子構造をシミュレーションする「Molecular+」というものがあると知りました。物体をつぶつぶの集合体で表現するもののようで、ゼリーのようなプルプルした物体などもシミュレーションできるみたいです。
つまり、流体と物体をどちらも、このMolecular+のつぶつぶによって表現することで、相互影響が計算できるのではないかということです。
まずはMolecular+をアドオンにインストールします。
ダウンロードはこちらからの自分のPCにあったものを選んでください。ちなみに私は「Blender 4.3.0」、「Windows 11 Pro」、「Python 3.11.9」の環境で「molecular-plus_1.17.21_311_win.zip」でインストールできました。
ちなみにPythonのバージョンは下図のように、Blenderの「スクリプト作成」タブの左下のコンソールの画面に表示されています。
アドオンのインストールは、下図のように、「編集」>「プリファレンス」>「アドオン」の右上の三角矢印からディスクからインストールでできます。
レイアウトは以下の通りです。
Molecularは例えば立方体の場合は以下のように、立方体を作成し、「サイドバー」にある「Molecular+」タブから「3D Grid」を選択することで簡単に立方体がつぶつぶになります。つぶつぶのサイズは同じ「サイドバー」の「Inspect」の「ボクセルサイズ」で変更できます。
流体の場合は同様の方法で、「Emitter」を選択することで「流出口」になります。
Molecular+はつぶつぶなので、パーティクルシステムから設定が行えます。
立方体のパーティクルシステムの設定はこちら、
また、立方体の物理演算からつぶつぶ同士の摩擦や引張の設定ができ、今回はパラメータを以下のように設定しました。
流出口のパーティクルシステムの設定はこちら、
メタボールの設定は、前回と同じです。
以上各パラメータを設定し終わったら、「サイドバー」>「Mulecular+」>「Simulate」でシミュレーションを開始します。
結果がこちら。おおー!やっと物体が移動するようになりました!めでたしめでたし。
注意として、パーティクルシステムとMolecular+のサイドバーがうまく、連動しない場合があり、そのときは再度立方体や流出口を作成しなおしたり、Blenderを再起動したりすることで治ることがありました。
また、立方体の物理演算プロパティでコリジョンをオフにしないと見えない立方体が残り続けたので、コリジョンは削除しておいてください(下図左:コリジョンあり、下図右:コリジョンなし)。
浮力も計算できる?
流体と物体の相互影響が計算できましたが、浮力も計算できるかやってみました。あらかじめ領域に立方体を配置し、上から雨を降らせて水を溜めました。
結果だけ。なんとなく、浮かんでいるようにも見えます。
浮力は上面と下面の圧力差で生じるので、そのあたりが、つぶつぶを細かくすることで表現できて入れば、自然とシミュレーションでも表現できる気がします。そんなに厳密な計算が必要ないならこれでも良い気がします。
その他の設定など
マテリアル
水のマテリアル
水のマテリアルには以下のものを使いました。こういうの初めてだったので、なにがなにやら・・・
立方体のマテリアル
立方体はこちらを使いました。
ライトの設定
ライトは「サン」を使いました。
レンダリングプロパティの設定
レンダリングの設定は以下にしました。「レンダーエンジン」は「Cycles」だともっと綺麗になりますが、いかんせん時間がかかるため、「EEVEE」にしました。「EEVEE」で水を表現するのが難しくて苦労しました。
まとめ
今回は、BlenderでMolecular+を使って、流体と弾性体の連成シミュレーションを実施できることがわかりました。
これだけの動画がオープンソースだけでできるのは、感動です。PCスペックがもっとあれば、レンダリング方法を変えたりすることで、もっと綺麗な映像が作れそうなので、流体を使った何か面白いモデリングが思いついたらまたやってみたいと思います。
コメント