POV-Ray シーン記述言語 入門

Copyright (C) 1998 Jun Mizutani All rights reserved. (2/8/98)

「正式な説明は povdoc.txt を読んでください.」ですが,一応,私が理解 している範囲で説明をしてみます.

POVRAYはシーン記述言語(Scene Description Language)により作成した テキストファイルにしたがってレイトレーシングによりレンダリングを 行います.

ここでは,モデラーなどを使用しないでエディタで直接シーンファイル をプログラミング感覚で記述する方法を説明します.

シーン記述言語とは何かというと,絵に書く情景を説明するための言葉です.

例えば

「表面が磨かれた青い球が,茶色と黄色のタイル貼りの床の上にある.
白い光が後方から照らし,青い球を斜め上から見ている絵」

という日本語をPOVRAYが理解できる言葉(シーン記述言語)に書き換える必要が あります.

まず最初に空間の方向(座標系)について説明しておきます.
pov_3d.png 右に行くほど X が大きくなり,上にいくと Y が,遠くに行くと Z 座標が増加します. 位置や方向の指定に必要となります.ここで覚えてしまいましょう.

考え方は,シーン中に存在する物体は何かをまず考えます.

上の例では「球」と「床」と「光源」がありますが,もう一つそれらを見てい るカメラが必要です.

  球 : sphare{ 細かい設定 }
  床 : plane { 細かい設定 }
  光源 : light_source { 細かい設定 }
  カメラ : camera { 細かい設定 }

光源とカメラはどのシーンにも必要なものですが,球と床は描きたいものに よって変更します.

さて,次は { 細かい設定 } の部分を考えます.それには物体を修飾している 言葉に注目します.

表面が磨かれた青い球」では

    青い
    表面が磨かれた

が「球」を修飾していますが,大きさと位置が指定されていません.そこで 大きさは1,位置は原点として補います.

    位置   : <0, 0, 0>
    大きさ : 1
    青い   : texture { pigment { color Blue } }
    表面が磨かれた : finish { specular 1 roughness 0.01 reflection 0.13 }
    sphere { <0,0,0>,1
        texture {
            pigment { color Blue }
            finish { specular 1 roughness 0.01 reflection 0.13 }
        }
    }

これで「表面が磨かれた青い球」が原点にできました.

茶色と黄色のタイル貼りの床」に注目します.ここで床は水平方向に無限に広がる平面を使います. 平面はplaneオブジェクトを使います.

    向き   <0, 1, 0>
    位置   -1
    茶色と黄色のタイル貼り texture { pigment { checker Brown, Yellow }}

向きは平面の法線ベクトル(面に垂直な線)として指定します.この場合 <0,1,0> で,原点からまっすぐ上に距離1の点(x=0,y=1,z=0)を指定しています.

位置は半径1の球が原点にあるため,-1だけ下に下げます.

    plane { <0,1,0>,-1
        texture {
            pigment { checker Brown, Yellow }
            finish { reflection .4 ambient 0.2 }
        }
    }

光源は白い光で上後方で,ここでは適当に以下の設定としました.

    light_source { <50,300,-200> color White }

さて,以上のシーン(景色)を写すカメラですが,「斜め上から見ている絵」です から,位置の指定が必要です.さらに見ている方向も必要となります. ここも適当に後ろ(Z座標が負)に下がって,ちょっと上から球の中心(原点)を見る ことにします.

    camera {
        location <0,0.5,-4>
        look_at <0,0,0>
    }

光源の位置やカメラの位置は出来上がった絵を確認しながら「適当に」変更すれば いいと思います.

  background { SkyBlue }
の説明をしていませんが,背景が黒ではつまらないので背景色を追加してみました.
以上のシーンの完全なソースを示します.
//--------------------------------------------------------------
#include "colors.inc"
#include "textures.inc"

camera {
    location <0,0.5,-4>
    look_at <0,0,0>
}

light_source { <50,300,-200> color White }

background { SkyBlue }

plane { <0,1,0>,-1
    texture {
        pigment { checker Brown, Yellow }
        finish { reflection .4 ambient 0.2 }
    }
}

sphere { <0,0,0>,1
    texture {
        pigment { color Blue }
        finish {specular 1 roughness 0.01 reflection 0.13}
    }
}
//--------------------------------------------------------------

このソースを blueball.pov として保存した後,レンダリングします.

$ povray +i blueball.pov +D +w160 +h120

レンダリングした画像はこれです.blueball.png

たった25行のファイルですが,ペイントツールで描くには大変そうな絵 ができました. オプションの +w160 +h120 を +w640 +h480 等と変更すると より見映えがする画像となります.

さらに球(sphere)の pigment { color Blue } の部分を,例えば Jade に変更したり,床(plane)の pigment { checker Brown, Yellow } の部分を色々変える等,このソースの少しの変更だけでも際限なく遊ぶことができると思います. Enjoy!


[CONTENTS] [PREVIOS] [NEXT]

[HOME]


ご意見・ご感想は,mizutani.jun@nifty.ne.jp まで.