カメラのキャリブレーションの概要

Camera Calibration プラグインの概要

Windows
MacOS
Linux

はじめに

CG レンダリングやライブ ビデオから正確なコンポジションを作成するには、Unreal Engine ではバーチャル カメラが必要です。バーチャル カメラは、実世界のビデオ映像の撮影に使用される物理カメラを正確にシミュレートします。バーチャル カメラの位置と向きは、物理カメラと厳密に一致している必要があります。また、どの瞬間でも各ビデオ フレームをカメラの位置と正確に同期していることを保証するため、追跡情報がビデオ フィードの正確なタイミングと一致している必要があります。

Camera Calibration プラグインでは、エディタ内のカメラおよびレンズをキャリブレーションする簡素化されたツールとワークフローを提供します。このキャリブレーション プロセスにより、バーチャル カメラを空間内の物理カメラの位置と正確に位置合わせするため、また物理カメラのレンズ歪みをモデル化するために必要なデータが生成されます。このプラグインでは、カメラとレンズのすべてのキャリブレーション データをカプセル化する Lens File アセット タイプが導入されます。

また、Camera Calibration プラグインは、キャリブレーション済みの歪みデータを取得し、CG レンダリングに正確なポストプロセス エフェクトを適用する、優れたレンズ歪みパイプラインを備えています。歪みのポストプロセス エフェクトは、 Cinecamera アクタに直接適用でき、 ムービー レンダー キュー で使用したり、 Composure の CG レイヤーに対して使用したりできます。

このプラグインのツールとフレームワークは拡張性と柔軟性を備え、幅広いレンズとワークフローに対応しています。

カメラのキャリブレーション

フォーカスおよび絞りのマッピング

Camera Calibration プラグインは、Lens File アセットを使用し、生のフォーカス値および絞り値を CineCamera コンポーネントが使用する物理的な単位に変換します。たとえば、生の入力値には、LiveLink を介して外部デバイスからストリーミングされたエンコーダの位置 (絶対位置または正規化された位置) が含まれる場合があります。これらの値を適切な単位に変換することもできますが、より高い精度を実現するには微調整が必要になります。

キャリブレーションされたデータ

キャリブレーションされたレンズ データは、カメラのフォーカスやズームに応じて異なります。そのため、高い品質のキャリブレーションを実現するためには、多くの場合、複数のフォーカス ポイントおよびズーム ポイントを使用してキャリブレーションを行う必要があります。歪みパラメータ、カメラの組み込み属性、および節点オフセットはすべて、関連付けられたフォーカス値およびズーム値とともに Lens File 内に格納されます。任意のフォーカスおよびズーム位置について、格納されたフォーカスおよびズーム ポイントを補間することでキャリブレーションされた Lens File を評価することができます。

歪みパラメータ

Camera Calibration プラグインを使用すると、複数の物理レンズ モデルに対して定義された、正確なレンズの歪みのポストプロセス エフェクトをサポートできるようになります。これらのレンズ モデルは、歪みパラメータのセットを定義し、レンズを中心とするさまざまな位置の歪みの計算に使用します。

このプラグインは、Brown-Conrady モデルに基づく球形歪みモデルをサポートしており、5 つの歪みパラメータ (K1、K2、K3、P1、P2) を使用します。これらのパラメータはユニットレスであり、キャリブレーション プロセスの一部で計算されます。このプラグインは拡張性を備えているため、ユーザーは異なるパラメータを使用する追加モデルのサポートを加えることができます。

カメラの組み込み属性

カメラの組み込み属性は、焦点距離や画像の中心などを含み、カメラの座標系の 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 に装備されているキャリブレーション ステップには、レンズ歪みキャリブレーション、節点オフセット キャリブレーション、スタティックなレンズ情報を入力するためのステップなどがあります。キャリブレーション ステップのリストは拡張可能です。つまり、プログラマーが追加のキャリブレーション ツールを実装し、エディタに追加できます。

レンズ情報

ユーザーは、レンズのモデル名やシリアル番号などのレンズのスタティック データに加え、イメージ センサーの寸法などのカメラのデータを入力できます。

レンズ歪みキャリブレーション

ユーザーは、歪みパラメータやカメラの組み込み属性の計算に使用されるキャリブレーション アルゴリズムを選択できます。このプラグインは、OpenCV で歪みを計算する、厳密なチェッカーボード グリッドを使用するアルゴリズムを備えています。UCameraLensDistortionAlgo クラスの継承によって追加のアルゴリズムをプログラマーが実装できるよう、このステップは拡張性を備えています。

節点オフセットのキャリブレーション

ユーザーは、節点オフセットの計算に使用されるキャリブレーション アルゴリズムとキャリブレーター オブジェクトを選択できます。このプラグインは、3 つのアルゴリズム、Points Method、Aruco Markers、および Checkerboard を備えています。UCameraNodalOffsetAlgo クラスからの継承によって追加のアルゴリズムをプログラマーが実装できるよう、このステップは拡張性を備えています。

歪みパイプライン

レンズ歪みパイプラインは、カメラおよびレンズのデータを使用し、最終的なレンダリングに適用される、正確な歪みエフェクトを作成します。

主に次の 3 種類の入力データがあり、実世界のレンズの歪みをモデル化するのに使用できます。

  • LiveLink Lens ソース。フレームごとの歪みパラメータとカメラの組み込み属性をストリーミングします。

  • LiveLink Camera ソース。カメラの FIZ をストリーミングし、Lens File アセットを評価します。

  • カメラ アクタの現在のフォーカスおよびズームを使用した Lens File アセットの評価。

入力データを受け取って歪み状態を生成する、基礎となるオブジェクトは、 レンズ歪みハンドラ と呼ばれます。入力データをハンドラにフィードするオブジェクトは、歪みデータの プロデューサー と呼ばれます。ハンドラから出力ディスプレイスメント マップを受け取って画像に適用するオブジェクトは、歪みデータの コンシューマー と呼ばれます。

レンズ歪みハンドラは、歪みパラメータとカメラの組み込み属性を入力として受け取り、歪み UV ディスプレイスメント マップと、そのディスプレイスメント マップを参照するポストプロセス マテリアルを生成します。ディスプレイスメント マップの解像度は、プロジェクト設定で指定できます。また、最終的なレンダリング解像度 (128 x 128 など) と比較すると低い場合があります。

歪みデータのプロデューサー

独自のプロトコルを使用し、基本的なカメラの位置および回転に加え、キャリブレーションされたレンズの歪み情報を提供するサードパーティのカメラ追跡ベンダーもあります。歪みパラメータとカメラの組み込み属性を含むこのレンズ データは、各フレームにストリーミングされ、Lens File アセットを使用することなく歪みの計算に利用できます。このデータを Unreal Engine にストリーミングするため、LiveLink Lens Role と Lens Controller が用意されています。

Lens Controller は、新しいレンズ歪みハンドラをインスタンス化し、LiveLink ソースから受信したデータをストリーミングします。インスタンス化されるハンドラのタイプはレンズ モデルによって異なります。また、このハンドラのタイプはスタティック データとして 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 倍までの任意の値)。

歪み除去

レンズ歪みハンドラは、歪み除去ディスプレイスメント マップ (ブループリントからアクセス可能) を計算します。これによって、カスタムのポストプロセス マテリアルを作成して適用し、受け取ったメディア ソースからの歪みを元に戻すことができます。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
閉じる