This explanation is currently available in Japanese.
ひとことで
材料を粒子(物質点)で表し、粒子ごとに「どれだけ変形したか」を覚えておき、力の計算を格子の上で行う方法です。応力の決め方を変えるだけで、水、ゼリー、砂、雪、泥、布まで、同じ仕組みで扱えます。ディズニーの映画『アナと雪の女王』(2013)の雪のシミュレーションで一躍有名になりました。
ゲームでの使いどころ
- 雪・砂・泥:足跡が残る雪原、崩れる砂山、ぬかるみに沈む車輪。固まったり崩れたりする粉体は、MPM の最も得意な分野です。
- 異なる材料の混在:水とゼリー、砂と水(泥)など、性質の違う材料が同じ場面でぶつかり合う表現。
- 破壊と変形:粘土のようにちぎれる、ゼリーのように弾んで戻る、といった大変形。
- リアルタイム化:MLS-MPM(2018)と GPU の発展で、数十万粒子をリアルタイムで動かすデモやゲームも出てきています(Taichi の「88 行の MPM」が有名な入門例)。
しくみ
MPM は、PIC・FLIP と同じく粒子と格子を行き来しますが、粒子が変形勾配 (元の形からどれだけ伸び・縮み・ねじれたかを表す行列)を持つのが特徴です。
- 粒子 → 格子(P2G):各粒子の質量と運動量を、周りの格子点に配ります。このとき、粒子の変形から求めた応力(内部の力)も、格子点への力として一緒に配ります。受け渡しには APIC の方式がよく使われます。
- 格子で動かす:各格子点で、運動量を質量で割って速度にし、重力を加え、壁や地面との衝突を処理します。
- 格子 → 粒子(G2P):格子の速度と、その傾き を粒子へ戻し、粒子を動かします。
- 変形を更新する:粒子の変形勾配を、周りの速度の傾きで更新します。
材料による違い
応力は から計算します。例えば固定共回転モデルでは、 から回転 を取り除いた「純粋な変形」に比例した力が働きます。
- ゼリー(弾性体): をそのまま覚えるので、変形すると元に戻ろうとします。
- 水:形を覚えず()、体積の変化 だけに反応します。 を毎回 にリセットします。
- 雪(弾塑性体): の伸び縮み(特異値)を一定の範囲に制限し、範囲を超えた分は「元に戻らない変形」(塑性)として捨てます。押し固められた雪ほど硬くなるよう、捨てた分に応じて硬さを上げます。
- 砂:摩擦角に基づいて、せん断の限界を超えた変形を捨てます(ドラッカー・プラガー塑性)。
実装のポイント
- 2 次の B スプラインの重み:粒子は周りの 3×3(3 次元は 3×3×3)の格子点とやり取りします。この重みを使うと APIC の傾き が簡単に求まり、MLS-MPM では応力の計算と P2G を 1 つにまとめられます。
- 特異値分解(SVD): から回転を取り出す、伸び縮みを制限する、といった処理に 2×2 または 3×3 の SVD を使います。2×2 なら閉じた式で求まります。
- 時間刻み:固い材料ほど細かい時間刻みが必要です(音速の条件)。1 フレームを数十のサブステップに分けるのが普通です。
- GPU 向き:P2G の書き込みが衝突する(同じ格子点に複数の粒子が書く)ので、アトミック加算や、粒子をセル順に並べ替える工夫をします。
つまずきやすい点
- 固い材料は重い:ヤング率を上げると、必要な時間刻みがどんどん小さくなります。ゲームでは、見た目が破綻しない範囲で柔らかめにします。
- 格子より細かい部分は表現できない:薄い布や細い棒は格子の解像度に依存するので、粒子と格子の細かさの釣り合いが大切です。
- 材料のパラメータ:雪の圧縮・伸びの限界や固まりやすさは、少し変えるだけで粉雪から湿った雪まで性質が大きく変わります。
デモで試すこと
- 左から水(青)、ゼリー(ピンク)、雪(白)のかたまりが落ちてきます。水は流れて広がり、ゼリーは弾んで形を保ち、雪はつぶれて固まりながら崩れます。すべて同じ計算で、応力の決め方だけが違います。
- 「硬さ(ヤング率)」を上げると、ゼリーと雪がより硬く、変形しにくくなります。
- 「雪の固まりやすさ」を 0 にすると、雪は押されてもあまり固まらず、崩れやすくなります。上げると、押し固められた部分が硬い塊になります(暗く見える粒子ほど押し固められています)。
- 「落とす」で何度でもやり直せます。