hamaronの日記

Tech & Research

論文紹介 - Highly Adaptive Liquid Simulations on Tetrahedral Meshes -

SIGGRAPH 2013 流体セッションの論文紹介2本目です。
数少ない日本人著者による論文です。
実は今年出たSIGGRAPHの論文で一番最初に読みました。

参照元
Highly Adaptive Liquid Simulations on Tetrahedral Meshes

この論文ではPIC(Particle In Cell)法とFLIP(FLuid Implicit Particles)法の新しいアダプティブな手法を提案しています。

前提知識

PICとFLIPは粒子法と格子法を組み合わせて、非圧縮性流体の支配方程式であるナビエ・ストークス方程式の数値解を計算する手法です。これらは前回紹介したPosition Based Fluids(PBF)法のように粒子を用いて流体の動きを表現しますが、非圧縮性を適用するための圧力の計算を格子上で行います。粒子と格子の両方を用いてシミュレーションを行うため、粒子と格子の間で速度情報のやり取りが発生します。PICとFLIPの最も簡単なアルゴリズムは次のようになります。


1. 各粒子の速度を最も近い格子点に振り分ける(この時点では速度を割り振られた格子点の持つ速度は非圧縮性を満たしていない)

2. 格子上で圧力の計算を行う(非圧縮性を満たすような圧力を求める)

3. 計算された圧力を用いて、格子上の速度を更新する(格子点の持つ速度が非圧縮性を満たす)

(PICの場合) 4. 格子上の速度を各粒子に振り分ける

(FLIPの場合) 4. 格子上の速度の変化量(1→3の変化量)を各粒子に加える

5. 粒子の速度に従って粒子の位置を更新する

6. シミュレーションが終わるまで1~5の繰り返し


上記の通り、PICとFLIPの違いは格子上で計算した非圧縮場の速度を粒子にどう配分するかという点のみです。詳しい説明は割愛しますが、同じ条件でシミュレーションを行うと、PICではネバネバとした液体、逆にFLIPはさらさらとした液体が生み出されます。したがって、もっともらしい水の動きを表現するために、2つの手法で得られた結果をある割合で混ぜ合わせる、PIC/FLIPという手法が存在し、本論文でもPIC/FLIPが用いられています。

本論文の著者は昨年の論文Preserving Fluid Sheets with Adaptively Sampled Anisotropic Particlesで、液面からの距離に応じて粒子の大きさを変更することで計算の効率化を図る手法を提案していましたが、圧力の計算を行う格子はすべて大きさの等しいボクセル(MAC格子)を用いていました。従って、粒子の数を減らして移流のステップ数を減らすことは出来ても、圧力計算の効率化までは未達でした。

提案手法の概要

上記の圧力計算の問題を解決するため、この論文では空間の離散化手法をこれまでのボクセル(MAC格子)から四面体メッシュへと変更しています。また圧力計算はこれまでの有限差分法的アプローチでなく、有限要素法のようなエネルギーの最小化問題として考えています。四面体メッシュを用いることで、MAC格子と比較して圧力を求める際の未知数変数が少なくなり、圧力計算を効率的に行うことができます。加えて、四面体の切り分け手法が既に確立されているため、格子の大きさの変更を容易に行うことができるようになります。したがって、格子の数自体も削減することができ、さらに未知変数を減らすことができるようです。また論文中では、四面体メッシュを用いた際の二次精度の境界条件の離散化手法についても述べられています。

メッシュの大きさは、サイジング関数(Sizing Function)を用いて決定されます。これは

  • 粒子が液面からどれくらい離れているか
  • カメラからその粒子が見えるか
  • 液面の曲率がどれくらいなのか

等の項目が評価されます。粒子の大きさはメッシュのサイズが決まった後に計算されます。すべての粒子を調べて、大きい四面体内部の中の粒子は大きく、小さい四面体内部の粒子は小さくなるように、マージと分割を繰り返します。

提案手法の面白いところは、液面上の粒子の大きさが均一でなくばらばらになっている点です。既存手法では液面からの距離に応じて粒子の大きさが決定されていたので、液面の粒子の大きさはほぼ均一に保たれていました。この論文のビデオを見るとわかるのですが、同じ液面上でも障害物の近くだったり、液面の変化が激しい箇所ほど粒子が細かくなっていき、逆に細かい挙動を必要としない地点では大きな粒子が用いられています。今回のような粒子を用いた流体シミュレーションでは、不連続な粒子の集まりから、実際の流体のような連続的な液面を再現する必要があります。本論文では、液面上にある異なる大きさの粒子から液面を構築する手法も提案しています。簡単に説明すると、「ある距離以内にある3つの粒子の組に外接する平面を構築する」という作業を液面にあるすべての粒子に対して行います。

この論文では、粒子と格子の両方をアダプティブにできたという点で、PIC/FLIPの完全なアダプティブシミュレーションが達成されています。しかしながら、メッシュを切り分ける処理が並列化できない点が高速化のネックになっているようです。

個人的には、カメラから見えない障害物の裏側等で大きいメッシュ・粒子が用いられていて、サボれるところはサボっている感じがとても面白いと思います(ビデオの0:45~)。