Houdini Advect Calendar2018 20日目の記事に投稿します。
ビンに水を貯めました。FLIPです。
メッシュ化してません。
テーマと問題点
この作例のテーマは、「水を貯める」です。
HoudiniのFLIPでは、水を貯めようとすると、なぜか水かさが減ります。
こんな感じ。
満タンまで、入れても半分くらいに減っちゃってます。
減る割合は一様ではなく、パーティクル一粒のサイズ(Particle Separation)が小さいほど、また水の動きが大きいほど、よく減ります。
原因は理解していませんが、このように器の中に水を貯めようとすると必ず減ります。
そもそも、本当に水は減っているのでしょうか?
Node Infoで調べてみると、水が溜まってからのパーティクル数は変わっていませんでした。(Reseedの設定は無効にしてパーティクル数を数えています)
どうやら、水のパーティクル数が減っているのではなく、ギュッと圧縮されてパーティクル間の密度が高くなったことで、結果的に水かさが減ったように見えているようです。
なぜこうなるのでしょうね? わかりませぬ。
ともかく困るので、対策します。
対策
いくつか対応策は考えられますが、ここではFLIP Solver(DOP)のRessedingパラメータを使いました。
Reseedingは、密度が増えすぎた所のパーティクルを削除したり、逆に足りないパーティクルを追加してくれたりする機能です。
マニュアル曰く、「パーティクル数を大きく下げたボクセル内に新しいパーティクルを作成し、 パーティクルが非常に密集したボクセル内のパーティクルを削除します」とのこと。
また、「Reseeding の値を非常に高い値に設定すると、非常に飛沫のある流体シミュレーション内で時間と共にボリュームが増える流体にすることができます」ともあるので、今回も使えそうです。
デフォルトで有効になっているのですが、それでも水かさが減ってしまうので、もっと攻めたパラメータ設定にしてみます。
パラメータ”Surface Oversampling”=10に、”Birth Threshold=1″設定しました。
設定の意味としては、”Birth Threshold”を高くしパーティクルが追加されやすくして、”Surface Oversampling”を高くして追加されるパーティクルの数を増やしています。
(多分その認識であっているはず。Reseedの効果について実はふわっとした理解のまま使ってます)
この設定で、シミュレーションしたのがこちら。
水かさが減るのが解消できました。
めでたし、めでたし。
「注意」
ここで試した方法は、万能ではないと思っています。
水の動きに緩急があるような場合では、水が増えたり減ったりしておかしなことになりそうですし。
何年か寝て待てばSideFXが万能薬を開発してくれると信じてます。
Houdini Advent Calender2018 12月20日枠
https://qiita.com/advent-calendar/2018/houdini
コメント