コンテンツにスキップ

QuickCal の概要

QuickCal は、仮想プロジェクターの位置、向き、レンズプロパティを実世界のプロジェクターに一致させるようにキャリブレーションする、ユーザー主導のプロセスです。QuickCal は、プロジェクターのターゲットサーフェスの所定の 3D メッシュ上の reference point と、これらの 3D reference point に手動で割り当てられるユーザー定義の 2D 画像座標に基づきます。3D メッシュが実世界のプロジェクションサーフェスとよく一致している限り、QuickCal はプロジェクターのパラメーターを正確に計算できます。

QuickCal の基本的なプロセスは比較的シンプルです。プロジェクションサーフェスの 3D モデルに reference point をドロップし、各ポイントをプロジェクターの出力ラスター内でドラッグして、実サーフェス上の対応する点に合うまで「line up」します。十分な数のポイント(プロジェクターごとに約 10〜15 個)を完了すると、Designer はプロジェクターが正確にどこにあり、どのようなレンズ特性を持つかを算出できます。

QuickCal を使用してプロジェクターをキャリブレーションする際、3D メッシュオブジェクトが物理モデルに対して正確にモデリングされていることが 極めて重要 です。その理由は、Disguise のキャリブレーションアルゴリズムが、仮想 reference point が対応する実世界のポイントに正確にリンクすると仮定しているためです。非常に正確な 3D モデルを生成する最良の方法は、物理モデルをレーザースキャンするか、後で Designer で使用するのと同じ 3D ファイルに基づいて物理モデルをレーザーカットすることです。建物投影の場合、+-5mm の誤差範囲のメッシュをお勧めします。

QuickCal を使い始めるには、まず仮想プロジェクターをおおよそ正しい位置と向きに移動し、そのレンズ特性を実プロジェクターにおおよそ一致するように設定します。これは特に正確である必要はありませんが、ビジュアライザーで編集するプロジェクターを選択しようとするとき、おおよそ正しい場所にあると選びやすくなります。次に reference point の作成 に進み、それらを line up します。

キャリブレーションの目標は、プロジェクターの projection matrix を計算して、実世界(シーン)で割り当てられたプロジェクションサーフェスに物理的に妥当な投影を生成することです。これは、マトリックスが絶対的に物理的に正しい必要はないが、少なくともこの投影エリア(というよりはボリューム)に対しては正しくあるべきであることを意味します。実際、キャリブレーションは 2 次元のサーフェスではなく、空間内のボリュームに対して機能するプロセスと考えると役立ちます。

キャリブレーションプロセスは、主な入力として以下を使用します。

3D Reference Point(ワールド空間)

Section titled “3D Reference Point(ワールド空間)”

これらは通常、メッシュ/オブジェクトの頂点から作成されます。なお、メッシュは、少なくとも Reference Point の作成に使用される頂点において、実オブジェクトと一致する必要があります。d3 では Reference Point はそれ自体が 3D オブジェクトであり、特定のポイントを複数のプロジェクターで使用できます。

2D 座標(プロジェクターの画像平面)

Section titled “2D 座標(プロジェクターの画像平面)”

これらは、所定のプロジェクターで Reference Point を line up する際に作成されます。Designer では、Projector Configuration が 2D 座標を 3D Reference Point にリンクするペアを保存します。

projection matrix は、プロジェクターの位置、向き、内部のセンサーおよびレンズプロパティを表す線形変換です。なお、Designer は現在、QuickCal での非線形レンズ歪みの補正をサポートしていません。レンズ歪みは OmniCal でのみ計算・補正されます。

Designer では、projection matrix が Surfaces 一覧内のすべての 3D メッシュに適用され、変換されて仮想プロジェクターの画像平面に投影されます。これにより、Feed Scene に表示されるプロジェクターの出力画像が作成されます。

Reference Point の選択と line-up の順序

Section titled “Reference Point の選択と line-up の順序”

Reference Point と 2D line-up 座標は、合わせて correspondence point pair(対応点ペア)を形成します。キャリブレーションには、このようなペアが複数必要です。QuickCal は、最小ポイント数(例: 4、6、またはそれ以上)に異なる要件を持つ複数のアルゴリズムをサポートします。

その 3D ポイントが実世界に認識可能な特徴として存在する限り、Reference Point がどのオブジェクト/メッシュから来るかはキャリブレーション自体には関係ありません。オブジェクトの角は通常良い選択です。

単一のプロジェクターに対して複数のオブジェクトの Reference Point を使用することが可能です。

重要な要件は以下のとおりです。

  • Reference Point の実世界の等価物が、物理プロジェクターによって実際に見える(その光円錐内にある)こと。

  • プロジェクターに使用されるすべての Reference Point が:

    • 十分に大きな 3D ボリュームにまたがること。これはしばしば「十分な深度を加える」と呼ばれます。主な問題は、Reference Point がすべて 3D 空間内の同じ(仮想)平面上にないようにすることです。
    • プロジェクターの画像内で十分に大きな領域を均等にカバーすべきです。プロジェクター出力画像の四隅すべてで line-up される Reference Point を使用するのが良い考えです。

さらに、QuickCal line-up 中にオブジェクトのワイヤーフレームを確認したい場合は、そのオブジェクトをプロジェクターの Surfaces 一覧に追加する必要があります。

キャリブレーションは、3D Reference Point をヘルパーとして使用し、プロジェクターの作業ボリュームを作成することを念頭に置いておく価値があります。したがって、プロジェクターが「有効である」ボリュームは、常に line up した Reference Point の範囲によって制限されます。例えば、すべてプロジェクターの同じ画像の角にある 6 つのポイントを line up すると、画像の残りの部分ではうまく機能しないキャリブレーション済みマトリックスが生成される可能性が高くなります。実世界で近接しているポイントについても同様で、つまりキャリブレーション済みマトリックスはそれらのポイント内の小さなボリューム内でのみ有効になります。

Reference Point が作成・line up される順序は、projection matrix の計算に影響しません。どのポイントを最初に line up しても、キャリブレーションは同じ結果を生成します。

ただし、キャリブレーションがより速く算出できるようにするため、互いに近いポイントを追加する前に、シーンの極端な部分から Reference Point を line up するのが理にかなっています。そうしないと、十分なポイントが line up されてシーン全体を十分な深度でカバーするまで、良好な視覚出力が得られないことがあります。

  1. 特定のアルゴリズムを強制する本当に良い理由がない限り、Calibration Method 設定は Auto のままにしてください。Auto は、Reference Point の数とその 3D 関係に基づいて最良のアルゴリズムを選択します。
  2. 絶対に必要でない限り、line-up 座標で「ズル(cheat)」をしないでください。
  3. すべての Reference Point が追加され line up されるまで、決して「ズル」をしないでください。
  4. メッシュとプロジェクター画像の極端な部分を最初に line up します(例: 画像の角の左/右/上/下、シーンの近く/遠く)。次に、ポイントを追加してそれを改善します。例: 実オブジェクトを見たときに投影画像がまだ「ずれている」領域の Reference Point に集中します。

限られたシーン深度と Reference Point の数

Section titled “限られたシーン深度と Reference Point の数”

平らな、または深度の少ないメッシュ/オブジェクトは、キャリブレーションに使用するのがより困難です。これは、実世界のオブジェクトに、4 つの角だけが Reference Point として簡単に使える壁のように、見える特徴がほとんどまたはまったくない場合、さらに問題になります。

ただし、4 つの correspondence point pair があれば、すでに簡単なキャリブレーション(通常 IterLM アルゴリズム)が可能です。このキャリブレーションは、lens shift や throw ratio などの内部レンズパラメーターを計算できません。これらのパラメーターには、手動のプロジェクター設定から値が取られます。なお、これらの設定は、6 個未満のポイントで QuickCal を使用する場合や、特定のアルゴリズムが設定されている場合は、依然として編集可能です。これらの値を手で正しく設定するのは難しいことがありますが、物理プロジェクターの throw ratio と lens shift がおおよそわかっていれば、これを調整することでキャリブレーションを大幅に改善できます。

6 個以上の correspondence point pair があると、異なるアルゴリズム(通常 Zhang アルゴリズム)が使用され、lens shift と throw ratio のパラメーターも自動的に計算されます。Reference Point が深度をほとんどまたはまったく提供しない場合、このアルゴリズムは良いプロジェクターマトリックスを見つけるのに問題が生じます。これは、数学的に、一部の内部レンズパラメーターと 3D パラメーターを区別するのが非常に難しいためです。例えば、throw ratio(お好みなら焦点距離)とオブジェクトまでの距離は、ある程度まで交換可能です。Hitchcock が映画「めまい(Vertigo)」で使用した有名な Dolly Zoom 効果を考えてみてください。顔は常に同じサイズのままで、前景と背景のオブジェクトだけが小さくなったり消えたりします。この曖昧さは、より多くの深度によってのみ解決できます。キャリブレーションをより良く制約するために、シーンの背景/前景からより多くのポイントを line up する必要があり、これにより本質的にキャリブレーションボリュームを増やします。

実際には、ある稀な状況では、6 個目を追加するよりも 4 個か 5 個のポイントにとどめる方が望ましい場合があります。異なるアルゴリズムへの切り替えが、視覚的な結果を良くするのではなく悪くする可能性があるためです。

キャリブレーションへの Correspondence Point の影響

Section titled “キャリブレーションへの Correspondence Point の影響”

correspondence point pair は、スプラインのガイドポイントや、両者を互いに関連付ける固定のワープやルールのようなものではありません。

代わりに、それらは、これらすべてのポイントペアの条件が(多かれ少なかれ)満たされるようにマトリックスを解こうとする反復アルゴリズムへの入力です。しかし、メッシュ/現実の不一致、line-up の不正確さ、光学モデルの制約、さらには丸め誤差などにより、これらすべてのペアに適合する完璧なマトリックスは決して存在しません。とはいえ、十分に良いマトリックスは多数存在し、これらの各ポイントペアの誤差が小さく(例: 理想的には 1 ピクセル未満)なります。入力データの不正確さが大きい場合、一部の correspondence point pair は基本的に互いに強く矛盾します。その場合、総誤差も大きくなります(例: 5〜10 ピクセル、またはそれ以上)。誤差がメッシュ/オブジェクトの不一致によるものである場合、「ズル」が役立つことがあります(以下参照)。

3D モデルと物理オブジェクトが正確に一致しない場合、QuickCal では少し「ズル」をすることができます。「ズル」は推奨されませんが、現場にいる間により良い 3D モデルを得ることが不可能なことがよくあります。

「ズル」をする方法はいくつかあります。

  • line-up カーソルをあるべき場所からわずかにずらして、全体のキャリブレーションがより良く見え、再投影誤差が小さくなるようにします。
  • 3D Reference Point を元の頂点位置から移動します。QuickCal では、「Manage」モードで Shift キーを押しながら 3D Reference Point を左、右、上、または下に移動することで実行できます。これにより、現在のビジュアライザービューに従ってポイントが 3D 空間内で移動し、頂点以外の位置にポイントを配置できます。デフォルトでは、Reference Point は最も近いメッシュの頂点にスナップし、緑の十字で示されます。

これらのトリックのいずれにおいても問題なのは、どの Reference Point でズルをするか、そしてそれが最終的にキャリブレーションにどう影響するかを知ることです。