焦点距離について・後編
2007年10月16日(Tue)
さて、Poserのカメラについて少し考えてみよう。
フィルムカメラでは、同じ大きさのフィルムを使っているとき、焦点距離が変わると画角が変化すると書いた。3DCGでは、フィルムにあたるのはレンダリングウィンドウ(レンダリングサイズ)といえるだろう。しかしこれは誰もが知っているように、大きさも縦横比も一定ではない。なので、焦点距離だけではなく、レンダリングサイズによっても画角は変化する可能性がある。
では、実際に確認してみよう。レンダリングサイズを変更するには、プレビューウィンドウの大きさを変更するか、レンダリングメニューの「レンダリングサイズ...(Render Dimensions...)」で「正しい解像度でレンダリング(Render to exact resolution)」に変更して、レンダリングサイズを変更してやればいい。
縦横の比が1:1の正方形で、レンダリングサイズだけを拡大してみる。(クリックで拡大)

図の通り、見え方(画角)は変化していない。レンダリングサイズを拡大するとカメラに写る範囲は変化せず、その解像度が上がる(より細部を描写できる)だけだと考えることができる。
では、今度は横幅もしくは高さを固定して、もう一方を変化させてみよう。


先ほどの画像と比べてみれば、横幅が変化する時は、高さが固定のために被写体が拡大しているように見えるものの、カメラに写る範囲(画角)そのものは変化していないことがわかるだろう。逆に高さを変化させたときは、被写体の大きさはそのままで、上下のカメラに写る範囲だけが変化している。
このことから、Poserではレンダリングサイズの横幅を基準として画角を決定していることがわかる。つまり、画角はレンダリングサイズで変化するわけではなく、常に横幅分の正方形が基準にあって、そこから高さの分だけ上下を切り落としたり付け足したりしているのだ。

(ちなみに、Shadeの場合は横幅ではなく長辺を基準にするらしい。)
なので、カメラアングルを模索するような場合は、まず横方向にどこまでの範囲をカメラに収めたいかを考えながら決定するといいだろう。横方向が決定してから、上下に収めたい範囲を考えてサイズを変更するなりすればいい。ちなみに、PoserのカメラにはShadeでいうフィルムライズなどの機能はない。カメラの位置を固定したまま、下はトリミングして上方向は延ばしたい、というような操作はできないので、その時は上下とも同じだけ伸ばしてから、ポストワークでトリミングするようにしよう。
さて、見た目を固定したままレンダリング範囲を縦方向に拡大できることはわかった。では、見た目を固定したまま横方向に拡大するようなことはできるのだろうか。
これはもちろん可能だ。前回説明した画角と焦点距離の関係を考えれば、誰にでも簡単に計算することができる。図にして考えてみよう。
今、上から見てカメラのがこのような状態であるとする。この見え方はそのままにレンダリング範囲を拡張したいと考えている。

レンダリングされる範囲を広げるということは、画角を広くとるということだ。ということは、レンダリングサイズの幅を大きくしたのとちょうど同じだけ画角を広げてやれば、元々の範囲に写っていたものの見え方はそのままに、レンダリング範囲が拡張できることになる。

画角を変化させるには焦点距離を変化させればいい。カメラレンズの主点を原点として、被写体までの距離をT、フィルム幅(の半分)をa、そして元々のレンダリング幅(の半分)をX、焦点距離をfとする。

それで、レンダリング幅がX'に変化した時の焦点距離f'を求めればいいわけだ。

図を見れば、それぞれの三角形は相似形であることがわかる。なので、被写体までの距離と焦点距離の比T:fと、レンダリング幅とフィルム幅の比X:aはいつでも等しいことになる。

レンダリング幅がXからX'に変化した時すなわちX'/X倍になったとき、焦点距離はX/X'倍すればいいことになる。つまり、レンダリング幅が倍になったら焦点距離は半分に、レンダリング幅が3/4になったら焦点距離は4/3倍にしてやればいいというわけだ。
実際にやってみよう。

そんなわけで、この関係を理解していればいつでもレンダリング範囲を自在にコントロールできる。もちろん、PoserのカメラにはShadeでいうフィルムシフトのような機能はないので、左右どちらかにだけレンダリング範囲を拡張するようなことはできない。そういう時は潔く諦めて、トリミングに走ろう。
次回はおまけネタとして、Poserのフィルム幅を測ってみるつもり。