読者です 読者をやめる 読者になる 読者になる

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

実装してみた

この記事は過去に書いた記事の続きです:

yuki-koyama.hatenablog.com

これまで流体シミュレーションを実装したことが一度もなかったため、一度ぐらいやってみようということで、最近流行りの Position-Based Fluids(のようなもの)の実装に挑戦してみました。

論文の読み直しと実装で合わせて4時間程度でした。もちろん論文の隅から隅まで理解して全てを実装したわけではなく、一番重要なアイデアの部分だけを実装しています。よく見ると挙動が怪しいので、どこか数式を間違えているのかもしれません。

本気でちゃんと作り込めば、以下のような流体シミュレーションがリアルタイムで動くはずです。

読んだ論文は以下の2つです。

Matthias Müller, David Charypar, and Markus Gross
Particle-based fluid simulation for interactive applications
SCA '03

Miles Macklin and Matthias Müller
Position based fluids
SIGGRAPH '13

論文の概要

背景1:Smoothed Particle Hydro-Dynamics (SPH) 法

ゲームなどで使われるリアルタイムの流体シミュレーションといえば SPH (Smoothed Particle Hydro-dynamics) に基づく手法が有名です。SPH という考え方自体は古くからあるのですが、2003 年に Muller らが SCA という会議で発表した論文をきっかけに、コンピュータグラフィクス分野で広く使われるようになりました。

SPH は簡単にいうと粒子間の影響を補間する手法です。

背景2:Position-Based Dynamics (PBD)

流体シミュレーションとは別の文脈で、同じく Muller らが 2006 年に提案した物理シミュレーションのための枠組みで PBD (Position-Based Dynamics) と呼ばれる手法があります。これは従来の陽的オイラー法よりも安定でかつ陰的オイラー法よりも高速な時間積分 (Verlet) を利用しており、NVIDIA PhysX, Maya, Houdini でも採用されています。

yuki-koyama.hatenablog.com

PBD は、物体の振る舞いをを用いて表現するのではなく、位置に基づく制約として表現する枠組みになっています。

Position-Based Fluids

今回の対象となる Position-Based Fluids もまた同じく Muller らによって 2013 年に提案されました。Position-Based Fluids を多少乱暴にいうと「PBD の枠組みの中で動く SPH 法」という感じです(流体の専門家には怒られるかもしれません)。SPH 法ではナビエストークス方程式から粒子に働くを表現していたのに対し、Position-Based Fluids では流体の非圧縮性を位置に基づく制約として表現することで粒子の振る舞いを決定します。

具体的には以下の制約を考えます。

\displaystyle{
C_i (\mathbf{p}_1, \ldots, \mathbf{p}_n) = \frac{\rho_i}{\rho_0} - 1
}

ここで i は粒子のインデックス、\mathbf{p}_ii 番目の粒子の位置、\rho_ii 番目の粒子周りの密度、\rho_0 はこの流体の通常の状態での密度です。できるだけ C_i=0 \:\:(i=1, \ldots, n) となるように粒子の位置を決定することで、流体の振る舞いを表現します。ここで、\rho_i を推定する部分で SPH のアイデアを用いています。

実装した感想

  • Unity はプロトタイピングにすごく便利。可視化の部分のコードを書かなくても Unity がやってくれる。
  • 近傍探索の高速化は必須。ナイーブな実装だと O(n^2) で効いてくるのですぐに計算が重くなってしまう。
  • GPU 化は必須。弾性体シミュレーションや剛体シミュレーションに比べ流体シミュレーションは自由度が大きくなりがちなため、すぐに計算が重くなってしまう。PBD や Position-Based Fluids は GPU-Friendly なので GPU 実装するべき。
  • 水面の復元を実装するのはすこし大変そう。特に論文では GPU 実装しているが、これは結構大変そう。
  • 本気で全てを実装すると数ヶ月はかかりそう。

最近の話題

Position-Based Fluids や SPH 法は次から次へと新しい論文が出てくるホットな分野です。いくつかピックアップして紹介します。

粘性に関する論文:

Tetsuya Takahashi, Yoshinori Dobashi, Issei Fujishiro, Tomoyuki Nishita, and Ming C. Lin.
Implicit Formulation for SPH-based Viscous Fluids
Eurographics 2015
Project page

複数の流体の扱いに関する論文:

Tao Yang, Jian Chang, Bo Ren, Ming C. Lin, Jian Jun Zhang and Shi-Min Hu.
Fast Multiple-Fluid Simulation Using Helmholtz Free Energy
SIGGRAPH Asia 2015.
Project page