FBX Python SDKでBlender と 3ds Max間の出力シーンの画角アニメーションの変換スクリプトを
書きはじめてみています。
以前にアンダースキャンレンダリング用のスクリプトを書いた時にほぼ同内容の変換をやった気になっていましたが
ちょっと違っており、かつメモとしてあって良さそうなもんなのでPythonの関数としてママをおいておきます。
mm、インチ、ディグリー、ラジアンなど値が入り混じるワナにハマることがあるので気をつけなきゃだなー
なんて思いつつ、mathのみで成立させられるなんて便利だなーなんて思ったりもしました。
import math
#fw:SensorWidth(inch)
#fl:Focal Length
#fov:H-fov(degrees)
def calc_fov(fl,fw):
fov_radians = 2 * math.atan(fw / (2 * fl))
hfov = math.degrees(fov_radians)
return hfov
def calc_focallength(fov,fw):
focal=(fw/2)/(math.tan (math.radians(fov)/2))
return focal
普通にしていたら求める必要がないか、あるいはソフトの内部で処理し表示してくれる値なので
普通にDCCツールを使っている分には使う機会はまったくないと思いますが、
FBX Python SDKで焦点距離と水平視野角の相互変換ツールを書いているので必要に迫られてと言う感じです。