SPH法の可視化2
By K.Yoshimi
はじめに
以前の記事のSPH法の可視化では、 SPlisHSPlasHから出力された SPH法の計算結果をレイトレーシングを用いて可視化しました。
今回は、DualSPHysicsの結果に対して、リアリティのある動画を作成します。
DualSPHysicsは、粒子から抽出された自由表面も出力できるので、可視化する場合に便利です。
DualSPHysicsのインストール
DualSPHysicsのインストールは、 DualSPHysicsのダウンロード から、最新のバージョン(DualSPHysics_v5.0.5.zip(2022/07/01現在))を、情報を登録してからダウンロードし、 適当な場所に展開します。
この中には、Windows版とLinux版の両方の実行環境が含まれています。
DualSPHysics_v5.0/bin
├─linux
└─windows
この記事では、Windows版を使用します。
DualSPHysicsの例題
DualSPHysicsの例題は、examplesフォルダ内にたくさん用意されています。
今回は、ポンプ(ボリュートポンプ)の例題を使用します。まず、
DualSPHysics_v5.0/examples/main/13_Pump
フォルダに移動し、ショートカットのCommand Promptをダブルクリックしますと、コマンドプロンプトが立ち上がります。
計算の実行は、このプロンプト上で、batファイルを実行することで行います。
ここでは、GPU版のwCasePump_win64_GPU.batを使用します。
> wCasePump_win64_GPU.bat
とタイプし、Enterします。
計算には、そこそこ時間を要します。
❗ ご利用のGPUのメモリが2GB以下の場合,CPU版をご使用ください。 このポンプの例題では、2GBより多くのGPUメモリが必要です。
❗ CPU版は計算時間がかかりますので、可能であれば、メモリ4GB以上のGPUでの実行をお勧めします。
ポンプの例題の結果
ポンプの例題の計算が終わりますと
13_Pump\CasePump_out
というフォルダができ、その中に結果が保存されます。
出力された結果ファイルは、VTK形式(*.vtk)です。
このファイル形式は、 オープンソースの可視化ソフトウェアであるParaViewで表示できますので、 ParaViewで結果を確認してみましょう。
❗ ParaViewのインストーラーは 、ParaView Downloadから 最新版
ParaView-5.10.1-Windows-Python3.9-msvc2017-AMD64.exe(2022/07/02現在)
をダウンロードし、インストールしてください。
❗ ここでは、ParaViewの基本的な操作方法については、説明していません。
まず、ポンプ形状は、boundaryフォルダの下に保存されます。
13_Pump/CasePump_out/boundary
MotionPump_0000.vtk
MotionPump_0001.vtk
...
MotionPump_0300.vtk
Pumpfixed.vtk
ファイル名 | 説明 |
---|---|
MotionPump_***.vtk | ポンプの羽根車の300ステップ分 |
Pumpfixed.vtk | ポンプの羽根車以外(時間変動しない) |
この2種類のデータをParaViewに読み込み、時間を進めると下のように、 歯車が回転している様子を見ることができます。
これに、particlesフォルダの下にあるファイルPartFluid_****.vtkを追加します。
13_Pump/CasePump_out/boundary
PartFluid_0000.vtk
PartFluid_0001.vtk
...
PartFluid_0300.vtk
すると、水を表す粒子が歯車に巻き上げられ上昇していく様子が見られます。 ここでは、流速で色付けを行っています。
次に、粒子の代わりに、surfaceフォルダにある粒子から作られた自由表面のSurface_****.vtkを読み込みます。 今度は、水面の変動の様子をみることができます。 これも流速で色付けしています。
ParaViewによるリアリティのある可視化
今回のように、自由表面があるとリアリティのある可視化ができますので、試してみましょう。
このような場合、ツールとしては、BlenderなどのCG系のソフトウェアを使用することが多いですが、 科学技術系の可視化ソフトウェアであるParaViewでも、いくらかリアルな可視化を行えますので、その方法を紹介します。
以下では、ParaViewのRay Tracing機能を使用します。
羽根車以外のポンプ
まず、羽根車以外のポンプをRay Tracing機能を使用して描画してみます。
最初に、下記のように設定してみます。
- Piptline BrowserでPumpfixed.vtkを選択
- Propertiesタブ > Ray Tracing > Matrial > Metal_Titanium_brushedを選択

次に、PropertiesタブのRay Traced Renderingにおいて
- Enabled Ray Tracing:チェックを入れる
- Back End: OSPRay pathtracerを選択
- Samples Per Pixel: 5を入力 (描画が不鮮明な場合は数値を増やす)
こうしますと、以下のように、ポンプが金属っぽく表現され、ややリアリティが増します。

ただし、ここでは、ポンプの中の水の流れの様子を見たいので、Glass_Thick(厚いガラス)を設定し 透明にします。
- Piptline Browserにて、Pumpfixed.vtkを選択
- Propertiesタブ > Ray Tracing > Matrial > Glass_Thickを選択

こうしますと、確かにポンプの外形は透明になり、内部の水を見ることができます。
羽根車
羽根車は、回転している様子が見やすいよう、明るい色にしましょう。
- Piptline Browserにて、MotionPump_0を選択
- 色付け:Solid Colorを選択
- Edit Color Mapをクリック
- Pick Solid Colorにおいてオレンジ色を選択し、OK
- Propertiesタブ > Ray Tracing > Matrial > Noneを選択

水の色
水の色は、Glass_Water(水ガラス)を設定し、水らしく描画します。
- Piptline Browserにて、Surface_0を選択
- Propertiesタブ > Ray Tracing > Matrial > Glass_Water

パノラマ画像の背景
しかし、以上の設定では、あまりリアルティを感じられません。
このような場合は、背景に高解像度のパノラマ画像を貼り付けるのが1つの方法です。
📌 高解像度のパノラマ画像がない場合
手許に、高解像度のパノラマ画像がない場合は、 Poly Haven などから、4KのHDRのパノラマ画像をダウンロードしてください。
パノラマ画像が手に入りましたら、下記を設定し、パノラマ画像を背景に貼り付けます。
PropertiesタブのBackground
- Background Color Mode: Skyboxを選択
- Background Texture: Load… > パノラマ画像を指定
- Use Environment Lighting: チェックを入れる
PropertiesタブのRay Traced Rendering
- Background mode: Environmentを選択
- Light Scale: 2を記入(暗い場合は値を上げる)

このようにパノラマ画像を背景に設置すると、ガラスを透過する背景と、水面に映り込んだ背景により、リアリティが増します。
📌 パノラマ画像の設定については、パノラマ画像 にも記事を書きましたので、ご参考ください。
動画の保存
ParaViewでは、動画をmp4ファイルに保存できます。
動画を保存する前に、保存する動画の解像度の指定と、その解像度でどのように描画されるかの確認をPreview機能で行います。
- View > Preview > 保存する解像度を選択
- Preview画面で、描画される対象の位置をマウスで調整

📌 Preview画面の解除は、 View > Previewから、選択した解像度をもう一度クリックします。
最後に、動画を保存します。 その際、フレームレート(FPS: 1秒あたりフレーム枚数)も指定するとよいでしょう。
今回は、6秒の解析時間に対して、300枚の結果が出力されていますので、1秒に50フレームの動画にします。
- File > Save Animation…
- Save Animation Options窓のAnimation Options:50を入力
- OK

以上の操作により、下記のようなリアリティのある動画が保存できます。
おわりに
今回は、DualSPHysicsの結果に対して、リアリティのある動画を作成しました。
DualSPHysicsの結果には、粒子から抽出された自由表面も出力できますので、非常に便利であることが分かりました。
また、ParaViewでも、そこそこリアリな描画が可能であることが確認できました。