zawazawa雑記

Unity + ARkit + MMDモデル + MMDモーションの実現

現実とバーチャルを横断したい

今回、習いたてのUnityでタイトルにあるものを作ってみました。 結構ハードル高かったですが、色々な記事を参考にして作りました。

目標

Unity上でMMDモデルとMMDモーションくっつけてそれをARkitで現実世界に召喚しよう!

動作環境

  • macOS 10

  • Unity 2017.4.2

  • iPhoneX iOS 11.3

参考サイト

お借りしたもの

手順

全体の流れとしては、

  • UnityのARkitプラグインをimport

  • お好きなMMDモデルとモーションデータ(vmdファイル)をproject内に移動

  • MMD4Mecanimパッケージをimport

  • MMDモデルとモーションデータをUnity上で動かせるようにMMD4Mecanimで変換(fbxファイルの生成)

  • アニメーションの作成

  • ARkitに対応づけ

です。以下で細かく見てみましょう。

  1. まずARkitプラグインをAssetStoreからimport しましょう。Freeです。素晴らしい。

    f:id:zawazawahtn:20180608010024p:plain

  2. お借りしたキズナアイMMDモデルもフォルダごと持ってきてしまいましょう。

  3. 次にいきなり厄介なのですが、MMD4Mecanimをimport します。どうもこの手順が一癖あるようで(バージョンにもよると思いますが)、丁寧にやっていきます。

  4. まず現時点で最新版のMMD4Mecanim_Beta_20180523のpackageを全てimportしてきます。次に、MMD4Mecanim_Beta_20160815PMX2FBXの項目のみをimportします。こうしないとMMDモデルからUnity上で扱えるFBX形式のモデルに変換が出来ないようです。↓のような具合になると思います

    f:id:zawazawahtn:20180608101908p:plain

  5. ではここからfbxモデルの生成に移ります。キズナアイフォルダの中にkizunaai.MMD4Mecanimというものが出来ていると思うので、規約に同意の上、動かしたいモーションをVMD欄にD&Dしてprocess

    f:id:zawazawahtn:20180608102555p:plain:w300 f:id:zawazawahtn:20180608102704p:plain:w300

  6. 無事fbxモデルが生成されると、指定したパスにモデルが出来上がります。

  7. これをやる必要があるのか検証してないですが、モデルのRigをHumanoidに設定してApplyするとエラーが出る箇所があります(Genericでも動くらしい?)。importメッセージを見ると、joint_hidariteoyayubiが 重複して参照されてしまってるよ、という事なので、configから実際に見てみるといかにもえらってそうな赤が見つかります。これを右手のものと比べながら正しいもの(joint_hidaritekubi)に設定してやると、解消できました。

    f:id:zawazawahtn:20180608113827p:plain:w300 f:id:zawazawahtn:20180608113832p:plain:w300

  8. ここへきてようやくモデルをsceneに移します。各自の嫁を召喚しましょう。HitCubeの子の位置に持ってきてやります。

    f:id:zawazawahtn:20180608182312p:plain

  9. あとは自由にチューニングしてください。自分の場合、このままではモデルが小さすぎると思ったのでscaleを3倍の3に設定して、HitCubeも邪魔なので消しました。あとocclusionも表現したかったので、GereratePlanesオブジェクトのPlane Prefabdebug planeだったものをocclusion planeに変更しました。これによってカメラから検出した平面にモデルが重なったらモデルを隠してくれるようになります。

出来上がり!

おわりに

ARkit2.0が発表されましたね!縦平面の検出とか状態保存とか端末同期とかで実現できることがたくさんありそうでワクワクします!(まだベータ版ですが)