今回のテーマは、題記の通り、仮想現実(レイトレーシング空間)の中に、現実の映像を取り込むことです。
「立体に見える印刷物」では、その逆、仮想現実(レイトレーシング空間)の物体を現実世界の中に持ち出しました。実は途中までの準備手順はどちらも同じです。どっちの方が簡単か?と言うと、写真品質のプリンタと、その印刷物を用意する必要が無い分、今回の方が幾分簡単です。
上写真に於いて、木目の机と、机に置こうとしている500円玉、その手、は現実の映像をスマホで録画した動画です。中央に配置した立方体パズルだけが、実物ではなくて、レイトレーシングでモデリングした仮想空間の物体となっています。
それにもかかわらず、立方体パズルの向かって左側の面に、机に置こうとしている500円玉と手が映り込んでいることに着目して見てください。
「動画を撮影。それとは別にレイトレーシング動画を生成。後から2つを合成」……するのではなく!撮影した動画をマッピングデータとして仮想現実(レイトレーシング空間)に取り込んだので、ちゃんと、仮想空間の物体(立方体パズル)にも、現実世界の500円玉が映り込んで見えている、という事です。
まず、カメラで撮影したマッピングデータと、仮想現実(レイトレーシング空間)の構図を合わせるために、被写体とカメラの位置関係を計測して、レイトレーシングデータに埋め込む必要があります。具体的な方法については、図を交えて、「立体に見える印刷物」にて解説済みですので、そちらを参考にしてください。
前節でセットアップした、カメラと被写体の位置関係をずらさないようにして、マッピングデータとなる映像を撮影します。
今回は、動画像をレイトレーシング動画のマッピングに使用するので、「写真」ではなく、「動画」を撮影してください。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)」を使うのがミソです。これによって、カメラで撮影した動画を、そのまま、マッピングデータに使用することができます。これを可能にしているのが、カメラパラメータの取得と、カメラと同じパラメータでレイトレーシングの視野面を設定することにあります。
マッピングデータを貼り付けない状態だと、以下図の様になります。
いかにも「レイトレーシング」、「作りものです」、「CGです」っていう感じですよね……。
完成したデータをリンクしておきます。
Xi-TRACEデータ | realinv.xitr |
マッピングデータ(動画) | realinv_map.avi (各自ご用意ください) |
単なる「合成」画像と異なって、現実世界の500円玉が、仮想空間の物体に映り込んで見えているところが、今回の見所です。お見逃し無き様。