流体・反応シミュレーション

APIC

Affine Particle-in-Cell

局所的な速度変化も粒子に保持する。

8 / 10

インタラクティブデモ

デモを準備しています…

APIC

ドラッグで視点を回転、Ctrl(⌘)+ スクロールでズーム。タッチ操作は 2 本指です。

ひとことで

粒子と格子で流体を解く PIC 法で、粒子に速度だけでなく「自分の周りで速度がどう変わっているか」(速度の傾き、アフィン行列)も持たせる方法です。Jiang らが 2015 年に発表しました。PIC は粒子と格子の間で速度を受け渡すたびに回転や細かい動きが失われ、FLIP はそれを保つ代わりにノイズが出ますが、APIC は回転(角運動量)を保ちつつ、PIC のように安定しています。

ゲームでの使いどころ

  • 渦の多い液体:かき混ぜた水の渦、排水口の渦巻き、回転する容器の中の液体など、回転を保ちたい場面。
  • MPM の標準的な受け渡し:雪や砂を扱う MPM(特に MLS-MPM)では、APIC の受け渡しがほぼ標準です。Taichi の有名な「88 行の MPM」もこの方式です。
  • FLIP の代わりに:FLIP のざわつきが気になる場合、APIC に置き換えると、落ち着いた水面と十分な動きを両立できます。

しくみ

PIC・FLIP と同じく、粒子 → 格子(P2G)、格子で圧力投影、格子 → 粒子(G2P)の順に進めます。違いは、粒子が速度 vp\mathbf{v}_p に加えて、速度の傾きを表す行列 Cp\mathbf{C}_p を持つことです。

格子 → 粒子:速度だけでなく、周りの格子点の速度から傾きも集めます。

vp=∑iwip ui,Cp=∑iui (∇wip)⊤\mathbf{v}_p = \sum_i w_{ip}\,\mathbf{u}_i, \qquad \mathbf{C}_p = \sum_i \mathbf{u}_i\,(\nabla w_{ip})^{\top}

粒子 → 格子:粒子の速度をそのまま配るのではなく、傾きを使って「その格子点の位置での速度」を予測して配ります。

ui=∑pwip (vp+Cp (xi−xp))∑pwip\mathbf{u}_i = \frac{\sum_p w_{ip}\,\big(\mathbf{v}_p + \mathbf{C}_p\,(\mathbf{x}_i - \mathbf{x}_p)\big)}{\sum_p w_{ip}}

PIC で回転が失われるのは、回転している粒子の速度を周りの格子点に同じ値のまま配ってしまうからです。格子点ごとに本来の速度は違う(回転の中心から見て向きが違う)のに、平均されて打ち消し合います。APIC は、粒子の周りの速度の変化(回転やせん断)を Cp\mathbf{C}_p で覚えておき、格子点ごとに正しい速度を配るので、回転が失われません。

FLIP と違い、「前の速度との差」を使わないので、ノイズがたまることもありません。

実装のポイント

  • 重みの勾配:線形(双線形)の重みなら勾配は簡単に求まります。2 次の B スプラインの重みを使うと、Cp=4Δx2∑iwip ui(xi−xp)⊤\mathbf{C}_p = \frac{4}{\Delta x^2}\sum_i w_{ip}\,\mathbf{u}_i(\mathbf{x}_i - \mathbf{x}_p)^{\top} という簡単な形になり、MPM ではこちらがよく使われます。
  • MAC 格子では成分ごとに:速度の横成分と縦成分は別の位置にあるので、それぞれの成分について傾き(2 成分ずつ)を持ちます。
  • メモリ:2 次元なら粒子あたり 4 個、3 次元なら 9 個の値が増えますが、計算量の増加はわずかです。

つまずきやすい点

  • FLIP ほど元気ではない:APIC は PIC と同じく数値粘性が小さくなるわけではなく、細かい乱れは FLIP より早く落ち着きます。しぶきの多い派手な水には、FLIP を少し混ぜることもあります。
  • 粒子が少ない所:水面など粒子が少ないマスでは、傾きの推定が不正確になります。
  • 初期条件:最初から回転している液体を置く場合、Cp\mathbf{C}_p も回転に合わせて初期化するか、最初の数ステップで格子から推定させます。

デモで試すこと

  1. 3 つの水槽で、同じ渦を PIC・FLIP・APIC で計算しています。左下の数値は、最初の回転(角運動量)がどれだけ残っているかです。PIC はすぐに回転を失い、FLIP と APIC は回転を保ちます。
  2. 粒子の色は最初の位置で決めた縞模様です。PIC では渦がすぐ止まるので縞があまり巻き込まれず、FLIP と APIC では渦に巻き込まれて混ざっていきます。FLIP は粒子の並びがざわつき、APIC はより整っています。
  3. 「題材」を「ダム崩壊」にすると、PIC は粘ってのっぺり、FLIP は細かく乱れ、APIC はその中間の動きになります。

参考資料

GPU Gems — Fast Fluid Dynamics Simulation on the GPU ↗

分野全体の資料で、この項目を直接扱っているとは限りません。