5. カメラ


5. カメラ(camera)

カメラはシーンを見る方法を指定することで、シーンが実際にどのように表示されるかを決定するものである。 POV-Rayでは下記の7種類のカメラが使用できる。

パースペクティブ(透視投影;perspective)
正射影(orthographic)
魚眼(fisheye)
超広角(ultra_wide_angle)
オムニマクス(omnimax)
パノラマ(panoramic)
円筒投影(cylinder)
球投影(spherical)

POV-Rayでは特にカメラタイプを指定しない限りパースペクティブ・カメラが使用される。 これは市販されている一般的なカメラに相当するものである。 このセクションではこのパースペクティブ・カメラを中心に、カメラの指定法について説明する。

< camera の構文>


 camera {

   [ CAMERA_TYPE ]

   location <VECTOR>

   right <VECTOR>

   up <VECTOR>

   direction <VECTOR>

   sky <VECTOR>

   [ angle FLOAT ]

   [ CAMERA_MODIFIERS ... ]

   look_at <VECTOR>

 }

camera カメラを設定するキーワード
CAMERA_TYPE カメラの種類の指定するキーワード。7種類(パースペクティブ:perspective、正射影:orthographic、魚眼:fisheye、超広:ultra_wide_angle、オムニマクス:omnimax、パノラマ:panoramic、円筒投影:cylinder)がある。省略するとディフォルトのperspectiveとなる。
location <VECTOR> 視点の位置の指定。 [デフォルト:<0, 0, 0> ]
right <VECTOR> upとともに使用してビュー・ウインドウ(イメージが投影される平面)のサイズとアスペクト比を設定する。 また、座標系を指定するためにも使用する。 [デフォルト:<1.33, 0, 0> ]  ⇒「5.4 アスペクト比」
※ 右手系で使用する場合は<-1.33, 0, 0>を指定しなければ
ならない。 ⇒「5.1 座標系の変換」
up <VECTOR> rightとともに使用してビュー・ウインドウのサイズとアスペクト比を設定する。
direction <VECTOR> カメラの最初の向きと視点からビュー・ウインドウまでの距離の指定。 rightとともに水平方向の視角を決定する。 [デフォルト:<0, 0, 1> ] 
sky <VECTOR> カメラの傾きの指定。 [デフォルト:<0, 1, 0> ]
※ 右手座標系では通常 <0, 0, 1>と指定する。
angle FLOAT 水平方向の視角。 0°〜180°の範囲で指定する。
CAMERA_MODIFIERS カメラの移動と特殊効果の指定。⇒「5.3 カメラの移動と特殊効果」
look_at <VECTOR> 注視点の位置の指定。 [デフォルト:<0, 0, 1> ]

※ angleとCAMERA_MODIFIERはオプションである。

※ look_atは最後に指定しなければならない。

図5にパースペクティブ・カメラの各パラメータの関係を示す。

図5 パースペクティブ・カメラの各パラメータの関係

★カメラ文の主なディフォルト設定(省略するとこの設定値が使用される。)


    camera {

      perspective

      location <0,0,0>

      direction <0,0,1>

      right <1.33,0,0>

      sky <0,1,0>

      up <0,1,0>

      look_at <0,0,1>

    }


5.1 座標系の変換

どんなシーンを作成する場合でも、最初に必ず確認しなければならないのは座標系である。POV-Rayでは座標系の設定をカメラ文の中で行う。

POV-Rayのデフォルトの座標系は左手系である。しかし、CGの分野では過去は左手系であったが、現在では右手系が標準となっている。このマニュアルでも説明は原則的に右手系で説明する。

シーンを右手座標系で作成するためには、カメラ・ステートメントの中で次の指定を必ず行わなければならない。次の指定は、右手座標系に設定し天頂点をz方向にするためのものである。

右手座標系に変換するための指定例>


   camera {

     location <50, 50, 100>

     right <-1.33, 0, 0>

     sky <0, 0, 1>

     look_at <0, 0, 0>

     angle 45

   }

※ 上記は典型的な例を示している。通常の場合は上記の設定項目だけでよい。location、look_at、angleは必要に応じて変更する。カメラを水平ではなく傾けたいときはskyを変更する。

※ right、skyについては「5.2-2 right、up」「5.2-5 sky」を参照せよ。

※ rightのx成分は基本的には-1.33でなくても負数でさえあればなんでもよい。 しかし、 アスペクト比(「5.4 アスペクト比」参照)の関係から通常は-1.33を指定する。

※ 右手系と左手系の違いについては「2.1 座標系」を参照せよ。


5.2 パースペクティブ・カメラ(透視投影法)

パースペクティブ・カメラとは、もっとも一般的に使われているカメラに相当するものである。 POV-Rayではカメラ種類を省略するとデフォルトによってこのカメラが使用される。

5.2-1 視点(location)、注視点(look_at)

locationは視点であるカメラの位置である。位置はx、y、z座標で指定する。look_atは注視点であり、見つめたい点または、その方向上にある適当な1点を指定する。 カメラの位置と向きは基本的にこの2つの点によって決定される。

5.5-2 right、up

rightとupのベクトルの長さはビュー・ウインドウのサイズとアスペクト比を決定する。 視野の広さはright、up、directionのベクトルの長さの比率によって決まる(図5参照)。upは通常は変更する必要はない。

※ up、right、directionは、常に互いに垂直となるようにすべきである(垂直にしないとイ メージが歪んでしまう)。 またvistaバッファは、カメラのベクトルが垂直でなければ働 かない。

rightは座標系の指定にも使用する。 rightベクトルのx成分を正の値にすると左手系、負の値にすると右手系になる。 右手系で使用する場合、通常はright <-1.33, 0, 0>を指定する。

5.2-3 direction

directionベクトルは、look_atやrotateのベクトルによって移動する前のカメラの最初の向きを指定する。 またdirectionベクトルとrightベクトルの長さとの比率によって水平方向の視角が決まる(図5参照)。directionは通常は変更する必要はない。

direction <0, 0.5, 0> direction <0, 3, 0>
図5.2-3 directionベクトルの長さによる違い

5.2-4 画角(angle)

angleはカメラの視野の広さを指定するために使用する。 角度が小さいと望遠レンズになり、角度が大きいと広角レンズになる。(パースペクティブ・カメラでは視角はrightとdirectionの比率によって決まるが、angleを使うとより簡単に視角を指定できる。)

angleを使って視角を指定するとdirectionで指定した視角は無効になる。 その場合directionベクトルの長さはangleで指定した視角に合わせて自動的に調整される。

angle、right、directionの関係は次式で表される(right_lengthとdirection_lengthはそれぞれrightとdirectionベクトルの長さ)。

direction_length = 0.5 * right_length / tan(angle / 2)

5.2-5 天頂方向(sky)

skyベクトルはカメラの天頂方向を決定する。これを変更することでカメラの傾きを調整する。これによって飛行機が旋回する時のようなイメージを表現することができる。

※ 右手座標系では通常sky <0, 0, 1>と指定する。
※ skyはlook_atより前に指定しなければならない。

sky <0, 0, 1> sky <0, 1, 1>
図5.2-5 skyベクトルによる違い


5.3 カメラの移動と特殊効果

POV-Rayではrotateとtranslateを使ってカメラを移動させることができる。 また、いくつかの特殊効果も使用できる。

5.3-1 カメラの移動

rotateとtranslateを使って一度配置したカメラを移動させることができる。

例)

          camera {

            location <0, 0, 0>

            direction <0, 0, 1>

            up <0, 1, 0>

            right <-1.33, 0, 0>

            rotate <30, 60, 30>

            translate <5, 3, 4>

            look_at <0, 0, 0>

          }

この例の場合、最初に原点に置いたカメラをx軸まわりに30°、y軸まわりに60°、z軸まわりに30°回転させ、その後点<5, 3, 4>に移動させる。

※ rotate、translateについては「2.2 変形」を参照せよ。

5.3-2 フォーカル・ブラー(焦点ぼけ)

POV-Rayでは実際のカメラの口径の変化による焦点ぼけを表現することができる。 これは特定の部分のサンプリングを多くすることによって、焦点の被写界深度を表現するものである。

<フォーカル・ブラーの構文>


 aperture FLOAT

 focal_point <VECTOR>

 blur_samples FLOAT

 confidence FLOAT

 variance FLOAT

aperture FLOAT 鮮明に見える範囲を0〜1で指定する。 値を大きくするとぼやけた部分が大きくなる。 [デフォルト:0 ]
focal_point <VECTOR> 焦点の位置の指定。 指定した座標を中心に焦点ぼけが生じる。 [デフォルト:<0, 0, 0> ]
blur_samples FLOAT 各ピクセルに使用する光線の最大数。 値を大きくすると結果のイメージは滑らかになるがレンダリングは遅くなる。
confidence FLOAT サンプリングの精度の指定。 評価される色が実際の色の何%になるまで計算するかを0〜1で指定する。 [デフォルト:0.9 ](90%)
variance FLOAT サンプリングの許容誤差の指定。 [デフォルト:1/128 ]

※ これらの設定項目は、すべてカメラ文に追加する項目である。

フォーカル・ブラーなし フォーカル・ブラーあり(焦点の位置は左下の球)
図5.3-2 フォーカル・ブラーの効果

5.3-3 カメラ光線(視点から出る追跡光 線)の揺らぎ

カメラにノーマル・ステートメントを追加することによって、イメージ全体が歪んだような特殊効果が得られる。 アニメーションのデモ・シーンcamera2.povを参照せよ。
※ ノーマルの指定法については 「12.2 ノーマル」を参照せよ。

図5.3-3 ノーマルの効果


5.4 アスペクト比(縦横比)

アスペクト比とは、イメージが投影されるビュー・ウインドウの幅と高さの比のことである。POV-Rayではrightとupのベクトルの比によってアスペクト比を決定する。 デフォルト値はright <1.33, 0, 0>、up <0, 1, 0>であり、この場合アスペクト比は4 : 3(典型的なPCのモニターのアスペクト比)となる。 rightとupの比を調整することによって、細い縦長のイメージや幅の広いイメージ、完全に正方形のイメージなどを得ることができる。

※ 上記のデフォルト値では座標系が左手系になるので、右手系で使用する場合はx成分 に負の値を指定しなければならない。 通常は
right <-1.33, 0, 0 >

と指定する。


5.5 カメラ識別子

カメラは識別子として宣言することができる。 これによって数種類のカメラを簡単に変更できるようになる。

例)

          #declare Long_Lens =

           camera {

             location -y*100

             right<-1.33,0,0>

             angle 3

           }



          #declare Short_Lens =

           camera {

             location -y*50

             right<-1.33,0,0>

             angle 15

           }



          camera {

            Long_Lens           // カメラの選択

            look_at Here

          }


5.6 その他のカメラ

POV-Rayではパースペクティブ・カメラ以外にも様々なタイプのカメラが使用できる。

カメラのタイプの指定には、カメラ・ステートメントの中にそれぞれのカメラのキーワードを記述すればよい。 タイプによって使用するパラメータが異なるので注意が必要である。

右図はパースペクティブ・カメラによるサンプル・イメージである。 以下のカメラのイメージは比較のためにすべてこれと同じ設定にしてある。

図5.6 パースペクティブ・カメラによる画像

※ vistaバッファはパースペクティブ・カメラと正射影カメラでしか使用できない。

※ 超広角、パノラマ、円筒を使う場合はdirectionには単位ベクトルを指定したほうがよい。

※ 正射影、魚眼、オムニマクスを使う場合はdirectionベクトルの長さは関係ない。

※ パースペクティブ・カメラ以外は視角の大きさに制限はない。 視角を360°より大き くした場合はイメージを繰り返して見ることになる(繰り返しの方法は使用するカメラの 特性による)。

5.6-1 正射影(orthographic)

この投影法はカメラから出る平行光線を使ってシーンのイメージを作る。

※ right、upはビュー・ウインドウのサ イズとアスペクト比を設定する。
※ direction、angleは使用しない。

図5.6-1 正射影のイメージ

5.6-2 魚眼(fisheye)

これは球状の投影法である。 楕円状のイメージを得たい場合はアスペクト比を調整せよ(「5.4 アスペクト比」参照)。

※ 視角はangleによって指定される。 180°であれば標準的な魚眼となり、 360°であれば全てが見える " 超魚 眼 " となる。

※ right、upはアスペクト比を設定す る。

図5.6-2 魚眼(180°)のイメージ

5.6-3 超広角(ultra_wide_angle)

この投影法は魚眼に多少似ているが、こちらは球ではなく長方形のイメージである。

※ 視角はangleによって指定する。
※ right、up、directionはパースペクテ ィブ・カメラと同様に働く。

図5.6-3 超広角(360°)のイメージ

5.6-4 オムニマクス(omnimax)

この投影法は、視角が垂直方向に縮められた180°の魚眼である。 実際にこの投影法は、ドーム形のオムニマクス劇場で見る映画に使われる。

※ angleは使用しない。

図5.6-4 オムニマクスのイメージ

5.6-5 パノラマ(panoramic)

この投影法は、円筒状投影法を用いることによって視角を180°より大きくすることができる。

※ 視角はangleによって指定する。

※ up、rightはパースペクティブ・カメ ラと同様に働く。

図5.6-5 パノラマのイメージ

5.6-6 円筒投影(cylindrer FLOAT)

この投影法はシーンを円筒に投影するものである。 円筒の向きと視点の位置によって4つのタイプがあり、使用するカメラを番号で選択する。

cylinder 1:垂直円筒・固定視点(パースペクティブに近い)
cylinder 2:水平円筒・固定視点( 〃 )
cylinder 3:垂直円筒・円筒の軸に沿って視点が移動する(正射影に近い)
cylinder 4:水平円筒・円筒の軸に沿って視点が移動する( 〃 )

※ タイプ1、3では、円筒はupベクトルに沿って位置し、幅はrightベクトルの長さによ って決定される(angle によって無視される場合もある)。

※ タイプ3ではupベクトルはイメージの高さを決定する。 例えば、up 4*yのカメラを原 点に置いた場合は -2<y<2 の範囲が見える。 すべての視線はy軸に垂直である。

※ タイプ2、4 では、円筒はrightベクトルに沿って位置する。

※ タイプ4 では視線はright ベクトルに垂直である。

cylinder 1 cylinder 2
cylinder 3 cylinder 4
図5.6-6 円筒投影のイメージ


5.6-7 球投影(spherical)

球投影は魚眼レンズの投影法と似ている。魚眼では極座標系が使用されるが、球投影では直交座標系が使用されるところが異なっている。直交座標系であるため、球へのマッピングが容易になった。

<球投影の構文>


 camera {

   spherical

   [angle HRIZONTAL [VERTICAL] ]

   [CAMRA_ITEMS...]

 }

spherical 球投影を指定するキーワード
angle HRIZONTAL 横方向の画角の指定。 [デフォルト:360]
VERTICAL 省略すると、横方向の画角の1/2がディフォルトになる。
CAMRA_ITEMS... 必要なカメラ識別子の記述

図5.6-7 球投影のイメージ ( angle 180 90 )