H16 新機能 VDB Project Non-Divergent 2


どうも篠島です。前回に引き続き VDB Project Non-Divergent SOP の説明です。

 

今回のサンプルファイルです。
Non_Divergentce_Advect.zip

 

VDB Project Non-Divergent SOP を使ってサンプルシーンを作ってみました。サンプルシーンを開いてもらえればすぐわかると思うので、文字での説明は簡潔に済ませます。Points from Volume SOP でポイントを作り、そのポイントに対しWrangleで @P を反転させた結果をVelocityとして使います。これにより、自分のポイントから原点へ向かうVelocityが出来上がります。あとはそれを Fluid Source SOP によってポイントアトリビュートが持っている Velocity から Velocity フィールドを作ります。Add Noiseの所でノイズを加えることでいい感じのVelocityになります。この中心へ向かっているVelocityで言わば気体が圧縮されている様なVelocityを表現してみました。すなわちマイナスのDivergenceがあるVelocityです。

 

 

Fluid Source は通常のボリュームしか作ってくれないので、Convert VDB SOPで VDB ボリュームにします。

 

次に VDB Vector Merge で3つ合ったボリュームを一つにまとめます。Floatのフィールドが3つ合ったものを合わせて一つのVectorフィールドにしているわけですね。Infoを見ると表示が float から vec3s になっているのが分かるかと思います。

 

そして VDB Project Non-Divergent SOP を繋げて、Group の所でVelocityを指定します。すると、お互いぶつかりあうように中心へ向かっていたVelocityが横にそれているのが確認できます。

 

 

Divergenceが取れたVelocityが出来たので、VDB Advect Points SOP でこのVelocityを元にポイントを移動させてみます。Pyroシミュレーションと違い、VDB Advect Points SOP は元のポイントに対して1回だけAdvect してポイントを移動するのであって、既に移動されたポイントに対して再び移動させる・・・ということができません。毎フレームポイントが移動するようなシミュレーションがしたいので、Solver SOPの中に VDB Advect Points SOP を入れます。

 

Divergence が有りの状態の Velocity でポイントを動かした場合、ポイントが中心へ固まってしまうのが分かります。

 

Divergence を取り除いた Velocity でポイントを動かすと、ポイント自体がお互い密集しないように動いてるのが分かるかと思います。ちなみにポイントが端っこに移動して動きが停止しているのはVelocityフィールドよりも外側に移動してしまい、Velocityの影響を受けないためです。