その3 POV-Ray3.5 とりあえず、やってみよう
POV-Ray3.5 をインストールしたあと、起動して<新規作成> を選ぶと白紙のウィンドウが現れる。POV-Rayはここにいろいろな命令を書き込んだあと、ツールバーの<Run>ボタンを押してレンダリングすることでCGを作成するのだ。
まずは何も書き込まずに、この白紙のままの状態でテキトーなファイル名(例えば "sample.pov"、とか。)をつけて保存しよう。 で、何も考えずに、このままの状態でレンダリング(<Run>ボタンを押す)してみよう。POV-Rayは、プログラムが間違っているとエラーメッセージを出してストップするのだが、驚くことに白紙のままレンダリングしてもそのまま通ってしまってキチンと画像ファイル(.bmp)ができあがってしまうのだ。まぁ白紙のままでは、さすがに完成した画像はショボいのは仕方ないけど、これでPOV-Rayのプログラミングの基本的なことが理解できるのだ。やってみた結果、こうなる。(左がソースファイル、右はレンダリングの結果)
それでは、POV-RayでCGをつくるにはどうすればいいんだろう??これは普通にカメラで写真を撮るときのことを考えるとわかりやすい。まともな写真を撮るには何が必要だろう。もちろん、まず何よりもカメラが必要だ。次に写真に写すための被写体も必要だ。あまり意識しないけど、光も必要。CGもおなじことで、最低限、カメラ、被写体、光の3つを指定しないといけない。というわけで、さっそくPOV-Rayにこの3つを指定してみよう。ここでは次のようなシーンを想定した。
光源 → 座標 <-20,50,-10>、色は白(rgb<1,1,1> 後ろの "*2" は、光の強さ)
カメラ → 座標 <-20,15,0> から、<0,0,0> の方角に向ける。
被写体→ 位置は、座標 <0,0,0>。半径8の球。表面(texture)は青色(rgb<0,0,1>)
これと下に書いた実際のプログラムとを見比べてもらえれば、POV-Rayの基本的な命令が分かってもらえるとおもう。
レンダリングの結果は右のようになる。
light_source { <-20, 50, -20>, color rgb<1,1,1>*2 } camera{ location <-20,15,0> look_at <0,0,0> } sphere{ <0,0,0>,8 texture{ pigment{color rgb<0,0,1>} } }
でもいつもいつも色を指定するために、いちいち "RGB" の数値で指定しなきゃいけないってのは、ちょっとメンドウだ。というわけで、色指定を簡単にするためのインクルードファイル( colors.inc )を使ってみよう。といっても難しいことはない。さっきのプログラムの先頭に #include "colors.inc" という一行を追加するだけだ。あとはRGB指定をするかわりに、White, Red, Blude, Black.... のような、とっても分かりやすい命令を使うことができる。さっきのプログラムをちょっと変えて、下のようにしてみよう(赤字の部分が変更箇所)。
#include "colors.inc" light_source { <-20, 50, -20>, color White*2 } camera{ location <-20,15,0> look_at <0,0,0> } sphere{ <0,0,0>,8 texture{ pigment{color Blue} } }
ここでは色の指定方法を変えただけだから、レンダリング結果は変わらない。
さて、せっかく高機能のCGソフトを手に入れたのに、こんな黒地に青がボンヤリしただけの作品では、さすがにオソマツだ。せっかくなんで、もうちょっと手を加えてみることにしよう。このままでは絵的にちょっと収まりがわるいので、とりあえず床を作ってみよう。平面を作る命令 "plane" で、次のような床を作ることにする。
・床の向き: 法線が <0,1,0>
・床の高さ: y=-5 の位置
・床の色 : 白色(White)
これもまた、下の赤の部分と見比べてもらえれば、"plane" でどんな感じでそれぞれのパラメータを指定すればいいのか一目瞭然でしょう。
#include "colors.inc" light_source { <-20, 50, -20>, color White*2 } camera{ location <-20,15,0> look_at <0,0,0> } sphere{ <0,0,0>,8 texture{ pigment{color Blue} } } plane{ <0,1,0>,-5 texture{ pigment{color White} } }
さっきよりもだいぶマシになってきた。ただ、まだちょっと球の表面が、なんというかノッペリとしてて面白みがない。というわけで、ちょっと球の表面と床をピカピカに磨いてみよう。それぞれの物体(object)の表面の反射率やらなんやらを指定する命令は "finish" なので、これを使ってみよう。まずはハイライト(光源が映り込むことで物体の表面が明るく輝くこと)の強さを "phong" で、また反射の強さを "reflection" で指定しよう。それぞれ、0〜1の範囲で強さを指定できる。
#include "colors.inc" light_source { <-20, 50, -20>, color White*2 } camera{ location <-20,15,0> look_at <0,0,0> } sphere{ <0,0,0>,8 texture{ pigment{color Blue} finish{ phong 0.4 reflection 0.2 } } } plane{ <0,1,0>,-5 texture{ pigment{color White} finish{ phong 0.2 reflection 0.4 } } }
だんだんと質感がでてきて、なんか "それらしく" なってきた。"phong" や "reflection" の強さや、球や平面の色を変えたり、あるいは球を2個にしたりカメラや光源の位置を変化させたり、いろいろと遊んでみよう。遊んでるうちに、だんだんとPOV-Rayのコツがつかめてくると思う。
次回はリアルなガラス玉のCGに挑戦してみよう!
(つづく)