» VR開発メモトップへ

HTC ViveでMixed Reality映像を撮影するには

最終更新日:2017年01月14日
記事作成日:2016年12月08日

HTC Viveでグリーンバック合成映像を撮影する方法について簡単にまとめています。

更新履歴

(2016年12月1日)Viveコントローラーを単品で購入できるようになったのを反映
(2016年8月16日)とりあえずページ作成 


概要

UnityのSteamVRプラグインの機能を使って、以下のような、体験者が実際にVR空間内で楽しんでいるかのような映像を撮影できます。

基本的な考え方としては、現実世界のカメラの位置とVR空間のカメラの位置を同期させて、現実世界の実写映像とVR空間のCG映像を合成します。現実世界のカメラ位置を取得するために、3本目のViveコントローラーを使用します(ViveコントローラーはHTCと提携しているデジカのサイトから単品で追加購入できます)。3本目のViveコントローラーとウェブカムまたはビデオカメラを、リグを組むなど何らかの方法で一体化させます。

HTC Viveの通常の動作環境に加えて、以下が最低限必要になります。

  • 3本目のViveコントローラー
  • 撮影用のウェブカム、またはビデオカメラ+HDMIキャプチャーカード
  • 緑の布(Amazonで「クロマキー」で検索するとたくさん出てきます)
  • カメラリグとPCを接続する長いUSBケーブル

手順

とりあえず機能を有効化する

UnityのSteamVRプラグインには、この合成映像の作成を補助するための機能がデフォルトで搭載されており、外部ファイルで有効化できます。つまり、Unityを使って作られたHTC Vive用ソフトウェアであれば、特に無効化されていない限りほぼすべてのソフトで映像合成が可能です。

Unityでビルドされた.exeファイルと同じ階層、もしくはUnityのプロジェクトのAssetsフォルダと同じ階層に、externalcamera.cfgという名前で以下のようなテキストファイルを作成してください。

x=0
y=0
z=0
rx=0
ry=0
rz=0
fov=45
near=0.1
far=1000

ソフトを再生もしくは実行して、2本のViveコントローラーを認識していることを確認したら、USBケーブルを使って3本目のViveコントローラーをPCに接続します。上手くいけば、このViveコントローラーがVR空間のカメラの位置として認識され、画面が4分割された表示に切り替わります。左下が3本目のコントローラーから見たプレイヤー(ヘッドセット)の背面、右下が通常のヘッドセットの視点、左上がプレイヤーの前面、右上が前面のアルファです。

画像を合成する

機能を有効化できたら、上記の分割画面と、ウェブカムまたはビデオカメラからの実写映像を合成します。合成には、Open Broadcaster Softwareというオープンソースソフトウェアが使用できます。ウェブサイトからOBS Studioをダウンロードしてインストールしてください。

OBS Studioで背面映像、実写映像、前面映像の3つを作成します。まず「ソース」欄で+を押して、「ウィンドウキャプチャ」を作成し、Unityのゲーム画面を選択してください。「ソース」の「ウィンドウキャプチャ」で右クリックして「フィルタ」を選択し、エフェクトフィルタに「クロップ」を追加します。4分割された左下の背面画面を抜き出すために、「上」に540、「左」に960を設定します(数値は解像度によって変更してください)。

次に「映像キャプチャデバイス」を追加して、フィルタに「クロマキー」を追加します。

さらに前面を追加するには、「ウィンドウキャプチャ」を追加して、「クロップ」で左上の前面画面を抜き出してください。

環境にもよるため、細かい設定についてはいいように調整してみてください(書いている本人も試行錯誤中です)。

カメラの位置を合わせる

externalcamera.cfgのパラメータを編集して、実写映像とCG映像ができるだけ重なるように調整します。

一番影響の大きいパラメータはfov(視野角)です。このパラメータがUnityのカメラの視野角(縦)になりますので、ウェブカムやビデオカメラの画角に合うように調整します。また、x, y, zで位置のオフセット(単位はメートル)が、rx, ry, rzで角度のオフセット(単位は度)が設定できますので、これでカメラを同期させます。

変更したパラメータを反映させるにはソフトを再起動する必要があります。

このマッチングの工程は手作業の力技になってしまいますが、2本のViveコントローラーを床に置いたり、誰かに持ってもらうなどして、合成されたViveコントローラーが重なるように調整すると比較的合わせやすいです。もっといい方法があるかもしれません。


Tips

Viveコントローラーがスリープするとカメラが切り替わってしまうんだけど

基本的には、2本のViveコントローラーがスリープしないように気をつけます。

もしスリープしてしまった場合には、3本目のViveコントローラのUSBケーブルを一度抜いて、2本のコントローラーの電源を入れて振るなどして認識させてから、3本目のコントローラーを挿し直してください。

フルHD解像度で合成するにはどうすればいいの?

SteamVRの本機能では4画面出力するため、解像度が4分の1になってしまいます。4Kディスプレイを接続してフルスクリーン実行すれば、フルHD解像度で合成できます。

Unityでビルドしたソフトはディスプレイの解像度よりも大きな解像度に設定できないようで、ウィンドウを強制的に4Kサイズにする方法もあるようですが未調査です。

カメラは何使えばいいの?

SteamVRのフォーラムや関連記事を読む限り、ソニーの数百ドルのハンディカム+HDMIキャプチャーカードという構成が多いように見えます(機種検討中)。ウェブカムではLogicool C920の名前があったものの、あくまでウェブカムといった話や、遅延が大きいという話がありました。

VRゲームを動かしながら映像合成とか重いんだけど

映像の合成を2台目のPCにオフロードする手があるようです。VRゲームを動かす1台目のPCからHDMI 2.0で4K出力して、2台目のPCのHDMIキャプチャ-カードで取得、ウェブカムやビデオカメラの入力と合成するようです。なお、OBSでの4K/60fpsキャプチャとコンポジットは重く、かなり強力なPCでもフレーム落ちが避けられないという話を聞いています(要検証)。

このあたりのおすすめの機材や構成があったらどなたか教えてください。m(__)m(Blackmagic Designのつよいのあたり?)

カメラが手ブレするんだけど

スタビライザーを使ったリグを組む必要がある気がします。

Unreal Engineは対応してないの?

対応予定とのことです。


参考リンク

書いた人:こりん(@korinVR
» VR開発メモトップへ