Unity:ニコニコ立体のMMDキャラクターschwarz式博麗霊夢を操作できるまで

今回は3Dモデルの投稿サイトニコニコ立体で公開されているMMDキャラクターschwarz式博麗霊夢をUnityにインポートして操作できるようになるまでの手順を試してみました。

ツールのダウンロード

MMDモデルを Unity にインポートするためのツール MMD4Mecanim を配布しているサイト Stereoarts Homepage にアクセスしてファイルをダウンロードします。

ダウンロードしたファイル MMD4Mecanim_Beta_20180304.zip を解凍するこのようなファイルが含まれてます。

ツール配布サイトにもチュートリアルPDFが用意されていましたが、解凍したファイルにもちゃんと用意されていました。素晴らしい!

MMD4Mecanim チュートリアル(基本編).pdf の内容は次の通りです。

  1. Unityへのインストール
  2. MMD4Mecanim の登録
  3. モデル・モーションデータの登録
  4. 利用規約の確認
  5. モデル・モーションデータの変換
  6. シーンとアニメーションの構築
  7. Animator Controller の設定
  8. シーンの微調整と再生

ツールインポート

Unity のバージョン 2018.2.20f1 に MMD4Mecanim.unitypackage(MMD4Mecanim 2018/05/23 版(β))をインストール中、このように API ファイルのアップグレードダイアログが表示されれました。そのまま [I Made a Backup Go Ahead!]ボタンをクリックして継続。MMD4Mecanim.unitypackage をインストールする場合は新規プロジェクトにインストールした方が良さそうです。

インポートが完了後にフォルダ構成を確認。[Project]ウィンドウ > Assets > MMD4Mecanim フォルダ内はこのようになっています。

MMDキャラクターを探す

MMDキャラクターモデルが数多く公開されている3Dモデルの投稿サイト、ニコニコ立体 から探してみることにします。

今回は東方Projectのキャラクターからschwarzさんの作品で博麗霊夢 をお借りしました。

キャラクターの公開ページの右側にある[ダウンロード]ボタンをクリックするとライセンス情報が表示されるので[利用規約に同意してダウンロード]ボタンをクリック。ファイルのダウンロードが開始します。

MMDキャラクターのインポート

ダウンロードしたファイル(博麗霊夢.zip)はZIP形式で圧縮されているので解凍。解凍したフォルダ(博麗霊夢)をUnityの[Project]ウィンドウにドラッグ&ドロップでインポート。

インポートが完了した[Project]ウィンドウ > Assets > 博麗霊夢フォルダ内はこのようになっています。

インポートした博麗霊夢フォルダに作成されている 霊夢v2.MMD4Mecanim ファイルを選択。[Inspector]ウインドウで利用規約のチェックを入れて[同意する]ボタンをクリック。

さらにインポート設定はそのままで[Process]ボタンをクリック。

変換処理のコマンドラインウィンドウが開いて処理が進行するのでしばらく待ちます。処理が終わると博麗霊夢フォルダ内にFBX形式のファイル 霊夢v2.fbx が作成されています。

FBXのインポート設定を変更

MMD4Mecanim で出力されたFBXファイルの設定を変更します。

霊夢v2.fbx ファイルを選択して[Inspector]ウインドウ >[Animation]タブボタン > Import Animation のチェックを外します。

[Rig]タブボタンをクリック。Animation Type > Humanoid に変更。最後に[Apply]ボタンをクリックして変更内容を適用します。

キャラクターコントローラーの追加

Standard Assets のThirdPersonCharacter のコンポーネントを使用して操作できるようにします。

作業用のシーンを作成

Third Person Character コンポーネントの追加するために作業用のシーンを作成します。メニュー:File > New Scene を選択。[Hierarchy]ウィンドウ > [Create]ボタン > 3D Object > Plane を選択。[Inspector]ウィンドウ > Transform > 歯車アイコン > Reset を選択。

[Project]ウィンドウ > 博麗霊夢フォルダ > 霊夢v2.fbx を[Hierarchy]ウィンドウにドラッグ&ドロップで配置。[Inspector]ウィンドウ > Transform > 歯車アイコン > Reset を選択して位置をリセットしておきます。

Standard Assets の ThirdPersonController のコンポーネントをアタッチする

まずはStandard Assets の Character をインポートします。
ファイル:Assets > Import Package > Character を選択。[Project]ウィンドウ > Assets >Standard Assets > Characters > ThirdPersonCharacter > Prefabs > ThirdPersonController を選択。

インポートが完了したら[Project]ウィンドウ > Assets > Standard Assets > Characters > ThirdPersonCharacter > Prefabs > ThirdPersonController を選択。

[Inspector]ウィンドウ > Third Person Character (Script) コンポーネント > 歯車アイコン > Copy Component を選択。

[Hierarchy]ウィンドウ > 霊夢v2 を選択。[Inspector]ウィンドウ > MMD4 Mecanim Model (Script)コンポーネント >歯車アイコン > Paste Component As New を選択。Capsule Collider、Rigidbody、Third Person Character (Script) コンポーネントがまとめてペーストされます。

入力制御のコンポーネント、Third Person User Control (Script) コンポーネントは一緒にペーストされていません。もう一度[Project]ウィンドウ > Assets >Standard Assets > Characters > ThirdPersonCharacter > Prefabs > ThirdPersonController を選択。

[Inspector]ウィンドウ > Third Person User Control (Script) コンポーネント > 歯車アイコン > Copy Component を選択。

[Hierarchy]ウィンドウ > 霊夢v2 を選択。[Inspector]ウィンドウ > ペーストした Third Person User Control (Script) コンポーネント >歯車アイコン > Paste Component As New を選択。

これで必要なコンポーネントがアタッチされました。(画像クリックで拡大)

Animator コンポーネントの設定

[Hierarchy]ウィンドウ > 霊夢v2 を選択。[Inspector]ウィンドウ > Animator > Controller フィールドの右側にある◎をクリック。ファイル選択ウィンドウが開いたら ThirdPersonAnimatorController をダブルクリックで選択。

コライダーの位置と調整

コライダーコンポーネントの調整をします。
[Hierarchy]ウィンドウ > 霊夢v2 を選択。[Inspector]ウィンドウ > Capsule Collider のパラメータを調整。
Center Y0.8 / Radius 0.5 / Height 1.6

[Scene]ビューで見るとこのようになっています。

コライダーコンポーネントに物理マテリアルを割り当てる

大体完成ですが最後に物理マテリアルの設定を行います。ThirdPersonAnimatorController ではコライダーコンポーネントに摩擦のない物理マテリアルを割り当てないと床に段差がある部分でこのように空気椅子ポーズで操作ができなくなる場合があります。

[Hierarchy]ウィンドウ > 霊夢v2 を選択。[Inspector]ウィンドウ > Capsule Collider > Material の右側にある◎ボタンをクリック。

ファイル選択ウィンドウから ZeroFriction マテリアルをダブルクリックで割り当て。

動作確認

再生ボタンを押して動作を確認します。キーボード操作でキャラクターを操作できるようになりましたが、腕が後ろにねじれて、スカートから足が突き抜けています。

ボーン角度の修正

腕のねじれを修正するためにFBXファイルを選択してボーンの角度を編集します。

[Project]ウィンドウ > 博麗霊夢 > 霊夢v2.fbx を選択。[Inspector]ウィンドウ > [Rig]タブボタン > [Configure]ボタンをクリック。

作業中のシーンを保存するためのダイアログが表示されるので[Save]ボタンをクリック。

[Scene]ビューにボーン階層が表示されます。Character is not in T pose という注意メッセージが表示され、修正が必要なボーンが赤色で表示、ボーン名が表示されています。

赤色で表示されているボーンを[Scene]ビューまたは[Inspector]ウィンドウでボーン選択します。

[Inspector]ウィンドウ > Transform の値を調整してボーンの表示が緑色に変わるまで角度を調整します。

正しい角度に調整すると[Scene]ビューのボーン表示が緑色になります。

下記のようにボーンを調整しました。

  • 右腕:46.joint_RightShoulder > Rotation Z 37
  • 左腕:149.joint_LeftArm > Rotation Z -37
  • 右親指付け根:289.!joint_RightThumb0M > Rotation X -23
  • 右親指関節:83.joint_RightThumb1 > Rotation Y -25
  • 左親指付け根:288.!joint_LeftThumb0M > Rotation X -23
  • 左親指関節:182.joint_LeftThumb1 > Rotation Y 23

このようにすべてのボーンが緑色になりました。

ボーンの調整後に気付いたのですが… MMD4Mecanim チュートリアル(応用編).pdf に簡単な修正方法が書いてありました。直接 Transform の値を修正しなくても [Inspector]ウィンドウ > [Pose] > Enforce T-Pose を選択すると簡単に修正可能です。
[Inspector]ウィンドウの[Done]ボタンをクリック。設定保存ダイアログが表示されるので[Apply]ボタンをクリック。[Scene]ビューが通常の表示に戻ります。

動作確認

再生ボタンを押して動作を確認します。腕のねじれはこれで修正できました。

袖のボーン階層変更

コスチュームの袖が腕の動きに追従していないので袖のボーン階層を変更します。あらかじめ、階層を変更するボーンの名前を確認しておきます。

[Project]ウィンドウ > 博麗霊夢 > 霊夢v2.fbx を選択。[Inspector]ウィンドウ > [Rig]タブボタン > [Configure]ボタンをクリック。[Scene]ビューでコスチュームのボーンを選択して名前を確認します。

階層を変更する必要があるのは下記のボーンになります。
右袖:48.!joint_migikataerisaki
右袖肘:53.!joint_RightArmSleeveTip
左袖:147.!joint_hidarikataerisaki
左袖肘:152.!joint_LeftArmSleeveTip

右袖の階層変更

[Scene]ウィンドウ > 霊夢v2 > 287.!Root > 8.joint_HipMaster > 3.joint_Torso > 4.joint_Torso2 > 45.!joint_migikataP > 47.joint_migikataeri > 48.!joint_migikataerisaki を選択。

霊夢v2 > 287.!Root > 8.joint_HipMaster > 3.joint_Torso > 4.joint_Torso2 > 46.joint_RightShoulder > 50.joint_RightArm にドラッグ&ドロップして階層を移動。

プレハブのインスタンス破壊の注意ダイアログが表示されるので[Continue]ボタンをクリック。

次に右袖肘の階層を移動します。
霊夢v2 > 287.!Root > 8.joint_HipMaster > 3.joint_Torso > 4.joint_Torso2 > 46.joint_RightShoulder > 50.joint_RightArm > 48.!joint_migikataerisaki > 53.!joint_RightArmSleeveTip を選択。

霊夢v2 > 287.!Root > 8.joint_HipMaster > 3.joint_Torso > 4.joint_Torso2 > 46.joint_RightShoulder > 50.joint_RightArm > 58.joint_RightElbow にドラッグ&ドロップして階層を移動。

動作確認

階層変更ができたらシーンを再生してCキーを押してしゃがみポーズにすると袖が腕の通りに曲がっていることが確認できます。

左袖の階層変更

[Scene]ウィンドウ > 霊夢v2 > 287.!Root > 8.joint_HipMaster > 3.joint_Torso > 4.joint_Torso2 > 144.!joint_hidarikataP > 146.joint_hidarikataeri > 147.!joint_hidarikataerisaki を選択。

[Scene]ウィンドウ > 霊夢v2 > 287.!Root > 8.joint_HipMaster > 3.joint_Torso > 4.joint_Torso2 > 145.joint_LeftShoulder > 149.joint_LeftArm にドラッグ&ドロップして階層を移動。

左袖肘の階層を移動します。
[Scene]ウィンドウ > 霊夢v2 > 287.!Root > 8.joint_HipMaster > 3.joint_Torso > 4.joint_Torso2 > 145.joint_LeftShoulder > 149.joint_LeftArm > 147.!joint_hidarikataerisaki > 152.!joint_LeftArmSleeveTip を選択。

霊夢v2 > 287.!Root > 8.joint_HipMaster > 3.joint_Torso > 4.joint_Torso2 > 145.joint_LeftShoulder > 149.joint_LeftArm > 157.joint_LeftElbow にドラッグ&ドロップして階層を移動。

動作確認

階層変更ができたらシーンを再生してCキーを押してしゃがみポーズにすると袖が腕の通りに曲がっていることが確認できます。

コスチュームの物理演算を有効にする

脚がスカートを突き抜けないようにキャラクターの動きに合わせてスカートに物理演算を設定します。

[Hierarchy]ウィンドウ > 霊夢v2 を選択。[Inspector]ウィンドウ > MMD 4 Mecanim Model (Script)コンポーネント > Physics Engine > Bullet Physics に変更。

物理演算の処理を軽くするためにパラメータを調整

Bullet Physics の物理演算のパラメータについては詳しい設定が分からないので、とりあえず MMD4Mecanim リアルタイム版 Bullet Physics.pdf に書かれている動作処理を軽くするためのパラメータを調整します。

[Hierarchy]ウィンドウ > 霊夢v2 を選択。[Inspector]ウィンドウ > MMD 4 Mecanim Model (Script)コンポーネント > [Physics]タブボタン > Bullet Physics のプロパティを下記の通り変更。

  • Join Local World > オフ
  • Frame Per Second > 60
  • Iterations > 4

動作確認

シーンを再生して確認。コスチュームがキャラクターの動きに合わせて揺れるようになりました。

Cameraコントローラーの追加

霊夢の操作ができるようになったので、最後にカメラを追従させることにしました。

Standard Assets の Camera をインポート

ファイル:Assets > Import Package > Camera を選択。[Project]ウィンドウ > Assets >Standard Assets > Camera > Prefabs > FreeLookCameraRig を選択。[Hierarchy]ウィンドウにドラッグ&ドロップでシーンに配置.。Main Camera は不要なので選択して削除します。

FreeLookCameraRig のカメラはタグ名が Player のオブジェクトを自動追尾するので霊夢のタグ名を変更します。[Hierarchy]ウィンドウ > 霊夢v2 を選択。[Inspector]ウィンドウ > Tag を Player に変更。

[Hierarchy]ウィンドウ > FreeLookCameraRig > Pivot を選択。[Inspector]ウィンドウ > Transform > Position の値を調整して視点位置を腰の位置あたりに調整。

[Hierarchy]ウィンドウ > FreeLookCameraRig > Pivot > Main Camera を選択。[Inspector]ウィンドウ > Transform > Position の値を調整して視点距離を調整。これで一通りの設定が完了しました!

MMD4Mecanimを使用したシーンのWebGLでビルドについて

今回作成したシーンをWebGLでビルドしてみようと、メニュー:File > Buld Settings を選択。[Buld Settings]ウィンドウ > Platform を WebGL に変更したところ [Console]ウィンドウにエラーメッセージが表示されました。

[Console]ウィンドウにエラーメッセージに従って、ダウンロードした MMD4Mecanim のフォルダに同梱されているReadme_jp.txt を読んだところ下記の通り書かれていました。

サポート対象外のプラットホーム(WebPlayer, WebGL, その他)の動作について、配布バージョンでは動作しないよう設定してあります。
ハック的に動作させたり、そのノウハウの共有、ビルドや動画・静止画のアップロード、SNS投稿など、私的使用外での使用はしないでください。

参考サイト

今回はこちらのWebサイトを参考にさせていただきました。
2. MMD4Mechanimのインポート・モデルの読み込み – Unity+Oculus+MMD とりあえず書き留めておく場所

今回は、UnityにMMDモデルを読み込むというあたりまでやっていこうと思います。 MMD4Mechanimのインポート UnityにMMDモデルを読み込める状態にするには、専用のプラグインが必要です。 Noraさんが開発された「MMD4Mecanim」を以下のサイトからダウンロードします。 少し下の方の「MMD4Me...