ViveTracker3つ追加で全身トラッキング
頭部の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
MMDキャラクターモデルをVRでとにかく見る
Unityを使って、任意のMMDモデルをVRで見るための手順(いろいろ省略版)
※MMDモデル・モーションを利用するにあたっては、同梱されているReadmeなどの利用規約の確認・遵守をお願いします。
公開・配布を目的とするコンテンツに利用する際は(明示的に許可されている場合を除き)モデル・モーション制作者への問い合わせが必要です。
必要なもの
ダウンロードするもの
- Unityエディタ(ゲーム開発エンジン。3Dオブジェクトやアニメーション、音源、エフェクト等を設定し、HMD向けに出力するアプリを作成できる。Personalエディションは無料で利用可能)
- MMD4Mecanim(MMDのモデルデータを変換し、Unityで扱える形式にするツール )
- 1.Unityのインストール
- 2.MMD4Mecanimのインポート
- 3.MMDモデルファイルのインポート
- 4.MMD4Mecanimを用いたモデルデータ変換
- 5.シーンへの配置とカメラの調整
- 6.アニメーションコントローラの追加
- 7.プレイモードで確認
- 8.VRモードに設定
- 9.ビルド(実行ファイル作成)
- 10.シーン保存
1.Unityのインストール
Unity公式サイトよりインストーラをダウンロードします。無料版で問題ありません。
インストール完了後、Unityエディタを起動すると、ログイン画面が表示されます。
「create one 」をクリックし、Webブラウザでアカウント作成を行ってください。
メールアドレスの登録が必要です。
ログイン画面でメールアドレスとパスワードを入力すると、プロジェクト作成画面が表示されます。
Project name:任意のプロジェクト名を入力します。
Location:プロジェクトのデータを格納するフォルダを指定します。
プロジェクト初期画面
デフォルトのレイアウトは少し見づらいかもしれません。
Window > Layout からレイアウトを変更できます。(ここでは「2 by 3」に設定しています)
2.MMD4Mecanimのインポート
MMD4Mecanimの開発者Noraさんのサイトより、ZIPファイルをダウンロードして解凍します。
Unityのプロジェクトにインポートします。
UnityPackageをダブルクリック、またはAssetsフォルダの中にドラッグ&ドロップしてください。
UnityPackageの内容が表示されます。
Importをクリックするとインポートを開始します。
インポートが完了すると、Assetsフォルダにファイルが追加されます。
3.MMDモデルファイルのインポート
MMDモデルファイルを用意します。
プロジェクトのAssetフォルダに、フォルダごとドラッグ&ドロップします。
プロジェクト内にモデルフォルダがコピーされます。
pmxファイルと同名のMMD4Mecanimファイルが追加されていることを確認します。
4.MMD4Mecanimを用いたモデルデータ変換
MMDモデルファイルを、Unityで扱える形式に変換します。
MMD4Mecanimファイルを選択します。
規約の内容を確認し、利用に問題なければチェック欄にチェックを入れて「同意する」をクリックします。
変換設定の画面に遷移します。
MMDのモーションを入れたい場合はVMDファイル(MMDのモーションファイル)を追加します。
プロジェクトフォルダにVMDファイルをドラッグ&ドロップします。
(ここではMMD4Mecanim同梱の 歩き.VMD を使っています)
MMD4Mecanimの変換画面で、VMDの欄にこのファイルをドラッグします。
Processをクリックすると変換実行します。
コマンドプロンプトが開き、変換処理が開始されます。
このアイコンのファイルは「Prefab(プレハブ)」といい、複製のためのひな形となるものです。
モデルのPrefabを選択するとモデル情報が表示されます。モデルの画像が正しく表示されていれば変換成功です。
5.シーンへの配置とカメラの調整
Unityでは、シーンを編集することでゲームコンテンツを構成していきます。
モデルのPrefabを、Hierarchy(ヒエラルキー、階層)タブまたはSceneタブにドラッグ&ドロップします。
モデルのオブジェクトがシーンに出現します。
このように、Prefabをもとに作成されたオブジェクトを「Instance(インスタンス)」と言います。
配置したあと、矢印をドラッグすることで移動させることができます。
カメラも同様の方法で移動させ、GAMEタブの表示を調整します。
6.アニメーションコントローラの追加
アニメーションさせるためのコントローラを追加します。
Projectタブのすぐ下にあるCreateボタンから、
Create > Animator Controller でAnimatorControllerが作成できます。
または、Assetsフォルダ内で右クリックし、
Create > Animator Controller でも作成できます。
追加されたコントローラは適宜リネームしてかまいません。
モデルのInstanceを選択し、Inspectorタブを確認します。
AnimatiorコンポーネントにあるController欄に、作成したAnimatorControllerをドラッグ&ドロップします。
設定したAnimatorControllerファイルにアニメーションクリップを設定します。
VMDモーションファイルから変換されたアニメーションクリップを、Animatorタブにドラッグ&ドロップします。
モーションファイルはモデルのPrefabの中に格納されています。
7.プレイモードで確認
テスト用の簡易モードで実際の動作を確認します。
左端の三角ボタンをクリックするとプレイモードを開始します。
再度クリックすると停止します。
モーションを設定している場合、モデルがアニメーションします。
設定していない場合は動かないままです。
プレイモードで動作させている間は、オブジェクト移動などの変更を行っても、プレイモード終了と同時にリセットされてしまいます。
初期状態ではプレイモードと編集モードが紛らわしいため、上記のように、プレイモード中のUnityエディタ画面に色をつけると便利です。
Edit > Preferences で Unity Preferencesウインドウを開き、Playmode tint の項目でわかりやすい色を選択します。
8.VRモードに設定
Unity側の機能で、デバイス用のファイルを追加することなくHMDへの出力を行うことができます。
Edit > Project Settings > Player と選択していき、PlayerSettingsの画面を開きます。
Virtual Reality Supported のチェックボックスにチェックを入れます。
Virtual Reality Supported にチェックを入れると、その下にSDK選択リストが表示されます。
利用するHMDデバイスがOculus Riftの場合は、SDKに「Oculus」を選択します。
利用するHMDデバイスがHTC Viveの場合は、SDKに「OpenVR」を選択します。
HMDが正しく接続されていれば、この状態でプレイモードを開始するとHMD側に映像が表示されます。
9.ビルド(実行ファイル作成)
ビルドを行い、実行ファイルを作成します。
File > Build Settings... を選択します。
ビルド設定ウインドウが開きます。
PlatformがPC、Architectureが環境に合ったものになっていることを確認してBuildをクリックします。
実行ファイルの名前を設定して「保存」をクリックします。
ビルド処理が完了すると、ビルド先のフォルダが開きます。
上記で設定した名称の実行フォルダとデータフォルダが作成されます。
これでVRアプリが作成できました!
10.シーン保存
このままUnityエディタを終了すると、シーンに設定した内容は失われてしまうので、シーンを保存します。
File > Save Scene as... を選択します。
任意のシーン名を設定し、「保存」をクリックします。
シーンファイルが保存されます。
以上、MMDキャラクターをVRでとにかく見る手順でした。
キャラクターと「会う」というにはまだまだこれからです。
こまった.txt
デスクトップに置いてる こまった.txt のうち解決してる内容
去年くらいから困った順に追加している。あとでちゃんとまとめます。
■standard assetsはバージョンで構成が異なる。解説サイトで使われているファイルが現行バージョンでは含まれてないことがあるので注意
■トスカーナデモ
0.4.4-beta Updated 2014-12-04 にあります。
Unity 4 Legacy Integration | Developer Center | Oculus
Tuscanyフォルダのみをインポートすること。
Terrainのテクスチャが表示されない件は、InspectorのTerrainコンポーネント>Base Terrainの項目で、Materialを「Built In Legacy Diffuse」⇒「Built In Standard」に変更
■HeadLookをアニメーションレイヤーでコントロール
アタッチされたコンポーネントのいちばん上にないとアニメーションのコンポーネントリストに表示されない
⇒Mecanimをコピーして二つ作って間にHeadLookをはさむ。
上のMecanimを削除すると、Headlookをいちばん上に持ってくることができる
■Vuforiaで、WEBカメラの画像が取得できない
Unity5.1.0f3(32bit)で保存する必要がある。その後はUnityバージョンを変更してもいいけどVuforiaをインポートしてはいけない。
https://developer.vuforia.com/forum/unity-3-extension-technical-discussion/cannot-use-web-cam-user-has-not-authorized
■VRIK
Solverじゃなくてスクリプトをアタッチすること。
ターゲットはカメラの中につくった空のゲームオブジェクト。目はちょっと前にずらす。
面倒なのでカメラは人物のデフォルトの方向に置いておくこと!!
鏡の方向を示す看板をおいておくといいかも。
LeapMotionのファイルはなんか配布されてた…
足の設置もなんか配布されてた
■VRカメラと別カメラをモニタに表示する
カメラ二つのディスプレイ番号は同じ!
http://qiita.com/Rauziii/items/5fc45844b551f33184b3
(マウス操作が効いてしまうので入力を切ったほうがよさそう)
■ImageEffect
ovrcamerarigの右目と左目に設定してるけど、効かない。
Oculus Utilities1.6.0にはCenterEyeAnchorにCameraがあって、ImeageEffect効くんだけど、
1.8.0と1.9.0はLeftEyeAnchorとRightEyeAnchorの両方にあって、各々に同じ設定のBloomとか置いても、効かない。
⇒
CenterEyeAnchorに設定したImageEffectsは
5.3.6p5x64+OculusUtilities1.9.0 ⇒ 効かない※HMD点灯しなくなる
5.4.1p4x64+OculusUtilities1.9.0 ⇒ 効く
結論:Unityは推奨バージョンを使おう
■ミラー表示
UnityProの機能で解決(ReflectionProbeのやりかたはあとでしらべる)
MirrorReflectionスクリプト
DisablePixelLightsのチェックが入ってると映ったモデルが暗くなるので外す
■衝突判定
Playmakerを使うとらくちん。
MMD4MFaceのMMD4MFaceControllerをPlaymakerにドラッグ&ドロップ→ScriptControl→CallMethodでSetFace+表情名を指定
■OculusTouch
MMD4Mecanim物理接触用のrigidbodyは、LocalAvatarの両手のコライダ(GrabVolumeBig、GrabVolumeSmall)につけること
■追従して動くオブジェクト
オブジェクトにFixedJointを設定すると、モデルにアイテムを持たせたり取り上げたりできる。
Break Forceの値によってプルプルしたり消し飛んだり⇒30に設定
■HeadLookのオンオフ
ふつうにやるとオフにしたときガクンと戻っちゃう。
デフォルトの視線の先にもう1つターゲットを置いて切り替えるといいかんじ。Enterをトリガーにすると判定がせわしないので遅延フェーズを追加する。