Unity+OculusRiftでMMDキャラクター(初音ミク)の頭・上半身・手・全身を動かす方法
MMDモデルをOculus Rift で動かす方法の記録です。
環境
Windows10 Home 64bit (ASUS GX501)
Unity 2017
OculusRift(CV1) + OculusTouch
Oculus Utilities for Unity 1.23
使いたいMMDモデル
MMD4Mecanim
VrGrabber
手順概要
UnityでMMDモデルを使えるようにする
Oculus Utilities for Unity のダウンロードとインストール
FinalIKのダウンロードとインストール
OVRPlayerControllerを追加する
OVRCameraRig 配下に HeadTarget・LeftHandTarget・RightHandTarget を追加する
MMDモデルにVRIKを追加する
MMDモデルのVRIKとOculusRiftの頭・左手・右手を連携させる
UnityでMMDモデルを使えるようにする
Oculus Utilities for Unity のダウンロードとインストール
Unity で Oculus を使うために、Oculus公式サイトから『Oculus Utilities for Unity』をダウンロードし、インストールします。
2018年3月時点では、Ver1.23.0(ovr_unity_utilities_1.23.0.zip)でした。これを解凍し、インストールしていきます。
解凍すると中には、OculusUtilities.unitypackage というファイルが入っているので、これをUnity のプロジェクトにインポートします。プロジェクトにインポートするには、Unityプロジェクトを開いているときに、上記のパッケージファイルをダブルクリックすると、インポート画面が表示されます。
インポートが完了すると、Project の Assets 配下に、
OVR フォルダと Plugins¥OVRGamepad.bundle が追加されます。
ここまで完了すれば、Oculus Utilities for Unity のインストールは完了です。
これだけでもプロジェクトを起動し Oculus を動かせば、Oculus のヘッドセット内にシーンが表示され、ヘッドセットを動かすと視点も変更できるようになります。
FinalIKのダウンロードとインストール
Unity パッケージの FinalIK をダウンロードしインストールします。FinalIK は2018年3月現在、90$ その他諸々を含めると、97$ 程で買えます。
OVRPlayerControllerを追加する
Assets 内の OVR ⇒ Prefabs 内にある、OVRPlayerController を ヒエラルキー にドラッグアンドドロップします。
OVRCameraRig 配下に HeadTarget・LeftHandTarget・RightHandTarget を追加する
ヒエラルキーの OVRCameraRig ⇒ TrackingSpace ⇒ CenterEyeAnchor を選び右クリックして、Create Empty を選び、新規のゲームオブジェクトを作成します。生成されたゲームオブジェクトを右クリックし、Rename を選び、HeadTarget と入力します。これが、OculusRiftのヘッドセットから頭の位置情報を取得するオブジェクトになります。
同様に、左手と右手の位置情報を取得するオブジェクトを作っていきます。左手は、ヒエラルキーの OVRCameraRig ⇒ TrackingSpace ⇒ LeftHandAnchor を選び右クリックして、Create Empty を選び、新規のゲームオブジェクトを作成します。生成されたゲームオブジェクトを右クリックし、Rename を選び、LeftHandTarget と入力します。
右手は、OVRCameraRig ⇒ TrackingSpace ⇒ RightHandAnchor を選び右クリックして、Create Empty を選び、新規のゲームオブジェクトを作成します。生成されたゲームオブジェクトを右クリックし、Rename を選び、RightHandTarget と入力します。
MMDモデルにVRIKを追加する
OculusRift で動かしたいMMDモデルに FinalIK パッケージ内(Assets ⇒ Plugins ⇒ RootMotion ⇒ FinalIK ⇒ IK Components にある VRIK.cs をアタッチします。アタッチするための手順は、ヒエラルキーにあるMMDモデルのInspector を開き、Add Component ボタンをクリックし、VRIK と入力すれば表示されます。
MMDモデルのVRIKとOculusRiftの頭・左手・右手を連携させる
MMDモデルにアタッチした VRIK コンポーネント内にある Solver の▼を開きます。
OculusRiftの頭とMMDモデルの頭を連携させるために、Solver 内の Spine ⇒ Head Target に先程 CenterEyeAnchor 配下に作成した HeadTarget を指定します。
左手は、Solver 内の Left Arm ⇒ Target に先程 LeftHandAnchor 配下に作成した LeftHandTarget を指定します。
右手は、Solver 内の Left Arm ⇒ Target に先程 RightHandAnchor 配下に作成した RightHandTarget を指定します。
動作確認
ここまで設定ができたら一度OculusRiftとMMDモデル連携のテスト、動作確認をしてみましょう。
上記の設定を行った後シーンの再生を開始すると、OculusRiftの動きとOculusTouch の動きでMMDモデルキャラクターが連動して動くようになります。OculusRift のヘッドセットは被らなくても、手に持って動かすだけで画面が動くことが確認できますが、OculusTouch は ヘッドセットを被っていないと入力が有効になりません。
手が動かないときは、設定を見直すか、Oculusのヘッドセットをしっかり被って、OculusTouch を手に持ち操作してみてください。
初音ミクモデルの調整
手首の角度が曲がっている問題を修正する
初音ミクモデルを使って動作確認をしていれば、手首の角度が外側に90度曲がって表示されていると思います。まずはこの手首の角度を修正します。
左手の修正は、ヒエラルキーの OVRPlayerController ⇒ OVRCameraRig ⇒ TrackingSpace ⇒ LeftHandAnchor ⇒ LeftHandTarget のInspector を開き、Transform の Rotation を X:-50 Y:90 Z:-45 とします。
右手の修正は、ヒエラルキーの OVRPlayerController ⇒ OVRCameraRig ⇒ TrackingSpace ⇒ RightHandAnchor ⇒ RightHandTarget のInspector を開き、Transform の Rotation を X:-50 Y:-90 Z:45 とします。
http://no-communication.hatenablog.com/entry/2017/10/02/072435
鏡を置く
両足の開きぐらい調整
Locomotion の FootDistance でがに股を治せます。0.2ぐらいがちょうどいい感じ。
揺れもの(髪・スカート・アクセサリー・振り袖の動きの調整)
髪や布などの揺れない(動かない)部位があるときは?
VRIK と SpringBone の生成順序を変更する。LastUpDateメソッド内で、SpringBone を実行し反映させれば良い。
順序的に、
SpringBone の更新
VRIK の実行
となってしまっているのが原因の可能性が高いため、
VRIK の実行
SpringBone の更新
のようにスクリプトの実行順序を制御すれば、VRIK を使っても揺れものが反映される。
スクリプトの実行順序を変えるには、メニューバーの Edit > Project Settings > Script Execution Order 設定を使う。
その他には、このような方法も。
部位別の動かし方
頭・首の動き
上半身(胸部・肩)の動き
上半身(腕・手首)の動き
上半身(手のひら・指)の動き
顔(表情)の動き
まゆげの位置
目の開閉度
目線(黒目の位置)
口の形状
参考