hamaronの日記

Tech & Research

論文紹介 - Position Based Fluids -

SIGGRAPH2013 流体系論文紹介第1回目

公開されたばかりの頃に、はてブなどでも話題になっていた、"Position Based Fluid"の紹介です。

参照元
Miles Macklin's blog » Publications

Position Based Fluids - Supplemental Video - YouTube

これがリアルタイムでレンダリングまでされているという事ですから、驚きです。


この論文ではこれまで布や弾性体などのシミュレーションに用いられていた、PBD(Position Based Dynamics)という手法を水などの非圧縮性流体に適用できるように拡張された手法が提案されています。PBDは現在の位置と速度を用いて次の物体の位置を計算するのではなく、現在の位置からバックトレースで速度を決定するという手法です(間違ってるかも)。PBDはタイムステップを大きくとってもシミュレーションが破綻しにくいため、リアルタム性が要求されるゲーム業界等で用いられているようです。

前提知識

論文中では、提案手法の比較対象としてSPH(Smoothed Particle Hydrodynamics)が登場しています。SPHは流体を粒子の集まりで表現する「粒子法」の一種で、CGの分野のみならず、工学的にもよく知られた手法です。SPHは質量保存則などの物理的性質も満たしており直感的にも理解しやすいのですが、流体の非圧縮性を担保するため、シミュレーションを進める度に粒子密度の計算を行い、粒子分布の修正を行う必要があります(粒子同士が近づき過ぎていれば離し、離れ過ぎていれば近づける)。ここで、SPH特有の問題が生まれます。液面や固体などの境界付近では計算に必要な粒子の近傍粒子が不足し、その結果として不自然な結果を生んでしまうのです。この問題を解決するには大きく以下の2通りのアプローチがあります。

1. 十分小さなタイムステップでシミュレーションを行う
2. 多くの粒子を用いる

これらの方法は、いずれもシミュレーションに要する時間を増加させるアプローチであるため、リアルタイムシミュレーションには不向きです。

論文の概要

ここからがこの論文の要点です。
提案手法ではSPHとPBDを組み合わせることで、こういった問題に対処しリアルタイムのシミュレーションを可能にしています。基本的なアルゴリズムはPBDと同じであるため、大きなタイムステップを取りつつもシミュレーションの安定性は担保しています。

具体的には、

1. 前述の非圧縮性を適用するためにSPHの密度計算とPBDの位置修正を組み合わせ、反復法(ヤコビ法)により密度の計算を行う。

2. 負の圧力によって粒子が集まってしまわないように、人工的な圧力を導入する

3. vorticity confinementを用いて不自然なエネルギーロスを抑える

4. SPHの人工粘性を用いて粒子同士の相互作用をよりリアルにする

といった感じです。

提案手法はすべてのステップが並列化可能であるため、GPGPUのような並列アーキテクチャ上で効率的に実行させることができます。本論文での実装はCUDAを用いているとのことです。また、リアルタイム性が重視されているため、密度計算を行う反復法では、解の収束を待つのではなく、固定の回数だけ反復を繰り返して、得られた値を解とする、という手法をとっています。言い換えると、この反復回数を増減させることは、非圧縮性とパフォーマンスのトレードオフになります。


Limitation
1. 境界と粒子が接触した際に、境界にそって粒子がたまってしまう
2. ヤコビ法では粒子数が増えるほど収束に時間がかかってしまう。
3. 人工圧力が空間の解像度とタイムステップに依っているので個々のパラメータを調整するのが難しくなってしまっている。

Future Work
1. Limitation(3)で挙げたパラメータをそれぞれ独立させる
2. 筆者らは布と流体のインタラクションのプロトタイプを作っているところ。