【UE4】Control Rig試し中⑤／ぷちコン15進捗 - 2021/03/10

[1]:https://historia.co.jp/ue4petitcon15
[2]:https://qiita.com/Rinderon/items/439242c712a6597158f6
[3]:https://qiita.com/Rinderon/items/68d5a5989aa3c9581cf0
[4]:https://pafuhana1213.hatenablog.com/entry/ControlRigComponent
[5]:https://qiita.com/Rinderon/items/3af923b7b889b67e350b
[6]:https://www.unrealengine.com/marketplace/ja/product/female-movement-animset-pro
[7]:https://www.unrealengine.com/marketplace/ja/profile/Kubold?count=20&sortBy=effectiveDate&sortDir=DESC&start=0
[8]:https://www.unrealengine.com/marketplace/ja/product/control-rig-mannequin

[株式会社ヒストリアさん主催の第15回UE4ぷちコン][1]の作業進捗。
Control Rigの続き⑤。

# イマココ

Control Rigをランタイムで使う実験をしていた。
以前の私の記事(「IKで地面の傾きに合わせる」の[その１][2]、[その2][3])と同じことを、Control Rigを使ってやってみた。

以前の記事のGIFアニメ(１年くらい前)：
<img src="https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F358170%2F3bb33606-dc68-10bb-1968-052752f8e909.gif?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&s=fad0f7cafee164d79eca2d68c59276bd">

今回やったこと：
![20210310_1618_RigForTiltFloor.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/358170/e191d008-9e1d-95a9-7840-fa29928f2bc5.gif)
割と苦労はしたのだが、ええ感じにできたとは思う。

# Anim Blueprint の Control Rig ノードを利用した。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/358170/a2a4461e-d057-c693-b891-ae8cd6fece3c.png)

- Control Rig 側に Instance Editable (編集可能)な変数を用意すると、Anim Blueprint 側の `Control Rigノード`にパラメータとして出せるようになる。
    - 上の画像の`Floor Location`と`Floor Normal`がそれ。
    - 詳細パネルで ON にする必要はある。

# Control Rig 側

## 前回までに作ってきたControl Rigは、まったく使い物になりませんでした！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/358170/7d77ba0a-e8c2-a466-2d62-512c1b52bed7.png)

ひとまずの結論：
[前回までに作ってきたControl Rig][5](↑)は、完全にポーズやアニメーションの編集専用。
もちろん Sequencer 上ではちゃんと動く。

- Anim Blueprint の Control Rig の詳細パネルには、「どのControl Rigを使うか」を設定する箇所がある。ここに前回までに作ってきた Control Rig を設定してみた。
- だが、`Sourceピン`にどんなアニメーションを挿しても、Aポーズ(Reference Pose)のまま動かず、超焦る。
    - まだベータ版だからな！ 実装されてないんだな！ …と思って一度スルーした。
- ところが、Preview 画面を見ると、微妙にふるふるしていることに気づいた。
    - 実は、なんか動いている気がする！

![20210310_1648_AnimNodeControlRig.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/358170/82d0b029-74d1-e06f-565c-b712fed23870.gif)
ふるふるしてる…

## Anim Blueprint 用の Control Rig のしくみ

「Anim Graph の `Control Rigノード`は、Rig Graph に組んだ `Backward Solve` を呼び出して、`Sourceピン`に挿した現在のアニメーションのポーズに合わせて、リグコントロールの Transform を設定してくれる説」

…これは間違い＆勘違いでした！
正しくは、

「`Sourceピン`に挿したアニメーションの現在のポーズは、Rig Graph側に渡った時点で、各ボーンのTransformとして既に設定されている」

…が、正解。

> より具体的には、アニメーションがControl Rigに渡ってはいるものの、Anim BPからRig Control/Space を動かす方法がないため、Aポーズ(Reference Pose)の位置にあるControl Rigを使ってポーズが算出されている、ということだと思う。

なので、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/358170/d1119175-cb80-d8c0-a28b-6d5a2fcdeafc.png)
`Get Transform`で現在のボーンのTransformを取得し、`Set Transform`で自分の作ったリグコントロール（もしくはスペース）にTransformを設定しながら計算を行う。

…という方針で、Rig Graphを作る必要がある。
（つまり、Sequencer でのポーズ・アニメ編集用の Rig Graph とは別物になる）

イメージは、今までの Anim Graph のものに近い：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/358170/854e7fe7-16ff-efcc-58f7-47eade0f88a1.png)
上の画像は、
1. `Transform (Modify) Bone`で`ik_foot_l`ボーンに何らかの値を入れる
2. `Leg IK`でIKを行う（`Leg IK`の詳細パネルには、`ik_foot_l`を使って`thigh_l`, `calf_l`, `foot_l`を動かすように設定する）

これと似た考えのものをRig Graphに組めばよいようだ。

> 将来、Anim Blueprintの`Control Rigノード`から、`Backward Solve`を呼び出してくれるようになるのだろうか？
> 「毎フレーム`Backward Solve`を呼び出すような処理は重い」「手動で必要なボーンのTransformを取得しなさい」がEpicの考えなのではないか、と個人的には思う。

# おまけ① ポーズ／アニメエディット用のControl Rigは、実質使わないのか？

勉強にはなったが無駄足なのか？
…と思ったら早速使うことになった。

元のアニメーションの足が微妙に地面から浮いていたので、編集用のControl RigとSequencerを使って、足を地面の高さに合わせて、ベイクして使っている。

…というわけで、プログラマが素材を修正するのに重宝するので、ポーズ／アニメエディット用のControl Rigは用意しておいて損はない。
（Marketplaceの[Control Rig Mannequin][8]に入っているものをそのまま使う、で十分。自前で作る必要はない）

# おまけ②

今回は Marketplace のアニメーションアセット[Female Movement Animset Pro][6]を使用した。
この作者の[Kubold][7]さんのアニメーションは、クオリティが高い上に使いやすいようにも作られていてオススメ。（その分、高いのだが…）

この[Kubold][7]さんが[Female Movement Animset Pro][6]を、いつものマネキン男子にリターゲットする方法を分かりやすく解説してくれている動画がある。これに従えば、とてもきれいにリターゲットできるので、興味のある方は一度見てみてください。（注：英語）

[Female Movement Animset Pro][6]のページの「Retargeting Tutorial」のリンクをクリックしたら見られます(Youtube)。