POV-Ray での CG の作成作業では,次の2つの手順を繰り返して行きます:
シーンファイルを自由自在に編集するためには, 三次元座標 <x, y, z> を理解しておく必要があります. POV-Ray では,次の図のような座標系を使います.
これは,左手直交座標系という三次元座標です. x 軸,y 軸,z 軸のお互いの位置関係に注意してください. 左手の親指と人さし指と中指を互いに直角にして, 左腕を前に突き出してみると:
部品の位置を調整するときなどに, これら x, y, z の値を指定することになります.
次の2つのファイルを使って作業を開始します: (入手していない人はダウンロードしてください.)
まず,シーンファイル myF1.pov を レンダリングしてみよう: (部品ファイル F1.inc の方は気にしない.)
$ povray +P myF1.pov
未完成なので,これから部品を追加して行きます.
エディタを使って, シーンファイル myF1.pov の内容を見てみよう:
$ gedit +P myF1.pov &
いろいろな呪文が書かれていますが,とりあえず今, 注目してほしいのは,次の部分です:
... // F1 マシンの組み立て #declare MyF1 = merge { // マシン本体 merge { object { RoundBody } object { FrontLeg1(0) } object { RearLeg1 } } // ドライバー merge { object { Driver } object { Helmet2 } } } ...
シーンファイルは,次のような命令文から構成されています:
シーンファイルに命令を書き加えて,部品を追加してみましょう.
たとえば,次のように書き加えてみよう:
... // F1 マシンの組み立て #declare MyF1 = merge { // マシン本体 merge { object { RoundBody } object { FrontLeg1(0) } object { RearLeg1 } object { RoundNose1 } object { RoundSide2 } object { FrontWing2 } object { RearWing1 } } // ドライバー merge { object { Driver } object { Helmet2 } object { Shield } } } ...
シーンファイルの書き変えが終わったら, ファイルを保存し直そう. それから,もう一度,レンダリングし直してみよう.
何か不格好ですが...
これで一応,F1 らしくはなりました.
部品の種類は他にもあります. パーツの一覧の中から自由に選びましょう. パーツの組み合わせ例も参考にしてください.
取り付け位置を変えてバランスよくしてみましょう.
たとえば,ホイールベース(前後のタイヤの間隔)がせまいので, 前タイヤ(FrontLeg)を 前に 30 cm , 後タイヤ(RearLeg)を 後に 20 cm , ずらしてみよう. シーンファイルを次のように書き変えればよい:
... // マシン本体 merge { ... object { FrontLeg1(0) translate -0.3*z } object { RearLeg1 translate 0.2*z } ... } ...
新しい命令が出てきました. 次の2通りの書き方があります:
たとえば,translate 1*x と translate <1, 0, 0> とは, 同じことになります. どちらでも,都合のよい方法で書けばよい.
なぜ,z 方向に移動しているのか?わからなければ, さっき 基礎知識 で説明された 三次元座標の図を見直しましょう.
それと,数値の単位については,メートルと思っていてください. 30 センチの場合,0.3 です. (組み立て中の F1 マシンの全長は 4.5 m 位,全幅は 2.0 m 位です.)
では,再びレンダリング...
おっと,今度は,前タイヤがフロントウィングとぶつかりそうです. それじゃ,前タイヤを少し後へもどしたり, フロントウィングの位置も変えてみようか... ちょっと,部品の種類が気に入らないな... ...こんな感じで,部品の種類や位置を自由にカスタマイズして行こう.
ところで,ドライバーの着座位置(座高)を変えたい場合, ドライバー本体(Driver)だけでなく, ヘルメット等(Helmet2 と Shield)も同時に移動しなければなりませんが, 各 object に対して,いちいち translate を書き加えるのは面倒ですね?
実は,merge したもの全体に対して,一度に translate してもよい:
... // ドライバー merge { object { Driver } object { Helmet2 } object { Shield } translate 0.15*y // 座高を 15 cm アップ } ...
レーシングカーらしく,キレイに着色してみましょう.
たとえば,ボディーを赤にするには:
... object { RoundBody pigment { color Red } } ...
色の名前については, カラーの一覧の中から自由に選べます. それに,もちろん,他の部品やドライバーの服・ヘルメットの色も変えられます.
また,object 毎だけでなく,merge したもの全体について, 一度に着色することもできます. たとえば,マシン本体を全体的に青にするには:
... // マシン本体 merge { object { ... } object { ... } ... pigment { color Blue } } ...
これで,merge { ~ } 内のすべての object の色が変わります. ただし,個別に着色済みの object については変化しません.
しかし,この配色はヒドい...
部品への着色と全体への着色をうまく使い分け, 能率良くかつセンス良く作業しよう.
作成したオリジナル F1 マシンをサーキットに持ち込みましょう.
地面と空を追加しよう. ついでに,座標軸も消してしまおう: (シーンファイルの変更場所が移ります.)
... // F1 マシンの配置 object { ... } // 舞台 object { Ground } // 地面 sky_sphere { Fine } // 空 // 座標軸(完成時に削除) /* object { Cylinder_X ... } // x軸 object { Cylinder_Y ... } // y軸 object { Cylinder_Z ... } // z軸 */ ...
地面が見えました. 空については.カメラアングルを変えないと見えません. この後,確認します.
カメラアングルを変えてみましょう.
シーンファイルの中の camera { 〜 } の部分に注目しよう:
... // カメラ camera { ... rotate 0*x // 上下の首振の角度(下がプラス) translate -10*z // コース中心からの距離 rotate 30*x // 上下の移動の角度(上がプラス) rotate 35*y // 左右の移動の角度(左がプラス) angle 30 // 視野(ズームインが小) } ...
3つの rotate の数値を 0 にリセットしてみよう:
rotate 0*x // 上下の首振の角度(下がプラス) translate -10*z // コース中心からの距離 rotate 0*x // 上下の移動の角度(上がプラス) rotate 0*y // 左右の移動の角度(左がプラス)
真正面ですね.
このとき,カメラは +z 方向を向いてます.
まず,「上下の移動の角度」を変えてみよう.
rotate 30*x // 上下の移動の角度(上がプラス) rotate 0*y // 左右の移動の角度(左がプラス)
上 30 度から見下ろしてます.
さらに,「左右の移動の角度」も変えてみよう.
rotate 30*x // 上下の移動の角度(上がプラス) rotate -45*y // 左右の移動の角度(左がプラス)
高さはそのままで,右 45 度へ回り込みました.
なお,このカメラの場合,常に, 原点 <0, 0, 0> を真正面に捉えるように, 球面上を上下左右に移動します.
今度は,「距離」を変更しよう:(-10 → -30)
... translate -30*z // コース中心からの距離 ...
遠くから見ています.
その他,「首振」と「視野」については, 必要に応じて,各自で確かめて見よう.
複数の物体をバランス良く配置し, ドラマチックなシーンを作りましょう.
F1 マシンの位置と方向を変えるには:
... // F1 マシンの配置 object { MyF1 rotate 60*y // 方向の角度 translate <-6, 0, 3> // 位置 } ...
コースアウト...
さらに,他のマシン(味方チームや敵チーム)も登場させるには:
// F1 マシンの組み立て #declare MyF1 = merge { ... } // 敵チームAの F1 マシンの組み立て #declare EnemyA = merge { ... } ... // F1 マシンの配置 object { MyF1 ... } // 味方チームのマシンの配置 object { MyF1 ... } // 敵チームのマシンの配置 object { EnemyA ... } ...
やだ,味方が巻き込まれてる...
カメラアングルをうまく設定しよう.
敵チームは続々と華麗にパス...
なお,立体視画像を作る場合, たくさんの物体をさまざまな距離に散りばめておくと, より立体感が増すようです. そこで,このレンダリング例では,空に気球を浮かべてみました.
... Balloons(30) // 気球を 30 個ランダムに配置 ...