Skip to content

仕組み

PhantomLinkは、写真を撮るようにプレイヤーを写し、その写真から立体像を組み立て直します。3Dモデルを作り直すわけではありません。ここではその流れを順に追います。

何台ものカメラで同時に撮る

Capture Rig の枠の中に人が入ると、枠のまわりに仕込まれたカメラが一斉に動き出します。カメラは2種類あります。

色カメラは、ふつうのカメラです。前後左右などから、アバターの見た目をそのまま撮ります。

深度カメラは、色のかわりに「表面までの距離」を撮ります。カメラに近い場所ほど黒く、遠い場所ほど白く写る、距離の地図のようなものです。アバターがどんなマテリアルを使っていても距離だけを書き出せるよう、撮影の瞬間だけ全員のシェーダーを距離計測用のものに差し替えています。

輪郭を重ねて形を掘り出す

1方向からの深度写真だけでは、シルエットの奥行きしかわかりません。そこで前後左右、それに上下からの深度写真を重ね合わせます。

考え方はシンプルで、「どの方向から見ても人のシルエットの内側にある場所」だけが、実際に人がいる場所だとみなせます。彫刻のように、各方向のシルエットの外側を削り落としていくと、残った部分が人の形になります。この手法はVisual Hullと呼ばれています。

箱の中に像を描く

Viewer Cube のシェーダーは、画面のピクセルごとに箱の中へ視線をまっすぐ伸ばし、少しずつ前へ進めながら「ここは人の内側か」を先ほどの深度写真で確かめます。内側に当たったら、そこが立体像の表面です。

この歩き方はレイマーチングと呼ばれます。当たった場所の奥行きはZバッファにも書き込むので、立体像はワールドの他のオブジェクトと正しく前後が重なります。手前に柱があれば像は柱に隠れますし、像の後ろに回り込むこともできます。

見る角度に合わせて色を選ぶ

表面の位置が決まったら、次は色です。色カメラは全部で10方向にあり、見ている角度に一番近いカメラの色を強めに、まわりのカメラの色を弱めに混ぜます。正面から見れば正面カメラの色がほぼそのまま使われ、斜めから見れば斜めのカメラが引き継ぎます。

真上や真下のカメラは、水平方向から見たときに色がにじまないよう、ほぼ真上から覗き込んだときだけ働くようにしてあります。

大きさを変えても壊れない理由

撮影も再生も、内部ではすべて「1辺1の箱」を基準に計算しています。Capture Rig や Viewer Cube を拡大縮小しても、カメラの写る範囲とテクスチャの対応関係が自動で追従するので、計算は同じまま成り立ちます。だからリグと箱は別々の大きさ・別々の場所に置けます。

MIT License