第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).
ことを表す. この指定は,一度すると,以降再指定するまで,有効である.

3日目トップへ


アニメーションの例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 を取る>


以上により,対象物の位置変化, 視点位置の変化, 物の属性の変化 を起こすアニメーションの例が作成されたことになる.
 

4日目トップへ


アニメーションの例2

課題:アニメーション作成の練習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 >
  とする.しかし...これでは,飛行物体の下面中央である.物体の上,「フロント」に,移動させよう.

4日目トップへ


アニメーションの例3

アニメーション作成の練習3


形状生成に有効なマクロによる形状定義と利用をまず学ぶ.
マクロの利用には,その「定義」と「参照」がある.
マクロの定義:
 パラメータ(仮引数)を使用した形状(プロトタイプ)記述
マクロの参照:
 パラメータ(実引数)代入による「実体」の生成

マクロの使用例

これらのマクロを使用して複雑な動きを表現する
以下は、マクロを使用してた「腕」のモデルである。

このシーンファイルで、以下のように各々30度曲がった「腕」を作成してみよう。

4日目トップへ


アニメーションの例4

超簡単人体モデルの振り付け


人体「超簡単モデル」による振り付け
このシーンファイル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
の条件分岐を用いて表現すると、比較的分かりやすくできる。

4日目トップへ



練習課題

演習・宿題 課題


1.着地シミュレーションを完成させなさい. 
2(Option).前節で示した簡易人体モデルの「16節の振り」を付けなさい.

本科目授業フォルダー『第5回』へ提出してください。


完成品のアップ期限: 10月21日 13:00


今日のトップページへ