8. 結果の保存

この章では、ParaView で可視化結果を保存するさまざまな方法について説明します。視覚化プロセスを通して生成される結果には、イメージとレンダリング結果、フィルタによって生成されたデータセット、他のレンダリングアプリケーションに読み込むためのシーン表現、およびアニメーションから生成されたムービーが含まれます。

8.1. データセットの保存

ソース、リーダー、フィルタなど、任意のパイプラインモジュールによって生成されたデータセットを ParaView に保存できます。データセットを paraview に保存するには、まず Pipeline ブラウザでパイプラインモジュールを選択してアクティブソースにします。複数の出力ポートを持つモジュールの場合は、目的のデータセットを生成する出力ポートを選択します。データセットを保存するには、File > Save Data メニューまたは Main Controls ツールバーの pqSave32 ボタンを使用します。キーボードショートカット CTRL + S (または + S )を使用することもできます。 Save File ダイアログ(図 8.1)では、ファイル名とファイル形式を選択できます。 使用可能なファイル形式のリストは、保存しようとしているデータセットのタイプによって異なります。

../_images/SaveFileDialog.png

図 8.1 paraviewSave File ダイアログ

使用するファイル名とファイル形式を受け入れると、paraviewConfigure Writer ダイアログボックスを表示できます( 図 8.2 )。このダイアログでは、書き込みプロセスをさらにカスタマイズできます。このダイアログに表示されるプロパティは、選択したファイル形式によって異なり、 Write All Time Steps を使用できるか、出力ファイルに書き込む属性を選択できます。

../_images/ConfigureWriterDialogCSV.png

図 8.2 データセットをcsvファイルとして保存するときに表示される paraviewConfigure Writer ダイアログ

pvpython でも、以下のようにデータセットを保存できます。

# Saving the data using the default properties for
# the used writer, if any.
>>> SaveData("sample.csv", source)

# the second argument is optional, and refers to the pipeline module
# to write the data from. If none is specified the active source is used.

# To pass parameters to configure the writer
>>> SaveData("sample.csv", source,
             Precision=2,
             FieldAssociation='Cells')

pvpython は、paraview と同様に、ファイル拡張子と書き込み対象として選択されたデータセットタイプに基づいてライターを選択します。確かに、ライターが利用できるオプションを見つけるのは難しいかもしれません。最善の方法は、paraviewPythonトレース 機能を使用して、生成されたサンプルスクリプトをリファレンスとして使用することです( 1.6.2 章)。実行時の問題を回避するには、トレース時にPythonスクリプトで使用するのと同じ種類のデータセットと同じファイルフォーマットを使用してください。

8.2. レンダリングされた結果の保存

結果をレンダリングするビュー(これには、 SpreadSheet View)は、標準イメージ形式(PNG、JPEG、TIFF、BMP、PPM)のいずれかでのイメージ(またはスクリーンショット)の保存をサポートしています。 一部のビューでは、PDF、X3D、VRMLなどの複数のフォーマットでの結果のエクスポートもサポートしています。

8.2.1. スクリーンショットの保存

paraview のビューからレンダリングイメージを保存するには、File > Save Screenshot メニューオプションを使用します。選択すると、ファイルダイアログが表示され、スクリーンショットを保存するファイルパスと形式を選択できます。イメージファイルを選択すると、 Save Screenshot Options ダイアログ (図 8.3) が表示されます。このダイアログボックスでは、どのイメージをどのように保存するかを制御するさまざまなパラメータを選択できます。

../_images/SaveScreenshotOptions.png

図 8.3 paraview に保存するスクリーンショットをカスタマイズするために使用する Save Screenshot Options ダイアログ

可視化設定にアクティブなタブが1つしかない場合は、図 8.3 に示すオプションが表示されます。使用可能なオプションは次のとおりです。

  • Image Resolution : ターゲットイメージの解像度をピクセル単位で指定します。デフォルトでは、現在のビュー寸法に設定されています。必要に応じて変更できます。解像度が現在の解像度より大きい場合、ParaViewは、タイル表示( tiling )を使用して、複数のステージでイメージ全体をレンダリングします。信頼できる結果を得るには、現在の縦横比を表示します。Tools > Lock View Size Custom を使用すると、ビューサイズを適切なアスペクト比にロックできます。

  • Font Scaling : 現在の解像度よりも大きな解像度が指定された場合、フォントの拡大/縮小方法を制御できます。Default Scale fonts proportionally は、アスペクト比が維持される限り、WYSIWYGを達成しようとします。これは、画面より高いDPI(またはPPI)表示を目的とした画像の保存に適しています。 Do not scale fonts を使用すると、フォントの拡大縮小を回避し、ピクセル単位のサイズを現在画面に表示されているサイズと同じに保つことができます。これは、同じピクセル解像度の大きなディスプレイを対象としたイメージを保存する場合に適しています。

  • Override Color Palette : このドロップダウンを使用して、スクリーンショットを保存するためだけにカラーパレットを変更することもできます。

  • Stereo Mode : このオプションでは、サポートされているステレオモードのいずれかを使用してイメージを保存できます。

  • Transparent Background : ファイル形式がサポートしている場合は、このオプションをチェックして、現在の背景色ではなく透明な背景色でイメージを保存できます。

  • Format : ファイル保存ダイアログで選択したファイル形式を表示します。

圧縮レベルなどのオプションが異なるフォーマットの場合、フォーマット固有のオプションが Save Screenshot Options ダイアログに表示されます。PNG形式には、0(圧縮なし)から9(最大圧縮)の範囲の Compression Level オプションがあります。JPEG形式のオプションは、0から100の範囲の Quality と、プログレッシブJPEGとしてファイルを保存できる Progressive です。TIFFファイル形式には、 NonePackBits 、および Deflate}の値を指定できる ``Compression オプションがあります。BMPファイル形式にはオプションはありません。

アクティブなタブに複数のビューがある場合、図 8.4 に示すように、Save Screenshot Options ダイアログにはさらにいくつかのオプションがあります。

../_images/SaveScreenshotOptionsMultiView.png

図 8.4 アクティブなタブに複数のビューがある場合に、Save Screenshot Options ダイアログの追加オプションが使用できます。

  • Save All Views : これをチェックすると、アクティブなタブのすべてのビューがUIとまったく同じレイアウトで保存されます。チェックしないと、アクティブビューのみが保存されます。

  • Separator Options : 生成されたイメージのビュー間に描画されるセパレータを制御します。 Separator Width は、 Separator Color と同様にピクセル単位で指定できます。

スクリーンショットを pvpython に保存するには、SaveScreenshot を使います。

# Save a screenshot from a specific view.
>>> myview = GetActiveView()
>>> SaveScreenshot("aview.png", myview)

# Save all views in a tab
>>> layout = GetLayout()
>>> SaveScreenshot("allviews.png", layout)

# To save a specific target resolution, rather than using the
# the current view (or layout) size, and override the color palette.
>>> SaveScreenshot("aviewResolution.png", myview,
        ImageResolution=[1500, 1500],
        OverrideColorPalette="Black Background")

いつものように、paraviewPythonトレース を使用して、特定のスクリーンショットイメージの保存に使用するメソッドの正確な形式をトレースできます。

8.2.2. シーンのエクスポート

使用可能な場合は、paraviewFile > Export View メニューオプションを使用して、サポートされている複数の形式でビュー内の可視化結果をエクスポートできます。 Render View (または類似するビュー)の場合は、Cinema Database、EPS、PDF、PS、SVG、POV、VRML、WebGL、X3D、およびX3DB形式を使用できます。エクスポートするファイルを選択すると、paraviewExport Options ダイアログをポップアップして、データセットの保存と同様にエクスポートする形式のパラメータを設定できるようにします( 8.1 章)。

また、pvpython からエクスポートする場合は、次のような形式になります(繰り返しますが、Pythonトレース を使って正しい形式を見つけるのが一番簡単です)。

>>> myview = GetActiveView()
>>> ExportView('/tmp/sample.svg', view=myview,
               Plottitle='ParaView GL2PS Export',
               Compressoutputfile=1)
# the arguments after 'view' depend on the exporter selected.

8.3. アニメーションの保存

../_images/SaveAnimationOptions.png

図 8.5 アニメーションの保存をカスタマイズするために使用する、paraviewSave Animation Options ダイアログ

アニメーションを一連のイメージまたはビデオファイルとして保存するには、File > Save Animation メニューオプションを使用します。ファイルの保存ダイアログが表示され、ファイルを保存する場所と使用する形式を選択できます。ファイルとフォーマットを選択すると、 Save Animation Options ダイアログが表示されます( 図 8.5)。このダイアログは、ほとんど Save Screenshot Options ダイアログのクローンです( 図 8.3)。オプションとして、図 8.4 で追加されたマルチビューオプションや、フォーマット固有の圧縮オプション、アニメーション固有のパラメータなどがあります。 これらは次のとおりです。

  • Frame Rate : アニメーションを一連のイメージではなくビデオファイル(AVIまたはOgg)として保存する場合、生成されるビデオのフレームレートを指定できます。一連の画像として保存する場合は効果がありません。

  • Frame Window : アニメーション全体を保存せずに、特定のウィンドウだけを保存する場合は、これを使用して保存するフレームの範囲を指定できます。タイムステップを含む時間データセットからアニメーションを生成する場合、通常、フレームはタイムステップ番号に対応します。

このダイアログを受け入れると、出力ファイルの場所と形式を選択できます。使用可能なファイル形式には、AVI、Ogg(利用可能な場合)ビデオ形式、PNG、JPEG、TIFFなどのイメージ形式があります。イメージとして保存する場合、ParaView は、指定したファイル名に接尾辞としてフレーム番号を使用して連続番号が付けられた一連のイメージファイルを生成します。

アニメーションを pvpython に保存するには、SaveAnimation を使います。この関数の引数は SaveScreenshot と同じですが、アニメーション固有のオプションのパラメータが追加されています。

>>> SaveAnimation('animation.avi', GetActiveView(),
      FrameWindow = [1, 100],
      FrameRate = 1)

8.4. 状態の保存

表示設定によって生成された結果を保存するだけでなく、すべてのパイプラインモジュール、ビュー、レイアウト、およびそれらのプロパティを含む表示パイプライン自体の状態を保存できます。これは、Application State または単に state と呼ばれます。paraview では、File > Save State... メニューオプションを使用して状態を保存できます。逆に、保存した状態ファイルをロードするには、File > Load State... を使用します。

paraview に保存できる状態ファイルには、ParaView state file (*.pvsm)Python state file (*.py) の2種類があります。PVSMファイルは、XMLベースのテキストファイルで、人間が判読して機械で読み取ることができますが、初心者にとっては必ずしも人間に優しいとは限りません。ただし、状態ファイルを読んで意味を理解する予定がない場合は、PVSMがアプリケーション状態を保存する最も堅牢で信頼性の高い方法です。状態を保存してから手動で変更したい場合は、Pythonトレースを使用するとUIでPythonスクリプトとして実行するアクションをトレースできるため、Python状態ファイルを使用する方がよいでしょう。一方、Pythonの状態ファイルでは、アプリケーションの現在の状態全体がPythonスクリプトとして保存され、paraview または Python Shell で使用できます。

../_images/SaveStateDialog.png

図 8.6 paraviewSave State File ダイアログ

Stateファイルをロードするには、File > Load State... メニューを使用します。 Stateファイルをロードすると、現在の表示状態に影響することに注意してください。

../_images/LoadStateOptions.png

図 8.7 データファイルの検索オプションを表示する、paraviewLoad State Options ダイアログ

この方法でPVSMファイルをロードすると、データファイルを検索する場所を尋ねられます。使用可能なオプションは、 Use File Names From StateSearch files under specified directoryChoose File Names の3つです。 Use File Names From State を選択すると、ParaView は状態ファイルに保存されている絶対パスでデータを検索します。 Search files under specified directory を選択すると、ParaViewが状態ファイル内の絶対パスでファイルを検索する前にファイルを検索するディレクトリを参照するオプションが表示されます。デフォルトでは、コンピュータ間で状態ファイルを簡単に共有できるように、状態ファイルの場所が設定されます。 Choose File Names を選択すると、状態ファイル内のファイル名のリストが表示され、それぞれを個別にオーバーライドできます。

../_images/LoadStateOptionsDataDirectory.png

図 8.8 Search files under specified directory オプションを示す、paraviewLoad State Options ダイアログ

PVSM状態ファイルは、次のように pvpython に保存/ロードできます。

>>> from paraview.simple import *

# Save the PVSM state file. Currently, this doesn't support
# saving Python state files.
>>> SaveState("sample.pvsm")

# To load a PVSM state file.
>>> LoadState("sample.pvsm")

stateで使用されるすべてのデータファイルを特定のディレクトリのデータファイルに置換するには、次の形式を使用します。

>>> LoadState("sample.pvsm",
              data_directory="[directory path]",

              # optionally, restrict to specified directory
              restrict_to_data_directory=True)

状態ファイルで使用されているファイル名を明示的にオーバーライドする場合、関数シグネチャは少し複雑になります。Pythonトレース機能を使用して、特定の状態ファイルの関数呼び出しを生成する方が簡単な場合があります。次の形式になります。

>>> LoadState("sample.pvsm",
              filenames = [

                # a `dict` object for each reader in statefile to update.
                {
                  "name": "[reader name as shown in the pipeline browser]",

                  # if multiple readers have the same name, 'id' may be used
                  # instead of 'name' where the value is "id" used in the
                  # state file for this reader.

                  # filename properties and their overridden values for this
                  # reader, for example:
                  "FileName" : "foo.vtk",
                },

                # multiple such `dict`s can be specified.
              ])

# here's an example
>>> LoadState(statefile,
              filenames=[
                  {
                      'name' : 'can.ex2',
                      'FileName' : data_dir + 'can.ex2',
                  },
                  {
                      'name' : 'dataset',
                      'FileName' : data_dir + 'disk_out_ref.ex2',
                  },
                  {
                      'name' : 'timeseries',
                      'FileName' : [ data_dir + 'dualSphereAnimation/dualSphereAnimation_P00T0000.vtp',
                                     data_dir + 'dualSphereAnimation/dualSphereAnimation_P00T0001.vtp',
                                     data_dir + 'dualSphereAnimation/dualSphereAnimation_P00T0002.vtp',
                                     data_dir + 'dualSphereAnimation/dualSphereAnimation_P00T0003.vtp',
                                     data_dir + 'dualSphereAnimation/dualSphereAnimation_P00T0004.vtp',
                                     data_dir + 'dualSphereAnimation/dualSphereAnimation_P00T0005.vtp',
                                     data_dir + 'dualSphereAnimation/dualSphereAnimation_P00T0006.vtp',
                                     data_dir + 'dualSphereAnimation/dualSphereAnimation_P00T0007.vtp',
                                     data_dir + 'dualSphereAnimation/dualSphereAnimation_P00T0008.vtp',
                                     data_dir + 'dualSphereAnimation/dualSphereAnimation_P00T0009.vtp',
                                     data_dir + 'dualSphereAnimation/dualSphereAnimation_P00T0010.vtp']
                  },
              ])

8.5. Extractors

8.1 章8.2 章 は、アクション(またはPythonでは、関数を呼び出します)を使用してデータセットとイメージを保存する2つの方法です。たとえば、別のタイムステップの結果を生成する場合は、すべてのアクションを繰り返す必要があります。これを回避する1つの方法は、データファイルとイメージファイルを生成するPythonスクリプトを作成し、それをマクロとして使用することです。もっと簡単な方法は、抽出ジェネレータ( extract generators )を使うことです。抽出ジェネレータはパイプラインモジュールの一種で、ソースやフィルタに似ていますが、ライターのように動作します。フィルタと同様に、ソースやフィルタとは異なり、入力がありますが、別のパイプラインモジュールで消費できる出力は生成されません。代わりに、activated を実行すると、ファイルが生成されます。これを抽出(extracts)と呼びます。

これらは単なるパイプラインモジュールであるため、これらを作成および設定するためのソースおよびフィルタとして同様のメカニズムを使用します。 これらを作成するには、Extractors メニューを使用します。 Pipeline Browser は、可視化に存在するすべてのextractorを表示します。 これらのいずれかを選択するには、Pipeline Browser でクリックします。この時点で、Properties パネルが更新され、選択したextractorでパラメータが表示されます。

extractorには、データ抽出とイメージ抽出の2種類があります。前者はソースおよびフィルタによって生成されたデータセットからファイルを生成し、後者はビューからのレンダリング結果を保存します。データextractorが作成されると、デフォルトではアクティブソースが入力(フィルタに似ています)として使用され、イメージextractorでは代わりにアクティブビューが使用されます。

8.5.1. Extractorプロパティ

../_images/ExtractGeneratorPropertiesPanel.png

図 8.9 PNGファイルのジェネレータを抽出するイメージのプロパティを表示する Properties パネル

Properties パネルビューを使用して、抽出ジェネレータのプロパティを変更します。使用可能なプロパティは、2つの主要なグループにグループ化できます。1つは、すべての抽出ジェネレータに共通する Trigger プロパティです。もう1つは、抽出ジェネレータが使用するライタのタイプに固有のパラメータである Writer プロパティです。

Trigger プロパティーは、抽出ジェネレータがいつアクティブになるか、つまり抽出ジェネレータが抽出を生成する条件を定義します。現在、時間ベースの制御をサポートしています。結果を生成する Start Time StepEnd Time Step 、または Frequency を選択できます。 Frequency はアクティベーションごとの時間ステップ数であるため、1つおきに時間ステップを書き込み、 Frequency を2に設定し、3つおきに時間ステップを書き込み、3に設定します。

Writer プロパティはライターに固有です。データ抽出ジェネレータの場合、これらは 8.1 章 で説明されているライタの Configure Writer ダイアログに表示されるライタのプロパティに似ています。画像抽出ジェネレータについては、 8.2.1 章 で説明されている Save Screenshot Options ダイアログに似ています。 Writer プロパティでは、 File Name も設定できます。抽出の保存に使用するファイル名です。抽出ジェネレータは、アクティブ化されるたびに新しい抽出を生成するように設計されているため、 File Name は、アクティブ化ごとにファイル名を一意にできるパターンをサポートしています。ファイル名の {timestep} または {time} は、各アクティベーションのタイムステップインデックスと時間値に置き換えられます。数値の先頭にゼロ(や他のプレフィックス)を追加するには、{timestep:06d} のような形式を使用します。桁数が6未満の場合、タイムステップはゼロで埋められます。ここでは、ファイル名の指定に絶対パスを使用しないでください。これらの抽出を格納するプレフィックスを選択する方法については、次節で説明します。

8.5.2. 抽出データの保存

../_images/SaveExtractsOptionsDialog.png

図 8.10 File > Save Extracts... で示される Save Extracts Options ダイアログ

抽出ジェネレータのセットアップが完了したら、File > Save Extracts... を使用して抽出の保存をトリガできます。 Save Extract Options ダイアログがポップアップ表示され、抽出生成を設定できます。 Data Extracts Output Directory および Image Extracts Output Directory は、すべてのデータ抽出およびイメージ抽出が保存されるルートディレクトリをそれぞれ指定します。 Generate Cinema Specification をチェックすると、選択した抽出出力ディレクトリの下に、生成された抽出を要約した data.csv ファイルが生成されます。次に、これを Cinema Science プロジェクトによって提供されるビューアで使用して、生成された抽出物を探索できます。

Ok をクリックすると、ParaViewは、 すべてのタイムステップ( VCR Controls )でアニメーションが実行され、トリガ条件に基づいて抽出ジェネレータがアクティブになり、抽出が生成されます。正常に完了すると、選択したルートディレクトリの下にファイルがあるはずです。

../_images/PythonStateOptionsDialog.png

図 8.11 File > Save State を使用してPython状態(state)ファイルを保存するときに表示される Python State Options

GUIを使用した抽出の生成に加えて、pvpython または pvbatch を使用してオフラインで抽出を生成できます。このため、HPCのユースケースでは特に便利です。対話型セッションを使用して状態を設定し、いったん保存すると、時間がかかる可能性のある抽出生成ステージの非対話型ジョブをスケジュールできます。そのためには、抽出ジェネレータを含む可視化パイプラインを通常どおりに設定します。次に、 Save Extracts を使用する代わりに、File > Save State... を使用してPythonステートファイルを保存します。 Python State Options ダイアログには、 Save Extracts Options ダイアログに似た、 Extracts Output DirectoryGenerate Cinema Specification を選択するためのセクションがあります。 Ok をクリックしてPythonスクリプトを保存します。Pythonスクリプトには、次のように 末尾近くにセクションがあります。:

if __name__ == '__main__':
    # generate extracts
    SaveExtracts(ExtractsOutputDirectory='extracts')

これにより、pvbatch または pvpython を使用してスクリプトが実行されたときに、Pythonスクリプトが抽出を保存します。