OpenTrackIO における OpenLensIO のレンズモデルの利用方法について

お世話になっております。

OpenTrackIO における OpenLensIO のレンズモデルの利用方法について質問があります。

LiveLinkOpenTrackIO フォルダ内のソースコードを確認したところ、OpenLensIO で定義された歪曲モデルを OpenCV の歪曲モデルへ変換し、その結果を CineCameraActor の DistortionState に適用しているように見受けられました。

この理解で正しいでしょうか。

また、OpenLensIO のレンズモデルを OpenCV 形式へ変換せず、OpenLensIO のまま直接 CineCameraActor に適用する方法は存在しますでしょうか。

もしそのような方法がある場合は、関連するドキュメントや実装例をご教示いただけますと幸いです。

よろしくお願いいたします。

[Attachment Removed]

お世話になっております。

変換されるのは係数の並び順と単位のみで、歪曲モデル自体は変換されていません。

OpenLensIOのBrown-Conrady D-U/U-DモデルはUE5.7以降エンジン標準のレンズモデルとして実装されています。OpenTrackIOのmodel名はそのまま静的データに渡され、専用ハンドラーとシェーダー(BrownConradyUDDistortion.usf)がOpenLensIOと同じ多項式除算モデルを評価します。D-Uの方向性も保持されます。

ConvertBrownConradyOTRKToOpenCVが行うのは次の2点だけです。

・並び順。OpenTrackIOはrの次数ごとに分子と分母が交互に並びますが、Unrealは分子K1〜K3、分母K4〜K6の順のため並べ替えます。

・単位。OpenLensIOの係数はmm座標が前提ですが、Unrealは正規化座標(OpenCV規約)で評価するため、radialにf^2/f^4/f^6、tangentialにfを乗算します。

数学的に等価な変換のため精度の劣化はありません。関数名のOpenCVは座標系の規約を指すもので、LensFileのSphericalモデルへの変換ではありません。

mm単位の係数を直接受け取る経路はエンジン側にありません。歪曲パイプライン全体が正規化UV空間で動作するため換算は必須です。独自モデルが必要な場合は、model名がBrown-Conrady以外であれば係数はそのままコピーされるため、ULensModelとハンドラーを実装してRegisterDistortionModelで登録すれば生の係数を受け取れます。

一点確認させてください。現在の実装ではradial係数が6個未満の場合、全て0として扱われ歪曲が適用されません。お使いの機材がk1〜k3の3個のみ送信するタイプの場合、この点が影響します。使用されているトラッキング機材やベンダーをお知らせいただけますでしょうか。

参照:

LiveLinkOpenTrackIOConversions.cpp

BrownConradyUDLensDistortionModelHandler.cpp

よろしくお願いいたします。

[Attachment Removed]