MayaとMaxのFOVとAOVについてまとめる
結局の所、ぴたりとMaya、Max間でカメラ情報のやりとりは可能になった
まぁ・・・・
単に3角関数を使ってるだけらから
そら一緒になってくれなくちゃこまる
ただし、誤差などは未調査
色々きじをあさってみると、若干誤差がある様な記事を見受ける
1280*720の解像度では、まったく違いは見受けられなかった
※正し、Bakeしたアニメーションキーでの話し
実写カメラをトラッキングしている場合はもしかしたら
わずかな違いは大きいかもしれない
または、解像度を極度に上げた場合は顕著な可能性がある
ではまとめ
以下は、以前の記事
http://www.sakaiden.com/?p=1725
http://www.sakaiden.com/?p=1719
Aov = 2.0 * atan( ( Camera水平アパーチャ * 25.4 ) / ( FocalLength*2.0 ) )
どうやらおおよそコレでいいらしい
インチ基準なのでご注意を
追記、数式になじみの無いデザイナーの為に。
atan とはアークタンジェントのこと
tan とは勿論タンジェントのこと
* はかけ算のこと(クセでこうしてしまう・・)
/ はもちろん割り算のこと
タンジェントやアークタンジェントは、三角関数の一つなので。
根気をだして、ネットで検索されたし。
FocalLength = ( 1 / ( tan(Aov/2.0) / ( Camera水平アパーチャ * 25.4 ) ) )*0.5
コレがその逆
もっと式をスマートに出来ると思う
で、結局
FOVはAOVの事なので
視野角設定が水平ならば、AOVの値をMaxでもそのまま使用できる
もし、Maxが水平でMaya側が垂直設定の場合は
Mayaからの垂直設定でのAOV値を水平に変換してやる必要がある。
ということで、こいつを使用。
まぁ、Melで組んでも、MaxScriptで組んでも結果は同じなのサ
FOV(またはAOV) = 2*atan( (tan( FOV(またはAOV) / 2 ) * (ピクセルアスペクト比) )
ピクセルアスペクト比は レンダリングサイズ横 / レンダリングサイズ縦
で、以下はその逆
FOV(またはAOV) = 2.0*atan( tan( FOV(またはAOV)/2) / (ピクセルアスペクト比) )
ただ、Maxは常に水平でFOV値を扱うため注意が必要
ふぅ
ここまで出ていれば、後は好きにできるので一安心
maxでの焦点距離の算出方法は、まだ試していないけど
今は困らないし、タブン、インチをミリに変容すればいいだけのこと。
AOVとFOVともに別に大した数学使ってないので助かった。
かなり、厳密なカメラトラッキングを行う場合の精度のあげ方は、よくわかりません。。。。
追記、小数点以下の数値を何桁まで扱うかで誤差を軽減出来るかと思われる
特にインチからセンチなどの単位変換で最もこの問題が生じやすいのでは?
追記
3ds maxでのアパーチャは レンダリング設定ウィンドウの [口径幅](Aperture Width) にある。
Mayaと違ってインチではなくmm。
追記
テストした際のスクリプトをどうぞ。
Pingback: カメラに平面オブジェクトを貼り付ける « sakaiden