続・VRoidをUE4に持っていく自己流メモ

VRoid
この記事は最新版に描き直し中です

概要

Vroid Studioにて作成したキャラクターをUE4に持っていく方法の自分用メモ(の続き)です。
前回の記事はこちらからご覧ください。

VroidをUE4に持っていく自己流メモ

今回はMayaでのデータ調整方法になりますが、前回よりも増して自己流なやり方になってます!笑
ので、参考程度ということでご勘弁ください…!

環境

  • VRoid Studio v0.5.4-p1
  • Unreal Engine 4.21.2
  • Blender 2.79b
  • Maya LT 2017

手順

1. Mayaでデータを整理する

1. アウトライナ上で不要なデータを削除する

下記のデータは不要なので削除

  • Lamp(Blenderからついてきた場合)
  • Camera(Blenderからついてきた場合)
  • ブレンドシェイプのターゲットメッシュ

2. メッシュ名を修正

メッシュの名称をシンプルなものに直しておきます。

Hair001FBXASC046bakedHair
BodyFBXASC046bakedBody
FaceFBXASC046bakedFace

3. ジョイントを整理

不要なジョイントの削除、ジョイントの並び替え、名称変更などを行います。

1. ジョイントの削除

方針としては、ロケーター全般と、語尾に”_end”とついているエンドジョイントを削除します。

手作業でやると結構手間なのでMELにしていますが、これはあくまで現行バージョンの「千駄ヶ谷 渋」ちゃんを想定しており、ご自身のデータを修正する場合は以下のMELの通りではうまくいかないと思います。その場合は結果を見ながら自分用に修正してください。(特に髪の毛!)

// 不要なジョイントを削除 // 

select -r Global ;
RemoveJoint;
select -r Position ;
RemoveJoint;
select -r skelton ;
ungroup;
select -r skelton ;
delete;

select -r J_Bip_R_UpperLeg_collider_2 ;
delete;
select -r J_Bip_R_UpperLeg_collider_1 ;
delete;
select -r J_Bip_R_UpperLeg_collider_0 ;
delete;
select -r J_Bip_L_UpperLeg_collider_2 ;
delete;
select -r J_Bip_L_UpperLeg_collider_1 ;
delete;
select -r J_Bip_L_UpperLeg_collider_0 ;
delete;

select -r J_Bip_C_Spine_collider_0 ;
delete;
select -r J_Bip_C_UpperChest_collider_2 ;
delete;
select -r J_Bip_C_UpperChest_collider_1 ;
delete;
select -r J_Bip_C_UpperChest_collider_0 ;
delete;
select -r J_Bip_R_UpperArm_collider_2 ;
delete;
select -r J_Bip_R_UpperArm_collider_1 ;
delete;
select -r J_Bip_R_UpperArm_collider_0 ;
delete;
select -r J_Bip_R_LowerArm_collider_3 ;
delete;
select -r J_Bip_R_LowerArm_collider_2 ;
delete;
select -r J_Bip_R_LowerArm_collider_1 ;
delete;
select -r J_Bip_R_LowerArm_collider_0 ;
delete;
select -r J_Bip_R_Hand_collider_0 ;
delete;
select -r J_Bip_L_UpperArm_collider_2 ;
delete;
select -r J_Bip_L_UpperArm_collider_1 ;
delete;
select -r J_Bip_L_UpperArm_collider_0 ;
delete;
select -r J_Bip_L_LowerArm_collider_3 ;
delete;
select -r J_Bip_L_LowerArm_collider_2 ;
delete;
select -r J_Bip_L_LowerArm_collider_1 ;
delete;
select -r J_Bip_L_LowerArm_collider_0 ;
delete;
select -r J_Bip_L_Hand_collider_0 ;
delete;
select -r J_Bip_C_Neck_collider_0 ;
delete;
select -r J_Bip_C_Head_collider_0 ;
delete;

// 右足 //
select -r J_Bip_R_ToeBase_end ;
delete;
select -r J_Sec_R_LowerLeg_end ;
delete;
select -r J_Sec_R_SkirtSide_end ;
delete;
select -r J_Sec_R_SkirtFront_end ;
delete;
select -r J_Sec_R_SkirtBack_end ;
delete;
select -r J_Sec_R_UpperLeg_end ;
delete;

// 左足 //
select -r J_Bip_L_ToeBase_end ;
delete;
select -r J_Sec_L_LowerLeg_end ;
delete;
select -r J_Sec_L_SkirtSide_end ;
delete;
select -r J_Sec_L_SkirtFront_end ;
delete;
select -r J_Sec_L_SkirtBack_end ;
delete;
select -r J_Sec_L_UpperLeg_end ;
delete;

// 右手 //
select -r J_Bip_R_Thumb3_end ;
delete;
select -r J_Bip_R_Ring3_end ;
delete;
select -r J_Bip_R_Middle3_end ;
delete;
select -r J_Bip_R_Little3_end ;
delete;
select -r J_Bip_R_Index3_end ;
delete;
select -r J_Sec_R_LowerArm_end ;
delete;
select -r J_Sec_R_UpperArm_end ;
delete;

// 左手 //
select -r J_Bip_L_Thumb3_end ;
delete;
select -r J_Bip_L_Ring3_end ;
delete;
select -r J_Bip_L_Middle3_end ;
delete;
select -r J_Bip_L_Little3_end ;
delete;
select -r J_Bip_L_Index3_end ;
delete;
select -r J_Sec_L_LowerArm_end ;
delete;
select -r J_Sec_L_UpperArm_end ;
delete;

// 眼 //
select -r J_Adj_R_FaceEye_end ;
delete;
select -r J_Adj_L_FaceEye_end ;
delete;

// 胸 //
select -r J_Sec_R_Bust2_end ;
delete;
select -r J_Sec_L_Bust2_end ;
delete;

// 髪 //
select -r HairJointFBXASC04576f251b5FBXASC04525b0FBXASC0454882FBXASC0458e23FBXASC0458883ec50ef59_end ;
delete;
select -r HairJointFBXASC04560de1643FBXASC045eab0FBXASC0454af9FBXASC0459009FBXASC0451224aab7c934_end ;
delete;
select -r HairJointFBXASC0452efd2204FBXASC04578eeFBXASC04549d7FBXASC045aeb0FBXASC045f3427e8ee41c_end ;
delete;
select -r HairJointFBXASC045fa6be46aFBXASC0452b0cFBXASC045429aFBXASC0459860FBXASC045d99be16f6202_end ;
delete;
select -r HairJointFBXASC045a3eb3cc9FBXASC045022cFBXASC045455dFBXASC04598daFBXASC0456fd99adeb1f5_end ;
delete;
select -r HairJointFBXASC0451228e397FBXASC045dc7bFBXASC0454a07FBXASC045a596FBXASC04521637462b95b_end ;
delete;
select -r HairJointFBXASC04542a997d0FBXASC045311aFBXASC04546a4FBXASC045bdbaFBXASC045ec37dc34ba20_end ;
delete;
select -r HairJointFBXASC045bef70c9dFBXASC045db6aFBXASC045453fFBXASC045b754FBXASC04555576a091cb5_end ;
delete;
select -r HairJointFBXASC0458fcd18cfFBXASC045f70cFBXASC0454b57FBXASC045958bFBXASC0451d705adf7c8d_end ;
delete;
select -r HairJointFBXASC0455a19dd4bFBXASC045e27fFBXASC0454e05FBXASC045ae88FBXASC045ce6f37072a1d_end ;
delete;
select -r HairJointFBXASC04547abc8e5FBXASC0451a6dFBXASC0454b56FBXASC045a4a2FBXASC045ce87870c9c4b_end ;
delete;
select -r HairJointFBXASC04509341a53FBXASC045cba3FBXASC0454835FBXASC045b2d0FBXASC04591b5066b5dda_end ;
delete;
select -r HairJointFBXASC045b6fab7f2FBXASC04519e4FBXASC0454f4cFBXASC0459184FBXASC045b1dfe71f0e31_end ;
delete;
select -r HairJointFBXASC04507972c93FBXASC0455c49FBXASC045440cFBXASC045aab6FBXASC045666d97f53896_end ;
delete;

2. ジョイントの並び替え

UE4側で管理しやすいように並び替えます。

reorder -relative -2 J_Bip_C_Spine ;
reorder -relative -1 J_Bip_L_UpperLeg ;
reorder -relative -1 J_Bip_L_Shoulder ;
reorder -relative -1 J_Sec_L_Bust1 ;
reorder -relative -4 J_Bip_L_Index1 ;
reorder -relative -2 J_Bip_L_Middle1 ;
reorder -relative -2 J_Bip_L_Little1 ;
reorder -relative -1 J_Bip_L_Ring1 ;
reorder -relative -4 J_Bip_R_Index1 ;
reorder -relative -2 J_Bip_R_Middle1 ;
reorder -relative -2 J_Bip_R_Little1 ;
reorder -relative -1 J_Bip_R_Ring1 ;
reorder -relative -15 J_Adj_L_FaceEyeSet ;
reorder -relative -14 J_Adj_R_FaceEyeSet ;
reorder -relative -3 J_Sec_L_UpperLeg ;
reorder -relative 1 J_Sec_L_SkirtSide ;
reorder -relative -3 J_Sec_R_UpperLeg ;
reorder -relative 1 J_Sec_R_SkirtSide ;

3. 名称変更

UE4のHumanoid Rigに合わせた名称に変更します。

rename "J_Bip_C_Hips" "Pelvis";
rename "J_Bip_C_Spine" "Spine_01";
rename "J_Bip_C_Chest" "Spine_02";
rename "J_Bip_C_UpperChest" "Spine_03";
rename "J_Bip_L_Shoulder" "Clavicle_L";
rename "J_Bip_L_UpperArm" "UpperArm_L";
rename "J_Bip_L_LowerArm" "LowerArm_L";
rename "J_Bip_L_Hand" "Hand_L";
rename "J_Bip_L_Index1" "Index_01_L";
rename "J_Bip_L_Index2" "Index_02_L";
rename "J_Bip_L_Index3" "Index_03_L";
rename "J_Bip_L_Middle1" "Middle_01_L";
rename "J_Bip_L_Middle2" "Middle_02_L";
rename "J_Bip_L_Middle3" "Middle_03_L";
rename "J_Bip_L_Little1" "Pinky_01_L";
rename "J_Bip_L_Little2" "Pinky_02_L";
rename "J_Bip_L_Little3" "Pinky_03_L";
rename "J_Bip_L_Ring1" "Ring_01_L";
rename "J_Bip_L_Ring2" "Ring_02_L";
rename "J_Bip_L_Ring3" "Ring_03_L";
rename "J_Bip_L_Thumb1" "Thumb_01_L";
rename "J_Bip_L_Thumb2" "Thumb_02_L";
rename "J_Bip_L_Thumb3" "Thumb_03_L";
rename "J_Bip_R_Shoulder" "Clavicle_R";
rename "J_Bip_R_UpperArm" "UpperArm_R";
rename "J_Bip_R_LowerArm" "LowerArm_R";
rename "J_Bip_R_Hand" "Hand_R";
rename "J_Bip_R_Index1" "Index_01_R";
rename "J_Bip_R_Index2" "Index_02_R";
rename "J_Bip_R_Index3" "Index_03_R";
rename "J_Bip_R_Middle1" "Middle_01_R";
rename "J_Bip_R_Middle2" "Middle_02_R";
rename "J_Bip_R_Middle3" "Middle_03_R";
rename "J_Bip_R_Little1" "Pinky_01_R";
rename "J_Bip_R_Little2" "Pinky_02_R";
rename "J_Bip_R_Little3" "Pinky_03_R";
rename "J_Bip_R_Ring1" "Ring_01_R";
rename "J_Bip_R_Ring2" "Ring_02_R";
rename "J_Bip_R_Ring3" "Ring_03_R";
rename "J_Bip_R_Thumb1" "Thumb_01_R";
rename "J_Bip_R_Thumb2" "Thumb_02_R";
rename "J_Bip_R_Thumb3" "Thumb_03_R";
rename "J_Bip_C_Neck" "Neck_01";
rename "J_Bip_C_Head" "Head";
rename "J_Adj_L_FaceEyeSet" "FaceEyeSet_L";
rename "J_Adj_L_FaceEye" "FaceEye_L";
rename "J_Adj_R_FaceEyeSet" "FaceEyeSet_R";
rename "J_Adj_R_FaceEye" "FaceEye_R";
rename "J_Bip_L_UpperLeg" "Thigh_L";
rename "J_Bip_L_LowerLeg" "Calf_L";
rename "J_Bip_L_Foot" "Foot_L";
rename "J_Bip_L_ToeBase" "Ball_L";
rename "J_Bip_R_UpperLeg" "Thigh_R";
rename "J_Bip_R_LowerLeg" "Calf_R";
rename "J_Bip_R_Foot" "Foot_R";
rename "J_Bip_R_ToeBase" "Ball_R";

最終的に以下のようになりました。

修正前修正後
skelton
RootRoot
Global
Position
J_Bip_C_HipsPelvis
J_Bip_C_SpineSpine_01
J_Bip_C_Spine_collider_0
J_Bip_C_ChestSpine_02
J_Bip_C_UpperChestSpine_03
J_Bip_C_UpperChest_collider_2
J_Bip_C_UpperChest_collider_1
J_Bip_C_UpperChest_collider_0
J_Bip_L_ShoulderClavicle_L
J_Bip_L_UpperArmUpperArm_L
J_Bip_L_UpperArm_collider_2
J_Bip_L_UpperArm_collider_1
J_Bip_L_UpperArm_collider_0
J_Bip_L_LowerArmLowerArm_L
J_Bip_L_LowerArm_collider_3
J_Bip_L_LowerArm_collider_2
J_Bip_L_LowerArm_collider_1
J_Bip_L_LowerArm_collider_0
J_Bip_L_HandHand_L
J_Bip_L_Hand_collider_0
J_Bip_L_Index1Index_01_L
J_Bip_L_Index2Index_02_L
J_Bip_L_Index2Index_03_L
J_Bip_L_Index3_end
J_Bip_L_Index3_end_end
J_Bip_L_Middle1Middle_01_L
J_Bip_L_Middle2Middle_02_L
J_Bip_L_Middle3Middle_03_L
J_Bip_L_Middle3_end
J_Bip_L_Middle3_end_end
J_Bip_L_Little1Pinky_01_L
J_Bip_L_Little2Pinky_02_L
J_Bip_L_Little3Pinky_03_L
J_Bip_L_Little3_end
J_Bip_L_Little3_end_end
J_Bip_L_Ring1Ring_01_L
J_Bip_L_Ring2Ring_02_L
J_Bip_L_Ring3Ring_03_L
J_Bip_L_Ring3_end
J_Bip_L_Ring3_end_end
J_Bip_L_Thumb1Thumb_01_L
J_Bip_L_Thumb2Thumb_02_L
J_Bip_L_Thumb3Thumb_03_L
J_Bip_L_Thumb3_end
J_Sec_L_LowerArmJ_Sec_L_LowerArm
J_Sec_L_LowerArm_end
J_Sec_L_UpperArmJ_Sec_L_UpperArm
J_Sec_L_UpperArm_end
J_Bip_R_ShoulderClavicle_R
J_Bip_R_UpperArmUpperArm_R
J_Bip_R_UpperArm_collider_2
J_Bip_R_UpperArm_collider_1
J_Bip_R_UpperArm_collider_0
J_Bip_R_LowerArmLowerArm_R
J_Bip_R_LowerArm_collider_3Hand_R
J_Bip_R_LowerArm_collider_2
J_Bip_R_LowerArm_collider_1
J_Bip_R_LowerArm_collider_0
J_Bip_R_Hand
J_Bip_R_Hand_collider_0
J_Bip_R_Index1Index_01_R
J_Bip_R_Index2Index_02_R
J_Bip_R_Index2Index_03_R
J_Bip_R_Little3_end
J_Bip_R_Little3_end_end
J_Bip_R_Middle1Middle_01_R
J_Bip_R_Middle2Middle_02_R
J_Bip_R_Middle3Middle_03_R
J_Bip_R_Middle3_end
J_Bip_R_Middle3_end_end
J_Bip_R_Little1Pinky_01_R
J_Bip_R_Little2Pinky_02_R
J_Bip_R_Little3Pinky_03_R
J_Bip_R_Little3_end
J_Bip_R_Little3_end_end
J_Bip_R_Ring1Ring_01_R
J_Bip_R_Ring2Ring_02_R
J_Bip_R_Ring3Ring_03_R
J_Bip_R_Ring3_end
J_Bip_R_Ring3_end_end
J_Bip_R_Thumb1Thumb_01_R
J_Bip_R_Thumb2Thumb_02_R
J_Bip_R_Thumb3Thumb_03_R
J_Bip_R_Thumb3_end
J_Sec_R_LowerArmJ_Sec_R_LowerArm
J_Sec_R_LowerArm_end
J_Sec_R_UpperArmJ_Sec_R_UpperArm
J_Sec_R_UpperArm_end
J_Bip_C_NeckNeck_01
J_Bip_C_Neck_collider_0
J_Bip_C_HeadHead
J_Bip_C_Head_collider_0
Hair関連は省略Hair関連は省略
J_Adj_L_FaceEyeSetFaceEyeSet_L
J_Adj_L_FaceEyeFaceEye_L
J_Adj_L_FaceEye_end
J_Adj_R_FaceEyeSetFaceEyeSet_R
J_Adj_R_FaceEyeFaceEye_R
J_Adj_R_FaceEye_end
J_Sec_R_Bust1J_Sec_R_Bust1
J_Sec_R_Bust2J_Sec_R_Bust2
J_Sec_R_Bust2_end
J_Sec_L_Bust1J_Sec_L_Bust1
J_Sec_L_Bust2J_Sec_L_Bust2
J_Sec_L_Bust2_end
J_Bip_L_UpperLegThigh_L
J_Bip_L_UpperLeg_collider_2
J_Bip_L_UpperLeg_collider_1
J_Bip_L_UpperLeg_collider_0
J_Bip_L_LowerLegCalf_L
J_Bip_L_FootFoot_L
J_Bip_L_ToeBaseBall_L
J_Bip_L_ToeBase_end
J_Bip_L_ToeBase_end_end
J_Sec_L_LowerLegJ_Sec_L_LowerLeg
J_Sec_L_LowerLeg_end
J_Sec_L_UpperLegJ_Sec_L_UpperLeg
J_Sec_L_UpperLeg_end
J_Sec_L_SkirtFrontJ_Sec_L_SkirtFront
J_Sec_L_SkirtFront_end
J_Sec_L_SkirtFront_end
J_Sec_L_SkirtSideJ_Sec_L_SkirtSide
J_Sec_L_SkirtSide_end
J_Sec_L_SkirtSide_end_end
J_Sec_L_SkirtBackJ_Sec_L_SkirtBack
J_Sec_L_SkirtBack_end
J_Sec_L_SkirtBack_end_end
J_Bip_R_UpperLegThigh_R
J_Bip_R_UpperLeg_collider_2
J_Bip_R_UpperLeg_collider_1
J_Bip_R_UpperLeg_collider_0
J_Bip_R_LowerLegCalf_R
J_Bip_R_FootFoot_R
J_Bip_R_ToeBaseBall_R
J_Bip_R_ToeBase_end
J_Bip_R_ToeBase_end_end
J_Sec_R_LowerLegJ_Sec_R_LowerLeg
J_Sec_R_LowerLeg_end
J_Sec_R_UpperLegJ_Sec_R_UpperLeg
J_Sec_R_UpperLeg_end
J_Sec_R_SkirtFrontJ_Sec_R_SkirtFront
J_Sec_R_SkirtFront_end
J_Sec_R_SkirtFront_end
J_Sec_R_SkirtSideJ_Sec_R_SkirtSide
J_Sec_R_SkirtSide_end
J_Sec_R_SkirtSide_end
J_Sec_R_SkirtBackJ_Sec_R_SkirtBack
J_Sec_R_SkirtBack_end
J_Sec_R_SkirtBack_end

くどいようですが、これはあくまで現行バージョンの「千駄ヶ谷 渋」ちゃんに対する修正です。この辺りは要件に合わせて対応するのがよいかと思います。

このように対応した理由としてはUE4側でHumanoid Rigというキャラクターアニメーションを別キャラクターから持ってくる(リターゲット)するための推奨ボーン構成に準拠させる目的があります。
また、モバイルではボーン数が75までという制限がありますので、上記表よりも更にジョイントを削除する必要があります。(エンジン改造でボーン数上限を拡張可能)

6. ブレンドシェイプの名称変更

ここからは好みです。デフォルトの名称は長いので、シンプルなものに書き換えます。

MELの書き方として、名称変更の順番を先頭から何番目かで指定しています。これが前記事でのBlenderでブレンドシェイプの順番を並び替えた理由です。(Mayaで並び替えようとしても何故かうまくいかなかったのでBlenderで並び替えました…)

rename FaceFBXASC046baked1 FaceAnim;
blendShapeRenameTargetAlias FaceAnim 0 Face_ALL_Fun;
blendShapeRenameTargetAlias FaceAnim 1 Face_ALL_Sorrow;
blendShapeRenameTargetAlias FaceAnim 2 Face_ALL_Angry;
blendShapeRenameTargetAlias FaceAnim 3 Face_ALL_Joy;
blendShapeRenameTargetAlias FaceAnim 4 Face_ALL_Surprised;
blendShapeRenameTargetAlias FaceAnim 5 Face_BRW_Fun;
blendShapeRenameTargetAlias FaceAnim 6 Face_BRW_Sorrow;
blendShapeRenameTargetAlias FaceAnim 7 Face_BRW_Angry;
blendShapeRenameTargetAlias FaceAnim 8 Face_BRW_Joy;
blendShapeRenameTargetAlias FaceAnim 9 Face_BRW_Surprised;
blendShapeRenameTargetAlias FaceAnim 10 Face_EYE_Close;
blendShapeRenameTargetAlias FaceAnim 11 Face_EYE_Close_R;
blendShapeRenameTargetAlias FaceAnim 12 Face_EYE_Close_L;
blendShapeRenameTargetAlias FaceAnim 13 Face_EYE_Joy;
blendShapeRenameTargetAlias FaceAnim 14 Face_EYE_Joy_R;
blendShapeRenameTargetAlias FaceAnim 15 Face_EYE_Joy_L;
blendShapeRenameTargetAlias FaceAnim 16 Face_EYE_Angry;
blendShapeRenameTargetAlias FaceAnim 17 Face_EYE_Sorrow;
blendShapeRenameTargetAlias FaceAnim 18 Face_EYE_Surprised;
blendShapeRenameTargetAlias FaceAnim 19 Face_MTH_Neutral;
blendShapeRenameTargetAlias FaceAnim 20 Face_MTH_Up;
blendShapeRenameTargetAlias FaceAnim 21 Face_MTH_Down;
blendShapeRenameTargetAlias FaceAnim 22 Face_MTH_A;
blendShapeRenameTargetAlias FaceAnim 23 Face_MTH_I;
blendShapeRenameTargetAlias FaceAnim 24 Face_MTH_U;
blendShapeRenameTargetAlias FaceAnim 25 Face_MTH_E;
blendShapeRenameTargetAlias FaceAnim 26 Face_MTH_O;
blendShapeRenameTargetAlias FaceAnim 27 Face_MTH_Angry;
blendShapeRenameTargetAlias FaceAnim 28 Face_MTH_Fun;
blendShapeRenameTargetAlias FaceAnim 29 Face_MTH_Joy;
blendShapeRenameTargetAlias FaceAnim 30 Face_MTH_Sorrow;
blendShapeRenameTargetAlias FaceAnim 31 Face_MTH_Surprised;
blendShapeRenameTargetAlias FaceAnim 32 Face_HA_Fung1;
blendShapeRenameTargetAlias FaceAnim 33 Face_HA_Fung1_Up;
blendShapeRenameTargetAlias FaceAnim 34 Face_HA_Fung1_Low;
blendShapeRenameTargetAlias FaceAnim 35 Face_HA_Fung2;
blendShapeRenameTargetAlias FaceAnim 36 Face_HA_Fung2_Up;
blendShapeRenameTargetAlias FaceAnim 37 Face_HA_Fung2_Low;
blendShapeRenameTargetAlias FaceAnim 38 Face_EYE_Extra;
blendShapeRenameTargetAlias FaceAnim 39 Face_EYE_Fox;

7. マテリアルの名称変更

マテリアルの名称もシンプルに。こちらもモデルデータの構成によってマテリアル数など異なるかもしれません。

rename F00_000_Hair_00_HAIR_01 "Hair_HAIR_01" ;
rename F00_000_Hair_00_HAIR_02 "Hair_HAIR_02" ;
rename F00_001_Body_00_SKIN "Body_SKIN" ;
rename F00_000_HairBack_00_HAIR "HairBack_HAIR" ;
rename F00_001_Tops_01_CLOTH "Tops_CLOTH" ;
rename F00_001_Shoes_01_CLOTH "Shoes_CLOTH" ;
rename F00_001_Bottoms_01_CLOTH "Bottoms_CLOTH" ;
rename F00_001_Accessory_01_CLOTH "Accessory_CLOTH" ;
rename F00_000_Face_00_SKIN "Face_SKIN" ;
rename F00_000_EyeHighlight_00_EYE "EyeHighlight_EYE" ;
rename F00_000_EyeIris_00_EYE "EyeIris_EYE" ;
rename F00_000_FaceBrow_00_FACE "FaceBrow_FACE" ;
rename F00_000_FaceEyelash_00_FACE "FaceEyelash_FACE" ;
rename F00_000_FaceEyeline_00_FACE "FaceEyeline_FACE" ;
rename F00_000_EyeWhite_00_EYE "EyeWhite_EYE" ;
rename F00_000_FaceMouth_00_FACE "FaceMouth_FACE" ;
rename F00_000_EyeExtra_01_EYE "EyeExtra_EYE" ;

8. トランスフォームをフリーズする

メッシュやジョイントにデフォルトで回転やスケールが入っているため、後々問題になることがあります。(AllrightRigとか)
今のうちにフリーズして初期値に戻しておきます。

ここでは私のやり方を記載しますが、Mayaの操作に慣れている人にとってはご自身のやり方で問題ありません。

1. メッシュのウェイトを書き出しておく。

「DoraSkinWeightImpExp」というMELを使って、3つのメッシュのウェイトを書き出しておきます。

2. バインドを解除する

メッシュを選択した状態で [スキン]->[スキンのバインド解除]でバインドを解除する。

3. メッシュのトランスフォームをフリーズする

メッシュそれぞれ選択し、チャネルボックスにてロックを解除したのちに[修正]->[トランスフォームのフリーズ]を選択してフリーズする。
再度チャネルボックスにてロックしておく。

4. ジョイントのトランスフォームをフリーズする

アウトライナでジョイントを展開し、すべて選択した状態で[修正]->[トランスフォームのフリーズ]を選択してフリーズする。
ジョイントのサイズが小さくなってしまうので、全ジョイントを選択した状態でチャネルボックスの[半径]の値を3くらいにしておく。

5. メッシュをバインドしてウェイトを元に戻す

アウトライナでメッシュとジョイントを選択した状態で[スキン]->[スキンのバインド]を選択。
メッシュを一つずつ選択して先ほどの「DoraSkinWeightImpExp」のImportタグから、先ほど書き出したウェイトデータを選択して[Import DSW]を選択する。


Importは時間がかかるので画面左下のプログレスバーを見ながら気長に待つ。

6. アウトライナ上でdswというオブジェクトを削除してヒストリ削除

ウェイト書き出しデータはもう不要なのでアウトライナ上でdswというオブジェクトを選択して削除する。
その後、[編集]->[種類ごとにすべてを削除]->[デフォーマ以外のヒストリ]をしてヒストリを削除する。([種類ごとにすべてを削除]->[ヒストリ]を選択するとブレンドシェイプの情報が消えてしまうので注意!)

9. FBXエクスポートする

データが整理できたので、FBXファイルにエクスポートします。
私は [ゲームエクスポータ] を使用していますが、どのエクスポータを使用しても問題ないかと思います。

2. Unreal Engineにインポートする

いよいよUE4にインポートしていきます。

フォルダ構成は私は以下のようにしていますので、Meshesの中にFBXファイルをインポートします。

└ Shibu  ┬  Animations                … アニメーション
         └  Character  ┬  Materials   … マテリアル
                       ├  Meshes      … メッシュ
                       └  Textures    … テクスチャ

インポートオプションの注意点は、[Import Morph Targets] のチェックがデフォルトだと入っていないので、忘れずにチェックしてください。
[Import Materials] と [Import Textures] はここではオフにしていますが、この辺りはこの記事では取り扱いません。

正しくインポートされました。

ブレンドシェイプのモーフターゲットが消失せず、スケルトンも使いやすい形で取り込むことができました。

まとめ

Vroid Studioで作成したキャラクターをUE4で使用するにはひと手間かける必要がありますが、その手間をかけるだけの価値があると思いますので、皆さんもぜひVRoidのキャラクターをUE4に登場させてみてはいかがでしょうか。

次回はリターゲットによってVroidにアニメーションを当ててみたり、可愛くなるマテリアルを作ったりしてみたいですね!要望があれば!