フリーウェアでシミュレーション結果アニメーションを作る

Pov-Ray 編 2. 流体データの場合

<< Prev - Index - Next >>

4. 連番画像を出力する(.iniファイル編)

■ Pov-Rayはレンダリング用の設定をオプションとして入力する代わりに、.ini ファイルに記述しておくことができます。レンダリングの設定を書くファイルは .ini ファイルです。

連番pngとしてレンダリングするように指示するファイルを pngsequence.ini という名前で作成したとします。
コマンドラインから操作するときには、.pov ファイルではなく .ini ファイルを読むように

 $ povray pngsequence.ini 

とすることで、.ini ファイルの指示通りにレンダリングをします。

■ Pov-Ray for Windows の場合には、コマンドラインで指示する代わりにメニューにあるエディットボックスにファイル名を書いておきます。

■ これでレンダリングを実行すると、自動的に pngsequence.ini を読み込んで実行します。


■ 動画を作るためには、複数枚数レンダリングをしなければいけません。 今回0-47までの48枚の画像をつくるものとすると、pngsequence.ini ファイルの中身は、以下のような形になります。

Width = 120
Height = 90
Antialias = off
Initial_Frame = 0
Final_Frame = 48
Subset_Start_Frame = 0
Subset_End_Frame = 47
Output_File_Type = N
画像幅
画像高さ
アンチエイリアスのon/off
動画の最初のフレーム
動画の最後のフレーム
今回描画する最初のフレーム
今回描画する最後のフレーム
出力する画像タイプ。NだとPNG形式

■ Windows版の場合は、.ini ファイルの設定を読んで、画面上の.povファイルをレンダリングする手順になりますが Linux 版の場合は、どの .pov ファイルを読んでレンダリングするのかの情報も必要になるので追加しておきます。

Input_File_Name = "filename.pov"
レンダリングする.povファイル

■ 連番画像を作るときは、最初のフレームから最後のフレームまでの間で、 Pov-ray の内部変数 clock が 0 から 1 まで増加していきます。(この場合は、24フレーム目が0.5になる)。そこで、カメラの位置などを clock に依存して移動するようにしておけば、視点を変化させた動画などが作れるようになるわけです。

■ 実際にレンダリングする最初のフレームと最後のフレームは Subset_Start_Frame と Subset_End_Frame で与えます。 試行錯誤している段階で、毎回毎回全部レンダリングしていると大変なので、この機能を使うことで、一部のフレームだけレンダリングすることができます。

■ カメラ位置を時間変化させて連番画像をつくってみるには、カメラの位置を 変数 clock の変数にすればいいので例えば以下のような感じになります。
この場合、0枚目(t=0)と48枚目(t=1)はまったく同じになるので、0-47の動画を製作していますね。

camera {
  location <5*cos(clock*6.283), 5*sin(clock*6.283), 3>
  sky      <0, 0, 1>
  look_at  <0, 0, 0>
  angle    45
}

■ 更に、完成した連番イメージを imagemagick 等を使って動画にすれば、カメラワーク付きの動画ができました。


■ この他に、.ini ファイルを使わずに直接コマンドラインオプションから連番画像製作を指示することができます。連番画像を出力する(コマンドライン編)を参考にしてみてください。


Appendix 1. 2つ以上の情報を表示したい

■密度に応じて色をつけたいときなどはこれでいいのですが、例えば温度に応じて色をつけて、密度に応じて濃さをつけたいときなどはどうすればいいのでしょう?
deinsity 情報は実は 2 つ以上同時にもてるので、工夫すればそのような画像も製作できます。
例えば2つの密度情報を持ち、片方に本当の密度情報を、片方に温度情報を持たせたとします。
密度側で<0.5, 0.5, 0.5>という色が付いて、温度側で<1.0, 0.8, 0.6> というような色が付くときには、掛け合わせて<0.5, 0.4, 0.3>という評価がされるので、色は温度で決まり、濃さは密度で決まるような画像が作れます。

例えば密度読み込み部分に二つdensityをいれると、こんな感じですね。

#macro DensityProfile ( VTranslate, VScale) 
density{
  density_file df3 "Sample/temperature.df3"

  interpolate 2
  frequency 0

  scale VScale
  translate VTranslate  

  color_map {
    [0.0 rgbt <1, 0, 0>]
    [0.5 rgbt <0, 1, 0>]
    [1.0 rgbt <0, 0, 1>] 
  }  
}
density{
  density_file df3 "Sample/density.df3"

  interpolate 2
  frequency 0

  scale VScale
  translate VTranslate  

  color_map {
    [0.0 rgb <0.5, 0.5, 0.5>]
    [0.5 rgb <0.1, 0.1, 0.1>]
    [1.0 rgb <0.0, 0.0, 0.0>] 
  }  
}
#end

色は横方向に変化して、密度は縦方向に変化するようなサンプル。



Appendix 2. 重い!

■まともに光線を計算しながらボリュームレンダリングをすると激重ですが、影なんていらないと光源をなくし、emissionとabsorptionだけにすれば結構速くなります。
フォトリアルな図を作ることにこだわらなければ、これで充分だったり。
ちなみにAppendix1のサンプル動画上は光源無しで作った動画。

<< Prev - Index - Next >>
inserted by FC2 system