Paraview v5.1.4のインストールとオフスクリーンレンダリング

## はじめに

本資料は、CentOS 7上で、paraview v5.1.4をインストールし、OSmesaを用いたオフスクリーンレンダリングによって、可視化を行うための資料です。

オフスクリーン可視化のメリットとしては、X window systemやGPU環境に依存せずに可視化を行える点が挙げられます。また、筆者は普段この手順によって、大規模なメッシュを利用した有限要素解析の結果を、リモート環境で可視化するために利用しています。

参考文献は以下の通りです。
[ParaView (v5.1.2) のビルド](https://qiita.com/kkk627/items/517734714c766aa4f735)
[GPU なしで OpenGL を使う方法](https://qiita.com/shimacpyon/items/16b976e2e7e8b7fc3a45)

# Paraview v5.1.4のインストール

## 周辺環境のインストール

paraviewをインストールするために、以下のコマンドで周辺環境の整備を行います。

```bash
sudo yum -y update
sudo yum -y install boost boost-devel
sudo yum -y install mesa-libGLU mesa-libGLU-devel mesa-libOSMesa-devel
```

<!--
```bash
sudo yum -y update
sudo yum -y install gcc gcc-c++ llvm llvm-devel make git
sudo yum -y install python python-devel boost boost-devel
sudo yum -y install flex flex-devel bison bison-devel 
sudo yum -y install zlib zlib-devel zlib-static autoconf automake libtool
sudo yum -y install mesa-libGLU mesa-libGLU-devel mesa-libOSMesa-devel
```
-->

## インストールディレクトリの作成

本資料では、
`/home/morita/tools`
ディレクトリに、コンパイルしたライブラリをインストールすることとします。

また、
`/home/morita/paraview_src`
ディレクトリに、ソースファイルなどをダウンロードすることとします。

## OSmesaのインストール

OSmesaは、mesaのオフスクリーン利用ができるAPIとして知られています。

`/home/morita/paraview_src`
ディレクトリにおいて、以下のコマンドによって、インストールを行います。

```bash
wget https://mesa.freedesktop.org/archive/older-versions/12.x/12.0.3/mesa-12.0.3.tar.gz
tar -xvf mesa-12.0.3.tar.gz
cd mesa-12.0.3
sed -i "/pthread-stubs/d" configure.ac
sed -i "/seems to be moved/s/^/: #/" bin/ltmain.sh
```

```bash
bash autogen.sh --disable-xvmc \
                --disable-dri \
                --with-dri-drivers= \
                --with-gallium-drivers=swrast \
                --disable-shared-glapi \
                --enable-texture-float \
                --disable-egl \
                --with-egl-platforms= \
                --enable-gallium-osmesa \
                --enable-gallium-llvm=yes \
                --disable-gles1 \
                --disable-gles2 \
                --prefix=/home/morita/lib
```

```bash
make install
```

## paraview v5.4.1のインストール

`/home/morita/paraview_src`
ディレクトリにおいて、以下のコマンドによって、インストールを行います。
`cmake`コマンドは、環境によって`cmake3`コマンドに切り替えます。

```bash
git clone https://github.com/Kitware/ParaView.git paraview
cd paraview
git config submodule.VTK.url https://github.com/Kitware/VTK.git
git checkout v5.1.4
git submodule update --init --recursive
cd ..
mkdir build
cd build
```

```bash
cmake -D BUILD_DOCUMENTATION:BOOL=OFF \
      -D BUILD_EXAMPLES:BOOL=OFF \
      -D BUILD_SHARED_LIBS:BOOL=ON \
      -D BUILD_TESTING:BOOL=OFF \
      -D CMAKE_BUILD_TYPE=Release \
      -D CMAKE_INSTALL_PREFIX=/home/morita/tools \
      -D PARAVIEW_BUILD_QT_GUI:BOOL=OFF \
      -D PARAVIEW_DATA_ROOT=/home/morita/tools \
      -D PARAVIEW_ENABLE_COPROCESSING:BOOL=ON \
      -D PARAVIEW_INSTALL_DEVELOPMENT_FILES:BOOL=ON \
      -D PARAVIEW_USE_VISITBRIDGE:BOOL=ON \
      -D PARAVIEW_USE_BOOST:BOOL=ON \
      -D OPENGL_INCLUDE_DIR=/home/morita/tools/include \
      -D OPENGL_xmesa_INCLUDE_DIR= \
      -D OPENGL_gl_LIBRARY= \
      -D OPENGL_glu_LIBRARY=/home/morita/tools/lib/libGLU.so \
      -D VTK_USE_X:BOOL=OFF \
      -D VTK_OPENGL_HAS_OSMESA:BOOL=ON \
      -D VTK_DEFAULT_RENDER_WINDOW_OFFSCREEN:BOOL=ON \
      -D OSMESA_INCLUDE_DIR=/home/morita/tools/include \
      -D OSMESA_LIBRARY=/home/morita/tools/lib/libOSMesa.so \
      -D PARAVIEW_ENABLE_PYTHON:BOOL=ON \
      -D PYTHON_LIBRARY=/usr/lib64/libpython2.7.so \
      -D PYTHON_INCLUDE_DIR=/usr/include/python2.7 \
      -D PYTHON_EXECUTABLE=/usr/bin/python \
      -D PARAVIEW_USE_MPI:BOOL=OFF \
      -D PARAVIEW_ENABLE_FFMPEG:BOOL=OFF \
      -D VTK_USE_FFMPEG_ENCODER:BOOL=OFF \
      ../paraview
```

```bash
make install
```

# オフスクリーンレンダリング

## pvbatchの利用

前節でのインストールが完了すると、`/home/morita/tools/bin`ディレクトリに、以下のバイナリが生成されていることが確認できます。

```
paraview-config
pvbatch
pvdataserver
pvpython
pvrenderserver
pvserver
smTestDriver
vtkParseJava-pv5.5
vtkWrapClientServer-pv5.5
vtkWrapHierarchy-pv5.5
vtkWrapJava-pv5.5
vtkWrapPython-pv5.5
vtkWrapPythonInit-pv5.5
vtkkwProcessXML-pv5.5
```

このうち、筆者が普段利用しているのは、`pvbatch`バイナリです。このバイナリは、GUI環境のparaviewにおける操作手順をまとめたpythonスクリプトを読み込むことができ、そのスクリプトに記載された手順によってレンダリングを行います。このとき、pythonスクリプトは、GUI環境のparaviewから出力することができます。GIU環境のparaviewは、任意のOSで利用することができますが、GUI環境のparaviewのバージョン番号は、CentOS上にインストールしたparaviewのバージョンと一致していることが重要です。

## pythonスクリプトの生成

pythonスクリプトを生成するために、GUI環境のparaviewに付属している、trace機能を利用します。paraviewのツールバーから、`Tools > Start trace`の順に選択します。

<img width="1587" alt="001.png" src="https://qiita-image-store.s3.amazonaws.com/0/170064/f9cd8a50-5372-b7e2-bbc9-5fbc355582c7.png">

その後、以下のように、`Trace options`の設定を行います。

<img width="685" alt="002.png" src="https://qiita-image-store.s3.amazonaws.com/0/170064/7f2df8b5-73c2-2594-2d2f-15334298dbf2.png">

この設定が終わったら、いつものようにGUI環境で可視化を行います。
具体的には、

- ファイル読み込み
- 変形図・コンタ図の作成
- スクリーンショットの保存

を行います。
スクリーンショットの保存までが終わったら、paraviewのツールバーから、`Tools > Stop trace`の順に選択します。この手順によって、paraviewに新しいウインドウが生成され、自動生成されたpythonスクリプトが表示されます。このpythonスクリプトを、例えば`pvbatch.py`として保存します。

生成されたpythonスクリプトを保存した後は、pythonスクリプトと可視化ファイルをリモートのCentOS環境に転送し、以下のコマンドによって可視化を行います。このとき、pvbatch.pyでは、ローカル環境のパスに基づいて、読み込みファイルと書き出しファイルのパスが記述されているので、リモート環境のディレクトリ構成にあわせて書き換える必要があります。

```bash
pvbatch pvbatch.py
```

## 展望

展望として、MPI環境におけるインストール、性能評価が挙げられます。