realinv.jpg


バーチャル空間に現実映像を取り込む

 今回のテーマは、題記の通り、仮想現実(レイトレーシング空間)の中に、現実の映像を取り込むことです。

 「立体に見える印刷物」では、その逆、仮想現実(レイトレーシング空間)の物体を現実世界の中に持ち出しました。実は途中までの準備手順はどちらも同じです。どっちの方が簡単か?と言うと、写真品質のプリンタと、その印刷物を用意する必要が無い分、今回の方が幾分簡単です。

realinv.jpg

 上写真に於いて、木目の机と、机に置こうとしている500円玉、その手、は現実の映像をスマホで録画した動画です。中央に配置した立方体パズルだけが、実物ではなくて、レイトレーシングでモデリングした仮想空間の物体となっています。
 それにもかかわらず、立方体パズルの向かって左側の面に、机に置こうとしている500円玉と手が映り込んでいることに着目して見てください。

 「動画を撮影。それとは別にレイトレーシング動画を生成。後から2つを合成」……するのではなく!撮影した動画をマッピングデータとして仮想現実(レイトレーシング空間)に取り込んだので、ちゃんと、仮想空間の物体(立方体パズル)にも、現実世界の500円玉が映り込んで見えている、という事です。

カメラパラメータの取得

 まず、カメラで撮影したマッピングデータと、仮想現実(レイトレーシング空間)の構図を合わせるために、被写体とカメラの位置関係を計測して、レイトレーシングデータに埋め込む必要があります。具体的な方法については、図を交えて、「立体に見える印刷物」にて解説済みですので、そちらを参考にしてください。

マッピングデータの撮影

 前節でセットアップした、カメラと被写体の位置関係をずらさないようにして、マッピングデータとなる映像を撮影します。

real.jpg

 今回は、動画像をレイトレーシング動画のマッピングに使用するので、「写真」ではなく、「動画」を撮影してください。Xi-TRACEでは、動画像フォーマットとして、Motion-JPEG形式のAVIファイルを扱うことができるので、".mp4"など、他の形式で撮影された場合には、適切な変換ソフトウェアを使ってMotion-JPEG形式のAVIファイルへ変換してください。

 後で、画面中央部分に、レイトレーシングした立方体パズルがレンダリングされるので、仮想現実(レイトレーシング空間)に作る物体と、重なったり、違和感の無いような動画をイメージして撮影する必要があります。

動画データをマッピングに使う

 レイトレーシングで動画像を作ろうとする時、色々な画像をマッピングデータとして物体に貼り付ける、と言うテクニックは、これまでに何度も使ってきました。マッピングデータとして動画を貼り付けるのも、基本的に同じです。

  ifacc $(file)"_map.avi"
  {
    // 0~80: 何もない机
    // 80~150: 500円玉を置く動作
    // 150~600: 500円玉が置かれた机
    var lfnum;
    var map_fps=30;  // マッピングデータ(.avi)の[fps]
    var map_max=600;  // 最大フレーム番号
    var map_rpt=400;  // 繰り返しフレーム数
    lfnum=fn*map_fps/fps;
    while (lfnum>=map_max)
    {
      lfnum=lfnum - map_rpt;
    }
    load $(file)"_map.avi", lfnum;
  }
  cmap table, 0,0,fwid - 1,fhei - 1, fwid,fhei, interpol;
  attr table=
  {
    diff 1.00,0.00;
    colpix cgray;
    nmap table;
    mprj 0,0,0, 0,DD,HH, 0,0,1, 2*WW,2*WW/fwid*fhei;
    mreg -0.5,0.5, -0.5,0.5, -0.5,-0.5;
  };


 マッピングデータは、一旦、Xi-TRACEに読み込む(load命令を使用)必要があるのですが、動画データも、そのフレーム番号を任意に指定して読み込むことができます。上コード中央付近のload命令に注目してください。ファイル名に".avi"ファイルを指定して、第二パラメータに読み込み対象となるフレーム番号を指定しています。
 ".avi"ファイルに含まれるフレーム番号を超えるフレームを指定すると、読み込みエラーが発生するので、フレーム番号が".avi"ファイルに包含されるように、調整するコードが入っています(lfnumの計算処理)。

 後は、マッピングの種類ですが、通常の「平面」や「球面」へのマッピングと異なり、「投影マッピング(mprj)」を使うのがミソです。これによって、カメラで撮影した動画を、そのまま、マッピングデータに使用することができます。これを可能にしているのが、カメラパラメータの取得と、カメラと同じパラメータでレイトレーシングの視野面を設定することにあります。

マッピングデータを貼り付けないと

 マッピングデータを貼り付けない状態だと、以下図の様になります。

nomap.jpg

 いかにも「レイトレーシング」、「作りものです」、「CGです」っていう感じですよね……。


完成データ

 完成したデータをリンクしておきます。

Xi-TRACEデータ realinv.xitr
マッピングデータ(動画) realinv_map.avi (各自ご用意ください)

 単なる「合成」画像と異なって、現実世界の500円玉が、仮想空間の物体に映り込んで見えているところが、今回の見所です。お見逃し無き様。



home

download

gallery