SPH法の可視化
By K.Yoshimi
コンピュータ・グラフィックスの分野では、粒子ベースの流体解析がよく使用されます。
粒子ベースのシミュレーション手法には、DEM法(Distinct Element Method)や、SPH法(Smoothed Particle Hydrodynamics)、 MPS法(Moving particle semi-implicit method)などがあります。
これらの手法は、メッシュを切る必要がなく、並列化との相性も良いので、GPUなどを使用した高速な計算が可能です。 また、剛体面との相互作用も柔軟に扱えるなどの利点があるため、 冷却水の流れや、エンジン内の解析、血流の解析などにおいては、 メッシュベースのシミュレーションよりも好まれる場合があります。
また、近年ではグラフィックス・ハードウェアの進展により、大規模な流体解析を 粒子ベースでリアルタイムで行えるようになってきました。 しかしながら、流体の可視化をリアルタイムで行うのは簡単ではありません。 例えば、レイトレーシングベースの流体可視化する手法は、高品質に描画できますが、計算量が多いため、 リアルタイムに使うには、まだ厳しい状況です。
そのため、リアルタイムに流体を描画する際に、小さな球面や点スプライトを使用して、流体を模擬することが多いのが現状です。
この記事では、SPH法で計算された流体解析の結果の可視化の現状を、もう少し調べてみます。
SPlisHSPlasH
SPH法のソースコードは、GitHubで検索すると分かりますが、たくさん公開されています。
たとえば、SPlisHSPlasHは、 インストールとサンプルのテストまでを簡易に行うことができるので、ここで簡単に、使用法を説明しましょう。
SPlisHSPlasHのインストール
SPlisHSPlasHのインストールは、Python版を使用すると容易です。Pythonの環境は Anacondaなどを インストールして、整えておくと良いでしょう。
Python環境が整いましたら、Pythonへのパスの通ったコマンドプロンプトやシェルを立ち上げ、 次のコマンドで、SPlisHSPlasHのインストールします。
pip install pysplishsplash
SPlisHSPlasHの起動とサンプルの実行
インストールが済みましたら、SPlisHSPlasHを下記のコマンドで起動します。
splash
すると、SPlisHSPlasHをインストールしたアドレスに、ファイル選択の窓が開かれますので、 SPlisHSPlasHのシーンを定義したJsonファイルを選択します。
まず、シーンの置いてあるフォルダに移動します。WindowsのAnaconda環境であれば以下のようなフォルダになります。
***/Anaconda3/envs/pysplishsplash/data/Scenes
このフォルダの中から、ダムブレークのシミュレーションを行うためのJsonファイルである"DamBreakModel.json"を選択しますと、 以下のようなGUIが立ち上がります。

ビューアの操作は、マウスやキーボードから行います。
- 拡大/縮小:Ctrl+左ボタン、または、“Aキー”/“Yキー”
- 移動:Ctrl+右ボタン
シミュレーションの実行と停止の切り替えは、“General"にある、“Pause"のチェックの切り替え、または、キーボードの"Spaceキー"で行います。 また、シミュレーションをリセットするためには、キーボードの"Rキー"を押します。
- 実行/停止:“Spaceキー”
- リセット:“Rキー”
解析結果については、partioやvtkフォーマットで出力できますので、“Export"で、出力したいものにチェックを入れておくと
***/Anaconda3/envs/pysplishsplash/output/DamBreakModel
に出力されます。
では、実行してみましょう。
ダムブレークがリアルタイムで実行され、流体の様子が描画されます。 SPlisHSPlasHも、点スプライトを使用して、高速に流体が描画されるのが分かります。
レイトレーシングを使用した流体の描画
レイトレーシングを使用した流体の描画は、コストが大きいため、通常はリアルタイムでは行わず、後処理として行います。
SPlisHSPlasHの場合は、SPlisHSPlasHのライブラリを利用して、非常に写実的な動画も作成することができるようです。(後で試してみたいです…)
また、SPlisHSPlasHの結果をvtk形式で出力しておくと、商用の可視化ソフトウェアである EnSightで描画することも可能です。
オープンソースの可視化ソフトウェアであるParaViewを使用すると、 点スプライトの他、しぶきは難しいですが、いくらか写実的な動画をレイトレーシングで作成することもできます。
以下が、その例ですが、レイトレーシングの方は作成時間が結構かかりました。
実際の作成方法はSPHのレイトレーシング可視化 をご参照ください。
リアルタイムの流体可視化
最近は、リアルタイムに流体を描画する方法が出てきており、例えば、 スクリーン空間流体レンダリングのような手法は、 オープンソースの可視化ライブラリのVTKにある vtkOpenGLFluidMapperから利用できるようになっています。
この手法は、医療用のシミュレーションを行うためのツールキット iMSTKに実装されており、下図のように、 大腿動脈の血流をリアルタイムに描画することができます。 ただ、この手法は、光の反射・屈折に対する非物理的な計算を含むため、まだ不自然な感は否めません。
iMSTKもオープンソースであり、また、容易にコンパイルとテストができますので、試してみるのもよいでしょう。
今後
GeForce RTXカードがリアルタイムのレイトレーシングを導入したとのことで、 今後は、SPHのような粒子データに対しても、リアルタイムに写実的な描画が可能になっていくかもしれません。 期待しましょう。
SPH法の可視化の別記事もご覧ください。