読者です 読者をやめる 読者になる 読者になる

hiroykyの個人日記

@hiroyky IT系エンジニアのまったりブログ

Hololensで初音ミクに踊ってもらった. MMDモデルとモーションの取り込み

f:id:hiroyky:20170307004236j:plain

作ったもの

Hololensでベッドの上で初音ミクに「Perfect Human」を踊ってもらいました. HololensアプリケーションにMMDのモデルとモーションを取り込んで動いています.


【Hololens】初音ミクにPerfectHumanをベッドの上で踊ってもらった

使用したもの

Hololens Tookkit for Unityに加え, 以下のものを活用させていただきました.

モデル

bowlroll.net

モーション

bowlroll.net

MMDファイルのUnityへの取り込み

MMD for Unity

github.com

開発キット

  • Unity 5.5 0p2

ポイント

MMD for Unityのインポートと修正

インポート

UnityでMMDモデルを利用するにはMMD4Mecanimを利用する方法もあるようですが,現行バージョンではUWPアプリケーションが非対応になっているようです. そこで,代わりにMikuMikuDance for Unityを利用します.公式サイトからzipファイルをダウンロードし,展開したディレクトリをそのままUnityのProjectにインポートします.

修正

インポートしたMMD for Unityに修正を加えます.2017年3月現在やや古い状態なので動くようにします・(ここではとりあえず動作することを目指して,機械的に修正を加えていきますが適切かどうかはまた別な話です.)

1 APIのアップデート

取り込んだMMD for Unityのディレクトリを右クリックしてRun API Updateをクリックします.

f:id:hiroyky:20170307002914p:plain

2 コードの修正

いくつかの行がエラーになるはずなので修正方法をピックアップします.

まず,以下のコードをコメントアウト

// AnimationUtility.SetAnimationType(clip, animation_type);

GameObject.collider, GameObject.rigidbodyのようにcolliderやrigidbodyをプロパティとして参照している箇所でエラーが出ています.そこをGetComponent<>()メソッドを使って取得するようにします.

// 変更前
parent.rigidbody
parent.collider
// 変更後
parent.GetComponent<Rigidbody>();
parent.GetComponent<Collider>();
// ・・・みたいに

MMDモデルとモーションの取り込み

MMD for Unityの公式サイトのドキュメントに従ってモデルとモーションを取り込みます.

MikuMikuDance for Unity - Howto

モデルの取り込み時にAnimationTypeをGeneric Mecanimを選択します.

f:id:hiroyky:20170307005144p:plain

アニメーションの設定

MMD for Unityでモーションのアニメーションまで作ったらあとは登録します. AnimationControllerを作ってprefabにanimationに設定していきます.

f:id:hiroyky:20170307010256p:plain

f:id:hiroyky:20170307010528p:plain

RigidbodyやSpatialMappingの設定

  • モデルにRigidbodyやColliderを設定.
  • 空間認識のためにSpatialMappingを設定.

ただ,起動直後に重力を有効にしてしまうと空間認識が完了しておらず,モデルが奈落の底に落ちてしまうため,空間認識が完了してから重力を有効にします.

まとめ

MMDのモデルとモーションを取り込んでダンスするHololensアプリケーションを作りました.

参考文献