MRVideo

Last-modified: 2018-12-30 (日) 14:23:49

Mixed Reality Videoとは

Mixed Reality Videoの例

loading...

プレイヤーを撮影するカメラにトラッキング用のコントローラーを付けて、VRゲーム内の客観視点のカメラと同期させて合成しています。ここではSteamVRでの作成方法について解説します。

大雑把な作成方法

Mixed Reality Videoを作成するには、ゲームを4分割モードで起動してOBSなどで合成を行います。
ゲームを4分割モードで起動するには次の3つが必要になります。

  • 3本目のコントローラー(無くても可)
  • 対応しているUnity製のゲーム→対応ゲームリスト
  • ゲームのフォルダにexternalcamera.cfgファイル

externalcamera.cfg
externalcamera.cfgはカメラに取り付けたコントローラーとカメラとのオフセット位置を持った設定ファイルです。他に作成ツールが要素を追加することがあります。中身はテキストなのでメモ帳などで作成することが出来ます。
このファイルは最近のゲームなら動的に読み込んでくれるので、数値を変えて上書きすれば即座に反映されます。
externalcameracfg.png
例:fileexternalcamera.cfg

 

コントローラーが3つ接続された状態
SteamVRstatus3c.jpg

 

4分割モードで起動しているゲーム (The Lab)
quadrant1.jpg
左上は前景、右上はアルファマスク、左下は背景(背景といっても前景も一緒に描画されます)、右下は主観(左目側)。

コントローラーの接続

外部カメラとゲーム内カメラの位置を同期させるためのコントローラーを接続します。
HTC VIVEはコントローラーを2本までしか接続できないため、3本目のコントローラーはPCとUSB接続することで認識させます。他に仮想コントローラーやVIVE Trackerを使う方法があります。

仮想コントローラーを使う方法

仮想コントローラー用のツールは複数あります。仮想コントローラーの場合はカメラ位置が固定になります。

MixedRealityTwoController

仮想コントローラードライバとexternalcamera.cfgを作成するためのツールのセットです。使用法はこちらで解説されています。
【HTC Vive】コントローラ2本でクロマキー合成をする方法 - Qiita
http://qiita.com/miyumiyu/items/25deb3542e913750f519

LIV

LIVの使い方はこちらで説明します。
https://wikiwiki.jp/vrapp/LIV
LIVは仮想コントローラーの接続からexternalcamera.cfgの配置、映像合成までを行う総合的なツールです。4分割モードで起動できるゲーム以外にLIVのSDKが組み込まれたUnreal EngineやUnity製ゲームの合成ができます。
LIVを使う場合はOBSのアルファ用フィルタは不要です。他にOBSのソースをLIVにすれば設定をゲームごと変えなくてよいというメリットがあります。
デメリットとしてLIVが検出できないゲームには使えないこと(割とある)があります。

VIVE Trackerを使う方法

2018年末くらいにリリースされたUnity製ゲームは、3本目のコントローラーの代わりにTrackerで4分割モードにできるようです。コントローラーに続いてTrackerを接続するとカメラ用に割り当てられます。The LabやPaddle Up等の以前のゲームは従来どおりコントローラーが必要です。
Vive Tracker Role Changerを使うことでVIVE Trackerをコントローラーに偽装する事ができます。
注意:Trackerのファームウェアを更新する場合は更新前に元の状態に戻してください。
このツールは誤使用など問題があるため配布停止されています。

 

Trackerは立てた状態でロゴ方向(Z軸+)がカメラ正面になるようです。水平で使うにはexternalcamera.cfgでrx=90にします。
tracker2.jpg

VIVETrackeraxis.jpg

externalcamera.cfgの配置

前途のツールやテキストエディタでexternalcamera.cfgを作成したらゲームのフォルダにコピーしておきます。
Steamクライアントから「ローカルファイルを閲覧」でゲームのフォルダを開くことができます。
SteamVRappfolder1.jpg SteamVRappfolder2.jpg
externalcamcfg1.jpg

起動するゲームの解像度を指定する

最終出力に合わせてゲームの解像度を指定します。4分割で起動されたゲームは縦横半分のピクセル数が1画面のサイズになるので、例えば最終出力1280x720(720p)にしたい場合は2560x1440に設定します。
解像度を指定するにはSteamライブラリ、もしくはゲームの実行ファイルをShiftを押しながら起動して設定ウィンドウを出します。Shiftキーは設定ウィンドウが出るまで押しっぱなしにしてください。(キーはShiftの代わりにCtrlかAltでも可)
SteamVRappH3VR1.jpg
設定ウィンドウ
appset.jpg

ここではでゲームの解像度、ウィンドウかフルスクリーンか、表示するモニタを設定できます。
モニタの解像度が設定できる解像度の上限になるので、解像度の違うモニタを使っているときはSelect monitorで左右を変えると上限が変わります。
The Labなど解像度を指定できないものがあります。この場合フルスクリーンにすることで解像度をモニタの解像度にすることができます。解像度の値は合成で必要になります。

モニタ解像度を超えた解像度でゲームを起動する

グラフィックボードがGeForce系の場合はDSRを設定することでモニタを超える解像度を設定できます。
ここでは2kモニタで4k相当に設定する場合を例として説明します。

  1. NVIDIAコントロールパネル - 3D設定 - 3D設定の管理 - DSR係数 で使いたい係数にチェックを入れます。係数は面積の比率なのでx4.00を設定します。
  2. モニタの解像度に4k相当が追加されているので選択します。そのままでは文字が小さくて使いづらいのでスケーリング(拡大縮小とレイアウト)を200%にします。
  3. ゲームの画質設定で4kを選択します。ウィンドウモードのチェックは外して下さい。
    dsr.jpg

OBS studioの設定

ゲームが4分割モードで起動したらOBS studioでソースに指定します。

OBS用アルファフィルタのインストール

OBSの使っていないフィルターをアルファ合成用のフィルタに書き換えておきます。例ではシャープフィルタを書き換えます。
OBSのシャープフィルタは通常以下のフォルダにあります。

C:\Program Files (x86)\obs-studio\data\obs-plugins\obs-filters\

メモ帳などで「sharpness.effect」を開いて
ここから
https://obsproject.com/forum/threads/using-one-video-source-as-alpha-for-another.44891/page-2
alphafilter.jpg
「uniform float4x4 ViewProj;」以降(画像赤枠内)をコピーして上書きします。
シャープフィルタは念の為バックパックをとっておくと良いかもしれません。OBSをアップデートすると書き換えたフィルターが上書きされることがあります。

OBSのソースの設定

  • OBSのソースから前景をゲームキャプチャで追加します。フィルタ設定で置き換えたシャープフィルタと、画面左上の前景だけを切り取るようにクロップ/パッドフィルタを追加します。
  • 背景としてウィンドウキャプチャを追加して、同様にフィルタで画面左下を残してクロップします。
  • 中間に合成する映像を追加します。
    OBSsource5.jpg

その他OBSの設定

  • 4分割画面が提供する主観は左目で視野が狭すぎるので代わりにOpenVR input pluginを使ったほうが良いです。こちらは左右の選択やクロップができます。

バーチャルモーションキャプチャー

実写合成の代わりに3Dモデルを使う事ができます。

GitHub - sh-akira/VirtualMotionCapture: VRゲーム中にモデルをコントロール
https://github.com/sh-akira/VirtualMotionCapture/

vmcct.jpg

使用例
ゲーム:Cosmic Trip
モデル:ニコニ立体ちゃん (VRM)

  • バーチャルモーションキャプチャーを起動するとSteamVRのゲームが終了してしまうので、ゲームより先に起動しておきます。バーチャルモーションキャプチャーの解像度を合成するゲームの解像度に合わせて下さい。起動時にShiftを押しっぱなしにして出てくる設定から指定します
  • OBSでバーチャルモーションキャプチャーの出力ウィンドウを前景と背景の間に入れて下さい。バーチャルモーションキャプチャーは初期設定ではグリーンバックなので、フィルタでクロマキーを追加すればフィルタの値の変更なしで合成できます。
  • カメラをゲームと一致させるには、コントロールパネル -設定- 詳細設定 でコントローラー番号を選択してから「externalcamera.cfgを開く」でゲームと同じexternalcamera.cfgファイルを読み込ませます。カメラの視点がおかしいときはコントローラーの番号が違っている可能性があります。番号を変更してexternalcamera.cfgを開き直して下さい。
    ※この説明はバーチャルモーションキャプチャー0.07時の説明です。アップデートで変わる可能性があります。

動かない…

ゲームが4分割モードにならない

HMDやコントローラーがスタンバイ状態の可能性があります。復帰させてみて下さい。逆に4分割モードになった後でもスタンバイに入ると分割されていない画面に戻ります。
hmdstandby.jpg

カメラに設定したいコントローラーとゲームで使うコントローラーが入れ替わってしまう

最後に起動したコントローラーがカメラ用に割り当てられているような気がしますがよくわかりません。仮想コントローラーならなるべく最初にリアルコントローラーの電源を入れるか、VIVE Trackerの場合はTracker含むコントローラー3つの電源を入れ直してゲームを再起動して下さい。

ctrh.jpg

コントローラーに両手が割り振られているか確認する。

参考にしたところ

Mixed Reality Videos :: SteamVR Developer Hardware 総合掲示板
https://steamcommunity.com/app/358720/discussions/0/405694031549662100/
HTC Viveでクロマキー合成映像を撮影するには - フレームシンセシス
https://framesynthesis.jp/tech/htcvive/mixedrealityvideo/
【HTC Vive】コントローラ2本でクロマキー合成をする方法 - Qiita
http://qiita.com/miyumiyu/items/25deb3542e913750f519
externalcamera.cfgの作り方 | NAOMO
http://naomo.co.jp/2017/09/externalcamera-cfg%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9/
4Kモニタを持ってない人が4Kでスクショや動画を撮る方法
https://blog.ica-musu.me/?p=9641
OBSの設定方法
https://krsw.5ch.net/test/read.cgi/steam/1532801851/331

 

実写合成をしたい人はこちら
【VR】お金をかけずにリアルと仮想世界をクロマキー合成してみよう! | 株式会社インフィニットループ技術ブログ
https://www.infiniteloop.co.jp/blog/2016/10/vr-chromakey-part1/

コメント