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に分かれている。

  1. PipeLine? Browserはそのデータを管理するウィンドウである。 ParView?は同時に複数のデータを重ねて可視化できる。
  2. Object Inspectorは、それぞれのデータについてどのように可視化するかを指定する。

先ほど例に挙げたsample.vtkを読み込んで可視化してみる。

  1. File メニューから sample.vtkを開く。
  2. するとPipeline Browserにsample.vtkが追加されるが、そのままでは可視化されないので、Pipeline Browserでsample.vtkを選んだ状態で Applyをクリックする。
  3. 可視化領域にデータファイルで指定した形のボックスが現れる。ここでは立方体を指定したので、立方体が見えている。
  4. あとはいろんな可視化を試すことができる。たとえば、上のツールバーに「Outline」とあるプルダウンメニューがあるが、それを「Volume」にすれば、Volumeレンダリングができる。
  5. どの値をどの色にマップするか(Color Map)を修正したければ、Object Inspector のEdit Color Mapで指定する。
  6. Color Scale Editorは、使っているうちに使い方はわかるだろう(なげやり)。
  7. 他にも可視化手段には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の倍数にしておくこと。