[VRChat] カメラだけでフルトラしようぜ!(しかしまだうまくいっていない!)
なんとカメラだけで、何も装着せずにフルトラになれる!ソフトのお試し版が無料で公開されたので、試してみました。
その名も
MocapForAll
どうも「空き家総研VRラボ」さんという、リアルで不動産業を営む会社さんが開発したソフトだそうです!
不動産関係ないのにどうして~とかいろいろ気になる点ありますが、6/11開催の「トラッキング勉強会」で講演されていてとてもおもしろかったので、そのうち動画が公開されると思いますので、見てもらえるとおもしろいかと思います!
※正式の有料版は10000円程度です。それでも安い!しかも何も装着しなくてよいから、ものぐさな人には超楽!(私)
使用感はこんな感じだそうです。(by ばーゆさん)
https://twitter.com/Ring_Say_rip/status/1402613178463252490
1. カメラ準備
WebCameraを2つ(以上)用意する必要があるそうです。数が多いと精度が高くなるのだと思います(多分)。
さて、うちには1つはありました。しかし故障…。
2つ用意しないといけないのですが、手元にない。買うのものなぁと思っていたら、知り合いのらすくんから
「カメラをスマホで代替できるよ」
と教えてもらったので、うちの2台のスマホを使ってフルトラ化してみることにしました。
1台はAndroid(ShaomiのRedmi note 9S)、1台はiPhone(iPhoneSE)です。
パソコン側の同一アプリで2台のスマホの映像を扱うことはできないようなので(つまり例えばDroidCamでAndroidとiPhoneから同時に2カメラの映像を取得することはできない)、
Androidに「DroidCam」、iPhoneに「Iriun」をインストールしました。
いずれも手順は一緒。
①PlayStore/App StoreからDroidCam/Iriunをインストール
②PC用のソフト・ドライバーをインストール
DroidCam www.dev47apps.com
Irium https://iriun.com/
おおお、カメラになった(以下はDroidCamの映像)。
他にも、スマホをカメラにする方法はあるので、以下の記事参照。
注意点は、スマホのアプリが、外部に映像を(無断で)送っている可能性も否定できない点…というセキュリティ上のリスクはありますが、それが嫌なら普通にWebCameraを買った方が良いです。
2. Boothからフルトラ用ソフトをダウンロード
以下をダウンロードして、Readmeの中身を読みましょう。
・Readme
・CPU VersionのPart1/2 もしくは GPU VersionのPart1/2
分かりやすい場所にまとめておくと作業しやすいです。
うちはGPUを積んでいるのでGPUで良いだろうと勝手に判断し進めてみました。
readme.txtを読む。と思ったけど、ちょっと間違っていたりする部分もあるので、注意点と実際のインストールをまとめると以下の通り。
注意点
Cドライブに10GBの空きがあった方が良さそう。なんだかんだでダウンロードするファイルや解凍すると合計で10GBはいきそうな感じ。
事前準備
Boothからダウンロードされるファイルに含まれる「ExtrinsicCalibration.png」をA3以上の紙に印刷しておく。
※これはキャリブレーションのタイミングで使用する。
※しかし実はA3でも実はぎりぎり位のサイズなので、理想を言えばもっと大きいサイズが良いようです。(がA3より大きいサイズでプリントアウトするのは普通は難しいですよね(笑))
3、手順(インストール)
①NVIDIAのサイトから以下のコンポーネントをダウンロードし、インストールする。1つ当たり数百MB~GBとサイズが大きいため、ディスクの空きに注意。
1)CUDA 11.0.3(バージョン注意)
※インストーラに従えば良いので特に難易度は高くない。
2)CUDAの追加コンポーネントを以下からダウンロード(cuDNN v8.0.2 (July 24th, 2020), for CUDA 11.0)
https://developer.nvidia.com/rdp/cudnn-archive
どうもこれを1)をインストールしたフォルダにそのまま入れる必要があるようです。
つまり、1)のプログラムは、C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0にインストールされるのだが、ここに、ダウンロードしたcuDNNをzip解凍したフォルダの中身bin, lib等を、すべてをそのまま1)のインストールフォルダ内にコピー(上書きしても良いかと聞かれるがOK)。
3)TensorRT 7.1.3.4のインストール
https://developer.nvidia.com/nvidia-tensorrt-7x-download
どこかに適当において、そのパスの中の「lib」を環境変数のPATHに設定する。環境変数は以下の通り。
②環境変数設定
環境変数はWindowsの左下のメニューで「環境変数」と検索すると出てきます。(「ここに入力して検索」に「環境変数」と入れる)
「システム環境変数の編集」を押す。
「環境変数」
WindowsPCの全ユーザでも使えるようにしたいなら「システム環境変数」に設定した方が良いですが、一人で使うPCなら上の「ユーザ環境変数」で設定すれば十分です。
新規/編集を押すと以下のダイアログボックスが出てきます。
今回設定するのは以下の4種類の値のようです。
変数名:CUDNN_PATH
変数値:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0
変数名:ORT_TENSORRT_ENGINE_CACHE_ENABLE
変数値:1
変数名:ORT_TENSORRT_CACHE_PATH
変数値:新規作成した適当なフォルダのパスを入れてね(キャッシュ用らしい)
変数名:PATH
変数値:{{ TensorRTの設置フォルダ }}/lib
※PATHについては既設の値が存在する可能性があるので、その場合は、末尾に追記。既設の値を消すとPCが動かなくなる可能性があるので注意。
③Boothからダウンロードしたファイルの中の
MocapForAll.exe
を実行する。
④SteamVRで利用するためにVirtual Motion Trackerをインストール
・vmt_managerフォルダのvmt_manager.exeを実行して以下の画面が出てくるので「Install」を押してインストール
4、キャリブレーション(初回のみ?毎回?)
WebCamera2台をPC上で映せる状態にしておいてください(Windowsのカメラアプリ等で動画が確認できる状態)。
(左:DroidCam(Android)、右:Iriun(iPhone))
①カメラを追加
Add Cameraで2つ以上カメラを設定する。
Add Camera→Camera ID=0,1などを選択するとカメラを選択できる。
カメラの置き方が適切か分からないがとりあえず下のような角度で置いた。首より下が収まるようなイメージだ。
②キャリブレーション
1)Intrinsic: PCにIntrinsicCalibration.pngを映し、それをWebCameraでいろんな角度から撮るキャリブレーション(全部のカメラに対してそれぞれ実施)
これ、WebCameraだと動かしづらいので、もしかすると紙に印刷しておいた方が良いかもしれない。
うちの場合、スマホなので移動しやすかったので、スマホをPCのモニターにいろんな角度からかざして、以下の画像でキャリブレーションを実施。
うまくいくと、緑色のCalibratedと表示される。
後のことを考えて、キャリブレーション面倒なので「Save」しておきます。分かりやすい名前で。例えば「iPhone-back-20210612」のように命名して。
うちのDroidCam、なぜか長時間放置していてからキャリブレーションすると、接続がおかしくなってMocapForAllがFatal Errorで落ちます。普通のWebCameraの方が安定するかもしれません。
2)Extrinsic: 紙に印刷したExtrinsicCalibration.pngをカメラから見える位置に置く
この状態でStartを押し、キャリブレーションが完了するまで待つ。
紙はキャリブレーションが完了するまでは移動しないこと。
両方のカメラから十分な大きさで映る場所を探すのが意外と大変。
A3の紙だと以下のような形でぎりぎり映っているかどうかというサイズ感になる。
このキャリブレーションの最中はPreview画面上で、何か点がうごめく様子が表示されるので、それが落ち着くまで待ちましょう。
それをすべてのカメラに対して実施します(複数カメラで同時にキャリブレーション実行しても良いようです)
キャリブレーションには数分程度かかりました…と思ったのですが、違います。キャリブレーションに十分な大きさで紙が映らないとずっと終わらないのです。十分な大きさで映っているとすぐに(1秒以下)終わります。
5、モーションキャプチャーをする(毎回)
「Start Capture」を押す!
ただそれだけだとVRChat等のゲームでは使えないので、ゲームにinputとして入れてあげる必要がある。
SteamVRの場合は、Virtual Motion Tracker経由で使うことになる。
①MocapForAll側の画面右のSetttingsでチェックを入れておく(MocapForAllで取得したキャプチャーデータをSteamVRに送信する)
「Settings > Data export > Send tracking points」と
「Settings > Data export > Send tracking points > As relative position to HMD」をオンにし、HMDのシリアル番号を入力してください。
②HMDを起動しておく(PCVRが使える状態にしておく)
③VirtualMotionTrackerのvmt_manager/vmt_manager.exeを起動する
とりあえずVMT_0 Joint Serial Noに上と同じHMDのシリアル番号を入れる
。(シリアル番号を入れるのはなぜ?と思うのですが、おそらくUniqueIDを通信のために使いたいということなのでしょうと想像。)
④そうするとSteamVRにVMTがトラッカーとして表示される
トラッカーは使ったことがないのでこれで良いのか分からないけどとりあえずこれでVRChatを起動。でもトラッカー1個だけだから足りてない気もする。
⑤VRChat
⑥T字ポーズなので、メニューを開いてキャリブレーションを押す(押すと手の位置を合わせて、トリガーを引くとキャリブレーション完了。)
やっぱり動かない。多分データ送られてないな。
どうもうまくいかないのですが
・うちのPCだとフリーズする(性能不足の可能性)
・何かがうまくいっていないのだが、うまくいっていない理由が分からない
以上おしまい。後で時間あればまたやります。
(追記 6/11)
動画を見た方が分かりやすかった…。
Readmeに添付の動画です「Quick_Start_For_VRChat.mp4」。
緑色のキューブがVMTのトラッカーで、3つあるのが正しいです。
それが腰と両足くらいの場所に一致していればOK。
不一致なら、そもそもMocapForAllの時点でデータがきちんと撮れていない(カメラの位置が悪いと思われる)ので、修正が必要です。
MocapForAll側の設定は
・DNN ON GPU TensorRT(Tensorを使ってAI計算)
・Priority on Precision(プレシジョンベースで計算)
・Character Empty(その方が軽くなると思われ)
・Sent Tracking PointsをON、As relative Positionにチェック
・Peris/Feetのみのデータを送る
VMT側の設定は特に不要だが、VMT_0 Joint Serial Noだけ入れてる。
まぁ後はカメラにしっかり全身が収まるようにするというのと、カメラを追加しても良いかもしれないっすね。
ヨドバシで3台目のカメラ買ってきて試そうと思いました。
(追記 6/12)
・やっぱり全身がカメラに収まった方が精度が良い?(それは当たり前か)
→ そのためには部屋の広さが足りないorz
・なんとか全身が映るようにして試して、MocapForAll上だと全身の動きが(びゅんびゅん飛ぶ部分はあるけど)まぁ形になったとしても、VMT経由で、SteamVRに送ったときのトラッカーの位置が全然ちがうのが分からない…(まるで体がないところにめり込んでいる)
感想
基本的にトラッキングを扱うのに慣れている人向けのツールだと思います。
でもコンセプト的に「カメラだけでトラッキングができる」のは魅力的で、絶対に将来性あります。
技術的にめっちゃ難しいけど、個人的にはだからこそ逆におもしろいと感じてしまいました(一応、技術者の端くれということでしょうか?)。
昨日もトラッキング勉強会に参加してみて「ああ、こういう技術は僕にしっくりくるかもしれない」と思いました。
VRは好きなのですが、僕自身、ゲーム開発やコンテンツ開発やフロントエンド系技術にはあまり興味がなくて、どちらかというとインフラやAIとかの方が好きなんですよね。見た目よりロジックというのか。そういう意味で、トラッキングの世界の奥深さに興味を惹かれました。
今後もいろいろ動向を見ていきたいと思いました。
その内うまくいったらこの記事を更新したいと思います。
サポートいただいてどうもありがとうございます! これからもVRの情報を収集発信したいと思います!