VRoid->Blender->Unity->MMD連携手順

### 概要
- [VRoid](https://vroid.com/)でモデル作成 → Blenderで整形 → MMDで躍らせるところまでもっていく。
    - Blenderで設定する内容は↓のようなこと
        - 服や装飾品を追加
            - 剛体の設定
            - 揺れもの設定
        - VRoidでは調整できない細かな体系・顔の調整

---
### 前提
- 環境
    - OS: Windows 10 64bit
    - VRoid: v.0.7.3
    - Blender: v.2.7.9b
    - Unity: 2018.2.10f1
        - UniVRM-0.53.0_6b07
        - VRMtoPMXExporter_v0.5.6
        - TransferVRMSpringBoneSetting: v.1.0
    - PMXエディタ: v.0.2.5.4

---
### 手順
- その1. VRoid上での作業
    1. VRoid Studioでモデルを好きに作る（使い方は割愛）
    2. 作成が完了したら、VRM形式でEXPORT
      ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/340e6001-c9ba-7471-8303-2463b07a5219.png)

---
- その2. Blenderでの作業
    1. BlenderでVRM形式のファイルをINPORTできるようにする
        - [VRM_IMPORTER](https://github.com/iCyP/VRM_IMPORTER_for_Blender2_79) をダウンロード
        - Blenderの「ファイル」→「ユーザ設定」をクリック
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/0c1ef1c0-bb49-358c-2db7-79d8ec225305.png)
        - 「アドオン」タブを開いて「ファイルからアドオンをインストール...」をクリック
　　    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/87ca4cca-5cab-3109-67b2-0ac9f952216b.png)
        - VRM_IMPORTERを**Zip形式まま**で指定する
        - 「アドオン」タブの「テスト中」をクリックして「Import-Export: VRM_IMPORTER」にチェックを入れる
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/cb787a95-1b33-92a6-3185-174902dfd272.png)
        - これでVRMのインポート/エクスポートができるようになる
    2. Blender上で追加したい部品を作成する
        - 服の追加は、後述の方法を参照したほうが楽そう。ここでは、簡単な揺れものや剛体の追加を想定した作業。
        - blenderを開いて装飾品を作成
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/fd1dd9a5-e362-9888-1b23-1f94d2fe45d0.png)
             - blenderの基礎的な使い方は他の方の記事やマニュアルを参考に。（個人的に[この記事](https://nvtrlab.jp/blog/column_group/group1)は勉強になりました)
             - 上記図ではboneを設定しているが、VRoidモデルと結合するさいにboneの細かい設定をし直すことになるので、この段階であえて用意する必要はなし。
             - 動かすモノ単位(羽/目玉/etc...)でobjectを分けておくと後々編集がしやすい
    3. VRoidで作成したモデルを読み込む
        - 事前に用意したVRM_IMPORTERを利用して、VRM出力したVRoidモデルを読み込む
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/c40af1d0-c40f-80a9-c389-24edbbfd2cb2.png)
            - Scaleや位置はそろっていないはず
            ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/c8771785-ec42-78b5-edf3-b9f3e96de56d.png)
        - Blender上で、表情を確認する
            - 「Face.baked」を選択
            - 逆三角のやつをクリック
            - 「シェイプキー」から適当なものを選んで値をスライドさせると表情が変わることを確認できる
            ![ss3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/1d0dd547-64e7-e0b2-dc23-bf566313426e.png)
        - Blender上で、ボーンを確認する
            - 「ポーズモード」にする
            - skeltonから、動かしたいボーンを適当に選択する
            - 「トランスフォームマニピュレータ」を「回転」にする
            - カーソル位置を選択中のobjectに合わせるために、「Ctrl + .」を押す
            - x/y/z軸上で動かしてみる
            ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/d7db4b02-1cd6-eec1-e78c-0fc9fe02cd9c.png)
    4. VroidモデルとBlender objectを結合させる
        - 揺れないものを結合する
            - 「オブジェクトモード」で結合させたいBlender作成objectを選択
            - 「オブジェクト」メニューを選択
            - 「親」に「skelton」(VRoidで作成したBone情報が格納されているもの)/「オブジェクト」に「ボーン」/「ボーン」に連動して動かしたいボーンを（頭につけたい場合は「J_Bip_C_Head」）選択
            ![ss2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/9d1cf9ee-833a-c930-1df5-1388650380ba.png)
            - この状態で、オブジェクトを拡大縮小・位置移動させて、最終的に表示させたい状態まで微調整してもっていく。
            - **これだけでOK**
        - 揺れるものを結合する
            - オブジェクトを移動させる
                - 揺らしたいオブジェクトを「オブジェクトモード」で選択する
                - 結合させたい位置まで、回転・拡大縮小・移動させて持っていく
                ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/93f1d098-f980-6c7a-0288-783f4f1544fd.png)
                - この時、原点の位置がずれている場合、MMDに持っていったときに、パーツが意図しない場所に配置されてしまうので、
                    - 「Shift + S」を押して、「カーソル→原点」を選ぶ
                    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/7291776a-a95c-ba29-85d5-5520a83fedd1.png)
                    - 「オブジェクト」→「トランスフォーム」→「原点を3Dカーソルに移動」を選ぶ
                    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/856f6c91-e744-ec9c-1997-a0f0225a5ad9.png)
            - ボーンを作成する
                - 「skelton」の「Amature」をクリック
                - 「オブジェクト」メニューの「レントゲン」をクリックしてボーンをすべて表示させる
                ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/24ce1d70-0541-af58-327d-70ef55457748.png)
                - 「編集モード」に移り、派生させたいボーンの端点を選択する
                - 「Ctrl + E」でボーンを生やしていく
                ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/f918cf36-3bc4-0c73-abe2-abd1d7b20397.png)
                    - この時、左にある「オプション」から「X軸ミラー」をチェックしておくと、左右対称にボーンを生成することが可能
                - ボーンの中でも揺らしたくないものは、「編集モード」において、「ボーン」メニューを選択し、「固定」にチェックを入れる
                ![ss5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/f2f9c03a-3629-14dd-da7b-a6679279c60f.png)
                - Unityでの操作をわかりにくくしないためにも、自分でつくったボーンにはわかりやすい名前を付けておくことをおススメ
            - ウェイトをつける
                - 「オブジェクトモード」を選択
                - 先ほど移動させたオブジェクトを選択
                - 次にskeltonを選択（順番が大事）
                - 「Ctrl + P」を押す
                - 「自動のウェイトで」を選択（自分でウェイトを調整する方法は別途まとめます）
                ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/4c6f21e2-8d52-fd70-6bc8-377d24f6b357.png)
            - ボーンに移動範囲を制限する
                - 「ポーズモード」を選択
                - 移動制限をかけたいボーンを選択
                - 「ボーンコンストレイント」メニューを選択し、「IK」を選択
                ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/d93bdf0a-12ae-d7fe-ca12-be01d8f076fa.png)
                - 「ボーン」メニューを選択し、「インバースキネマティクス（IK）」を選択
                - X/Y/Z軸の移動範囲を制限する
                ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/3ddeeabd-a33d-fd08-c891-e1b65231dd73.png)
    5. モデルをエクスポートする
        - 「ファイル」→「エクスポート」→「FBX」を選択
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/30e45a24-98dd-a6f6-369c-70d25d565dad.png)
        - 左下に現れるエクスポートのメニューを設定する
            - 「メイン」「ジオメトリ」「アーマチュア」「アニメ－ション」は下記の通り設定する
            - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/f043c6f2-fb76-0511-bc7c-892cb6200d91.png) ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/0146a3a8-9545-348d-39ee-07f321dadcc9.png) ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/45496ce9-d218-31f5-71a6-a6cd7023d597.png) ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/018b91fc-0c74-fc6b-64e0-84fafda7625d.png)
        - エクスポート実行

---
- その3. Unityでの操作
    - Unity導入
        - [Unity Hub](https://unity3d.com/jp/get-unity/download)を使うとUnityのバージョン管理ができて楽ちん
    - Projectの設定
        - UniVRMを導入
            - [package](https://github.com/vrm-c/UniVRM/releases)をダウンロード
            - Projectを開いた状態で、ダウンロードしたpackageをクリックしてインポートが実行
                - すべてインポートでOK
    - Modelの設定
        - 事前に、Asset配下にAvatarフォルダを作っておくと視認性が上がって◎
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/5ad0455f-1456-5df4-3374-fcd066418807.png)
        - Blenderで出力したFBXモデルをインポート
            - Avatarフォルダに、FBXファイルをD&D
        - Rigの設定
            - インポートしたモデルをProjectから選択
            - メニューから「Rig」を選択
            - Animation Typeから「Humanoid」を選択
            - Applyをクリック
            - ![ss6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/3dccc73e-4d80-2e1d-42e9-fea2d27c7070.png)
            - configureが選択できるようになるのでクリック
            - Headをクリックし以下設定（しないと、頭につけた装飾品がずれる可能性あり）
                - LeftEyeに「J_Adj_L_FaceEye」を選択
                - RightEyeに「J_Adj_R_FaceEye」を選択
                - Jawに「None」選択
                - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/882c57e2-4da3-b81c-822b-80b922c95559.png)
            - Apply → Done をクリック
        - VRMエクスポート（1回目）
            - 上記設定済みのモデルを、「Hierarchy」にD&D
            - 「Hierarchy」上に配置されたモデルを選択
            - 「VRM」メニュー選択
            - 「UniVRM-XXX」選択
            - 「Export humanoid」選択
            ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/89c49c31-3215-997d-9825-3a7c1f2ded5e.png)
            - 所有者情報を埋めてエクスポート実施
        - VRMファイルの取り込み
            - VRMエクスポート(1回目)したVRMファイル（以降、ファイルAと呼ぶ)と、Vroidで出力したVRMファイル（以降、ファイルBと呼ぶ）をAvatarフォルダ配下にD&D（ちょっと時間がかかる）
            - 以下のようなフォルダが構成されていることが確認できる
            - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/252f378f-ac22-062a-8c06-569bfd6a6faf.png)
                - 図中のxx_baseはファイルB、xx_base_step1はファイルAを表している。
        - Materialの移行設定
            - Materialを右クリック
            - 「Show in Explorer」をクリック
            - 表示されたディレクトリから、[ファイルB].Materialの中身を[ファイルA].Materialに上書き保存
                - ここで、中身のマテリアル名があっていないとマテリアルの移行ができないので注意！
                - その場合は、BlenderでMaterial名が一致していない可能性がある
        - BlendShapeの移行設定
            - 同様に表示されたディレクトリから、[ファイルB].BlendShapesの中身を[ファイルA].BlendShapesに、**BlendShape.asset/BlendShape.asset.meta以外を**上書き保存。
            - 名前が異なっていた場合は、[ファイルB]基準でファイルを置き換えていけばOK
            - UnityのProject上の[ファイルA].BlendShapeを開いて、「BlendShape」を選択
            - 右上のRestoreを選択すると、各BlendShapeClipが現れる
            - 各BlendShapeの「BlendShape List」設定を、元の[ファイルB].BlendShape基準で設定しなおしていく
            - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/5eb3ada1-50c0-7bbe-da21-c5c2319c4d3f.png)
        - Boneを移行させる
            - [以降用スクリプト](https://scrapbox.io/runbird7788slip-85562795/VRMSpringBone%E3%81%AE%E8%A8%AD%E5%AE%9A%E5%87%BA%E5%8A%9B%E3%81%A8%E8%A8%AD%E5%AE%9A%E5%8F%8D%E6%98%A0%E3%81%99%E3%82%8B%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88)をダウンロード&インポートする
            - ファイルBのモデルをHierarchyにD&D
            - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/bc648431-d152-d95f-c87b-b021eb7fb190.png)
            - モデルを選択状態にして、「UniVRM-XXX」メニューを選択
            - 「Export...」を選択
            - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/0b619b6e-8ca6-50b3-4a24-6b859812cf91.png)
            - exportする
            - ファイルBのモデルをHierarchy上から削除
            - ファイルAのモデルをHierarchyにD&D
            - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/d2f80e81-44d7-dcf3-bfe5-8e1d2ddd102a.png)
            - モデルを選択状態にして、「UniVRM-XXX」メニューを選択
            - 「Apply...」を選択
            - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/10c91cd6-feaa-55ea-d95e-c9696d4d8330.png)
            - applyする
            - モデルディレクトリ中のsecondlyを選択して、VRM Spring Boneの設定が入っていればOK
            - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/050694f3-3519-c3f7-ed42-058cae9bff63.png)
        -  Blenderで作成したBoneを揺れものとして登録する
            - secondlyから、「Add Component」を選択
            - 「VRM Spring Bone」で検索をかけて追加
            - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/23556c4b-2f0c-1742-5289-f44d3e73618b.png)
            - Root Bonesに揺れもののBoneのRoot数を指定
                - 選択メニューが現れるので、ボーンを一つずつ指定していく
                - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/728d05c1-8320-d6b1-7423-61f926287987.png)
            - Stiffness Forceは柔らかさ設定
            - Gravity Powerは重力
            - Collide の Hit Radiusは衝突半径
        -  Blenderで作成したオブジェクトのマテリアルを設定する
            - （もしなければ）Projectに、Blenderで追加したオブジェクト向けテクスチャを格納したディレクトリをD&D
            - ![ss7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/24469644-fe5b-1d2b-e41d-ec5ec0a39552.png)
            - Blenderで追加したオブジェクトを選択すると、右のメニューに、Materialの設定があることを確認
            - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/af1e09b0-dc1a-9a87-1978-0fb7f3a24889.png)
                - Boneに紐づけた揺れないものは、各Boneの下に下図のように格納されている点に注意
                - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/95a5c25f-4558-a8cf-754f-dc51113ee5ba.png)
            - 各マテリアルを開く
                - Albedoにテクスチャ画像を指定
                - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/2863331c-2bdd-a17c-9a26-7d1e2bcc6ddd.png)
                - Shaderを、「VRM/Mtoon」にする
                - pngの透過処理を反映させたい場合は以下設定例のように、Render Typeを指定、`Lit Color, Alpha`を、(255,255,255,255)とする
                - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/c6ec28b2-2f7e-be86-0c77-5f0cbc93f0a5.png)
        -  最終微調整
            - 以下のように設定
            - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/554656dd-1025-0fbf-fa02-d184a0e165ab.png)
        - VRMエクスポート（2回目）
            - 上記設定済みのモデルを1回目と同様にエクスポート実施

---
- その4. 出力したVRMをテスト
    - [VRM Live Viewr](http://fantom1x.blog130.fc2.com/blog-entry-309.html)などをつかうと動作確認が簡単にできる
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/db47321c-04ed-c914-367d-17992048b437.png)

---
- その5. MMD向けに調整
    - VRMtoPMXExporter を導入
        - [この辺の記事](https://aideq.goat.me/h70ydDLPP2)を参考に、UnityからPMX形式のファイル変換パッケージをインストールする
    - コンバータを、Hierarchy上のモデルにD&D
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/4ff6504e-b2bb-b6e5-b7e4-f373496c9b8e.png)
        - モデルのInspectorを選択
        - PMX Exporter(Script)を選択し
        - `Create Ex Texture`にチェック
        - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/3f9a478a-6a73-da36-07b0-4a2175b89434.png)
        - 歯車から「Export」を選択（時間がかかる）
        - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/6febeac0-0052-1e58-ce3d-7378029ee6ec.png)
    - PMXファイルのエクスポート
    - PMX Editorを導入
        - [このページ](http://kkhk22.seesaa.net/category/14045227-1.html)より、PMX Editorをダウンロード
        - 解凍する前に、ファイルを右クリック→プロパティを開く。セキュリティの項目に「OK」を入れておく
        - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/a2e91795-fc0b-3ed1-963f-fc063cddd8d0.png)
            - この処理を入れないと、Pluginの読み込みがうまく動かない
        - [標準ボーンチェッカー](https://bowlroll.net/file/9611) と [準標準ボーン追加](https://www.nicovideo.jp/watch/sm14956092)をダウンロードして、同様に解凍
        - プラグインは解凍したフォルダ内の.dllをPmxEditor/_plugin/Userの中に入れておく
    - PMXファイルの読み込み
        - PMX Editorを起動し、pmxファイルをD&D
        - 編集→プラグイン→User→標準ボーンチェッカーを選択
            - 基本はすべてOK
            - 以下アラートは「いいえ」を選択
            - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/07981dbe-daa9-4203-0a9c-7a5708e1037e.png)
        - 編集→プラグイン→User→準標準ボーン追加を選択
    - 保存処理
        - 保存する際は、同名で上書き保存
    - ここまでいけばMMDまでいける（はず。。。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/bb13a0d7-f77b-1466-635a-73f0c7157d43.png)

---
- 番外編
    - `Blender Tips`
        - **VRMモデルのテクスチャを表示させる**
            - ただインポートした状態だとモデルが泥人形状態なので、「シェーディング」を「マテリアル」に変更する
            ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/48aebbcd-7d07-d174-529a-b21e28751296.png)
        - **テクスチャを透過させる**
            - マテリアル設定
                - 「透過」にチェックを入れる
                - Z値透過の「アルファ」「スペキュラー」を0.000にする
                ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/a4fcc4ab-0142-0d85-dcd9-6588f7f7fe7d.png)
            - テクスチャ設定
                - 画像を読み込ませる
                - 「アルファを使用」にチェックをいれる
                - その下にある「プリマルチプライ」を選択
                - さらにその下にある「影響」の「アルファ」を1.000にする
                 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/9b7841a4-3dc5-81c4-4a44-4d770ae18f05.png)
        - **テクスチャを作成する**
            - 画面を分割して2つ表示させる（そのほうが後段の作業が楽）
                - 以下画像にある、赤枠部分をD&Dで動かすと画面が分割される
                ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/9972d015-8a9a-51ff-b293-c17f20986bbc.png)
            - 図左領域を「UV/画像エディター」にする
            ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/4fe26997-44e2-f95b-293c-e572142708a1.png)
            - 図右領域を編集モードにして、UV展開させたい線を選択。決まったら「Ctrl + E」を押して「シームをつけるを選択」
            - その後、「A」を押して全頂点を選択した状態で、「U」を押し、「展開」を選択
            ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/c37e0ff7-52d1-4907-c3db-8a858774df51.png)
            - 図左領域にUV展開後の画像が表示されるので、「UV」→「UV画像をエクスポート」を選択して、出力されたpngファイルを外部ペイントソフトで編集すればテクスチャができる。
            - また、図右領域で、「テクスチャペイント」モードにすると、直接Blender上でペイントも可能。***まずはこのテクスチャペイントモードで塗り分ける領域のあたりをつけておくと◎***
            ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133527/df6cb7d8-34e2-0583-f1d7-70806dc1a662.png)