第4日目(10月13日)
Pov-RAYには,簡単なアニメーション機能が備えられている.これを用いてアニメーション作成を体験する.
以下は,「ラジオ体操」を「簡単人体モデル」でアニメーション表現したものである.
アニメーションの基礎
アニメーションは,連続した数枚の画像(これを,フレームと言う)を生成し,それを連続的に表示することで,「動画」を生成することである.
このようなフレームの生成は,一般的には,規則的な変化として生成する.また,フレームには,一般には連続した番号が付けられている.この番号が,「再生の順」である.
POV-RAYでは,「2つのメカニズム」でこれらができるようになっている.
・1:POV-RAYには,「clock」なる実数型の変数が,自動的に宣言され,それをシーン記述中に書くことができる
・2:POV-RAYには,「自動繰り返し」の機能があり,指定された回数繰り返す.このとき,
(a) clockが,自動的に更新される.
(b) 生成されたフレームは,指定された番号が付されたファイル名で保存される.
生成されるフレームファイルの名前は,<POVファイルの先頭6文字><通し番号2桁>.BMPである.例えば,POVファイルが,abcdefg.pov であるなら,abcdef00.bmp,
abcdef01.bmp, .... , abcdef10.bmp なるビットマップファイルが出来上がる.
どのようなフレームを作成するかは,Rendaring時に,何番目のフレーム(初期フレーム番号;Initial_Frame)から何番目のフレーム(最終フレーム番号:Final_Frame)を作るかを指定することで,回数,clockの増加状況,そして,フレームファイルに付される通し番号,が定まる.
これは, 「Render」 -> 「Edit Settings/Render」の Command Line Options ウインドウに,例えば,
Initial_Frame=0 Final_Frame=10
のように記述する.
これにより,
(a) 11回繰り返し,11個のフレーム(番号0から番号10まで)を生成する.
(b) 変数clockの値は,最初0であり,繰り返しの度に 0.1づつ増加する(最後は,1).
ことを表す. この指定は,一度すると,以降再指定するまで,有効である.
アニメーション作成の練習1
アニメーションの基礎として,まず,Clockと共に様々な変化を生じるイメージを生成させる.
まず,以下のシーンを作成する.
・背景:シアン
・カメラ:視点<0,0,-5>, 注視点<0,0,0>
・光源:<0,5,-5> 白
・物体:<0,1,0><0,-1,0>, 半径0.3の円柱
アニメーション1ー回転ー:
アニメーションとして,この円柱を回転させることにする.
cylinder { <0, 1, 0> <0, -1, 0> 0.3
pigment {color White }
rotate < 0, 0, 180*clock >
}
rendering-optionを設定し実行する.
最後のrotationにより,z軸周りに,180*clock 度回転する.
よって,各フレームでは, 180*0=0, 180*0.1=18, 180*0.2=36 ... , 180*0.9=162, 180*1=180 度回転したイメージとなる.
アニメーション2-移動ー:
さらに, rotateの後に,
translate <0, 0, 10*clock >
と指定すれば,回転しながら,「奥」に平行移動する.
アニメーション3-色などー:
pigment を,
pigment{ color rgb< clock, clock, clock > }
とすれば,最初は「黒」で,最後が「白」になる.
<(2)のtranslate を取る>
アニメーション4-視点,注視点などー:
カメラを
location< 0, 5*cos( clock*pi ), -5*sin(clock*pi) >
のようにすれば,視点が移動することになる.
<さらに,(1)のrotate を取る>
以上により,対象物の位置変化, 視点位置の変化, 物の属性の変化 を起こすアニメーションの例が作成されたことになる.
課題:アニメーション作成の練習2
簡単な「着地シミュレーション」を作成する.
まず,「飛行物体」の軌跡を次のグラフの通りとする.
「飛行物体が,着地台に着地する」..これを段階的に作っていく.
(1) まず,以下のシーンを作成する.
l カメラは,<5,5,-15>に設置し,<5,5,0>に向ける.
l 点光源を,<5,5,-10>および<10,20,0>の置く.
l 白黒チェックの平面(法線:<0,1,0>,距離:-0.1)を置く.
l 着地台として,端面中心が,<0.0,0>, <0,-1,0>,半径1.5の緑色円柱を置く.
l 飛行物体として,銀色の<0 ,0, -0.25> < 1, 0.5, 0.25>の直方体を置く.
(2) 「飛行物体」を,上のグラフのように動かしてみよう.
ここで,「飛行物体」の動きは, である.
そのために,以下のような変換を施し,box を平行移動させる.
#include 定義の直後に,
#declare px= 10*(1-clock) ;
#declare py= 10*(1-clock)*(1-clock) ;
と記述することにより, pxとpy を定義する.ついて,boxに対して,
translate < -0.5, 0, 0>
translate < px,py,0>
なる変換を施す.その後,フレームを0から10で,イメージ生成を行う.
(3) よりリアルに.
飛行物体が,平行のままでは,不自然(?)であるので,進行方向に向ける.そのために,飛行物体をz軸周りに回転する.上のように移動する物体が向いている方向は,その接線方向であり,ベクトルで表すと,各々を変数clockで微分したものである.このベクトルの角度は,
atan2 ( 20*(1-clocl), 10 )
で,ラジアンで求まる.先の#declearの後に,
#declear thr=atan2( 20*(1-clock), 10) ;
#declear thd=thr/pi*180 ;
としで,
rotate < 0, 0, thd >
により,回転させ,進行方向に向けることができる.
(4)「操縦士」はどのような光景をみているか.
カメラを,<px, py, 0> に
中止点を, <px-2*cos(thr), py-2*sin(thr) ,0 >
とする.しかし...これでは,飛行物体の下面中央である.物体の上,「フロント」に,移動させよう.
アニメーション作成の練習3*
形状生成に有効なマクロによる形状定義と利用をまず学ぶ.
マクロの利用には,その「定義」と「参照」がある.
マクロの定義:
パラメータ(仮引数)を使用した形状(プロトタイプ)記述
マクロの参照:
パラメータ(実引数)代入による「実体」の生成
マクロの使用例
これらのマクロを使用して複雑な動きを表現する
以下は、マクロを使用してた「腕」のモデルである。
このシーンファイルで、以下のように各々30度曲がった「腕」を作成してみよう。
超簡単人体モデルの振り付け*
人体「超簡単モデル」による振り付け
このシーンファイルhumanbody.povは、前に示した「腕」を利用して構成した人体の簡単化モデルである。
概要は、次の通りである。
最初の部分に「体」と「頭」がある。次いで、手足が定義されている。
このモデルの腕の曲がりは以下のように記述すると分かり易い。
すなわち、
(1)下腕の「上腕に対する傾き」分回転させ、
(2)そののち肘の位置に移動する。
(3)次に、上腕を「体に対する傾き」分回転させ、
(4)そののち肩の位置に移動する。
これで、ポーズを取った片腕ができる。
まず、簡単なポーズをつけてみよう。
さて、先の説明のとおり、clockは、0から1まで同刻みで変化する。このように単調に変化する変数から、もう少し複雑な動きを合成する。
たとえば、「往復運動」である。
これは、回転角度を赤線グラフのように変化させればいいのであるので、
t=2(0.5-|clock-0.5|)
として、回転角度をtから決定すればよい。|x|は、xの絶対値でありPOV-RAYでは、abs(x)と記述する。
さらに複雑な動きを検討する。
これは、前4拍で屈伸し、後4拍は静止する運動である。
前述のように一つの数式で表現し難い場合は、#if-#else-#end
の条件分岐を用いて表現すると、比較的分かりやすくできる。
練習課題
演習・宿題 課題
1.着地シミュレーションを完成させなさい.
2(Option).前節で示した簡易人体モデルの「16節の振り」を付けなさい.
本科目授業フォルダー『第5回』へ提出してください。
完成品のアップ期限: 10月21日 13:00