ざっくり言えば、これをやる方法です
あっ ビートスーモ! #バーチャルモーションキャプチャー
— おめが( ゜ヮ゜)ノ (@Omegamega) 2019年1月6日
って、スーモ君だと等身的にどうしようも無さそうで浮いちゃうっぽい? pic.twitter.com/Fz1mmPPPXl
この記事はバーチャルモーションキャプチャー公式サイトの操作方法を元にしつつ、それぞれがどんな感じに組み合わっているかを補足する想定でいます。元記事を参照しつつ、歴史的経緯やら「なんでこうなってんの?」的な部分を補完できるといいなあ
先にネタバレしておくと、上の絵のシステム概略図はこうだ。これを見てわかってしまったら、それでいい。今すぐSteamVRを立ち上げて公式説明を見ながら格闘しよう
以下はこれがなんでこうなってるか、という歴史的経緯を含めた解説にする
使うもの一覧
以下は構成に必要になもの
使うハードウエア
- HTC Vive
- HTC Viveトラッカー
- 必要に応じて追加。なければHMD+手(コントローラ)x2で3点トラック
- トラッカーを追加する場合の推奨としては、推奨優先順に、腰、足先x2、肘x2、膝x2だろうか。とりあえず腰、足先x2の3個追加(6点トラック状態)するのがおすすめ
- VMCでは柔軟なトラッカー設定が使えるため、例えば上半身のみの絵作りであれば、HMD+手(コントローラ)x2+腰で1個利用とか、HMDを使わず頭+手(コントローラ)x2+腰で3個利用とか、頭+手x2+腰で4個利用といったトラッカー配置ができる
- 余談だがそもそもガンコントローラやテニスラケットをVR化するためのデバイスであって、全身にくくりつけてフルトラマンとかやってる人間が多い日本が異常らしいゾ。対抗しうるモーションキャプチャー操作「perception neuron」が25万とのことなので、トラッカーは(相対的には)安いらしい…
使うソフトウエア
- バーチャルモーションキャプチャー(VMC)
- LIV
- VRアプリと連携するMR合成ソフトウエア
- SDK組み込み済みのVRソフトと連携して、MR合成を行うのが主機能。MR合成のために仮想Viveコンと仮想Viveトラッカーや、録画機能も持つ
- 「映像合成」と仮想Viveトラッカーが今回主要な役割をする
- Opensource Broadcaster Software(OBS)
- 定番の動画配信/録画エンコーダー
- 単純なグリーンバック合成だけでいい場合や、LIV合成後の画面を組み合わせて凝った画面配置をしたい場合、動画配信をする場合に使う
- ただのグリーンバック合成ならLIVよりこちらの方が軽い
- VRソフト
- 自分がプレイするソフト
- 「LIV SDKが組み込まれているか」「externalcamera.cfgに対応しているか」「どちらも対応してないか」でざっくり扱いが変わる。後述
その他
基礎はexternalcamera.cfgとグリーンバック合成
そもそもの発端はSteamVR SDKにある、externalcamera.cfgを使ったグリーンバック合成だ。下動画の0:45あたりからがわかりやすい
動画が2016/4とあるように、SteamVR SDK当初からある。有名な例は、Circle of Saviors VRのTGSデモだろう
グリーンバックを背景にしてゲームを遊ぶ現実世界のプレーヤーを切り抜き、ゲーム画面と合成することで、VR世界にいるかのような絵を作る。これがexternalcamera.cfgを使ったMR合成だ。
構成図はこうなる
当時の合成方法はHTC Viveでクロマキー合成映像を撮影するには - フレームシンセシスのやMRVideo - vrapp Wiki*記事に詳しいが、ざっくりいうと
- 3本目のViveコン or Viveトラッカーにカメラをくっつけて実世界に配置
- (対応している)VRアプリにカメラ座標情報(externalcamera.cfg)を読ませて(たいていの場合はexeと同じフォルダに配置して)MR合成モードにする
- OBS等の動画ツールでグリーンバック合成をする(クロマキーで緑背景を透過して重ねる)
という感じである。合成ズレをへらすためには、externamcamera.cfgと現実を撮影するカメラの特性をキッチリ合わせる必要があるようで(手作業)なかなか骨が折れそうである
仮想コントローラの登場
ただ、この方法では合成のためだけにViveコントローラかトラッカーを1本買う必要があった。カメラを動かしてもちゃんと撮影されてる体にするのは、それしか方法がないのだが、別に個人でやるならカメラは固定でいい、それなら物理でコントローラ/トラッカーがなくてもいいじゃないか?ということで登場するのが仮想Viveコントローラ/仮想トラッカーだ。
コントローラ/トラッカーがなくても3つ目として認識させる。実際SteamVR画面を見ると出現していることがわかる(LIVが起動すると他コントローラ/トラッカー同様に電源が入った表示になる)
仮想Viveコントローラ/トラッカーはいくつかリリースされている様子だが、今回はLIVに統合されているものを使う。
仮想コントローラを使う時に注意しないといけないのが、Viveコントローラの起動順序。SteamVR自体がVRアプリで使うのを、1本目と2本目のコントローラとしているので、物理コントローラを起動する前に仮想コントローラを起動すると、仮想コントローラが1本目や2本目に割り当てられてアプリを操作できなくなる。必ず、物理Viveコントローラの電源を先に入れてから、仮想コントローラの電源(LIVの場合はLIVを起動)を入れる
LIVは映像合成 + 仮想トラッカー + αのおまとめパッケージ
公式の動画をちらっと見ればわかるが、実写とVRアプリ空間のMR合成をするケースではexternalcamera.cfg単独とやることは大して変わらない。同じだ。
MR合成に至る面倒事を様々カバーしている。
- 専用SDKでVRアプリと連動し、より高度な合成(optional)(環境光を再現したり、前後位置で映像を分けて合成する)
- 追加コントローラを買わずに済む、仮想Viveコントローラ
- 単独でグリーンバック合成
むしろ、MR合成の諸々ツールをひとまとめにしてパッケージ化したのがLIVと言える。LIVが仮想Viveコントローラを内蔵しているので、前述のように物理Viveコントローラの起動より後に立ち上げる必要がある。
externalcamera.cfgはここでもカメラ座標の共通フォーマットとして、以前のMR合成モードから引き続き使われている。キャリブレーションでexternalcamera.cfgを読ませると、LIV SDKを経由してVRアプリに情報が伝達されるか、従来と同様にexternalcamera.cfgをexeと同一ディレクトリに配置する挙動をしているようす
VMCでアバターを使うケースに戻って比較
改めてVMC+LIV+VRアプリの構成に戻ろう
実写MR合成のフローと比較すると、実はそんなややこしくなく「物理カメラによるグリーンバック実写映像」が「仮想カメラからのVMCのレンダリング結果」に差し替わっただけ。だからこそ、カメラ情報(externalcamera.cfg)は、VMCとLIVの両方で読む必要があるし、仮想LIVトラッカーに割り当てる必要がある。VMCが仮想カメラとしてLIVに認識されるのも、元が実カメラだったことに由来している(はず)
実写MR合成だと物理カメラに物理トラッカーといった実物があるので理解しやすいが、これらが仮想になったことでややこしく把握しにくくなっていると思うので、一旦実写MR合成のフローから再確認しよう、というのがこの記事なわけです。
あとコントローラの起動順序な!
以下適当QA
Q.VRアプリがLIV非対応&&externalcamera.cfg非対応の場合はどうする?
A.諦めよう。第三者視点でのレンダリングにVRアプリが対応してない以上、第三者視点の合成はできない。
とはいえ主観視点+アバター合成でも雰囲気は悪くない。アバターが結構目を引いてくれるので、VR動画としても酔い対策になると思う。こんな具合に
俺が!俺たちが緑だ! KceCombatVRごっこや!(めっちゃ重い)#バーチャルモーションキャプチャー #KSP pic.twitter.com/tv2Hua3HNU
— おめが( ゜ヮ゜)ノ (@Omegamega) 2019年1月22日
このケースでは、VMC+LIV合成とだいたい同じだが、
- カメラをあわせる必要がないためexternalcamera.cfgは触らなくていい(仮想トラッカー/コントローラも不要)
- クロマキー合成をOBSで行う
という感じになっている。LIVが絡まない分処理は軽く、仮想トラッカー/コントローラも絡まないためトラブルも少ない。とても汎用的で非VRゲーとかをやるにも使える。非VRゲーやる時にはVMCの手や頭設定をHMDやViveコントローラの変わりに、Viveトラッカーにすると楽だろう
はいどーも成分はありませんでした(オーディオ回りわからん) #おめでとうHellsinker. #Deadlair派 #バーチャルモーションキャプチャー pic.twitter.com/EmRBFOJ8Za
— おめが( ゜ヮ゜)ノ (@Omegamega) 2019年1月25日
上の絵を撮るときは、頭トラッカー+手トラッカーx2+腰トラッカーの4トラック装備で行った。HMDとコントローラは一切使用してない。上半身だけで撮影する時でも頭と腰で2点トラッカーがあると、首かしげや前のめり等、kawaいい動きが付けられるので積極的に腰トラッカーを装備したい所
まあただ、この手の絵だとそもそも顔芸がほしいよね?というのはあり、その場合表情付けの方法を考える必要あるね(別オペレーターを用意するとか、コントローラなり、又はいっそVMC以外の顔認識系でやるとか)
Q.VMCでキャリブレーションしたときに、トラッカーが違う部位にアサインされてしまう。
A.LIV起動前にキャリブレーションをする。LIVが立ち上がる前にキャリブレーションすることで、LIVの仮想コントローラ/仮想トラッカーに割り当てられるのを防ぐことができる。
一番確実な方法は、VMCのトラッカー設定を「自動判定」からそれぞれ個別に割り当てるだが、ちょっと面倒かな。
Q.複雑な画面作りをしたい
A.LIVの合成結果を、OBSで更にキャプチャーする。OBS側でいろいろ配置して複雑な画面作りをする。
この時LIVの映像は遅延するので、OBSの音声入力を同じだけ遅延させるとよい(OBSのオーディオ詳細設定で同期オフセットを設定する)
Q.トラッカー固定とかどうするの?
A.いろいろググるとみんないろんな手を使ってるので、DIYだ。専用品もあるがやや高い。うちの例はこう
頭は溶接ヘッドバンド、手or足はベルクロテープ+3Dプリント台座、腰も同様。台座はこのモデルを出力している。
Viveトラッカーはカメラの三脚ネジ(1/4インチネジ)が刺さる。Amazonだとこの手のアイテムが土台には便利だが、ホームセンターで15mmぐらいの1/4インチネジを買うといろいろアイデアが湧くかもしれない(ただしネジは頭が大きいので工夫は要るかも)。
手装着例
他だとクロックス(サンダル)に、インシュロックで固定勢もいる様子。腰は安いウエストポーチを潰すとかいろいろ工夫しがいがあると思う。
専用品は例えばツクモで取扱あり(TrackStrap)
Q.一通り起動まで結構たいへんじゃない?
A.結構たいへん
LIV/externalcamera対応ゲーやるとき
わい「SteamVR起動!」
ベースステーション「フォオオオ…(30秒ぐらい」
わい(この間にトラッカー装備しよ…)
わい「ベースステーションB,C起動確認ヨシ!」
わい「トラッカー1,2,3起動!トラッカー認識ヨシ!」
わい「VMC起動!」
(これもなんか時間かかるので、平行してコントローラ起動)
わい「コントローラ認識ヨシ!」
わい「VMC設定ロード!キャリブレーション開始!」
(立ち上がってHMDを付けてTポーズする)
わい「(HMDを外して)VMCトラッキングヨシ!」
わい「LIV起動!externalcamera読み込みヨシ」わい「VMCでもexternalcamera読み込みヨシ」
わい「SteamVRからゲーム起動」
(起動ちょっと待つ)わい「LIV合成確認ヨシ!」
わい「OBS起動。OBSキャプチャー設定ヨシ!録画開始!」
わい「…よしゲームやるぞ(HMDをかぶる)」
非対応ゲーやるとき
わい「SteamVR起動!」
ベースステーション「フォオオオ…(30秒ぐらい」
わい(この間にトラッカー装備しよ…)
わい「ベースステーションB,C起動確認ヨシ!」
わい「トラッカー1,2,3起動!トラッカー認識ヨシ!」
わい「VMC起動!」
(これもなんか時間かかるので、平行してコントローラ起動)
わい「コントローラ認識ヨシ!」
わい「VMC設定ロード!キャリブレーション開始!」
(立ち上がってTポーズする)
わい「VMCトラッキングヨシ!」
わい「OBS起動!グリーンバック合成設定読み込みヨシ」
わい「SteamVRからゲーム起動」
(起動ちょっと待つ)
わい「OBSキャプチャー設定ヨシ!録画開始!」
わい「…よしゲームやるぞ」
こんな感じにはなる!仕組みがわかれば、トラブル要因はコントローラ起動順序とトラッカー割当/キャリブレーションに収束するはずなので、順序に気をつけてて手順をキッチリやると良いだろう
かわいくなるためには日々の努力が必要なんだなあ…