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の頭・左手・右手を連携させる
  • MMD4Mecanim を使って、MMDモデルを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 のヘッドセット内にシーンが表示され、ヘッドセットを動かすと視点も変更できるようになります。

Unity パッケージの FinalIK をダウンロードしインストールします。FinalIK は2018年3月現在、90$ その他諸々を含めると、97$ 程で買えます。

Assets 内の OVR ⇒ Prefabs 内にある、OVRPlayerController を ヒエラルキー にドラッグアンドドロップします。

  • ヒエラルキーの OVRCameraRig ⇒ TrackingSpace ⇒ CenterEyeAnchor を選び右クリックして、Create Empty を選び、新規のゲームオブジェクトを作成します。生成されたゲームオブジェクトを右クリックし、Rename を選び、HeadTarget と入力します。これが、OculusRiftのヘッドセットから頭の位置情報を取得するオブジェクトになります。
  • 同様に、左手と右手の位置情報を取得するオブジェクトを作っていきます。左手は、ヒエラルキーの OVRCameraRig ⇒ TrackingSpace ⇒ LeftHandAnchor を選び右クリックして、Create Empty を選び、新規のゲームオブジェクトを作成します。生成されたゲームオブジェクトを右クリックし、Rename を選び、LeftHandTarget と入力します。
  • 右手は、OVRCameraRig ⇒ TrackingSpace ⇒ RightHandAnchor を選び右クリックして、Create Empty を選び、新規のゲームオブジェクトを作成します。生成されたゲームオブジェクトを右クリックし、Rename を選び、RightHandTarget と入力します。

OculusRift で動かしたいMMDモデルに FinalIK パッケージ内(Assets ⇒ Plugins ⇒ RootMotion ⇒ FinalIK ⇒ IK Components にある VRIK.cs をアタッチします。アタッチするための手順は、ヒエラルキーにあるMMDモデルのInspector を開き、Add Component ボタンをクリックし、VRIK と入力すれば表示されます。

  • 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 を実行し反映させれば良い。

順序的に、

  1. SpringBone の更新
  2. VRIK の実行

となってしまっているのが原因の可能性が高いため、

  1. VRIK の実行
  2. SpringBone の更新

のようにスクリプトの実行順序を制御すれば、VRIK を使っても揺れものが反映される。

スクリプトの実行順序を変えるには、メニューバーの Edit > Project Settings > Script Execution Order 設定を使う。

その他には、このような方法も。

頭・首の動き

上半身(胸部・肩)の動き

上半身(腕・手首)の動き

上半身(手のひら・指)の動き

顔(表情)の動き

コメントを入力:
W​ N C Y B