レイトレーシングにおけるカメラ

POV-Ray v3.7をインストールして、さっそく触ってみた。
今回知りたいことは、カメラについてのパラメータが、本来のカメラにおける何に相当するのか、である。カメラ部分のコードは下記の通り。

camera {
  perspective
  location <0,0,10>
  direction <0,0,1>
  right <1.33,0,0>
  up <0,1,0>
  sky <0,0,0>
  look_at <0,0,0>
}

perspective

カメラタイプを指定するらしい。言葉の意味は、遠近法のことを指している。

location

文字通り、カメラの空間上の位置を示している。

look_at

これも文字通り、カメラの向きを示している。視点を向ける座標を指定する形になっている。

sky

突然の空。さらにバンク角を座標指定するという分かり難さ。locationの位置と指定する座標を結んだ線に沿ってカメラが傾く動きをする。この3つのパラメータによってカメラの姿勢を制御できることが分かった。それにしても、なんでsky?

rightとup

view screenの比率を決めるパラメータ。View screenというのが、出来上がる絵のアスペクト比になる。このView screenというのが、カメラでいうところのフィルムサイズの比、あるいはセンサーサイズの比になるというイメージ、なのかな…。デフォルトはright=<1.33,0,0>,up=<0,1,0>で、4:3の比率になっている。画面に出てくる画素数を数えると、512 x 384pixelだったので、20万画素くらいだから、一昔毎前のWebカメラのイメージだろうか。

direction

説明が不可解なのだが、look_atで動く前のカメラの向きを示すらしい。意味はよくわからない。また、その長さは、カメラのlocationとview screenとの間の距離を指定するものらしい。つまり、これが焦点距離を表している事になる。長さを短くすると焦点距離が短く(つまり引いたような広角の画像になる)長さを長くすると焦点距離が長く(つまり望遠のように挟角の画像になる)。

ただ、焦点距離を変えても、下図のようにゆがみ具合が変わらない。普通、カメラのレンズを望遠側にしたら歪みが少なくなり、広角にすると歪みが大きくなる。どうやら、レンズの挙動をシミュレートしているわけではないように見える。

direction <0,0,1>

direction <0,0,0.5>

direction <0,0,1.5>

最初に指定したカメラタイプによってレンズを決定しているが、実際のレンズを選定しているイメージではなく、そのレンズでみえる見え方で表示しているということなのだろうと思う。POV-Rayのリファレンスマニュアルをもう少し読み込んだら、レンズの挙動を再現することができるかもしれない。今回テストしたソースコード全体を記載しておく。

// Camera test
camera {
  perspective
  location <0,0,10>
  direction <0,0,1> 
  right <1.33,0,0>
  up <0,1,0> 
  sky <0,0,0>
  look_at <0,0,0>
}

// point light
light_source{<0,0,10>color rgb<1,1,1>} 

// plane
plane{z,0
pigment{checker <1,1,1>, <0.5,0.5,0.5>, scale 1}
}

// boxes
box{<-0.5,-0.5,0>,<+0.5,+0.5,1>pigment {color rgb<1,0,0>}}
box{<-2.5,-2.5,0>,<-1.5,-1.5,1>pigment {color rgb<0,1,0>}}
box{<+1.5,+1.5,0>,<+2.5,+2.5,1>pigment {color rgb<0,0,1>}}
box{<-2.5,+2.5,0>,<-1.5,+1.5,1>pigment {color rgb<1,1,0>}}
box{<+2.5,-2.5,0>,<+1.5,-1.5,1>pigment {color rgb<0,1,1>}}


 

コメント

このブログの人気の投稿

LuxCoreRenderを使ってみる

BlenderでLuxCoreRenderを使う

レンズを置いてみる2