ParaViewの使い方
概要
フリーかつ高度な可視化ツール、ParaViewの使い方とデータの用意の仕方を解説する。
インストール
データ形式
フォーマット
ParaViewのデータはVTKと呼ばれるフォーマットを用いる。VTKはXML形式と、ベタなテキストファイル形式(レガシーフォーマットと呼ばれる)があるが、ここではテキストファイル形式について説明する。
VTKフォーマットは、以下のような形式になっている
# vtk DataFile Version 1.0 conf000.vtk ASCII DATASET STRUCTURED_POINTS DIMENSIONS 40 40 40 ORIGIN 0.0 0.0 0.0 ASPECT_RATIO 1.0 1.0 1.0 POINT_DATA 64000 SCALARS scalars float LOOKUP_TABLE default 以下データ・・・・
最初の行はコメント、次がそのデータの名前、三行目はレガシーフォーマットであることをあらわす。DATASETは、今回は気にしなくてよいので、おまじないとして書いておく。大事なのはその次から。
- DIMENSIONS これは、三次元のそれぞれの格子点の数を示す。例では40*40*40となっている。もちろん立方体以外でも任意の平行六面体が指定可能。
- ORIGIN 中心点をどこに置くかを示す。特に希望がなければ 0.0 0.0 0.0 を推奨。
- ASPECT_RATIO x,y,zのそれぞれのスケールを指定する。たとえば横に長いシステムを縮めて立方体にしたり、その逆もできるが、とりあえずシミュレーションの結果をそのまま表示したければ、1.0 1.0 1.0で良い。
- POINT_DATA データ数これは以下のポイントのデータ数。基本的にはDIMENSIONで指定した三つの数を掛けた数になるはず(ここでは64000=40*40*40)。POINT_DATAとASPECT_RATIOの間には空行が必要。
- SCALARS scalars float, LOOKUP_TABLE default この二つも意味はあるのだが、とりあえずおまじないとして書いておく。
- データあとはひたすらデータをテキストで吐けばよい。密度プロットなら、座標が(0,0,0)から(LX-1,LY-1,LZ-1)までのLX*LY*LZ個をならべる。ならべ方は、たとえば密度データが三次元配列 density[LX][LY][LZ]に入っていたなら、単純に
for(int ix=0;i<LX;ix++){ for(int iy=0;i<LY;iy++){ for(int iz=0;i<LZ;iz++){ std::cout << density[ix][iy][iz] << std::endl; } } }
でOK。
サンプル
VTKファイルのサンプルとして、一様な球(Solid Sphere)のデータを吐くRubyスクリプトを載せておく。この出力結果を sample.vtkとする。
grid = 10 dim = grid*2+1 points = dim**3 r = 0.8 puts "# vtk DataFile Version 1.0" puts "test" puts "ASCII" puts "DATASET STRUCTURED_POINTS" printf "DIMENSIONS %d %d %d\n",dim, dim, dim puts "ORIGIN 0.0 0.0 0.0" puts "ASPECT_RATIO 1.0 1.0 1.0" puts puts "POINT_DATA " + points.to_s puts "SCALARS scalars float" puts "LOOKUP_TABLE default" for ix in -grid..grid for iy in -grid..grid for iz in -grid..grid x = ix.to_f/grid y = iy.to_f/grid z = iz.to_f/grid v = r*r - (x*x + y*y + z*z) v = 0 if v < 0 puts v.to_s end end end
ParaViewの使い方
ParaViewを実行すると、デフォルトではおそらく以下のような画面が出る。
画面は、大きく分けて上部のツールバー、右の可視化部分、左のPipeline BrowserとObject Inspectorに分かれている。
- PipeLine? Browserはそのデータを管理するウィンドウである。 ParView?は同時に複数のデータを重ねて可視化できる。
- Object Inspectorは、それぞれのデータについてどのように可視化するかを指定する。
先ほど例に挙げたsample.vtkを読み込んで可視化してみる。
- File メニューから sample.vtkを開く。
- するとPipeline Browserにsample.vtkが追加されるが、そのままでは可視化されないので、Pipeline Browserでsample.vtkを選んだ状態で Applyをクリックする。
- 可視化領域にデータファイルで指定した形のボックスが現れる。ここでは立方体を指定したので、立方体が見えている。
- あとはいろんな可視化を試すことができる。たとえば、上のツールバーに「Outline」とあるプルダウンメニューがあるが、それを「Volume」にすれば、Volumeレンダリングができる。
- どの値をどの色にマップするか(Color Map)を修正したければ、Object Inspector のEdit Color Mapで指定する。
- Color Scale Editorは、使っているうちに使い方はわかるだろう(なげやり)。
- 他にも可視化手段にはSliceやCropなどがあるが、試してみればだいたい使い方はわかると思う(さらになげやり)。
動画の作り方
ParaViewは、連続したファイルから動画を作成することができる。まず、
conf000.vtk conf001.vtk conf002.vtk conf003.vtk ...
と、vtkファイルを連番で作成する。これをParaViewで開こうとすると、conf..vktと表示され、一括で開くことができる。
その状態で可視化の手法やレイアウトなどを決めたら、File メニューのSave Animationでアニメーションが保存できる。
いきなりaviを吐くこともできるが、なぜかWindows Media Playerで開くのに失敗するため、jpgやpngで保存して、他の動画作成ツールを使ったほうが安全。なお、mpgにする場合は、画像サイズを縦横ともに8の倍数にしておくこと。