Oculust Rift+Kinectのフルトラッキング環境できた!
— bironist (@bironist) 2018年6月18日
アンオフィシャルな方法だしめっちゃめんどくさい想像してたけど思ったより簡単だった#VRChat 内での動作もかんぺき
あとでブログにまとめよう pic.twitter.com/ueI7suO93F
はじめに
Oculus Rift + Oculus Touchでは頭と両手の3点トラッキングのみで、腰や足のトラッキングが不可能。そこでKinectを使い、腰や両足も含めたフルトラッキングを実現しよう。
(一応今はOculusTouchを3個までトラッキングできるようになっているらしいが、検証してないし情報も少なくいまいちよくわからない、どのみち3個じゃフルトラには足らないし)
Kinectというのはカメラに深度センサーが組み合わされていて人体が取っているポーズを取り込めるデバイス。Xbox360用の周辺機器として世に出たが、いまいちパッとせず一部のガジェット好き、テクノロジー好きに流行ったくらいで消えていってしまった。
一般的にはダンスエボリューションで使われているセンサーといえばわかりやすいかもしれない。
ぼくはXbox360で初代Kinectが発売された直後に飛びついた勢なので、そのときのKinectが押入れの奥で眠っていたので、引っ張り出してきた。
まさかもう一度電源が入る日が来るとは思わなかった。
必要なハードウェア
Oculus Rift + Oculus Touch、Kinect、もちろんWindowsPCも。
Viveでも大丈夫らしいけど、ViveならそもそもViveトラッカーを使ったほうがいいでしょう。
ここを読んでいる人はすでにOculus Riftは所持していると思うけど、もし購入検討中ならこちらもどうぞ。
KinectはXbox360用に発売されたKinect v1とXbox One用に発売されたKinect v2がある。
ぼくがつかったのはKinect v1だけど、v2でも大丈夫だそうです。
これは最初に世に出たXbox360用のKinect(v1) 。PCに接続するためのアダプターも同梱されている。(というか、初代Xbox360はUSB端子しかなかったため360につなぐためにもアダプターを利用する)
新型Xbox360(EliteやSlim)では専用のKinect端子が搭載されたため、アダプターが必要ない。もしEliteやSlimと同梱タイプのKinect v1の場合はPC接続アダプターが存在してないために別途購入しないといけないかもしれない。中古品などを購入する場合はPCに接続するためのアダプタの有無は絶対確認しよう。
これはXbox One用に発売されたKinect(v2)。PCに接続するためのアダプターは同梱されていない。
マイクロソフト Xbox One Kinect センサー用 Windows PCアダプター 9J7-00007
- 出版社/メーカー: マイクロソフト
- 発売日: 2016/08/01
- メディア: Video Game
- この商品を含むブログを見る
というわけでPCに接続するためには、このアダプターを使わないといけないのだが・・・在庫切れ&生産終了で入手は難しい模様。
AmazonをKinect アダプターで検索するといくつか得体の知れないメーカー製のアダプターがヒットするが、おそらく非公式の勝手アダプターだと思われる。使えはするのだとおもうが何があっても自己責任で。
必要なソフトウェア
導入方法はあとの項目で解説するので、とりあえずダウンロードだけしておこう。
Kinect SDK(Driver)
Kinect for Windows SDK v1.8(v1用)
Kinect for Windows Developer Toolkit v1.8(v1用)
Kinect for Windows SDK 2.0(v2用)
v1とv2で必要なバージョンが違うので注意。使用するKinectに合わせてダウンロードする。
OpenVR InputEmulator
SteamVRに仮想コントローラーを追加できたりするツール。コントローラーのリマップができたりなど他にも便利な機能があるが今回は関係ない。
2018/12/20追記
SteamVR 1.1.3で動作に問題がでるようになった。
しかし下記のパッチを適用することで正常に動作することを確認した。
Release InputEmulator SteamVR Fix for 28/11/18 · sharkyh20/OpenVR-InputEmulator · GitHub
詳しくはこちらで
KinectToVR
KinectをVRで使うソフトウェアというとDriver4VRというツールの名前がよく上がると思うが、今回はKinectToVRを使う。無料だしセットアップ簡単。
導入手順
OculusとSteam,SteamVRのセットアップは完了済みとします。それがまだの人は終わらせておこう。
Kinect本体はまだPCに繋がないほうがよい。
1.SteamVRの設定を変更する
SteamVRの設定を開いてSteamVR ホームベータのチェックを外す。
のちにKinectの設定をする上でHomeに入っているとできないため外しておく。ちなみにSteamVRHome自体は、入りたくなったら普通にVRゲームとして起動もできる。もちろん設定が終わったあとはこの設定も戻しても問題ないです。
あと開発者の項目にある「VRダッシュボードを有効化」のチェックをしておくのもおすすめ。後述するがHMDを被ったままKinectの方向を認識できるようになるので。
設定終わったら念の為SteamVRは終了しておいたほうがいいかも。
2.ダウンロードしたソフトウェアを導入する
SDK(Kinect v1ならv1.8、Kinect v2ならv2.0)と、Toolkit(Kinect v1の場合)と、OpenVR InputEmulatorをインストールし、KinectToVRを解凍しておく。
特に設定など変更する必要はなし、そのままインストールしておくだけでよい。
3.KinectをPCに接続する
正しくドライバが導入されていればデバイスマネージャーでKinectが確認できる。認識されなかったらSDK,ToolKitの導入をミスっているのでやり直そう。
4.必要なソフトウェアを起動する
まずSteamVRを起動し、Oculus Touchがスタンバイモードになっていたらニギニギして起こしておく。
↓
つづいて解凍したKinectToVRの中のexeファイルを実行する。
Kinect v1ならKinectV1Process.exe
Kinect v2ならKinectV2Process.exe
実行ファイルが違うので気をつけよう。
起動したらこのような画面が表示されているはず。3項目ともSuccessになっていたらInitialise SteamVR Kinect Trackers - HIT MEをクリック。するとSteamVRの画面にViveコントローラーが4本追加されているのが確認できるはずだ。
ここでおもむろにOculus Riftを装着しよう。視界に巨大な白い矢印と、背後にViveコントローラーの束が見えていて、Viveコントローラーは自分の体の動きに合わせて動いている様子が見えるはず。しかし自分の体とはぜんぜん違う位置で動いてる。これを合わせる必要がある。
この2つのチェックボックスを1つずつクリックし、RiftをかぶりTouchのスティックでKinectの物理的な位置とVR空間内での位置をあわせていく。(VR内で見えているViveコントローラーと自分の物理的な足や腰の位置を合わせていく)
白い矢印がKinectの位置と方向を表している。設定中は自分の体は物理的にKinectがある方向を向いておこう。位置があったらトリガーを引くと確定できる。
なお、この設定は覚えておいてくれるので、初回だけやればOK。毎回こんなめんどうなことをする必要があるわけではない。
ここまでくれば、すでにStreamVRを使うソフトウェアからはフルトラッキングしているように見えている。
4.5.SteamVRのトラッカー設定をDisableにする2018/11/6追記
2018年10月初旬のSteamVRのアップデートで追加トラッカーを手持ちとして認識することが可能になる機能が追加され、しかもそれがデフォルトで有効なため、ここまでの手順を完了させても足や腰のトラッカー(Kinectに認識させてKinectToVRによりViveトラッカーとして認識された足や腰)が手に割り当てられ正常にフルボディトラッキングできなくなる問題が発生している。
これの対処はViveトラッカーによるフルトラと同じく、SteamVRの設定のManage Vive Trackersで追加されたトラッカーをDisableに設定するだけでよい。(これでアップデート前の状態と同じ設定になる)
詳しくはSteamVRフォーラムを参照。
5.いざVRChatへ
普通にVRChatを起動する。自分の顔はKinectが物理的にある方向を向いておくこと。
VRChatを起動するとフルトラッキング環境になっているためキャリブレーションが必要だ。自分のアバターはTポーズを取り微動だにしなくなっている。自分の足と腰のトラッキング位置には白い丸が見えているので、それをTポーズをとっているアバターに合わせて、両手のTouchもアバターの両手に合わせよう。すなわち、自分のリアル肉体もTポーズをとるということだ。リアル肉体とVRChatアバターのポーズが一致したところで、Touchの両手のトリガーとグリップ、合計4つのボタンを同時に押す。(実は手は左右に伸ばさなくてもいいのだが、合わせたほうが腰位置がマッチしやすいと思う)
これでアバターはフルトラッキング状態で動くはずだ。
もし足が動かなかったらスティックを倒して一歩歩いてみよう、その後はトラッキングするはず。
導入完了後、2回目以降の使用
SteamVRを起動、Touchがスタンバイだったら起こす
↓
KinectV1Process.exe(KinectV2Process.exe)を起動
↓
Initialise SteamVR Kinect Trackers - HIT MEをクリック
↓
VRChatを起動
これだけでOK!
きれいにトラッキングさせるコツ
まず大前提としてKinectの設置位置、角度が正しくないといけない。Kinect v1は最低2m、Kinect v2は最低1m離れる必要があるということだが、体感としてはもっと離れたほうがよい気がする。
当然体の平行にKinectを設置した上で距離を稼いだほうがいいのだが、住宅事情的にそうはいかない場合も多いだろう。そこでぼくがやってるのは高さを利用することで距離を稼ぐ方法。
部屋の高い位置、棚の上などにKinectを設置し、そこから見下ろすように自分が映るようにする。そうすることで全身がセンサーにとらえやすくなるため、狭い部屋でも比較的トラッキングが安定する。
服装も大事。ダボダボだったりヒラヒラしてたり体のラインを隠すような服装より、ピチッとした服のほうがいい。極論全裸が最高だ。どうせVR内ではアバターの姿しかみえないのだから。
ただしくKinectがトラッキング出来ているかを確認するにはKinectToVRのShow/Hide Sleleton TrachingをチェックしてKinectToVR上でも確認できるし
ToolkitのSkeleton Basicsなどでも確認できる。
もしそこでトラッキングが安定してない様子が見えるなら(赤い線になってトラッキングロストする、足がブレブレになる等)Kinectの配置など修正しよう。
つづいてVRChat上での振る舞い。Kinectは正面を向いている人体しかトラッキングしないため、体の向きが変わってしまうとトラッキングが不安定になる。
XboxのゲームをKinectで遊ぶためにはプレイヤーは常にテレビ画面(=Kinectがある方向)を見ているわけで、この問題は存在しないがVRでは自らの身体でぐるぐる廻ることが可能な上にHMDをかぶっていると現実世界のKinectが見えないのでいつのまにか体がKinectの見えない位置に移動してしまいがち。
ズレてるかも?と思ったときはMenuボタンを押してSteamVRの画面を呼び出すとKinectの位置が白い巨大矢印で見えているので、そちらを向くように修正しよう。わざわざHMDを外さなくても確認できる。(SteamVRのVRダッシュボードを有効化のチェックが必要)
使用するモデルも大事だ。これはKinectだけでなくViveトラッカーによるフルトラでも言えることだが、人間離れした体型のアバターはまずマトモに使えない。腕や足の長さのバランスはできるだけ自分の体型と一致したモデルを使おう。腕が長すぎると床の高さが狂ったり、足が長すぎるとしゃがんでしまったりする。キャリブレーションのときにあえてしゃがんで確定したり、下をみて(うつむいて)確定することで無理やり足を引き伸ばしたりするテクニックもあるが、できるだけ体型に合わせたほうが気持ちよく動けるはずだ。
また、自作モデルを使う場合は足の付根のボーンより上にお尻のボーンがくるように気をつけよう。お尻のボーンが足にかぶっていると、お尻がプイッと裏返ってしまうかもしれない。
使用感のレビュー
正面を向いて立っているときにとったポーズのトラッキングは完璧といえる。足も腰もポーズを再現できる。しかしデバイスの特性上、椅子に座ったり足を組んだり床に寝るなどカメラと深度センサーでは体勢を認識しづらい角度になってしまうと、トラッキングが怪しくなってしまう。
したがって立ちポーズでのKawaii move(ぼくがやるとKimoii moveと言われますが)は問題ないが寝たり椅子に座って足を組んだりするにはそれなりの工夫が必要になると思う(椅子は深度センサーを邪魔しないようにコンパクトで背もたれのない、ラーメン屋のカウンター席にあるようなものを使うなど)
これからKinectを購入しようという場合は入手困難になりつつあるのもあって大変かもしれないが、Xbox用に昔つかったKinectがある人は試してみても損はないと思う。