UEでMorph（頂点アニメーション）を使おう with Blender

### Morphってなに
MorphはVRMとかで表情をいじるのによく使われてるやつです。頂点を移動したモデルを用意してそれをブレンドできるやつです。たぶんレベルが上がるとプリ●ュア的な変身シーンを作れます。
筆者もよくわかっていません。

https://gamescience.jp/2008/Paper/Iida_2008.pdf

によると

"モーフィングとはある 3DCG モデル から別の 3DCG モデルへ時間の経過とともに形状変形を行うものである。 3DCG のモー フィングは自由な視点からモデルを見ることができ、その見た目の面白さから映画やアニメーション、ゲームなどで利用されている。"

らしいです

この記事ではBlenderの基礎的な使い方の話はしません。大体下の動画の内容です。

参考にしたもの
・BLENDER to UNREAL Shape Keys and Morph Targets (UE4/UE5 tutorial)
https://youtu.be/2U4nLRTRmUU?si=kjns5UhfwqpRnXEG

・Blender Tutorial - Morphs（ハイポリで全然違うモデル同士をMorphしたい人向け）
https://youtu.be/ph-YPnzAPaU?si=ynKZ8TyNM_LLmvnY

追記
https://x.com/merao/status/1600876440672948224
わかりやすい動画ありました！！！！！！！！！！これ見てください！！！！！！

# Blenderでモデルを作る
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/f8e7b455-0b80-0a77-8ae9-8c0472cffd4d.png)

作りたいもののディティールに足りるくらいのモデルを用意します。この最初に作った形がすべてのブレンドの基礎になります。

データタブ（緑の逆さ三角▽のタブ）を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/62fd1f2b-0cd0-66c4-b690-5346c5552e3e.png)
シェイプキーを開き「+」を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/1c334137-1608-9efe-02b8-334783fc7ae9.png)

ベースというのが作成されます。これが基礎の形の頂点のデータです。
「+」を押すとキーが増えるので、キーを選択した状態で形状を編集すると頂点アニメーションを行うことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/cb87785b-cc74-b289-40f1-2d505ee08a65.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/9da45d82-931d-cd38-8033-4d0ea7584662.png)

キーの値を調整することでブレンド量を変更することができます。
![Blender 2024-06-23 12-37-23.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/88389ce0-b968-cd86-5b9b-1432a27815a6.gif)

Morphありのモデルはこれだけで完成です。
FBXとしてエクスポートしてください。

# UEに入れる
UEにインポートします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/111baa08-83b0-97e9-22d5-461568aecca5.png)
変更項目は二つです。

・Skeletal Meshにチェックをつける
・詳細設定を開きImport Morph Targetsにチェックをつける。

たったこれだけです。
SkeletalMeshを開いてMorphのタブを開くとちゃんとMorphがインポートされている…はず！
![Morph 2024-06-23 12-49-13.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/c1210eda-a5e0-cccc-f105-548cf371bc58.gif)
ちなみにマイナスに入れると逆方向に移動します。気を付けよう

# どうやってつかうの
今のところMorphをシーケンサーなどで操作するのは、通常のBPか、AnimationBPかControlRigを経由しないとできないようです。

## AnimationBP経由で操作する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/384de80b-65ae-f062-7d5b-6d52140589d6.png)
AnimationBPでSet Morph Targetを使用して設定します。Morph Target NameにはSkeletalMeshのMorphにある設定したいMorphの名前を入れてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/7a2bf2d0-8d42-ff34-b90f-7969f6c09617.png)
↑これ
あとはValueを変数化してシネマティックスに公開にチェックをつけます。

シーケンサーにSkeletalMeshを入れます
詳細から先ほど作ったAnimationBPを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/283e6eda-d14f-27d9-055b-487eba886eb7.png)
「+」からSkeletalMeshComponent0を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/abaa21a1-affb-63f1-5d81-be50d5f89b5f.png)
さらにSkeletalMeshComponent0の「+」を押すとアニメーションインスタンスに先ほど設定したAnimationBPが表示されるので追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/b5736288-a59f-4f3a-8c4f-dc12b324f47e.png)
AnimationBPから「+」を押して先ほど作ったMorph設定用の変数を追加します。（自分はMorph keyという名前で作ったのでこの名前）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/4ce2c459-5deb-2b8c-db6c-5356ac8c453e.png)
よし！あとは動かすだけや！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/a7636465-5325-7af5-9eaa-2555f4357c6e.png)

数値上げても動かない！？？

ABPを使ったものは実は実行中じゃないと動きません。
シミュレーションなどで実行しながら数値を変えるときちんと動くことが確認できます。
![ControlRig - Unreal Editor 2024-06-23 13-19-53.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/91c06fde-ae74-81ce-0803-97531d08e0ec.gif)

ちなみにBPでも同じような設定方法です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/1d2282e2-3336-e5a7-2c05-cfbc9023e20a.png)


## ControlRig経由で動かす
コントロールリグを作ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/03cb64f2-2716-1136-0d19-3139298fe0d7.png)
ボーンを右クリックして新規→新しいコントロールを追加を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/dbd33402-ac76-03ab-c1c5-25915af423c4.png)
コントロールを右クリックし親から解除を選びます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/7ece7a6d-3a2e-1b2e-e36c-fd6a0e58d89c.png)
右の形状からコントロールの形やサイズをいい感じに変更し操作しやすい位置に移動させます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/ae6f9b6f-0d49-1d91-c956-ef14ea5659c6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/2fe3d80a-0453-df18-2bb5-607a6b393b37.png)

いい感じの位置に置けたらコントロールを右クリックし現在からOffsetトランスフォームを設定を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/9fd84fa0-70f7-496c-acd8-1d84a6a1922d.png)
右側のトランスフォームが0になっていたらOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/b12f260d-2173-5fad-f71f-3c335d3a40a9.png)

ノードを組みます。Forwards Solveからこのようにつなげてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/fcf32129-45a7-b62b-562d-ce1f224c781b.png)

Get TransformはコントロールをつかんでD＆Dすると出せるのでGetで出してください。5.2以下だと
Typeがコントロールでなくボーンで出ることがあるのでコントロールにしてください。

Spaceを「Local Space」にするのをお忘れなく！

シーケンサーにControl Rig を入れていきます。
SkeletalMeshの「+」を押してコントロールリグ→アセットベースのコントロールリグから先ほど選択したコントロールリグを選んでください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/bcb7d92d-faa4-1813-46d9-f25a121caf16.png)
コントロールリグが追加されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/b1f33138-bd32-8b22-9911-04b306e8899e.png)
あとはコントロールを動かすとMorphが動くはずです！
![ControlRig - Unreal Editor 2024-06-23 13-57-59 - Trim.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/21d73f2b-6a99-9d54-c475-79c4de94f406.gif)
コントロールリグだと実行中でなくても動きが確認できるのが便利ですね。

ちなみにコントロールリグの変数はシネマティックに公開のチェックがあるのにチェックをつけても操作できません。どうして…。誰か公式のコントロールリグみたいに変数公開する方法教えて…

# おわり
作ったMorphはアニメーションシーケンスをベイクで通常のアニメーションとして扱えるようになります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/70507e88-063d-f8d4-6e9b-4d2d4adc8b68.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/355b2530-6f19-a2ca-a6d0-3b6273dab8ee.png)
みんなもMorphで頂点アニメーションを作って遊ぼう！！！！