Dazzle VR Tech blog

ダズルのVR開発者による開発TIPS


Viveトラッカーを使って格闘してみる

前回はホバーボードに乗ってみましたが、今回はViveトラッカーやコントローラーを使ってモーションキャプチャーし格闘ゲームのキャラクターを体験できるものを作ってみます。
キャプチャーする端末の数に制限があるため主に末端の角度と位置のみ取得し、その間の部分の角度と位置をIKを使って補完しています。

f:id:dazzle-tech:20170601152640p:plain 左がモーションキャプチャーしたユニティちゃん、右がファイティングユニティちゃんモデル

IK(inverse kinematics/インバース・キネマティクス)とは

直訳すると逆運動学。
人間など関節を持つ動物において手や足などの末端部分の位置は、常に下腕、脛といったその親となる部分の角度と位置に依存しています。
そのため関節の末端部分の位置を求める場合、モデルの中心から末端にかけて各部分の角度と位置を順番に計算をしていくのが順方向の運動学です。
一方で末端の位置からその親部分の関節の可動域などからその角度と位置を逆計算する方法、それが逆方向の運動学、IKです。
例えば地面に接する足先など末端の位置が重要になってくることが多いため、様々な場面で使用されます。
現在では人体の可動域などによるIKはUnityの標準機能として提供されています。
Unity - マニュアル_ IK

キャプチャー用のデバイス

検証に利用可能であったViveトラッカーの数に制限があったため、今回はコントローラーも併用しています。
起動時にSteamVRの各プレファブがどのコントローラーやトラッカーをトラッキングしてるか紐付いていないようなので、最初に認識したタイミングでデバイス名からトラッキングを振り分ける設定などを行うと毎度のセットアップが少し楽になるはずです。

f:id:dazzle-tech:20170531160843p:plain

  1. ヘッドセット
  2. Viveトラッカー1
  3. Viveトラッカー2
  4. コントローラー1
  5. コントローラー2
  6. コントローラー3

概要

ヘッドマウントをかぶった時の視点は相手キャラ(右)と正面から向かい合ってる状態になります。
f:id:dazzle-tech:20170531161302p:plain

Unityエディタ

今回も検証なのでHierarchyはあまり気にしていません。
f:id:dazzle-tech:20170531161353p:plain

公式のSteamVRアセットのプレファブ以下にUnityChanモデル配置します。
実際の腰の位置と角度がモデルの位置と上半身の角度になるので、腰をトラックしてるコントローラーが比較的重要になります。
実装は公式プラグインと参照を適当に設定しただけなので比較的簡単な作りで、各種設定レベルで行うことができました。

感想

  • パンチがうまく反映されなかった原因ですが、ユニティちゃんの腕の長さよりキャプチャーした対象の腕が長かったこと、腰の位置のトラッカーの装着方法の都合ユニティちゃんが体を後ろに反らしたよう姿勢に設定されやすく、それに付随して肩の位置が後ろになったためさらに腕の到達範囲が短くなっていたことが考えられます。

  • 頭の回転動作がイマイチでしたが、IKのLookAt対象をヘッドマウント自体からヘッドマウントの相対的にforward方向にずらしたEmptyGameObjectを対象にすると改善されたかもしれません。

  • マルチシーンエディットが別アセットの岩場を追加するのに便利でした。

参考

Vive Tracker仕様日本語 http://teruaki-tsubokura.com/Lab/htc-vive-tracker/

Vive Trackerで体トラッキング http://www.roadtovr.com/htc-releases-full-body-tracking-code-use-vive-trackers/

Vive接続 http://teruaki-tsubokura.com/Lab/multi-vive-controller/#Vive