15. アニメーション

POV-Ray でサポートしているアニメーション機能について示す。アニメーションは、フレーム番号のついた連続画像が出力される。

乱数を利用した機能は、静止画では画質によい影響を与えるが、アニメではちらつきが生じよくない場合が多い。次のような機能がある。
 ・ jitter [ 面光源(are_light), 虹(rainbow)]
 ・ crand [ finish:表面の粗さ ]
これらの機能はアニメーションには使わないことが望ましい。

15.1 アニメーション設定

アニメーション用の画像を作成するには、シーンファイルの記述とコマンドライン入力の両方が必要である。

15.1-1 シーファイル記述: clock

アニメーション用の変数として clock が用意されている。clock は自動的に 0 から 1 まで変化する変数である。clock をシーンファイル内に記述すると、ざまざまなアニメーション画像の生成が可能になる。

例)移動するボックス box{ 0,1 pigment{ Green } translate< clock, 0, 0 > }
上記のように記述すると、緑色の立方体が x 方向へ少しずつ移動している画像が得られる。連続画像の出力には、コマンドラインからフレーム番号などを入力する。出力される画像は、POV-Rayのファイル名にフレーム番号の付いた画像ファイルとなる。コマンドラインで何も入力しなければ、clock=0 のときの画像が 1 枚だけ出力される。

15.1-2 コマンドライン入力

● clock 値の設定 [デフォルト:0.0 ~ 1.0 ]
 +KIn.n 開始の clock 値を実数 n.n に設定 [デフォルト:0.0 ]
 +KFn.n 終了の clock 値を実数 n.n に設定 [デフォルト:1.0 ]
●フレーム番号の設定
 +KFIn 開始フレーム番号をnに設定 [デフォルト:1 ]
 +KFFn 終了フレーム番号をnに設定

例)コマンドラインでフレーム番号 1~10 を設定(画像 10 枚出力) +KFF10 (clock がフレーム番号に応じて 0.0~1.0 または設定値で変化)
●フレームの部分出力( +KFF を設定すること)
 +SFn  フレームの開始番号 n
 +EFn  フレームの終了番号 n
 +SF0.n フレームの開始パーセント n
 +EF0.n フレームの終了パーセント n
例)フレーム番号1~50のうち、25~35を出力する設定 +KFF50 +SF25 +EF35
●繰り返しアニメ(最初と最後がつながった物体が回転しつづけるようなアニメ)
 +KC 繰り返しアニメ on
 -KC 繰り返しアニメ off [ディフォルト:off ]

15.2 アニメーション例

簡単なアニメーションの作成例を2つ示す。

(1) 床面をころがる球

床面を回転しながら転がっていく球をアニメーションにした。 clock をシーンに記述し、コマンドラインに +KFF30 と入力した。実行すると 30 枚の静止画が作成される。次に ffmpeg を使用して6秒の動画を生成した。

//-------------------- Fig.15.1 animation 1 // command line Input // +KFF30 #version 3.7 #include "colors.inc" #include "textures.inc" global_settings { assumed_gamma 2.2 } //-----------------------------camera and light camera{ location <6,-4,4> sky <0, 0, 1> right <-image_width/image_height,0,0> look_at <0, 1, 0> angle 50 } light_source { <0, -200, 150> color White*1.3 } //=================================== sphere sphere {0,1 pigment { radial frequency 3 scale .1 } finish{ambient 0.2} rotate <0, clock*360,0 > // <<<--------- clock translate <11*clock-6, 0,1> // <<<--------- clock } //---------------------------------floor plane{ z, 0 texture {DMFWood6 scale 2 rotate <90,0,90>} }

(2) 回転するドアから見える空

室内から外を見ることを想定し、回転ドアとその隙間から見える空をアニメーションにした。室内は見える壁部分、ドア、床のみ作成した。(1)と同様に clock をシーンに記述し、コマンドラインに +KFF30 と入力、30 枚の静止画を作成し、ffmpeg により6秒の動画を生成した。

//-------------------- Fig.15.2 animation 2 // command line Input // +KFF30 #version 3.7 #include "colors.inc" #include "textures.inc" #include "Woods.inc" #include "skies.inc" global_settings { assumed_gamma 2.2 } //---------------------------camera and light camera{ location <0,-4.3,0.5> sky <0, 0, 1> right <-image_width/image_height,0,0> look_at <0, 0, 1.2> } light_source { <0, 200, 500> color White*1.3 } light_source { <0, -5, 150> color White*0.5 } //===================================== room //-----------------------------wall difference { box{0,1 scale <800,0.5,800> translate <-400,-0.25,0> texture {T_Wood1 scale 0.5} finish { ambient 0.6} } box{-1,1 scale <2,0.5,3> pigment{ rgb<1,0.7,0.5> } finish { ambient 0.3} } } //----------------------------pillar cylinder {0,z*3,0.15 pigment{ rgb 1 } finish { ambient 0.2} } //----------------------------door box{0,1 scale <4,0.06,3> translate <-2,-0.03,0> texture {T_Wood7 scale 1} finish { ambient 0.6} rotate <0, 0,clock*180 > // <<<-------- clock } //----------------------------floor box{-1,1 scale<20,20,1> translate <0,-20,-0.99> pigment{checker rgb<1,1,0.9> rgb<1,1,0.9>*1.2 scale 0.5 } } //--------------------------------plane plane{z,0 pigment{rgb<0.75,0.8,0.5>*1.2} normal{granite 0.3 scale 5} } //======================================= sky sky_sphere{ pigment{ wrinkles color_map{ [ 0.3 SkyBlue] [ 0.9 White ] } scale <1, 0.2, 0.2> } } object{ O_Cloud1 rotate x*90 rotate z*(clock*30+20) } // <<<------ clock


(End) 15.アニメーション