環境のセットアップ
まずは、ダウンロードして環境を整えましょう。以下のURLから進みましょう。
http://www.povray.org/download/
下の画面のようにダウンロードから、インストーラーを入れてください。
インストールが終わったら、起動してみましょう。起動したら、このような画面が出ると思うので、左上のNewを押して新規のファイルを開きましょう。
試しにサンプルを実行して動作を確認してみましょう。「File」→「Open File」を選択してください。
「scenes」というフォルダにある「advanced」、その中の「balcony」を選択してください。
そのあと、「Run」を押すと、プログラムが実行されます。
そして、実行した結果が以下になります。 正しく表示されたら、セットアップの完了です。
シーンファイルの組み立て
下の図のような画像を生成するには、何が必要でしょうか?
木箱とボールが必要ですよね。配置されているものを「オブジェクト」といいます。このオブジェクトには、素材に応じ、色や光の反射、透過の特性が割り当てられています。CGで画像を作るのことは、このオブジェクトの配置によって成り立っています。
さらに、大事なことが2つあります。「カメラ」と「ライト」です。どこから見た画像なのか、光がどう当たっているのか、この2つが無ければ画像が成り立ちません。以上の3つでシーンファイルは成り立ちます。
カメラ・ライトの設定
カメラ情報の記述
POV-Rayでは、カメラの位置をlocation、カメラの向きをlook_atの2つの座標から設定します。実際のカメラでは、同じ位置でも見え方を変えることができます。レンズの焦点距離を変え、画角が変わっているからです。この画角はangleとして指定することができます。(0~180度)
記述方法は、以下のようになります。
camera{
location<x座標,y座標,z座標> //カメラの位置を示す座標
look_at<x座標,y座標,z座標> //カメラの向き
angle 数字(0~180) //カメラ水平方向の画角
}
例えば、カメラのlocationが(5,3,3)で、look_atが(0,0,0)、angleが70の場合は下の図のようにカメラが設定されます。
ライトの記述
光が無ければ、真っ暗な画面になってしまうので、光源は大事です。最も単純な点光源は、位置、色、強さを設定します。記述は以下のようにします。
light_source{
<x座標,y座標,z座標> //点光源の位置座標
color rgb<赤,緑,青> //各光の強さ(0~1)
}
※オブジェクトの最終的な色味は、表面の色別反射率とそこに当たる光の色で決定される。光源側は基本的に、色を付けないのが良い。
点光源の位置が(5,3,5)、各光の強さが1の記述はこのようになります。
light_source{
<5,3,5> //点光源の位置座標
color rgb<1,1,1> //各光の強さ(0~1)
}
オブジェクトをつくる
オブジェクトには、形の情報と色、明るさの情報が必要でシーンファイルの中でつぎのように表しています。
object{
形の情報
色、明るさの情報
}
オブジェクトの形、色、明るさの記述
上で述べたように、各情報を記述し、図形の描き方を学びましょう。
直方体の記述
直方体の記述には、boxのワードと、対角にある2頂点の座標から表します。以下のように記述します。
box{<頂点1の座標>,<頂点2の座標>}
//頂点1,2は、直方体の対角をなす2頂点
頂点の座標は、x,y,zの座標を半角カンマで区切り、半角不等号<>で囲み、表します。例えば、頂点1(0,5,1)、頂点2(3,3,4)の緑色の直方体なら、以下のようになります。
object{
box{<0,5,1>,<3,3,4>}
pigment{color rgb<0,1,0>}
}
pigmentで始まる行が、色と明るさの情報を表しています。rgbの後ろの<>内で、区切られた3つの数字が、それぞれ赤、緑、青の光に対する反射率です。
球の記述
球の記述は、以下のようになります。
sphere{<中心座標>,半径}
直方体と同じように中心座標を設定します。半径は座標ではないので、<>を使わずに記述します。中心座標が(2,4,3)で、半径2の赤色の球はつぎのようになります。
object{
sphere{<2,4,3>,2}
pigment{color rgb<1,0,0>}
}
円柱の記述
円柱の記述は、以下のようになります。
cylinder{<中心座標1>,<中心座標2>,半径,[open]}
//円柱座標1は、円柱上面、中心座標2は底面に位置する円の中心座標
//openは、トイレットペーパーのように芯をくり抜くような形状を作成するオプションで、なしの場合は通常の円柱になる。
中心座標が、それぞれ(1,4,2),(2,4,5)で半径2の青い円柱の記述は次の通りになります。
object{
cylinder{<1,4,2>,<2,4,5>,2}
pigment{color rgb<0,0,1>}
}
円錐台の記述
円錐は、円錐台の特殊なケースで、円錐は以下のように記述します。
cone{<中心座標1>,半径1,<中心座標2>,半径2,[open]}
//中心座標1と半径1は底面となる円で、中心座標2と半径2は上面の円のもの。どちらかの半径が0なら、円錐になる。
//openは、メガホンのような形状を作成する場合のオプションで、なしの場合、通常の円錐台になる。
中心座標1が、(3,3,2)で半径1が3、中心座標2が、(2,4,5)で半径2が2のマゼンタ色の円錐台は以下のように記述します。
object{
cone{<3,3,2>,3,<2,4,5>,2}
pigment{color rgb<0,1,1>}
}
円環の記述
ドーナツ状の形である円環は、以下のように記述します。
torus{
半径1,半径2
}
半径1は円環の半径で、半径2はくり抜く部分の円の半径になります。半径1が4,半径2が2の黄色の円環は次のようになります。
object{
torus{4,2}
pigment{color rgb<1,1,0>}
}
※円環は2つのパラメータだけで記述できますが、原点を中心としたxz平面と平行に配置されるものしかできません。配置を自由にするには、平行移動と回転を利用する必要があります。
平面の記述
平面は、地面を表現したり、オブジェクトを組み合わせて新しい形を作り出したりするのに使います。記述は以下のようになります。
plane{
<平面の法線ベクトル>
原点から平面までの距離
}
法線ベクトルが(0,1,0)で( X軸Z軸に平行 )平面の原点からの距離が0の平面は以下のようになります。
object{
plane{<0,1,0>,0}
pigment{color rgb<1,1,1>}
}
インクルードファイルを使った色指定
上の例では、オブジェクトの色をpigment{color rgb<1,0,0>}のように記述していますが、これを簡単にするのがインクルードファイルです。そこで、例えば、pigment{color Red}と書けるようにすることもできます。
POV-Rayでは、色の名前と赤緑青の反射率の組み合わせを定義したものをファイルとして保存してあります。POV-Rayをインストールしたフォルダ内のincludeフォルダのcolors.incというファイルです。シーンファイルに以下を記述するだけで使えるようになります。
#include "colors.inc"