位置ベース流体(Position Based Fluids)†粒子法を用いた流体シミュレーションにおいて重要な要素となるのが 非圧縮性の強制である. 非圧縮性とは流体の密度が流れによって空間的にも時間的にも変化しないことを表し, 水のような液体はもちろん, 流速が音速より十分小さいならば空気も非圧縮性流体と考えることができる (ちなみに音速に近くなると空気は圧縮する, 音速に達した飛行機が発する衝撃波いわゆるソニックブームは空気が圧縮することで引き起こされる). 非圧縮性のための様々な方法(MPS,WCSPH,PCISPH,IISPHなど)が提案されているが, それらに比べて非常に高速かつ安定した計算が可能なのが位置ベース流体法(Position Based Fluids, 以下PBF)(1) である. PBFは位置ベース法(Position-based method)(2) の一種である. 位置ベース法では従来の力学ベースの方法と異なり,位置(物体の空間座標値)を満たすべき制約に従って直接変更する方法である 力学ベースでは支配方程式に従い加速度->速度->位置と変更していくため, それぞれで積分に伴う誤差の蓄積が発生するが位置に直接制約をかける位置ベース法はそれがない. ただし,頂点や粒子の位置関係に基づく制約をかけるためどちらかというと幾何学的な方法で, あまり物理的ではないのではないかという議論もある. 位置ベース法の基本†PBFの前に基本となる位置ベース法の考え方を説明する.
まず,移動する計算点 ![]() となる.2次以降の項を無視すれば ![]()
計算点 ![]() とする.
これを上の ![]() となる.求めた 位置ベース法の粒子法への適用†さて,話を粒子法の場合に戻そう.
まず,非圧縮性条件が満たすべき制約(Constraint)を考える.
流体が圧縮しないということはその密度 ここでは粒子法の一種であるSPH法を使ってある粒子 ![]() ここで
![]() となる.
この式で注意しないといけないのは となる. 式(2)と式(3)により各粒子のラグランジュ乗数 先ほども説明したように質量一定ならばこちらの 張力の安定化†SPH法では近傍粒子数が少ない場合に負の圧力が発生して粒子同士が過度に集まってしまう (particle clusteringやparticle stackingと呼ばれている)現象が発生する. PBFではこれを解決するためにMonaghan (3) が提案した以下のような項を式(4)に追加している. ![]() 式中のパラメータの値としては 境界粒子†前述のparticle stackingの問題は固体境界付近でも発生する. 粒子と固体境界の単純な衝突処理だけだと固体内に粒子が存在しないため, 境界付近に粒子が集まってしまう. それを解決する一つの方法が固体境界内に位置固定の粒子(境界粒子)を散布することである. 通常,境界粒子は有効半径に合わせて複数層配置するが, Akinciらの方法(4) を使えば,仮想的な体積を事前に計算しておくことで1層だけで済ますことができる. 境界に沿って粒子を配置した後,境界粒子だけを使って以下の仮想体積を計算して格納しておく. ![]() そして,PBFでも計算時に境界粒子の質量を 実装例†Visual Studio 2012 + CUDA7.5の環境で作成したコードは以下.
|