頭部のViveと左右のハンドコントローラに3つのTrackerを追加し、合計6点のトラッキングでキャラクターモデルを操作します。(今回は指の動きはとっていません)
Viveのデモをちょっと触ってみたら難しくてうまく使えなかったのですが、FinalIKのVRIKだけでもかなり動かせたのでまとめておきます。
環境:Unity5.6.0f3
(左足に引っかかったケーブルを手探りでよけるの図)
使用デバイス
HTC Vive、Viveコントローラ(左右)
Vive Tracker 3個
3つのTrackerは、腰の後ろ、左右の足の甲にそれぞれ装着します。
取付の際には、坪倉さん(@kohack_v)が3Dデータを公開されているアダプター(HTC Vive Tracker Band Adapter)がとても便利です。お近くの3Dプリント出力サービスなどを利用してもいいかも。
更にVive Trackerを手や足に巻きつけられるアダプターをThingiverseで公開しました。マジックテープや結束バンドで固定すると良さそうです。#HTCVive
— 坪倉輝明 @5/8Unite登壇 (@kohack_v) 2017年3月30日
→HTC Vive Tracker Band Adapterhttps://t.co/PokSlSyCyP pic.twitter.com/NIGrNrKFw9
Vive Tracker用のバンドアダプター、ちょっと小さすぎて強度と安定性が不安だったので少し大きめサイズも作っておきました👍 #HTCVive https://t.co/PokSlSyCyP pic.twitter.com/4d4KLgAtW6
— 坪倉輝明 @5/8Unite登壇 (@kohack_v) 2017年4月1日
百円ショップの穴あきサンダルに結束バンドで固定すると簡単で安上りです。
VIVEトラッカーの足への固定を仮でこんな風にやってみたが、安定してるし着脱も簡単なんで本採用に昇格した。キャンドゥの100円スリッパ+100本400円のタイラップ8本で132円(税抜き)という驚きの低コスト。 pic.twitter.com/wYjWxCQcEh
— ROBA@ヨレヨレ (@vjroba) 2017年4月18日
ウエスト用には同じく百円ショップのマジックテープ式結束バンドが使えました。
幅38ミリのベルト、大きいほうのアダプターにぴったり。
使用アセット
・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にチェックを入れるだけです。
VRで見ると鏡に映った状態を確認できます。裏表があるので注意してください。
SteamVR
デフォルトのカメラを削除し、SteamVR PluginのPrefabより[CameraRig]をシーンに置きます。
この中に左右のコントローラが配置されています。
これを(左右どちらでもいいので)Trackerの数だけDuplicateしてリネームします。
[CameraRig]のSteam VR_Controller ManagerコンポーネントにTrackerを登録します。
Objectsの項目を開き、SizeにTrackerの個数を指定します。
各Elementに、さきほど作成したTrackerを設定します。
VRIK
キャラクターにVRIKコンポーネントを追加します。VRIKコンポーネントは、手や足をトラッカーに追従させながら、姿勢全体を適切に調整してくれます。
ただし、ターゲットにViveのHMD位置をそのまま設定するとモデルの頭部が視界に入ってしまいます。必要に応じてオフセットさせるため、[CameraRig]の各オブジェクトに子オブジェクトを作成します。
各Transformで、頭部はZ座標のPositionを-0.3、腰はZ座標のPositionを-0.15しています(モデルやトラッカーの装着状態によって調整が必要と思います)。
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%のこと)に設定します。
この状態で確認すると腰の追従がおかしくなってしまいました。
腰のTrackerだけが縦位置になっているためだと思います。
腰のターゲットにしているTrackerの子オブジェクトのTransformで、X座標を180回転させるとうまくいきました。(結果的にこれで動いてるだけで、どういう意味なのかはよくわかりません。Z軸を-90度なのでは?と思ったのですがこれだとダメでした。不思議。)
ああっ腰のトラッカーは縦になってるから回転させないといけないのでした!ぐるんぐるんしなくなりました、椅子にも座れるよー。Neuronではできなかったジャンプもできる。ジャンプ力は中の人しだいだ。 pic.twitter.com/f0zIbSOHS7
— はいぬっか (@hinzka) 2017年5月7日
また、この状態で深くしゃがむと腰がぐるぐる回転してしまいました。
キャラクターに空のAnimatorControllerを設定すると回転しなくなりました。
しゃがむとどうしても腰が回転してしまってたのですが、空のAnimatorControllerを設定することであっさり解決しました、ワーイ! pic.twitter.com/t8RZGMf8Xf
— はいぬっか (@hinzka) 2017年5月7日
なお、コントローラやトラッカーがベースステーションから隠れるとロストしてしまいます。Trackerは小さいので特にロストしやすいです。
装着したトラッカーがスーッと遠くに行っちゃうときは、服とかで隠れてないか確認するといいかも。動画のこれはズボンの裾をまくったら直りました。 pic.twitter.com/q4yhn6Mucy
— はいぬっか (@hinzka) 2017年5月7日
VRIKは頭の向きで膝の曲がる方向を決めているようで、体をひねった状態だと逆関節になってしまいます。追加で両膝にもTrackerをつければ正しく曲げることができそうです。
以上ざっくりとですが、全身トラッキングのVRコスプレで遊べるようになりました!
ここでは指の追従はできていません。また、モーションの保存と再生もまだ試していません。
※この記事で使っているモデルはこちらです。
♯惑音イド (まどねいど)は惑さん @madoi_88 によるUTAU音声ライブラリのキャラクターです。https://t.co/V6IonCVtrK
— はいぬっか (@hinzka) 2017年1月6日
MMDモデルはゴゴさん @3str6 作成。Unity学習のテストモデルにお借りしてます。スゴイカワイイ。特に脇と鼠蹊部。 pic.twitter.com/1atAZByzPb