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

Pov-Ray 編 1. 粒子データの場合

<< Prev - Index - Next >>

2 連番データを連続処理する
2.1 複数の.povファイルを作る

#! /usr/bin/perl

$input  = "SAMPLEDATA/Dust%03d.txt";
$output = "POVSEQUENCE/povout%03d.pov";

for ($i = 1; $i <= 10; $i++){
    $fin  = sprintf($input , $i);
    $fout = sprintf($output, $i);
    open (IN, "< $fin");   
    open (OUT, "> $fout"); 
    
    printf OUT << 'END';
#macro S(p, r)
sphere{
  p, r
  pigment {
    rgbt <1, 1, 1, 0> 
  }
}
#end
camera {
  location <0.5, 0.5, 0.5>
  sky      <0, 0, 1>
  look_at  <0, 0, 0>
  angle    45
}
light_source{ 
  <2, 3, 5>
  color rgb 1.5 * <1, 1, 1>
  parallel
  point_at <0, 0, 0>
}
END
    while ($line = <IN>){
	($x, $y, $z, $dummy, $dummy, $dummy, $r)
	    = split(/\s+/, $line);
	
	printf OUT "S(<$x, $y, $z>, $r)\r\n";
    }
    close(IN);
    close(OUT);
}
■ 一枚絵の出力ができたので、後は連番で .pov ファイルを複数作成し、それらを順番にレンダリングすることによってアニメーション(の素材)を製作できます。

■ 左が for ループを使って10個のデータから10個の.povファイルを作るスクリプトのサンプルです。
 ./POVSEQUENCE/povout001.pov
 ./POVSEQUENCE/povout002.pov
 ./POVSEQUENCE/povout003.pov
 ....
というように.povファイルが作成されます。

■ Perl特有の機能として、ヒアドキュメントという機能があります。

<<によって終了タグを定義すると、次に終了タグが出てくるまでの間を文字列のように扱えます。
長い文章などを改行記号などを使わずに出力できるために、今回のような出力に便利に使えます。

print << 終了のタグ
...
...ドキュメントの中身
...
終了のタグ


■ あとは、連続的にPov-Rayを実行すれば複数の画像を作成することができます。UNIX/Linux等では、シェルスクリプトなどでそのような処理をすればよいですし、Windowsではキュー機能を使うか、cygwin 等を使ってUNIX/Linux的に処理をします。


2.2 連続的にレンダリングする

■ スクリプトで連続処理を行ってみます。Pov-Ray for Windows を使っている場合は、既にここで述べた方法で povray コマンドで Pov-Ray for Windows が立ち上がるようになっているものとします。

■ bashスクリプトを使って連続画像を作る方法は、Linux/UNIX 用ともに行うことが出来ます。以下はLinux/UNIX用のコマンドの例になります。

 $ for f in `seq -f %03g 0 10`; do povray povout${f}.pov; done 

■ bash の細かい使い方は他の解説に譲るとして、使っているコマンドを説明しておきます。

seq n [inc] m
番号を n から m まで [inc] 間隔で表示します。[inc] を入力しなければ、普通に1ずつ数字が増えます。-f オプションでフォーマットを設定できます。%03g は3桁で表示する設定です。
` command `
バックスラッシュで囲まれた部分のコマンドの結果を手で入力されたかのように扱います。
seqを使ったこの例では、000 001 002.... と手で入力したのと同じ効果が得られます。
for hoo in a b c;
do command;
done;
bashでループを実現します。変数$hooに、a, b, c を代入して、繰り返しdo から done の間のコマンドが実行されます。

■ この他 `seq` コマンドの代わりに `ls *.pov` を使うなど考えられます。

■ Windows版のPov-Ray はテキストエディターが立ち上がってしまうので、そのままでは自動処理ができません。
/RENDER オプションでレンダリング実行を強制し /EXIT オプションをつけることで、レンダリング終了時にGUIも終了するようになります。

 $ povray /RENDER povfile.pov /EXIT 

■ うまく実行すれば10枚の画像が作られるはずです。


■ 連番ファイルができた後の動画作成は、GIFアニメーションを作るAVIやMPEGを作るでの方法と同様にできます。



2.3 連続的にレンダリングする for Windows
■ Windows用のPov-Rayにはキュー機能があるので、単純に複数ファイルをレンダリングするには、それを使うのが速いでしょう。(レンダリング時に毎回Pov-Rayを起動する時間も節約できます)



■ Add File でファイルを追加します。Auto Render をスイッチした状態で OK でダイアログを閉じると、キューにあるファイルを全て順番にレンダリングをします。

■ 連番ファイルができた後の動画作成は、今までと同様です。

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