2014年9月22日月曜日

Nuke Camera Mapping その3 焦点距離と画角とめまい

基本的な部分なんですけど、整理も兼ねて、、焦点距離と画角の関係おさらい。
カメラマップする際の投影サイズと焦点距離との関係です。



ω:画角
f:焦点距離
h:画面対角長

ω = 2 × atan(h/(2*f)) [rad] = 180°/π × 2 × atan(h/(2*f)) [deg]


例えば、HD(1920x1080)の画像を画面対角長2倍のサイズ(3840x2160)にエクステンションしてカメラマップする場合、
[画角:ω]が同じだとして、[画面対角長:h]が元カメラの2倍になるので、[焦点距離:f]は元カメラの1/2倍になります。

オリジナルHD画像(今回、ディストーション考慮せず。。)
エクステンションした画面対角長2倍サイズ画像(チェッカー部分を書き足し)


エクステンションサイズの倍率は、オリジナルサイズの何倍に相当するかを検証し、適正サイズを割り出します。

uvでのwindow scale


今のところ、↑が単純なエクステンションの場合、効率の良い方法のような気がしていますが、もし他に効率のいい方法があればご教授下さいw。


[ScanlineRender]ノードは(root.format)サイズに依存します。出力サイズを変更する場合は(bg)インプットに変更出力サイズの画像を接続するか、(overscan)パラメーターでbboxを拡張します。


例えば、焦点距離と画面サイズから画角を割り出して、、↓のような事も出来ます。実用性があるかどうかは別として。。

rotate.y
 = 180/3.14*2 *atan(Camera2.haperture/(2*Camera2.focal))
 = degrees(2 *atan(Camera2.haperture/(2*Camera2.focal)))




 
参考
Nuke Camera Mapping その1 Camera frustumと3D Card



応用として、ドリーズーム / DollyZoom(別称:カウンターズーム・コントラズーム・トロンボーンショット・ゾリー)のエクスプレッションを書いてみます。

ターゲットのオブジェクトの位置にCard1を置き、Camera1でドリーズームする場合、開始フレームを1として、オブジェクトの位置におけるfrustumのheightを固定します。
オブジェクトの位置におけるfrustumのheightを固定したまま、カメラの移動距離に伴って、focal lengthをリンクさせるエクスプレッションを記述します。

オブジェクトの位置におけるfrustumのheightを固定

オブジェクトの位置におけるfrustumのheight [開始フレームを1とした場合]
= Camera1.haperture(1)/(2*Camera1.focal(1))*(2*Card1.z(1))


カメラの移動距離 [開始フレームを1とした場合]
pow((Camera1.translate.x(1)-Camera1.translate.x)* (Camera1.translate.x(1)-Camera1.translate.x) + (Camera1.translate.y(1)-Camera1.translate.y)* (Camera1.translate.y(1)-Camera1.translate.y) + (Camera1.translate.z(1)-Camera1.translate.z)*(Camera1.translate.z(1)-Camera1.translate.z), 0.5)


focal length
= (Card1.z(1) ± カメラの移動距離 ) / オブジェクトの位置におけるfrustumのheight[開始フレームを1とした場合]*Camera1.haperture

※2014/09/25修正しました






ちなみに、センサーサイズ比較表、wikiより。

SensorSizes.svg
"SensorSizes" by Hotshot977. Subsequently reworked extensively by User:Moxfyre for correct, exact sensor size dimensions and accurate captions. - Image:SensorSizes.png. Licensed under Public domain via ウィキメディア・コモンズ.


Super 35mm
24.89 × 18.66 mm
crop factor : 1.39


0 件のコメント:

コメントを投稿