カメラの画角を計算する FOVとAOVのまとめ 1


MayaとMaxのFOVとAOVについてまとめる
結局の所、ぴたりとMaya、Max間でカメラ情報のやりとりは可能になった

まぁ・・・・

単に3角関数を使ってるだけらから
そら一緒になってくれなくちゃこまる

ただし、誤差などは未調査
色々きじをあさってみると、若干誤差がある様な記事を見受ける

1280*720の解像度では、まったく違いは見受けられなかった
※正し、Bakeしたアニメーションキーでの話し

 

実写カメラをトラッキングしている場合はもしかしたら
わずかな違いは大きいかもしれない
または、解像度を極度に上げた場合は顕著な可能性がある

ではまとめ

 

以下は、以前の記事

http://www.sakaiden.com/?p=1725
http://www.sakaiden.com/?p=1719

 

FocalLengthからAOVを算出

Aov = 2.0 * atan(  ( Camera水平アパーチャ * 25.4 ) / ( FocalLength*2.0 )  )

 

どうやらおおよそコレでいいらしい
インチ基準なのでご注意を

 

追記、数式になじみの無いデザイナーの為に。

atan とはアークタンジェントのこと
tan とは勿論タンジェントのこと
* はかけ算のこと(クセでこうしてしまう・・)
/ はもちろん割り算のこと

 

タンジェントやアークタンジェントは、三角関数の一つなので。
根気をだして、ネットで検索されたし。

 

 

 

AOVからFocalLengthを算出

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。

 

追記
テストした際のスクリプトをどうぞ。

ダウンロード:カメラをの視野角を計算するアレ


Leave a comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

One thought on “カメラの画角を計算する FOVとAOVのまとめ