ParaView

ParaViewは科学技術可視化の並列化と対話操作のための、自由に利用できるオープンソースプログラムである。
ParaViewはデータセットのリモート可視化を可能にするクライアントサーバアーキテクチャを持ち、level of detail(LOD) モデルを生成することで大規模なデータセットに対しても対話的なフレームレートを維持する。ParaViewはVisualization Toolkit (VTK) ライブラリ上に構築されている。VTKとはデータ、タスク、パイプラインメカニズムのための可視化サービスを提供するライブラリのセットであり、ParaViewは共有メモリ／分散メモリ型のマルチコンピュータやクラスタ上でのデータ並列化を行うアプリケーションとして設計された。また、シングルコンピュータのアプリケーションとしても実行できる。

**概要**
ParaViewはオープンソース、マルチプラットフォームのデータ分析と可視化のためのアプリケーションである。ParaViewは様々なコミュニティで知られ、科学的データセットの分析、可視化のために利用されている。ParaViewのユーザーは定性的、定量的な方法を使用して、データ分析のための可視化を迅速に構築することができる。また、ParaViewのバッチ処理機能を使用したプログラミングや3Dの対話操作によるデータ探索ができる。
ParaViewは分散メモリ計算機資源を使用した、非常に大規模なデータセットの分析のために開発された。ParaViewは小規模データをラップトップ上で処理できるだけでなく、テラスケールのデータセットを分析するためにスーパーコンピュータ上で実行することができる。
ParaViewはターンキーアプリケーションであると同時にアプリケーションのフレームワークでもある。ParaViewの基礎となるコードは、迅速に垂直的アプリケーションを開発するために、そのすべてのコンポーネントが再利用できるように設計されている。この柔軟性によりParaViewの開発者は、特定の問題領域のための機能を持ったアプリケーションを迅速に開発することができる。
ParaViewは分散型、共有メモリ型の並列計算機、及び単一のプロセッサシステム上で動作する。Windows、macOS、Linux、IBM Blue Gene、Cray XT3、様々なUnixワークステーションクラスタやスーパーコンピュータ上で正常にテストされている。ParaViewの内部では、データ処理とレンダリングエンジンにVisualization Toolkit (VTK) を使用し、ユーザインタフェースはQtで書かれている。
ParaViewチームの目標は次のとおりである：
*オープンソース、マルチプラットフォームの可視化アプリケーションを開発する。
*大規模なデータセットを処理するために分散計算機モデルをサポートする。
*柔軟でオープン、直感的なユーザインタフェースを作成する。
*オープンスタンダードに基づく拡張可能なアーキテクチャを開発する。

**歴史**
ParaViewプロジェクトは、米国商務省のASCI Views計画による資金提供を受け、ロスアラモス国立研究所とKitware株式会社の共同作業として2000年に始まった 。最初のパブリックリリースは2002年10月に発表された。
Kitwareは、ParaViewとは別に、 Webベースの可視化システムを2001年12月に開発した。このプロジェクトは、米陸軍研究所のSBIRs(宇宙空間赤外線システム) フェーズ1、2によって資金提供を受け、最終的にはParaView Enterprise Editionとなる。このPVEEはParaViewのクライアント/サーバアーキテクチャの開発に大きく貢献した。
2005年9月、Kitwareとサンディア国立研究所、及びCSimSoftはParaView3.0の開発を開始した。ParaView3.0は2007年5月にリリースされた。 2013年6月、VTK 6.0をベースにしたバージョンであるParaView 4.0がリリースされた。バージョン5.0が2016年1月にリリースされ、このバージョンには新しいレンダリングバックエンドが含まれた。

**機能**
可視化機能 
*構造格子（一様直交格子、非一様直交格子、曲線格子）、非構造格子、多角形、画像、マルチブロックとAMRデータを扱う。
*すべての処理操作（フィルタ）はデータセットを生成する。これにより、どの操作結果に対してもさらなる処理を行うことができるし、その結果をデータファイルとして扱うこともできる。たとえば、抽出した切断面に対して、マスキングによってその表面の頂点を削減し、その結果にグリフを適用することができる。
*ベクトル場はグリフ（円錐、線分、球、２次元の各種グリフ）をデータセットの各点において適用することにより詳細を調べることができる。グリフは、スカラー、ベクトル成分またはベクトルの大きさで拡大縮小することができ、ベクトル場を使用して向き付けることができる。
*等高線と等値面は、スカラまたはベクトルのコンポーネントを持つすべてのデータ型から抽出することができる。結果には他の変数で色付けすることができる、またさらに処理を行うこともできる。構造格子データの等高線や等値面は、可能な場合には、その効率的なデータレイアウトを使用した高速で効率的なアルゴリズムにより抽出される。
*データセットの部分領域は次の方法で抽出できる。任意の平面を用いた切断処理またはクリップ処理（全てのデータ種類で可能）、しきい値判定を指定したセルの排除（全てのデータ種類で可能）、またはVOI（volume of interest）の指定（構造データのみ）。
*流線（Streamlines）は固定ステップか適応積分器を使って生成される。この結果は、点、線、チューブ、リボンなどで表示することができ、多くのフィルタで処理することもできる。粒子経路（Particle paths）は時間に依存するデータセットから抽出することができる。
*データセットの点は、スカラー（ユーザ定義の転位ベクトル）とベクトル（非線形の長方形格子では利用できない）で移動することができる。
*配列の計算では、新しい変数を既存の点やセルのフィールド配列を使用して計算することができる。スカラ演算、ベクトル演算が多数サポートされている。
*Python Programmableフィルタを使用した高度なデータ処理が可能であり、VTK、NumPy、SciPy、その他のPythonモジュールが使用できる。
*データは、点または直線沿いにプローブすることができる。この結果はグラフィカルかテキストで表示され、またさらに分析するためのエクスポートが可能。またデータの時間経過を抽出することができる（最小値、最大値、標準偏差などの統計情報も含む）。
*強力な選択メカニズムとスプレッドシートビューを使用し、定量的なデータ調査が可能である。点の選択や矩形領域の選択によるインタラクティブな選択メカニズムにより、データセットの重要な部分集合に焦点をあてることができる。
*スプレッドシートビューによりデータセット全体や選択された部分集合の生のデータを検査することができる。
*ParaViewはデフォルトで多くのデータソースとフィルタを提供している。どのVTKのソースやフィルタでも簡単なXMLの記述で追加が可能である（VTKは数百のアルゴリズムを提供している。
入力/出力とファイル形式 
*VTKを含む様々なファイル形式をサポート。VTKは新旧、パラレルを含むすべての種類、ASCII、バイナリの読み書きが可能。
*EnSight 6とEnSight Gold。並列、ASCII、バイナリを含むすべての種類。複数の部品（multiple parts）がサポートされており、各部分が別々にロードされて個別に処理ができる。読み取り専用。
*Plot3D。ASCII、CまたはFortranのバイナリ、複数ブロックをサポート。ブランキングは現在、部分的にサポート。
*STLとBYUを含む様々な多角形のファイル形式。デフォルトでは、読み込み専用だが、XML記述を書くことによって他のVTK writersを追加することができる。
*他の多くのファイル形式をサポート。
*すべてのVTKのソースまたはフィルタは、シンプルなXML記述を書くことによって追加することができる（VTKは多くのreaderを提供している）。
*ParaViewはオープンソースであるため、ユーザーは簡単に自分のreaderやwriterを追加することができる。
ユーザーとの対話 
*Qtアプリケーションフレームワークに基づいた直感的で柔軟なインタフェース。
*3次元ウィジェット（マニピュレータ）を使用し、3Dビュー上で直接対話操作することにより多くのフィルタのパラメータを変更することができる。たとえば、ユーザーは流線 (streamline) フィルタのシードラインを、コントロールポイントをクリックして新しい場所にドラッグすることにより操作することができる。
*コンパクトなユーザインタフェースデザイン。デフォルトでは、全ての重要なツールがメインウィンドウにある。これにより散らかったデスクトップ上でしばしば厄介な、多数のウインドウを配置する必要がなくなる。また、インスペクタをメインウインドウから切り離すこともできる。
*大きなデータセットを扱う場合でも、level-of-detail（LOD）モデルを使用し、インタラクティブなフレームレートを維持する。ユーザーは対話操作中に縮小バージョンのモデルを表示するためのしきい値（点の数）を決定する（モデルのサイズも調整可能である）。対話操作が終わると、もとの大規模なモデルが描画される。
大規模データと分散コンピューティング 
*ワークステーションクラスタ、可視化システム、大規模なサーバ、スーパーコンピュータなどを含む、MPIを用いた分散共有メモリシステム上での並列実行。
*ユーザインタフェースはクライアント/サーバモードを使用し、別のコンピュータ上で実行される。
*ParaViewはデータ並列モデルを採用し、データは異なるプロセスで処理されるよう、断片に分割される。ほとんどの可視化アルゴリズムは並列実行時でも変更がいらない。またParaViewはもゴーストレベルをサポートし、断片のつなぎ目が不変な結果を生成する。ゴーストレベルはプロセス間で共有する点やセルであり、周辺の情報を必要とするアルゴリズムによって使用される。
*分散レンダリング（各ノードで結果をレンダリングしたのち、デプスバッファを用いて合成される）とローカルレンダリング（結果のポリゴンは一つのノードに集められ、ローカルにレンダリングされる）をサポートしている。またこの両方を組み合わせてることもできる（例えば、level-of-detailモデルをローカルレンダリングするが、完全なモデルは分散レンダリングにすることも可能）。これにより、小さいデータでの作業のパフォーマンスを犠牲にすることなく、大きなデータのスケーラブルなレンダリングを提供している。
*分散レンダリング、およびタイル状のディスプレイ（tiled-display）は、サンディア国立研究所のIce-Tライブラリを使用して行われている。
スクリプトと拡張性 
*ParaViewは、シンプルだが強力なPython言語を使用して、完全にスクリプト化されている。サーバーマネージャとよばれるParaViewのデータエンジンは、Pythonのインタフェースを介して完全にアクセスすることができる。Pythonによってエンジンに加えられたすべての変更は、自動的にユーザインタフェースに反映される。
*ParaViewはPythonのインタフェースを使用してバッチアプリケーションとして実行することができる。バッチモードを使用して、IBMのBlue GeneとCray XT3を含むスーパーコンピュータで正常にParaViewを実行することに成功している。
*分散データ処理は、Pythonプログラマブルフィルタを使用して、Pythonで行うことができる。このフィルタはNumPyとSciPyをシームレスに使用できる。
*追加モジュールは、インタフェースのXML記述を書くか、またはC++のクラスを書くことで追加することができる。XMLインタフェースによってユーザーやデベロッパは、特別なコードの作成や再コンパイルをすることなく、独自のVTKフィルタをParaViewへ追加することができる。

**使用例**
2005年、サンディア国立研究所において、 NVIDIAとKitwareは複数のプレスにスケーラブル可視化に関してParaViewを用いたレンダリングの成果を発表した。この発表では、ParaViewを使用して秒間80億ポリゴン超のレンダリングレートを達成するというスケーラブル性能のブレークスルーが報じられた。
*ParaViewはOpenFOAMの可視化プラットフォームとして使用されている。
*ノースカロライナ大学チャペルヒル校の可視化科学課程 。
*オークリッジ国立研究所国立計算科学センターでは大規模データセットの可視化にParaViewを使用している 。

**関連項目**
 CMake- Insight Segmentation and Registration Toolkit- Scientific visualization- VisIt- Visualization Toolkit

**参照**

**外部リンク**
  様々な領域におけるParaviewの使用-  ParaViewギャラリー-  ParaView刊行物-  ParaViewが脳の循環血液モデリングに使用された-  Paraviewの可視化についてのFlickrページ-  Vimeo上のKitwareの動画