POV-Rayのコマンドライン実行とiniファイルの書き方

# はじめに
これは [POV-Rayによる数学お絵かき入門 Advent Calendar 2017](https://qiita.com/advent-calendar/2017/povray4math) の3日目の記事です.

前回作成した画像

![](https://i.imgur.com/ZpBItef.png)

には

* 画像サイズ固定 (800x600)
* 画質が悪い ([アンチエイリアス](https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%B3%E3%83%81%E3%82%A8%E3%82%A4%E3%83%AA%E3%82%A2%E3%82%B9)が効いていない)

などの問題がありました.
これらの条件を指定するには, POV-Rayの実行時に幾つかの引数を与えれば可能です.

## コマンドラインからの操作
iniファイルの説明の前に, コマンドラインからの実行について少し記述します.
### コマンドラインの基本
今まではAtomからscript(パッケージ)を経由してレンダリングを行っていました.
つまり, Atom上で`Ctrl+Shift+B`で実行すれば

Ubuntu:

```
povray FILENAME
```

Windows:

```
pvengine /EXIT /RENDER FILENAME
```

が裏で走るようになっています.
(`FILENAME`には適当なpovファイルが指定されます)
Windowsにおいて余計にある引数は次の意味があります.

* `/EXIT` : レンダリング終了時にPOV-Rayのウインドウを閉じる命令
* `/RENDER` : レンダリング実行の命令 (これが無ければ付属エディタでファイルが開かれるだけになります)

詳しくは例えば次を参照してください.
http://wiki.povray.org/content/Documentation:Windows_Section₃#Special_Command-Line_Options

### コマンドライン引数
POV-Rayで指定可能なコマンドライン引数は沢山ありますが, ここでは例として`Width`, `Height`, `Antialias`を説明します.

横400px, 縦300px, アンチエイリアス有効 とするためにはこれらのパラメータを用いて次のように指定します.

Ubuntu:

```
povray FILENAME Width=400 Height=300 Antialias=On
```

Windows:

```
pvengine /EXIT /RENDER FILENAME Width=400 Height=300 Antialias=On
```

このようにして画像のサイズやアンチエイリアスの有効化が可能になります.

よく使われる他のパラメータとして, アニメーションのための`+KFF`などがありますが, これについては第9回で説明する予定です.

## iniファイル
レンダリングの度にコマンドラインにすべての引数を書くのは面倒なので, POV-Rayではiniファイルが用意されています.

### iniファイルの基本
例として次のような`test.ini`を用意し,  作業ディレクトリ(povファイルと同じ場所)に配置します.

```ini:test.ini
[hoge800]
Width=800
Height=600
Antialias=On

[hoge400]
Width=400
Height=300
Antialias=On
```

このiniファイルを使うには次のコマンドを実行します.

Ubuntu:

```
povray FILENAME test[hoge800]
```

Windows:

```
pvengine /E /RENDER FILENAME test[hoge800]
```

このコマンドによって, iniファイルに書き込んだ引数が読み込まれてレンダリングが行われます.

#### 解説
* コマンドラインでの`test[hoge800]`は`test.ini`の中の`hoge800`の段落を読み込むための命令です.
`hoge800`を`hoge400`に置き換えればiniファイルの下側に記述したパラメータでレンダリングが実行されます.
* iniファイルでは行頭にセミコロン`;`を書けばコメントとして扱われます.

より詳しいiniファイルのオプションは以下を参照してください.
http://www.povray.org/documentation/3.7.0/r3_2.html#r3_2

### iniファイルの場所
さて, 前回まではコマンドライン引数を与えなければ

* `Width=800`
* `Height=600`

が指定されていたのでした.
実はこの設定は`/etc/povray/3.7/povray.ini`(Ubuntu), `POV-Ray\v3.7\ini\povray.ini`(Windows)に記述されています.
(Windowsでの`POV-Ray`ディレクトリはインストール時にしていしたディレクトリで, 通常は`Documents`直下に配置されます)
つまり, POV-Rayではコマンドライン引数が省略された場合にはこのファイル(`povray.ini`)を参照して足りないパラメータを補っています.

さらに, POV-Rayでは同一ファイル名のiniファイルが作業ディレクトリと通常参照ディレクトリあった際には, 作業ディレクトリ内のiniファイルが優先されるようになっています.

よって, Atom上のscriptからコマンドラインから回すためには作業ディレクトリに`povray.ini`を配置すれば可能です.

この設定でレンダリングした結果を次に示します.

```ini:povray.ini
Width=500
Height=500
Antialias=On
```

```Povray:test.pov
camera{
    perspective
    location <2,1,2>
    look_at <0,0,0>
}
light_source{
    <2,3,4>
    color rgb<1,1,1>
}
background{rgb<1,1,1>}
sphere{<0,0,0>,0.2}

cylinder{<0,0,0>,<1,0,0>,0.1 pigment{rgb<1,0,0>}}
cylinder{<0,0,0>,<0,1,0>,0.1 pigment{rgb<0,1,0>}}
cylinder{<0,0,0>,<0,0,1>,0.1 pigment{rgb<0,0,1>}}
```
![](https://i.imgur.com/EUo5xe4.png)

このようにして, アンチエイリアスを効かせたレンダリングが出来るようになりました.

# 次回予告
さて, お気づきの方が殆どだと思いますが`Width`, `Height`を指定しただけでは画像が引き伸ばされるだけで, 実質的なアスペクト比が変わる訳ではありません.

これの調整はiniファイルだけでは出来ないため, povファイル内の`camera{ }`のパラメータを設定する必要があります.
次回はこれについて書きます.