論文読み: Position Based Fluids (SIGGRAPH '13)

昨日 (2013/4/25) にわかに twitterfacebook で話題になった SIGGRAPH 論文があったので、それについてメモしておこうと思います。

今回扱う論文について

昨日話題になったのは NVIDIA による以下の論文(のデモビデオ)です。

Miles Macklin, Matthias Mueller Fischer
Position Based Fluids
SIGGRAPH '13

実は時間がなくてまだ論文概要しか読んでいません。もう少し時間的に余裕が出てから本文を精読していきたいと思います。そのときはこの記事に読んだ内容を追記していこうと思います。

動画

どちらも公開から数時間にも関わらず (論文の添付動画としては) 驚異的な再生数を誇っています。

概要

リアルタイムで計算可能な粒子ベースの流体 (水など) シミュレーションです。

流体シミュレーションには基本的には

  • オイラー的手法 (空間を離散化する ~ グリッドベース手法)
  • ラグランジュ的手法 (要素を離散化する ~ 粒子ベース手法)

があります*1が、この手法は後者にあたります。

この論文が扱うのは粒子の動きをどう生成するかという部分であって、粒子から水面を生成する部分や、水面をリアルな見た目で描画する部分はまた別の研究ということになります。

また GPU を使った高速な計算手法となっています。

Position Based Fluids の手法の特徴

この手法の最大の特徴は Position Based Dynamics (以下 PBD) に基づいた流体シミュレーションであるということです。論文タイトル (Position Based Fluids) も PBD を意識したものとなっています。

論文の内容は読んでいないのですが、PBD については良く知っているので、簡単にまとめておきます。

PBD (Position Based Dynamics) とは

PBD は比較的新しい物理シミュレーションのためのフレームワークで、特にゲーム向きの物理エンジンの構築に役立つ考え方です。

PBD では rigid body は勿論、弾 (塑) 性体の solid, shell, rod などのシミュレーションが可能でした。今回は初めて PBD で fluids (流体) を実現したことになります。

PBD は以下の論文で初めて明示的に提案されました。

M. Müller, B. Heidelberger, M. Hennix, J. Ratcliff
Position Based Dynamics
VRIPhys '06
著者のページ

PBD は一般的な Force-based (つまり質点に作用する力を元に質点の速度を求め、更にその速度を用いて質点の位置を決定していくような方法) なダイナミクスとは異なり、オブジェクトの位置の制約を直接的に扱う (Position-based) ことができます。これによって、シミュレーションが数値的に安定になる他、衝突の扱い (Collision handling) が容易になるという利点があります。

なお、この論文では更に PBD に基づいた新しい布モデル (布のシミュレーション手法) を提案しています。

また PBD の上で動作する手法としては、以下の Oriented Particles という研究が有名です。この手法を使うことによって、変形可能物体 (ゴムのような材質のものや、布や髪の毛など) を統一的な方法でリアルタイムで計算できます。まさにゲーム向きの手法と言えます。

M. Müller, N. Chentanez
Solid Simulation with Oriented Particles
SIGGRAPH '11
著者のページ

また余談になりますが、PBD が PhysX ライブラリで全面的に採用されているという話を聞いたことがありますが、真偽は確かめていません*2

非常に最近の話題ですが、PBD に関するサーベイ論文 (この分野を俯瞰的にまとめた記事) が EUROGRAPHICS '13 の STARs (state-of-the-art reports) で発表される予定です。既に PDF はダウンロード可能なので、初めて PBD を勉強したい人はこのサーベイ論文を初めに読むと良いと思います。

Jan Bender, Matthias Müller, Miguel A. Otaduy and Matthias Teschner
Position-based Methods for the Simulation of Solid Objects in Computer Graphics
EUROGRAPHICS '13
著者のページ

PBD の手法の説明

以下が PBD の疑似コードになります。ここでのオブジェクトは質点の集合として表されており、オブジェクトはシーン中に複数存在していると考えてください。

1ステップだけ物理時間を進める {
	各質点にかかる力を計算する;
	力を元に各質点の速度を更新する;
	速度を元に各質点の理想位置を計算する;
	オブジェクト間の衝突をチェックする;
	loop {
		衝突を正しく扱うように理想位置を弄る;
		各オブジェクトの幾何的な制約を反映するために理想位置を弄る;
	}
	理想位置を元に速度を修正する。
	理想位置を実際の位置として適用する。
	摩擦と跳ね返りの影響を速度に反映する。
}

理想位置という見慣れない言葉が出てきていますが、これは最終的な位置の更新を安定に計算させるための一時バッファのようなものだと考えてください。

繰り返しますが、ポイントは、速度の時間積分として位置を計算するのではなく、位置が確定したあとに速度を逆算するところです。これによって数値計算的に安定したシミュレーションを行うことが可能です。位置を直接弄ることから position-based という名前になっています。


今回はとりあえず以上です。Position Based Fluids の詳しい内容についてはいつか追記したいと思います。

追記 (2015/10/12)

実装しました。yuki-koyama.hatenablog.com

*1:流体シミュレーションにはあまり詳しくないので、もしかしたら不適切な言い方をしているかもしれません。

*2:誰か知っている人は是非教えて下さい。