MetaHuman-BlenderでCustomMorphTargetを追加する方法

例えばエルフのように耳を伸ばすなど、のチュートリアル動画紹介です。
この通りにやったら出来たので備忘録も兼ねて同じところで詰まったどなたかのために置いておきます。

基本的に動画を観てください。英語ですしよくわからなくなったときのために手順を下に書き出しておきますが、この方が作成されたBlenderAddOnの使用が前提になります。0ドルからのチップ制です。

kai

ありがたい!

UE

  • UEで対象のスケルタルメッシュを複製しておく
  • マテリアルの MI_Lacrimal_fluid_Inst が2つあるので(salivaとeyeEdge用) MI_Lacrimal_fluid_Inst を複製して MI_saliva_Inst とリネーム、saliva_shaderに割り当てる。
  • Export (Defaultでよい。)
  • BlenderへImportする前に、Autodesk FBX Converterで処理 (この工程を飛ばすとマテリアルとMorphTargetが失われる)

Blender

  • まずUnitscaleを0.01に
  • 加工後のFBXをBlenderにImport (Manual Orientation の Forward をY upをZに。向きが変わらないようにExport時も統一する。)

  • (ここから何をするか→LOD0にのみMorphTargetを追加してから他の全LODに適用)
  • LOD0のみ表示して、Shape Keyを追加
  • 適当に名前をつける(ここではCustomMorph)
  • ピン止めする (これを忘れるとやり直し)
  • SculptModeなどでMeshの形を好きに変える。(ここでは耳を伸ばす)
  • 終わったら他のLODを表示して、LOD0以外のLOD1~7を先に選択
  • CTRL押しながらLOD0を選択
  • Toolsを開き、Shape Key Wrap AddonでTransfer By The Listをクリック
  • Uncheck Allをクリック
  • 一番下の新しいMorphTargetをチェック (ここではCustomMorph)
  • Transfer Shape Keysをクリック
  • CustomMorphのピンを外す
  • Valueの値を変更して、変化が適用されているか確認。ほかのLODにも適用されているか確認。
  • (ここからExportだが、普通にExportすると全メッシュがLOD0に重なってしまう様子。これはUE側でImport時にLODを作成する際に、メッシュのヒエラルキーを名前ではなく作成時間を参照して作っているため とのこと。なので各LODを正しい順序通りに複製していく作業が必要になると。手動は大変なのでとScriptまでシェアしてくださっています。)
  • 全LODを選択→Scripting→New
  • 動画説明欄の############に囲まれたScriptを貼り付け。(あえて記載しません。再生してください。)
  • Scriptを起動
  • 自動生成された古いメッシュを削除 (outdatedと接尾語をつけられたもの)
  • 削除したoutdatedの大元を消す rootより上のファイル名のメッシュ なんていう名前なのか知りませんが下の画像の部分。rootは消さない。
  • 全LODをあらかじめ選択した状態で、CTRL押しながらrootを選択
  • Viewport上でCTRL+Pを押してAmature Deformをクリック。 (これをしないとUE5がクラッシュすると説明されています。)
  • 全LODをあらかじめ選択した状態で、CTRL押しながらLodGroupを選択
  • Viewport上でCTRL+Pを押してObjectをクリックして親子付け。
  • LodGroup → root の順で選択してからViewport上でCTRL+Pを押してObjectをクリック。
  • root>LodGroup>各LOD というヒエラルキーになっていることを確認。 同時に各LODにAmature Modifierが適用されていることを確認。
  • LodGroupにCustomPropertyを追加
  • Type = String, Property Name = fbx_type
  • ValueをLodGroupに
  • Viewport上でAを押してすべてを選択。全て選択されていて表示していることを確認(非表示でないことを確認)
  • Export設定はDefaultから変えるのは、Selected Objectにチェック、ForwardをY Forwardに、Geometry内のSmoothingをFaceにしてAdd Modifiersをアンチェック、Amature内のとAdd Leaf BonesをアンチェックBakeAnimationをアンチェック

ここからUE

  • UEにImport
  • スケルタルメッシュを開き、Asset DetailsのImport Settings>Import Mesh LODsにチェックをいれる
  • TransformのTranslationとRotationをすべて0に、Scaleを1に
  • File Pathにファイルの場所を設定
  • スケルタルメッシュをセーブ
  • スケルタルメッシュを再インポート
  • マテリアルを左側と同じになるように変更していく
  • LODを確認していくと3以降がおかしくなっている。(LODが上がるに連れマテリアル数が減るのに、減ってない順序でインポートしてしまっているから?)
  • 「1.」の工程で複製した元のスケルタルメッシュとマテリアルを比較していって同じように合わせる(同じ工程の繰り返しのため動画を参照。表を出してくださっているので赤い部分を変更していく。)
  • すべて終わったらMetaHumanのBPのFaceにセットする。
  • 髪などのGroomアセットがバグる。(加工前のスケルタルメッシュにBindingされているため。 )
  • Groomアセットの上で右クリックしCreate Binding
  • Targetに新しいメッシュ、Sourceに加工前のメッシュをセットしCreate。それをMetaHumanのBPのGroomアセットにセット
  • MetaHumanのBP-BeginPlayにSetMorphTargetノードを作成 Name=CustomMorph Value=1で適用してみる
  • 完了