カメラマップする際の投影サイズと焦点距離との関係です。
ω:画角
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" 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