Unity+OculusRiftでMMDキャラクター(初音ミク)の頭・上半身・手・全身を動かす方法

MMDモデルをOculus Rift で動かす方法の記録です。

環境

手順概要

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 を追加する

MMDモデルにVRIKを追加する

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

MMDモデルのVRIKとOculusRiftの頭・左手・右手を連携させる

動作確認

ここまで設定ができたら一度OculusRiftとMMDモデル連携のテスト、動作確認をしてみましょう。
上記の設定を行った後シーンの再生を開始すると、OculusRiftの動きとOculusTouch の動きでMMDモデルキャラクターが連動して動くようになります。OculusRift のヘッドセットは被らなくても、手に持って動かすだけで画面が動くことが確認できますが、OculusTouch は ヘッドセットを被っていないと入力が有効になりません。

手が動かないときは、設定を見直すか、Oculusのヘッドセットをしっかり被って、OculusTouch を手に持ち操作してみてください。

初音ミクモデルの調整

手首の角度が曲がっている問題を修正する

初音ミクモデルを使って動作確認をしていれば、手首の角度が外側に90度曲がって表示されていると思います。まずはこの手首の角度を修正します。

http://no-communication.hatenablog.com/entry/2017/10/02/072435

鏡を置く

https://assetstore.unity.com/packages/tools/particles-effects/magic-mirror-reflection-for-unity-34824

両足の開きぐらい調整

Locomotion の FootDistance でがに股を治せます。0.2ぐらいがちょうどいい感じ。

揺れもの(髪・スカート・アクセサリー・振り袖の動きの調整)

髪や布などの揺れない(動かない)部位があるときは?

VRIK と SpringBone の生成順序を変更する。LastUpDateメソッド内で、SpringBone を実行し反映させれば良い。

順序的に、

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

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

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

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

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

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

部位別の動かし方

頭・首の動き

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

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

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

顔(表情)の動き

参考