When it’s ready.

出来るまで出来ない

立体視コンテンツのCGと実写合成でする際に気をつける3つのこと

そろそろ、Panaとかソニーから立体視ディスプレーが発売するとかしないとか。都内でも立体視プラズマの展示やってたりしますよね。たまたま、HD2眼カメラと変更方式の立体視ディスプレーが手近なところにあったのでリアルタイムCGで実写合成してみました。普段は、一般テレビ用のCGしか触った事が無いのでいろいろ手探りでしたが貴重な経験が出来ました。

今回使ったカメラは、オートフォーカスかつオートアイリスたったのでフォーカス出しやら光軸センター出しとか普通やるよねみたいな光学系の調整が全然出来なかったが、それ以外に勉強になることが山ほどあったので、今後のために記録しておきたい。もし、マニュアルで操作できたとしてもL/Rでどうやって光軸あわせればいいのかとか方法論すらわからないけど・・・

特に気をつけることは

  • 3Dコンテンツのサイズの整合性
  • FOVの正確な割り出し
  • Parallaxの整合性

この3つを上手に調整しないと全く3Dに見えない。もしくわ、実写かCGのどちらかしか立体的に見えない。たいていの場合目がおかしな状態になって、脳がしびれるような感覚に襲われる。では、一個ずつ説明していく。

3Dコンテンツのサイズの整合性

画面の4分の1の面積をおおうグリッドが有った時、このグリッドの縦と横のサイズは何cmですか?と言われた時、そばに対象物があったとしても正確に言うのは難しい。マット画みたいな状態を想像されると分かりやすいかも知れない。立体視モニターを使うと、オブジェクトの距離に応じて視差表示されるため、小さな物を手前に置いたり、大きな物を奥に置いて画面上の大きさを適当に合わせても、脳がそれをけつぞうする事が出来ず違和感を感じまくる。実際は違和感どころじゃなくて吐き気を感じるくらい。それをさける為には、出来るだけ実写に対して正確なサイズと配置を行う必要がある。合成する背景の寸法は可能な限り採寸しておいた方がよい。近頃は、レーザー距離計も100m未満はかれるやつでも2万しないし、精度もmmあるので問題ないかと思われる。
 背景の実写部分をなるべく正確に計測して、それと同じ寸法で3Dコンテンツを作らなければ、脳負荷の少ないCGにはならないと思っておいた方がよい。普段実写合成をやられている方であれば様々なテクニックでサイズをごまかすと思うがことごとく使えないと思った方が良い。脳は、左右の目から入ってくる微少な差を感じ取る能力が想像以上に高いことを思い知らされた。

FOVの正確な割り出し

オブジェクトの寸法を実写にあわせて作成し、カメラから正確に配置できたとしてもリアルカメラのFOVとCGカメラのFOVも正確に合わせ込まないと正しい大きさで表示されない。レンズデータも不詳だし、レンズセンサーも付いてないカメラでFOVを正確に計測するのは難しい。今回使用したカメラは、CCDの位置も不明かつノーダルシフトも分からないモノだった。この状態からFOVを算出方法は以下の通り

  1. 一辺60cmのパネルを用意する。(何cmでもOK)
  2. CGでも60cmのオブジェクトを作成する。(パネルのサイズと同じ物)
  3. リアルカメラの玉の長さを決める
  4. CGパネルを画面上で適当なサイズ(画面面積の半分以上)になるようにCGオブジェクト配置する。CGカメラから、CGオブジェクトまでの光軸上の距離が分かる
  5. 2番のパネルが画面上でCGオブジェクトと同じサイズになるようにカメラからの距離を調整する。(カメラから光軸方向に離れていく)
  6. リアルカメラのボディーの適当な所からレーザー距離計などでパネルまでの距離を測ると、だいたいCGでの距離と近い数字なるが、1cm程度の誤差になるようにレーザー距離計の位置を調整するその位置がだいたいノーダルシフトが含まれた距離だと思われる(対CGカメラ)
  7. カメラの画像から、パネルの横幅のピクセル数を計測する。(キャプチャしてもいいし、大きめのモニターを実測してもよし)
  8. ここまでで分かった情報
    1. パネルのサイズ
    2. パネルまでの距離
    3. 画面内のパネルのピクセル数(たてorよこ)
    4. 画面全体のピクセル数(たてorよこ)
  9. 自作のFOV計算機で上記4つの情報を入力するとFOVが分かる!

http://a2c-dev.appspot.com/fov

Parallaxの整合性

これがもっとも重要な調整項目になる。Parallax、Vergenceの両方がとーーっても重要。前の2項目を完璧にしても、parallaxがずれてると全く立体に見えないです。クロスポイントは、両目がピント的にも光軸的にも合焦していることになります。モニター的に言うと、画像がずれていない(1つに見える)ところになります。カメラ上で1重に見えるところを探しそこまでの距離を、レーザー距離計で計測します。これを、CGカメラで再現できると、合成した際に違和感の無い立体感が得られます。
まず、右目と左目のCGカメラをリアルカメラと同じ距離(左右の目の離れた部分)に配置します。そして、左右それぞれのCGカメラを内側に回転させクロスポイントの距離(事前に計っておく)で光軸が交差するようにします。計算はとっても簡単。Vergence=tan(クロスポイントまでの距離 / (カメラ間の距離/2))
これだけ。これだけだけど、めちゃくちゃ重要。

さらに、今回のカメラは左右のカメラがそれぞれ同じだけのVergenceだけ回転するタイプだったけど、2眼のリアルカメラがのVergenceが左右で同一ではなく、片方が90度(まっすぐで固定されている)でもう片方がVergence*2という場合もあるらしいので要注意です、その場合は、CGカメラのVergenceも同じように回転させる必要があります。

他にも気になる事がある。今後の課題、問題点

以上3点で整合性のとれれば驚くほど脳負荷の少ないCGの実写合成が出来ます。今回はHDのリアルタイムCGレンダラーが手元にあったおかげで1日弄るだけで、調整の追い込みが出来ました。ポスト処理でやるとなるとロケ地の採寸もFOVの算出も出来ないから相当事前準備が必要かと思います。FullCGだったら何でも有りなのでそこまで事前準備は要らないかも。

さらに、立体感とは少し違いますが、質感に関してとても興味深い事実に気付きました。普段のCG(立体視じゃないヤツ)では、ハイライトとか、リフレクションはある瞬間では1種類しか無い(というかそもそもそんな事考えもしてない)ですが、立体視をやると右目と左目でハイライトもリフレクションも入る位置が全然違ってくる。特にリアルタイムCGでのリフレクションは簡易なので、とても違和感が生まれる。最低でも6面のリフレクションを行わないと、立体に見えづらくなる事が確認できた。

H/W的な問題もあって、HD/SDIを1台のPCからリアルタイムに左右分レンダリングするのが難しい。(カメラがHDなのにCGがH方向に圧縮してしまっては勿体ない)今回は2台のPCを使用して右目用と左目用のHD映像を出力したが、それぞれのPC上では独立してソフトが動いているので、右目のPCで行った操作を左目のPCでも同様に操作する必要があり、非常に手返しが悪い。FOVやパララックスは、事前に高頻度に調整が必要になるだろうと予想していたのでプログラムを組んで対応したが、質感やオブジェクトの大きさや距離などは、毎回2度行う必要があった。ハードウェアの制限をソフトウェアで回避したが今後は、2Pipeを1台のPCでレンダリングし、HD/SDIで2ストリーム出てくるようなH/Wが必須だと感じた。同期も1本で済む。

実写合成で、立体視CGコンテンツ作ったぉという方居たら是非一緒に情報交換しませんか。