Unreal Engine では、CG レンダリングやライブ ビデオからの正確なコンポジションの作成に、実世界でのビデオ映像の撮影に使用する物理カメラを正確にシミュレートするバーチャル カメラを使用します。バーチャル カメラの位置と向きは、物理カメラと厳密に一致している必要があります。また、どの瞬間でも各ビデオ フレームをカメラの位置と正確に同期していることを保証するため、追跡情報がビデオ フィードの正確なタイミングと一致している必要があります。
Camera Calibration プラグインでは、エディタ内でカメラとレンズをキャリブレーションするための簡素化されたツールとワークフローを提供します。このキャリブレーション プロセスにより、バーチャル カメラを空間内の物理カメラの位置と正確に位置合わせするため、また物理カメラのレンズ歪みをモデル化するために必要なデータが生成されます。このプラグインでは、カメラとレンズのすべてのキャリブレーション データをカプセル化する Lens File アセット タイプが導入されます。
また、Camera Calibration プラグインは、キャリブレーション済みの歪みデータを取得し、CG レンダリングに正確なポストプロセス エフェクトを適用する、優れたレンズ歪みパイプラインを備えています。歪みのポストプロセス エフェクトは、CineCamera アクタに直接適用でき、ムービー レンダー キュー で使用したり、Composure の CG レイヤーに対して使用したりできます。
このプラグインのツールとフレームワークは拡張性と柔軟性を備え、幅広いレンズとワークフローに対応しています。
カメラ レンズのキャリブレーション
フォーカスおよび絞りのマッピング
Camera Calibration プラグインは、Lens File アセットを使用し、生のフォーカス値および絞り値を CineCamera コンポーネントが使用する物理的な単位に変換します。たとえば、生の入力値には、Live Link を介して外部デバイスからストリーミングされたエンコーダの位置 (絶対位置または正規化された位置) が含まれる場合があります。これらの値を適切な単位に変換することもできますが、より高い精度を実現するには微調整が必要になります。
キャリブレーションされたデータ
キャリブレーションされたレンズ データは、カメラのフォーカスやズームに応じて異なります。そのため、高い品質のキャリブレーションを実現するためには、多くの場合、複数のフォーカス ポイントおよびズーム ポイントを使用してキャリブレーションを行う必要があります。歪みパラメータ、カメラの組み込み属性、および節点オフセットはすべて、関連付けられたフォーカス値およびズーム値とともに Lens File 内に格納されます。任意のフォーカスおよびズーム位置について、格納されたフォーカスおよびズーム ポイントを補間することでキャリブレーションされた Lens File を評価することができます。
歪みパラメータ
Camera Calibration プラグインを使用すると、物理レンズ モデルに対して定義された、正確なレンズの歪みのポストプロセス エフェクトをサポートできるようになります。このレンズ モデルでは、レンズを中心とするさまざまな位置の歪みの計算に使用する一連の歪みパラメータを定義します。
このプラグインは Brown-Conrady モデルに基づく球形歪みモデルをサポートしており、5 つの歪みパラメータ (K1、K2、P1、P2、K3) を使用します。これらのパラメータはユニットレスであり、キャリブレーション プロセスの一部で計算されます。このプラグインは拡張可能であるため、異なるパラメータを使用する追加モデルのサポートを加えることができます。
カメラの組み込み属性
カメラの組み込み属性には焦点距離と画像の中心が含まれ、カメラの座標系の 3D のポイントが 2D の画像にどのように投影されるかを定義します。また、これらの組み込み属性は、カメラとレンズを正確にモデル化するためにキャリブレーションする必要があります。
キャリブレーション方法に応じて、物理的な単位 (ミリメートル) またはピクセル数を使用して焦点距離が計算されます。焦点距離は、2D ベクター (Fx, Fy) として表現される場合が多く、その長さはほぼ同じになります。この表現を一般化するため、Lens File はキャリブレーションされた焦点距離を正規化した値として格納します。その正規化の際にはイメージ センサーの幅と高さ (ミリメートル単位)、または画像解像度 (ピクセル単位) で除算が行われます。
正規化の後、Fx と Fy の長さは互いにほぼ同じではなくなりますが、(Fy / Fx) は、アスペクト比とほぼ等しくなります。
キャリブレーションされた画像の中心では、カメラのレンズとイメージ センサー間の物理的なずれが考慮されますが、通常、この中心は理想的な中心に近いものとなります。また、画像の中心は通常、物理的な単位 (ミリメートル) またはピクセル単位で計算され、2D ベクター (Cx, Cy) として表現されます。焦点距離と同様に、画像の中心は、センサーの幅と高さ (ミリメートル単位)、または画像解像度 (ピクセル単位) で除算することで正規化されます。正規化の後、画像の中心は (0.5, 0.5) に近いものとなります。
節点オフセット
レンズの節点とは、光線が収束する点のことです。Unreal Engine では、実世界の物体と CG オブジェクトの位置が確実に一致するように、仮想ワールド内のこの節点にバーチャル カメラを配置する必要があります。
節点オフセット キャリブレーションは、独立した単一のキャリブレーション ステップで、追跡される物理カメラのポーズを見つけ、そのポーズと追跡データの間のオフセットを計算します。これにより、カメラの移動時にバーチャル カメラのトランスフォームも物理レンズの節点に引き続き設定されます。
ST マップ
ST マップとは、UV 空間内の歪みが適用された画像の座標に対し、各ピクセル値が対応する画像のことです。ST マップは、Unreal Engine 外部のキャリブレーション ツールを使用して生成でき、シーンのテクスチャをサンプリングする際に、UV にポストプロセスで変更を加えるのに使用できます。
外部のツールからキャリブレーションされたデータをすでに生成したユーザーをサポートするため、Camera Calibration プラグインでは Lens File への ST マップの直接入力をサポートしています。
Lens File アセット エディタ
Lens File アセット エディタは、キャリブレーションされたデータを Lens File に自動的に入力する複数のキャリブレーション ツールを提供します。また、このエディタは計算済みの結果を調整できるカーブ エディタも備えています。
キャリブレーション ステップ
Unreal Engine に装備されているキャリブレーション ステップには、スタティックなレンズ情報の入力、レンズ歪みキャリブレーション、画像の中心の調整、節点オフセット キャリブレーションを行うステップなどが含まれます。キャリブレーション ステップのリストは拡張可能です。つまり、プログラマーが追加のキャリブレーション ツールを実装し、エディタに追加できます。
レンズ情報
ユーザーは、レンズのモデル名やシリアル番号などのレンズのスタティック データに加え、イメージ センサーの寸法などのカメラのデータを入力できます。精度の高いレンズ情報を使用することで、レンズの歪みとカメラの組み込み属性を正確にキャリブレーションできます。
レンズの歪み
ユーザーは、歪みパラメータやカメラの組み込み属性の計算に使用されるキャリブレーション アルゴリズムを選択できます。このプラグインには、一連の 3D-2D ポイント対応を使ったレンズのキャリブレーションを OpenCV に依存する次のアルゴリズムが含まれます。
チェッカーボード: それぞれの隅が自動的に検知される厳密なチェッカーボード グリッドを使用します。
ポイント メソッド:特定可能なキャリブレーション パターンを含むキャリブレーター オブジェクトを使用します。このオブジェクトの機能はユーザーが手作業で設定する必要があります。
このステップは拡張性が高く、UCameraLensDistortionAlgo クラスから継承することで、プログラマーは追加のアルゴリズムを実装することができます。
画像の中心
ユーザーは、レンズのキャリブレーション後に画像の中心位置を手動で調整できます。これは、キャリブレーションされた 2 つのフォーカス ポイントまたはズーム ポイント間の補間された画像の中心が正確でない場合や、温度などの外部要因によってカメラのレンズに何らかの影響が及ぶ場合に役立ちます。
節点オフセット
ユーザーは、節点オフセットの計算に使用されるキャリブレーション アルゴリズムとキャリブレーター オブジェクトを選択できます。このプラグインには次のアルゴリズムが備わっています。
ポイント メソッド: LED マーカーなどの特定可能な機能を含む、追跡されたキャリブレーター オブジェクトを使用すると、カメラのビューにおけるさまざまな位置にこのキャリブレーターを配置でき、サイマルカム ビューポート内でクリックすることで、キャリブレーターの現在の 3D および 2D 位置をキャプチャできます。十分な数のポイントを収集した後は、キャプチャしたポイントの再投影エラーを最小限に抑えることで節点オフセットが推定されます。
Aruco マーカー:追跡されたキャリブレーターの 2D 位置と、それにプリントされた ArUco パターンのキャプチャに画像処理を使用するポイント メソッドの特殊化されたものです。
チェッカーボード:追跡されたキャリブレーターの 2D 位置と、それにプリントされたチェッカーボード パターンのキャプチャに画像処理を使用するポイント メソッドの特殊化されたものです。
オプティカル軸: キャリブレーター オブジェクトを使用して、すべてをレンズの中心に正確に投影するカメラからのさまざまな距離において、少数のポイントをキャプチャすることができます。これらの点の間のラインはオプティカル軸を表しており、この軸に沿ってバーチャル カメラを入射瞳の位置が検知されるまで手動で移動することで、節点ポイントを見つけます。
このステップは拡張性が高く、UCameraNodalOffsetAlgo クラスから継承することで、プログラマーは追加のアルゴリズムを実装することができます。
ビューポート設定
ビューポート設定を調整することで、Lens File アセット エディタのビューポートで表示するものを変更できます。[Viewport Settings (ビューポート設定)] には次のパラメータが含まれています。
Transparency (透過性):メディアと CG レイヤーのコンポジットを調整するためのスライダです。0.0 は 100% のメディアを表し、1.0 は 100% の CG を表します。
Camera (カメラ) CG レイヤーのレンダリングに使用する Virtual Camera (バーチャル カメラ) アクタです。すべてのキャリブレーション ステップでは、このカメラに、そのフォーカス値、絞り値、およびズーム値を駆動する Live Link カメラ被写体が含まれており、この Lens File アセットが割り当てられている必要があります。
Media Source (メディア ソース): メディア レイヤーのレンダリングに使用する メディア プロファイル です。
Overlay (オーバーレイ): ビューポートでオーバーレイを適用するためのオプションです。[None (なし)] または [Crosshair (照準線) を選択できます。プラグインの設定で独自のカスタム オーバーレイ マテリアルを追加することもできます。
歪みパイプライン
レンズ歪みパイプラインは、カメラおよびレンズのデータを使用し、最終的なレンダリングに適用される、正確な歪みエフェクトを作成します。
主に次の 3 種類の入力データがあり、実世界のレンズの歪みをモデル化するのに使用できます。
Live Link Lens ソース。フレームごとの歪みパラメータとカメラの組み込み属性をストリーミングします。
Live Link Camera ソース。カメラの FIZ をストリーミングし、Lens File アセットを評価します。
カメラ アクタの現在のフォーカスおよびズームを使用した Lens File アセットの評価。
入力データを受け取って歪み状態を生成する、基礎となるオブジェクトは、 レンズ歪みハンドラ と呼ばれます。入力データをハンドラにフィードするオブジェクトは、歪みデータの プロデューサー と呼ばれます。ハンドラから出力ディスプレイスメント マップを受け取って画像に適用するオブジェクトは、歪みデータの コンシューマー と呼ばれます。
レンズ歪みハンドラは、歪みパラメータとカメラの組み込み属性を入力として受け取り、歪み UV ディスプレイスメント マップと、そのディスプレイスメント マップを参照するポストプロセス マテリアルを生成します。ディスプレイスメント マップの解像度は、プロジェクト設定で指定できます。また、最終的なレンダリング解像度 (128 x 128 など) と比較すると低い場合があります。
歪みデータのプロデューサー
フレームごとの歪みパラメータとカメラの組み込み属性をストリーミングする LiveLink
独自のプロトコルを使用し、基本的なカメラの位置および回転に加え、キャリブレーションされたレンズの歪み情報を提供するサードパーティのカメラ追跡ベンダーもあります。歪みパラメータとカメラの組み込み属性を含むこのレンズ データは、各フレームにストリーミングされ、Lens File アセットを使用することなく歪みの計算に利用できます。このデータを Unreal Engine にストリーミングするため、LiveLink Lens Role と Lens Controller が用意されています。
Lens Controller は、新しいレンズ歪みハンドラをインスタンス化し、LiveLink ソースから受信したデータをストリーミングします。インスタンス化されるハンドラのタイプはレンズ モデルによって異なります。また、このハンドラのタイプはスタティック データとして LiveLink ソースによって指定される必要があります。
カメラの FIZ をストリーミングし、Lens File アセットを評価する LiveLink
Unreal Engine 内でカメラのキャリブレーションを実行するユーザーのため、LiveLink Camera Controller に対して Lens File アセットが追加されています。Lens File が存在する場合、カメラのコントローラーは LiveLink を介してストリーミングされるフォーカスおよびズーム位置で Lens File を評価します。この評価によって Lens File 内の最も近いキャリブレーション済みのポイント間で補間が実行され、現在のフレームの歪みパラメータ、カメラの組み込み属性、節点オフセットが生成されます。
また、Lens File に ST マップが含まれている場合は、LiveLink を介してストリーミングされ、受信されたフォーカスおよびズーム位置に基づいて ST マップも補間されます。
スタティック カメラの FIZ および LensFile アセット
一部のユーザーはライブカメラ データを LiveLink 経由でストリーミングしない場合があるため、パイプラインではバーチャル カメラの現在のフォーカスおよびズーム位置を使用した Lens File の評価もサポートされています。
Camera Calibration プラグインにより、CineCamera アクタに追加できる Lens Distortion コンポーネントが導入されます。このコンポーネントでは、現在のカメラの設定に基づいて Lens File を直接評価できます。
ブループリント
ユーザーは、ブループリントを使用してレンズ歪みハンドラ オブジェクトを作成し、Lens File を指定することなくその歪み状態を制御することができます。このワークフローは、ライブ ビデオを使用した CG 要素の作成を目的とするものではありませんが、歪みを伴う外観が適切な CG のみのプロジェクトに使用することもできます。
歪みデータのコンシューマー
Lens Distortion コンポーネントを使用した CineCamera
Lens Distortion コンポーネントを CineCamera アクタに追加することで、シーン内の任意のプロデューサーから歪みデータを受信できます。
歪みのソースは、このコンポーネントの設定から選択できます。歪みのソースが選択されると、ポストプロセス マテリアルが自動的にターゲットのカメラ コンポーネントに追加されます。これによって、選択した歪みのソースから生成された歪みのディスプレイスメント マップが取得されます。
カメラに対して歪みエフェクトを適用しても、そのカメラをターゲットとする Composure の CG レイヤーに影響することはありません。
Composure の CG レイヤー
ユーザーは、Composure の CG レイヤー設定内で歪みのソースを指定できます。CG レイヤーのターゲットとして設定され、カメラの歪みデータを現在生成しているレベル内のプロデューサーに基づき、利用可能なソースのリストが入力されます。
歪みのソースが選択されると、ポストプロセス マテリアルが自動的に CG レイヤーのシーン キャプチャ コンポーネントに追加されます。これによって、選択した歪みのソースから生成された歪みのディスプレイスメント マップがこのマテリアルに取得されます。ターゲットのカメラは、CineCamera アクタである必要があります。
CG レイヤーに対して歪みエフェクトを適用しても、ターゲットのカメラのレンダリング出力に影響することはありません。
オーバースキャン
CG 画像に適切な歪みを適用するには、多くの場合、歪みのない元のレンダリングで利用可能な入力ピクセルよりも多くの入力ピクセルが必要になります。歪みが適用された画像をすべてのピクセルにおいて有効なデータにするには、歪みのないレンダリングを オーバースキャン し、そのシーンからわずかな追加のレンダリングを生成する必要があります。
オーバースキャンで必要な余分なピクセルの割合は、現在の歪みの状態に基づき、レンズ歪みハンドラによって計算されます。続いて、歪みのコンシューマーが オーバースキャン係数 を使用して歪みのないレンダリングで視野角 (FOV) を拡張してから、ポストプロセスの歪みマテリアルが適用されます。これによって、ターゲットの画像でも元の歪みのない画像と同じ解像度を保ちながら、シーンの視野がより広い、歪みのない画像が生成されます。
任意の歪みプロデューサーの設定から、オーバースキャンの乗数を指定することもできます。この設定を使用すると、ユーザーは計算されるオーバースキャンをどれくらい適用するかを指定できます (0 倍から 2 倍までの任意の値)。
歪み除去
レンズ歪みハンドラは、歪み除去ディスプレイスメント マップ (ブループリントからアクセス可能) を計算します。これによって、カスタムのポストプロセス マテリアルを作成して適用し、受け取ったメディア ソースからの歪みを元に戻すことができます。
OpenCV
カメラ レンズのキャリブレーション ツールのアルゴリズムでは OpenCV を使用します。OpenCV プラグインを通じて OpenCV を直接使用することができます。このプラグインには OpenCV バージョン 4.5.4 が含まており、ArUco マーカーやチェスボードの追跡などに使用する新しいブループリント ノードを追加します。ブループリント ノードの詳細については、API リファレンスを参照してください。