はいぬっかメモ

キャラクターモデルをVR空間で眺めたい

ViveTracker3つ追加で全身トラッキング

頭部のViveと左右のハンドコントローラに3つのTrackerを追加し、合計6点のトラッキングでキャラクターモデルを操作します。(今回は指の動きはとっていません)

Viveのデモをちょっと触ってみたら難しくてうまく使えなかったのですが、FinalIKのVRIKだけでもかなり動かせたのでまとめておきます。

環境:Unity5.6.0f3

f:id:hinzka:20170508012642g:plain

(左足に引っかかったケーブルを手探りでよけるの図)

使用デバイス

HTC Vive、Viveコントローラ(左右)
Vive Tracker 3個

3つのTrackerは、腰の後ろ、左右の足の甲にそれぞれ装着します。
取付の際には、坪倉さん(@kohack_v)が3Dデータを公開されているアダプター(HTC Vive Tracker Band Adapter)がとても便利です。お近くの3Dプリント出力サービスなどを利用してもいいかも。

 

百円ショップの穴あきサンダルに結束バンドで固定すると簡単で安上りです。

f:id:hinzka:20170508003807j:plain

ウエスト用には同じく百円ショップのマジックテープ式結束バンドが使えました。
幅38ミリのベルト、大きいほうのアダプターにぴったり。

f:id:hinzka:20170508004148j:plainf:id:hinzka:20170508003809j:plain

 

使用アセット

・SteamVR Plugin(無料)
https://www.assetstore.unity3d.com/jp/#!/content/32647
ViveやViveTrackerを扱うために使います。

Final IK(有料)
https://www.assetstore.unity3d.com/jp/#!/content/14290
Trackerで取得した座標から、キャラクターの姿勢を補完するのに使います。

Vive Stereo Rendering Toolkit(無料)
https://www.assetstore.unity3d.com/jp/#!/content/71255
鏡を作るのに使います。これはなくても構いません。


手順

キャラクターを配置します。

鏡を設置します。
Planeを作成して、垂直にするためにZ座標を-90回転させます。
HTC.UnityPlugin > Scripts > StereoRenderer スクリプトをアタッチし、StereoRendererコンポーネントのIs Mirrorにチェックを入れるだけです。

f:id:hinzka:20170508010830p:plain

VRで見ると鏡に映った状態を確認できます。裏表があるので注意してください。

 

SteamVR

デフォルトのカメラを削除し、SteamVR PluginのPrefabより[CameraRig]をシーンに置きます。
この中に左右のコントローラが配置されています。
これを(左右どちらでもいいので)Trackerの数だけDuplicateしてリネームします。

f:id:hinzka:20170508005146p:plain

[CameraRig]のSteam VR_Controller ManagerコンポーネントにTrackerを登録します。
Objectsの項目を開き、SizeにTrackerの個数を指定します。
各Elementに、さきほど作成したTrackerを設定します。

f:id:hinzka:20170508004951p:plain

 

VRIK
キャラクターにVRIKコンポーネントを追加します。VRIKコンポーネントは、手や足をトラッカーに追従させながら、姿勢全体を適切に調整してくれます。

ただし、ターゲットにViveのHMD位置をそのまま設定するとモデルの頭部が視界に入ってしまいます。必要に応じてオフセットさせるため、[CameraRig]の各オブジェクトに子オブジェクトを作成します。
各Transformで、頭部はZ座標のPositionを-0.3、腰はZ座標のPositionを-0.15しています(モデルやトラッカーの装着状態によって調整が必要と思います)。

f:id:hinzka:20170508005444p:plain

VRIKにターゲットを設定します。
SpineのHead Target:上記で作成したCamera (head)の子オブジェクト
SpineのPelvis Target:腰にあたるTracerの子オブジェクト
LeftArm、RightArm:左右のControllerのModel
LeftLeg、RightLeg:左右の足にあたるTrackerのModel
上記の6個のターゲットについて、それぞれPosition WeightとRotation Weightを1(=100%のこと)に設定します。

f:id:hinzka:20170508004916p:plain


この状態で確認すると腰の追従がおかしくなってしまいました。
腰のTrackerだけが縦位置になっているためだと思います。
腰のターゲットにしているTrackerの子オブジェクトのTransformで、X座標を180回転させるとうまくいきました。(結果的にこれで動いてるだけで、どういう意味なのかはよくわかりません。Z軸を-90度なのでは?と思ったのですがこれだとダメでした。不思議。)

また、この状態で深くしゃがむと腰がぐるぐる回転してしまいました。
キャラクターに空のAnimatorControllerを設定すると回転しなくなりました。

 
なお、コントローラやトラッカーがベースステーションから隠れるとロストしてしまいます。Trackerは小さいので特にロストしやすいです。

 

VRIKは頭の向きで膝の曲がる方向を決めているようで、体をひねった状態だと逆関節になってしまいます。追加で両膝にもTrackerをつければ正しく曲げることができそうです。

 

以上ざっくりとですが、全身トラッキングのVRコスプレで遊べるようになりました!

ここでは指の追従はできていません。また、モーションの保存と再生もまだ試していません。

 

 

 

※この記事で使っているモデルはこちらです。