MetaHumanで2Bみたいな顔にする

# 概要
MetaHumanにカスタムメッシュを適用しニーアオートマタの2Bのようなセミリアルな顔のキャラクタを作成しUnrealEngine（以下UE）でアバターキャラクターとして動かす方法を記述します。
髪の毛の表現にUEのGroom機能を使用しますが、実行時の負荷は検証していません。

# 対象
この記事はBlenderおよびUnrealEngineを使用したことがあり、初歩的な操作はできる方で、MetaHumanCreatorでプリセットからアバターは作成したことがあるがMesh to MetaHuman（任意の顔のメッシュでMetaHumanを作成する機能）を使用したことがない方を対象とします。

# プレビュー
だいたいこんな感じになります。
めちゃくちゃ寄せれるわけではないですが、フワっと雰囲気似てるかなぐらいには思えるのではないでしょうか？
顔のディテールや髪の毛のスタイリングをもっと詰めるともうちょっとましになると思います、、、

![スクリーンショット 2024-03-18 073617.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/a365509f-fa12-163f-ea02-f01aa272b4a4.png)

# 使用環境
## エディター
[UnrealEngine](https://www.unrealengine.com "UnrealEngine 5.2 Upper") 5.2 Upper
- Mesh to MetaHumanを利用するため5.2以上が対象です。


[Blender](https://www.blender.org/ "Blender 3.5 Upper") 3.5 Upper
- ヘアシステムを使用するため3.5以上が対象です。

[Autodesk FBX Converter](https://aps.autodesk.com/developer/overview/fbx-converter-archives "Autodesk FBX Converter x64 2013")
- BlenderでUEでエクスポートしたFBXをインポートする際に、シェイプキーを保持するためにFBXのバージョン変換を行うために必要です

[Quixel Bridge](https://quixel.com/bridge "Quixel Bridge")
- MetaHumanの作成に必要です。

## UEプラグイン
[metahuman plugin](
https://www.unrealengine.com/marketplace/ja/product/metahuman-plugin "metahuman plugin")
- Mesh to MetaHumanを使用するために必要です。

[Quixel Bridge plugin](
https://docs.unrealengine.com/5.0/ja/quixel-bridge-plugin-for-unreal-engine/ "Quixel Bridge plugin")
- UEからをQuixel Bridge使用するために必要です。

# 素材データ
[LooksLike2BAsMetaHuman](
https://github.com/koiusa/forQuita/tree/LooksLike2BAsMetaHuman/LooksLike2BAsMetaHuman "LooksLike2BAsMetaHuman")

| ファイル名 | 概要 | 用途 | 
| ---- | ---- | ---- |
| HairSource.blend | Groomの素材 | ヘアパーティクルを使用して髪の毛用のAlembicファイルを作成する |  
| SculptedFace_From_MetaHuman.blend | Mesh to MetaHumanの素材 | Mesh to MetaHumanで使用する素材のメッシュを作成する | 
| SculptedFace_From_MetaHuman.obj | Mesh to MetaHumanの素材 | Mesh to MetaHumanで参照する素材のメッシュ |
| Hana.mhb | MetaHumanCreatorファイル | MetaHumanCreatorでインポートすることで作成済みのプリセットのMetaHumanを読み込む |
| CustomMesh_M_Alpha.mhb | MetaHumanCreatorファイル | MetaHumanCreatorでインポートすることで作成済みのカスタムメッシュMetaHumanを読み込む |  
  



# カスタムメッシュ作成
- UEプロジェクトにプラグインを追加

Quixel Bridge plugin
![スクリーンショット 2024-03-18 085121.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/20b940f3-80c1-7b8e-43d6-c01f9b73bd45.png)

metahuman plugin
![スクリーンショット 2024-03-18 085029.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/399740ad-bb8f-7a21-2ea6-9d5c1c136054.png)

- Mesh to Humanの詳しい使用方法はUEDevコミニティなどを参照してください。
https://dev.epicgames.com/documentation/ja-jp/metahuman/metahuman-for-unreal-engine/mesh-to-metahuman/from-mesh

- 素材データのCustomMesh_M_Alpha.mhbを使用する場合は、「[MetaHumanCreatorで自分のMetaHumanを作成](#metahumancreatorで自分のmetahumanを作成)」までスキップしてください

## 素材のメッシュをUEに読み込み
素材データのSculptedFace_From_MetaHuman.objをStaticMeshとして読み込む

![スクリーンショット 2024-03-18 115300.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/4b0fb5a1-1ca2-3f30-41d7-bed3e65d13b2.png)

![スクリーンショット 2024-03-18 115344.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/ad87fab9-f3fe-cec0-856e-7e36a5167fe4.png)

インポート設定でCombine Static MeshesをONにする

| カテゴリ | プロパティ | 値 |
| ---- | ---- | ---- |
| Static Mesh | Combine Static Meshes | On |

![スクリーンショット 2024-03-18 115432.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/4cd4ca29-31a0-83b9-f8b5-0e14278c8c3d.png)

![スクリーンショット 2024-03-18 120147.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/749e53e5-5bac-3805-72e9-afba36e2b693.png)

- Static Meshesにマテリアルを設定

読み込んだStatic Meshesに顔と目のマテリアルを適用する

![スクリーンショット 2024-03-18 120944.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/7b0d8b5c-8b57-6e5e-9db5-c137490b93ce.png)

![スクリーンショット 2024-03-18 120911.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/c092d8f6-d0e7-8ca7-09db-587fd36eb1bc.png)

![スクリーンショット 2024-03-18 121207.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/3860f4ab-637c-2fa7-7afb-0d6293dd6229.png)


## Mesh to MetaHumanで素材のメッシュからMetaHumanを作成
コンテンツブラウザの右クリックメニューで、MetaHumanIdentityを作成する。

![スクリーンショット 2024-03-18 110321.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/ec4dd449-b422-70ef-db48-390e0227e281.png)

![スクリーンショット 2024-03-18 110706.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/1ad7c1c7-958f-a4d8-8033-b8a7bbdd71cd.png)

![スクリーンショット 2024-03-18 110613.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/5473cf3d-639b-e4fb-16a0-c8fbed3a8cef.png)

- Create Conpornentsをクリックし、先ほど読み込んだStaticMeshを指定します。

![スクリーンショット 2024-03-18 115736.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/d981d6c7-f656-82f2-5744-54be44ff601f.png)

- Mesh to MetaHumanに使用するオブジェクトが自動生成されます。
![スクリーンショット 2024-03-18 121432.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/31fc3761-0c2f-90be-8a09-d709fc4eefab.png)

- Promote Frameを実行
顔のパーツのガイドを作成する基準となるビューを設定します。
顔のメッシュを正面から見るカメラは一にしてください。

![スクリーンショット 2024-03-18 121854.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/686a1bb3-c759-fb4a-556b-f81208276900.png)

![スクリーンショット 2024-03-18 121828.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/551aa0c6-9241-8c76-7401-2111a1bed964.png)

- Track Markersを実行

メッシュのパーツを自動検知してガイドが作成されます。

![スクリーンショット 2024-03-18 125023.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/be0eaac8-6d81-7447-09e6-0739b342f5eb.png)

- MetaHuman Idetiy Solveを実行
参照しているメッシュ形状に沿うようなメッシュが計算されます。

- Mesh to MetaHumanを実行
Quixel Bridgeのアカウントに自分のMetaHumanが追加されます

※整ったセミリアル調の顔にする自分の知見としては、眼球はあまり大きくせず、代わりに瞳を大きくし、顎を尖らせるとそれっぽくなる感じがしました。

※MetaHuman作成時に、眼球のサイズを変更することはできないのでアイホールの形状を大きくすると眼球が浮いてしまいます。
[眼球のサイズ変更](#眼球のサイズ変更)方法は後述します。


## MetaHumanCreatorで自分のMetaHumanを作成
- Quixel Bridgeを経由して、MetaHumanCreatorを起動し
素材データのCasutomMesh_M_Alpha.mhbをインポートする。

![スクリーンショット 2024-03-18 102603.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/fb5f0f15-2a04-94d4-a265-75b0e3de4f18.png)

![スクリーンショット 2024-03-18 102648.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/6d986d05-af26-fb6f-1613-154a31ab927b.png)

![スクリーンショット 2024-03-18 112920.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/10e16ed9-044b-e4e3-22b4-256821fb4b79.png)

成功すれば自分のMetaHumanにCasutomMesh_M_Alphaが追加されます。
![スクリーンショット 2024-03-18 113259.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/b4b351bb-f2aa-100e-c2ba-58770a9bd959.png)

## Quixel Bridge PluginでMetaHumanを読み込み
- Quicly add the ObjectメニューからQuixel Bridgeを選択します。

![スクリーンショット 2024-03-18 125827.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/1991aa3e-2b55-ff38-645c-24526852ca60.png)

![スクリーンショット 2024-03-18 130706.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/60d92643-ebcd-2cf5-8ff8-b7ab6bef9a27.png)

![スクリーンショット 2024-03-18 130720.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/7df8ed5f-b5f7-c13e-3085-af8b627a19ea.png)



# 髪の毛を作成
## Groom用のソースデータを作成
- Blenderのヘアシステムを使用してヘアパーティクルを作成します。
素材データのHairSource.blendをBlenderで開き、UEでインポートするためのファイルを作成します。


生え際を表現するヘアパーティクル
![スクリーンショット 2024-03-18 020911.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/214dbe71-c9e7-e5bf-019e-1975ce15bb32.png)

メインの髪のヘアパーティクル
![スクリーンショット 2024-03-18 020854.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/a7186fbc-836f-7cc9-cfe1-43471750dbc3.png)

### ヘアシステムのRender設定
エクスポート時に頭のメッシュが含まれないようにヘアシステムのRender設定を変更します。

| カテゴリ | プロパティ | 値 |
| ---- | ---- | ---- |
| Render | Show Emitter | Off |

![スクリーンショット 2024-03-18 023929.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/80b7f238-163d-142e-e168-f987f1738872.png)

### Alembicファイルをエクスポート
ヘアシステムをアタッチしたメッシュを選択し、Alembicファイルでエクスポートします。

![スクリーンショット 2024-03-18 024054.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/f11d08d4-c27f-70b4-9696-6b6232d416fc.png)

- Alembicファイルのエクスポート設定
必要なものだけがファイルに含まれるように設定を変更します。

| カテゴリ | プロパティ | 値 |
| ---- | ---- | ---- |
| Manial Transform | Scale | 100 |
| Scene Opions | Start | 1 |
| Scene Opions | End | 1 |
| Scene Opions | Selected Objects | On |
| Scene Opions | Visible Objects | On |
| Object Options | UVs | Off |
| Object Options | Pack UV Islands | Off |
| Object Options | Normals | Off |
| Object Options | Color Attributes | Off |
| Object Options | Generated Cordinaes | Off |             | Object Options | Face Sets | Off |
| Object Options | Curves as Mesh | Off |
| Particle Systems | Export Hair | On |
| Particle Systems | Export Particles | On |

![スクリーンショット 2024-03-18 040332.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/4e9f2437-ed4d-0e33-4c5c-115bfeb40286.png)


## UEでGroomを作成
### Alembicファイルからヘアパーティクルをインポート
コンテンツブラウザで右クリックメニューからImport toを選択
前工程のAlembicファイルをエクスポートで作成したAlembic（.abc）ファイルを選択するとGroomのインポートメニューが開きます。

![スクリーンショット 2024-03-18 035117.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/d6de06d8-3a7f-37cf-7048-5a9ffaf96b14.png)

- Alembicファイルのインポート設定

Groomの回転軸をBlenderからUEに併せます。

| カテゴリ | プロパティ | 値 |
| ---- | ---- | ---- |
| Conversion | Rotation | 90, 0, 0 |
| Scale | End | 1, -1, 1 |

![スクリーンショット 2024-03-18 035306.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/1c380d03-db8c-6f3c-13d8-f27d09bd0923.png)
※Groomのインポートメニューにならない場合は、Alembicファイルの出力の不備の可能性が高いです。

成功すれば以下のようなアイコンでオブジェクトが作成されます。
![スクリーンショット 2024-03-18 040619.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/a7aa2af4-52f9-1dcc-8215-9e5a46a5f027.png)

- Groomのプロパティ設定
作成されたGroomのオブジェクトメニューを開きます。
お好みで変更してください。
簡易的な参考設定を載せておきます。

![スクリーンショット 2024-03-18 040824.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/cffe1f34-b11b-58f6-43ce-2a4b576e3236.png)

Strandsタブを選択し、髪の太さの設定を変更します。

| カテゴリ | プロパティ | 値 |
| ---- | ---- | ---- |
| Strands | Hair Width | 0.1 |
| Strands | Hair Tip Scale | 0.01 |

![スクリーンショット 2024-03-18 041003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/b8d20d7d-8f67-b25b-fedd-e422fb71f3f5.png)

Physicsタブを選択し、髪の物理演算の設定を変更します。

| カテゴリ | プロパティ | 値 |
| ---- | ---- | ---- |
| SolverSettings | Enable Simlation | On |
| SolverSettingsv | Gravity Preloading | 1 |

![スクリーンショット 2024-03-18 040918.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/c5deef61-c0c3-475b-0873-e11768ffe04b.png)

## UEでGroomをバインディング
- スケルタルメッシュへのバインディング用オブジェクトを作成
作成されたGroomのオブジェクトの右クリックメニューからCreate Bindingを選択

![スクリーンショット 2024-03-18 042154.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/8fb5d92f-56fb-817e-ac7f-cc0ac643ddb6.png)

- バインド対象のスケルタルメッシュを選択
Quixel Bridge Pluginで読み込んだMetaHumanの顔パーツのスケルタルメッシュを選択します

![スクリーンショット 2024-03-18 051845.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/13b36626-4b0f-c91f-0d1c-656e422cf39c.png)

成功すれば以下のようなアイコンのオブジェクトが作成されます。
![スクリーンショット 2024-03-18 054126.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/8f6cd4fd-f385-a16d-89c8-4ec88d6f6fda.png)


- MetaHumanのスケルタルメッシュにGroomをバインド
Quixel Bridge Pluginで読み込んだMetaHumanのBPのビューポートメを開きます。

![スクリーンショット 2024-03-18 053003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/63743a2c-6b78-b70e-bac2-b9dc950e0981.png)

- BPのComponenttsのヒエラルキーのHairオブジェクトを選択
DetailsタブのGroomカテゴリにそれぞれ対象のオブジェクトを設定

| カテゴリ | プロパティ | 値 |
| ---- | ---- | ---- |
| Groom | Groom Asset | Alembicファイルを読み込んで作成したGroomオブジェクト |
| Groom | Binding Asset | 先ほど作成したBinding Assetオブジェクト |

![スクリーンショット 2024-03-18 053124.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/6276fd05-d926-b1eb-7982-8d20705576f3.png)


![スクリーンショット 2024-03-18 054927.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/0cef8504-2922-385b-95b1-949c6652b36f.png)

# MetaHumanの眼球の編集
## 眼球のサイズ変更
- MetaHumanCreatorでは眼球サイズ変更はできないためAnimBPに処理を加えてプログラムの処理で眼球サイズを変更します。

以下のAnimBPがMetaHuman作成時でのデフォルトの顔の向きや表情を動かすためのAnimBPとなっています。

```
Content > MetaHumans > Common > Face > Face_PostProcess_AnimBP
```
![スクリーンショット 2024-03-18 055903.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/d4a9cff7-8875-c765-efbf-6f62d97cb245.png)

各MetaHumanの顔のスケルタルメッシュのAsset Detailsで参照されています。
変更したい場合は下記のプロパティの参照を変更します。
※この記事では簡単のためデフォルトのMetaHumanのAnimBP（Face_PostProcess_AnimBP）に変更を加えます。

| カテゴリ | プロパティ | 値 |
| ---- | ---- | ---- |
| Skeltal Mesh | Post Process Anim Blueprint | Face_PostProcess_AnimBP |

![スクリーンショット 2024-03-18 060601.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/cc75ae12-f97c-f5ff-2e9c-f473f8efa386.png)

### 眼球編集処理用のCotrolRigを作成

コンテンツブラウザの右クリックメニューからControlRigを選択。

![スクリーンショット 2024-03-18 064948.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/83bb3e45-8454-de42-354e-4af15ca115bc.png)

Rig HierarchyタブのImport Hierarchyをクリックし、対象となるMetaHumanの顔のスケルタルメッシュを選択しOKをクリックすると、ボーンの改装が読み込まれます。
![スクリーンショット 2024-03-18 065405.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/001230f8-afe3-76cf-f8d5-f0e300772c83.png)

![スクリーンショット 2024-03-18 065553.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/e4cb5573-1ebe-b344-5a82-71d548eff4a7.png)

- 眼球サイズの変更及び、奥行きの位置の調整を行うBPを記述します

Offset Transformノードの対象は以下のボーンです。
* FACIAL_L_Eye
* FACIAL_R_Eye

![スクリーンショット 2024-03-18 065927.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/aebe187e-b6ca-992c-491a-da57ae68007e.png)

### 眼球編集処理をAnimBPに追加

- ControlRigノードを追加

ControlRigノードを作成し、先ほど作成したControlRigを参照します。
これで眼球サイズがエディター、ランタイム両方で変更されます。

![スクリーンショット 2024-03-18 070838.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/0d66c9ff-8560-ce2d-1a55-16876b6c58c4.png)

![スクリーンショット 2024-03-18 070802.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/37a77b61-1706-4fa9-55a0-2f0348c2e3fb.png)

## 瞳のサイズ変更

- MetaHumanの眼球用マテリアルのプロパティを編集

瞳のサイズはMetaHumanの眼球用マテリアルのプロパティを編集して変更できます。
眼球のマテリアルはデフォルトでは各MetaHuman毎に割り振られています。

```
Content > MetaHumans > (対象のMetaHumanフォルダ名) > Face > Materials > MI_EyeRefractive_Inst_[L|R]
```
![スクリーンショット 2024-03-18 072910.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/02969062-2ed9-c75b-dd2a-54ab77aaf593.png)

様々な設定がありますが、瞳のサイズは以下のプロパティです。
好みで調整してください。
数値が大きいと瞳のサイズも大きくなります

| カテゴリ | プロパティ | 値 |
| ---- | ---- | ---- |
| Iris | IrisUVRadius | 0.5 |

![スクリーンショット 2024-03-18 073058.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/e86cce2e-9b1c-a78d-b6d3-7f7834b27ac8.png)

# あとがき
難しいモデリングやマテリアル作成をしなくても、ハイクオリティな人体モデルが作成できるMetaHumanすごいですね！
ただ処理負荷はそこそこあるので、ゲーム用途で使うには工夫が必要かもしれません、、、