メンテされてないのは軒並み壊れたらしい
あらまし
日本時間の2020/09/18未明,SteamVR の 1.14系がstableリリースされました.これによってOculusユーザーなどがあの手この手でトラッカーをエミュレートしてフルボディトラッキングを実現している環境において,そこで使用されている最近メンテされていなかった古いツールが使えなくなるという事態が発生しました.
Oculusユーザーでも可能なフルトラ手段の1つとして,Xboxシリーズの Kinect を利用してトラッカーの位置を計算・エミュレーションするするKinect To VRというソリューションがあります.くわしくは Oculus Rift + KinectによるフルトラッキングでVRChatを遊ぶ – ビログ で紹介されているのですが,ここで紹介されているリンク先からDLできるKinect To VRも同様に影響を受け,SteamVRに仮想トラッカーが認識されなくなってしまいました.
先日ジャンクで状態のいいKinect 360センサーを買ったのでこれを試そうとしていたところ,作業途中にこのアップデートが入ったため「いきなりトラッカーが表示できなくなる」という事態が生じたわけなのですが無事解決できたのでメモ.
とりあえず動画で
以下の内容はだいたいはこれをメンテしている Ella さんが動画で説明してくれているのでそれを見て済むならそれで充分です.
以下は以前のバージョンのもの:
丁寧に字幕が設定されているようなので自動翻訳でも使い物になる日本語字幕も利用できます……
用意するもの
- Windows 10 の入った PC (1903以降,64bit)
- Kinectセンサー
- Xbox 360 向けのもの (v1) または Xbox One向けのもの (v2). どうやらPlayStation Moveも同様に利用できるらしい
- いずれにしてもPCと接続するためにUSB接続ができる必要がある.私の買ったジャンク品(v1)にはきちんとついていた.
- Xbox One向けのものは(広角では使えるものの) USB3コントローラー(ASMediaとか)との相性、VIVEやIndexとの相性が最悪らしく、強く非推奨らしい。わざわざ新しく買うな、とのこと。
- SteamVRが利用可能なHMD
- Oculus (Rift/Rift S/Quest), Valve Index, Vive MV, Vive Cosmos, Windows MR対応製品などが利用可能の模様
- ようはSteam VR使えるHMDなら大体使える
- 私は Oculus Quest (Oculus LinkおよびVirtual Desktop) で試した
- Valve Index との組み合わせも試した。BSでプレイスペースが固定されてる分Lighthouseトラッキングのほうがキャリブレーションが安定して使える…
- Oculus (Rift/Rift S/Quest), Valve Index, Vive MV, Vive Cosmos, Windows MR対応製品などが利用可能の模様
- SteamVRやVRChat (わたしは新規にインストールしたWindowsで作業していたけど入っていることを前提に……)
導入手順
1. インストーラーのDL
https://k2vr.tech/ よりインストーラーをDLする.
2020/9/18現在ではexeの実行ファイルがDLされるが中身はPowerShellスクリプトであり,DOS窓が開きインストーラーが実行される.その中身はこのリポジトリにある.その性質から一部のアンチウイルスプログラムにトロイの木馬などとして判定される可能性がある(現に手元でもWindows Defender に消されてしまった).また,GUI版 (WPF) のインストーラーも開発中であり,ベータ版バイナリがDiscordにおいて配布されているらしい.こちらであればウイルスチェックに引っかからなさそうであるが,例外リストに入れるかGUI版を使うかお好みの方を.
従来のインストール方法ではこのほかにSDKやInputEmulatorが必要とされていたが,後述のようにとりあえず飛ばしていい.
2. Kinect をPCに接続する
先に進む前にKinectデバイスをUSBでPCに接続しておく.はじめて接続した場合はドライバが不足しているためデバイスマネージャなどではエラーが表示されているが一旦無視して問題ない.
3. インストーラーを実行
先に用意したインストーラーを実行する.
このインストーラーは主に
- Kinectセンサー(デバイス)の検出
- センサーに対応するSDKがインストールされていない場合そのDLとインストール
- k2exのDL(現状ではここから)と展開(C:\K2EX\)
- スタートメニューにk2exの登録
- SteamVR Advaned settingの有効化
- SteamVR Home自動起動の無効化
- SteamVRにk2exのドライバーのインストール
- SteamVRのオーバーレイ登録
などをやっているらしい.
GUI版についてはデバイスを手動選択であったりインストール先が違うなど多少の違いがあるかもしれない.
おそらく実行時にはSmartScreenが表示され,実行が阻止されるであろうので許可してやる.KinectのSDKがインストールされていない場合,ここで自動的にインストーラーが実行されるが,その部分だけはサイレントインストールではないので数クリックする必要があるが,ほかは自動的にインストールされるはず.
4. キャリブレーション
このさきはHMDをかぶり,SteamVRを開始してその中の仮想デスクトップから作業するといいでしょう.
SteamVRを開始すると,おそらくそれまではSteamVR Homeが開いていたような環境でもそれが無効化されたVR空間が表示されるはず.メニューから左したのデスクトップを選択し,デスクトップを操作できるようにしておく.
そのままWindowsのスタートメニューを開き,お使いのセンサーに合わせたK2EXをスタートメニューのプログラム一覧から探し,実行する.
Kinect,SteamVRいずれにも接続されていることを確認し,2つ目のボタン「Spawn Trackers」をクリック.
うまくいけば,SteamVRのウインドウにトラッカーが表示されるようになってるはずである.
デフォルトで3箇所,腰と足のトラッカーが有効化されている.(旧バージョンとは少々異なるかもしれない)
おそらくVR空間のどこかにトラッカーが3つ表示されているはずであるが,キャリブレーションしていないままだと離れた位置に表示されているだろう.実際のセンサーとの位置関係を合わせるためキャリブレーションを行う.ただし,まずは全身がただしくk2exにトラッキングされていることを確認したほうがいいだろう.
仮想トラッカーを呼び出す際にクリックしたHIT MEボタンの直下にあるチェックボックス「Show/Hide Skelton Tracking」にチェックを入れるとウインドウ上にトラッキングスケルトンが表示されるようになる.全身が緑色でトラッキングされていたら問題ない.まっすぐ立ってうまく行かない場合,センサーの位置を調整すべきかもしれない(ウインドウ内のウインドウはドラッグアンドドロップで動かせるので邪魔ならどければいい、0.8.0では背景透過されるようになったので困らないかもしれない).なお,私は部屋が狭すぎて苦労した.
次いでキャリブレーションを行う.「 Begin Calibration」をクリックするとキャリブレーションモードに入る.メニュー(デスクトップ)を一旦とじ,VR空間内でトラッカーの位置を調整する.
自動キャリブレーション
試したら書く。コントローラーを両手に持ちKinectの方を向き3回移動するらしい。
…試してみたもののうまくできなかった。環境がよくないためかもしれない。
従来のキャリブレーション方法
センサーを正面に向いて立ち,まずは腰の位置を調整する.3つ表示されているトラッカーの内,一番上にあるものが腰の位置に合うように,左のサムスティックやタッチパッドで前後左右を,右のスティックやパッドで上下位置を調整する.コントローラーを動かし,腰の位置にあることを確認する.よさそうな位置にトラッカーがきたらトリガーを引くと次は足のトラッカーの位置,というより角度の調整になる.スティックを操作し,下の2つのトラッカーが自分の両足の位置に一致するように調整する.コントローラーや体を動かし,コントローラーとトラッカーの位置関係がいっちすること,体を動かしたらその位置にきていることを確認する.もう一度トリガーを引くとキャリブレーションが完了する.必要に応じて何度か手順を繰り返すといいかもしれない.
5. VRChat内でキャリブレーション
この先はトラッカーを使用している場合と変わらない.
トラッカーが読み込まれてるのでStanding/Sitting のモード切替ボタンの代わりにフルトラのキャリブレーションボタンが表示されており,またログイン直後やアバターの変更後はキャリブレーションモードでTポーズとなる.Tポーズになる必要はないが,足のトラッカーがアバターの左右それぞれの足に分かれるように立ち,左右両方のトリガーを同時に引けばキャリブレーションの完了.鏡の前でやるといいだろう.体がまっすぐでなかったりしてトラッカーがあるべきボーンを捕まえないと両足が片足の動きに持っていかれてしまう.まあこのあたりについてはトラッカーによるフルトラの知見も参考に.
トラッカーの位置がいまいちな場合は一度ゲームを終了させ,再度キャリブレーションを行うといいかもしれない.
Kinectフルトラの留意点
ほかでも散々言われていることであるが,そのセンサーの仕様上センサーを正面に立っている場合以外はトラッキングが不安定になりやすい.座ったり寝たりすることも不可能ではないものの求めない体の動きが発生することになる.トラッカーを体に付ける必要がないことによって動きやすいか……と思いきやも位置が認識できなければ意味がないわけで.
回転を検知することもできない,が,0.8.0で後を向けるようになったらしい.仕組みとしてはHMDが後を向いているときは後ろを向いているものとしてトラッカーの位置や向きを割り当てる単純なものらしい.
Tips
K2Ex起動時に自動的に仮想トラッカーを接続したい
Body Trackersタブの一番下にあるボタン,「Initiate trackers automatically」をクリックしてYESにしておけば次回以降この起動時に自動的にトラッカーが接続された状態になる.また,ショートカットからK2Exを起動した際にSteamVRも自動的に起動するようになっているので,このショートカットを1クリックするだけでそこまで済ませることができる.
毎回プレイ時にこれを行い,トラッカーの位置を確認して問題がなければすぐにプレイできそう.必要に応じてキャリブレーションをし直す必要はある模様(わりと毎回してる).
逆に,SteamVRのスタートアップにK2VRを登録しておけばSteamVRの起動時に自動起動もできるらしいが,手元ではうまく言っていないのでそれについてはなんとも言えない.
Kinectの首を上下に振りたい
Kinect (360)は必要に応じて上下に±27°可動するようになっている.おそらく,K2VR内にそれを制御する機能はないはずだが,ほかのツールでこれを調整しておけばその角度で利用することができる.
Kinect for Windows Developer Toolkit v1.8 に付属するデモアプリ, Kinect Explorer (2種)にはいずれにもKinectのカメラを確認しながらこの角度を調整できる機能がついているのでこれを使うのが手軽.
なお,Developer toolkitはK2Exのインストーラーでは自動インストールされないので別途インストールが必要.
Xbox One世代のKinectは首振りが手動になったらしい,そうなんだ……
メモ
k2vrはGPL3で公開されているOSS.
エントリ投稿時点において,インストーラーでインストールされるのはKimihikoAkayasaki/KinectToVR→KinectToVR/KinectToVRらしい.(あかやさんなにもの)
また,Qt5でUIをリライトしたやつが作業中らしい.
0.8.0での変更点
アップデート内容のおさらい,リリースノートより
変更
- 設定フィアルの保存先を変更
- 従来はアプリケーションのインストール先に保存していたものを
%appdata
以下に変更.UAC管理下へのインストールも可能に
- 従来はアプリケーションのインストール先に保存していたものを
- UIの透過
- Skeletonが隠れないように
- 後を向けるように!
- 自動キャリブレーション
- 面倒なキャリブレーションを33秒で自動的に
- マニュアルキャリブレーションの強化
- 微調整がしやすく(本文参照)
- GUIインストーラーが付属!
バグ修正
- Kinect v2 (Xbox One) センサーでの足のむきのトラッキングを改善
- k2vrの終了時にKinectが起動しっぱなしになってしまうのを修正
- 0.7ではコードを引っこ抜いたり再起動したりしないとずっと起動しっぱなしで消耗の原因になってしまっていた……
- Skeletonのプレビューが消えなくなった
- K2VR起動時に実行中のOVRアプリ(ゲーム)が終了してしまう問題の修正
- オーバーレイアプリとして起動するべきところをゲームとして起動してしまっていたためこれが発生してた
むすび
出てくる情報でやろうとするとうまく行かなくなっちゃったけどむしろ面倒不要でKinectを使ったフルトラができるようになっていた.これでみんなに置いていかれずに……?
ところで,今回はグラボ(dGPU)を積んでいない,先日組んだ4750Gマシンに一時的にWindowsを載せ一連の検証を行った.何度かグラフィックバッファのオーバーフローのようなクラッシュが発生してしまったが,GPUに割り当てる専有メモリを2GBに増やした以降はほぼほぼ問題も起きず,ある程度人数のいるインスタンスでも問題なくVRCができた.この程度の用途ならiGPUで充分なのか……