Unity公式キャラモーション生成AI(MuseAnimate)使ってみた

# UnityMuseとは
Unity公式の生成AIサービス群です。
既存のUnityライセンスとは別に、UnityMuse専用のライセンスが必要です。
(15日間の無料トライアルがあります。)
 
このドキュメントではキャラクタアニメーションに関する生成AIであるMuseAnimateを使用する方法と、これを使用してみた感想を記載します。
生成されるのはHumanoidに対応したAnimationClipです。

公式リンクはこちらです。
[Unityブログ](https://blog.unity.com/engine-platform/unity-muse-ai-capabilities-in-editor-plus-new-updates)
[UnityMuseサイト](https://muse.unity.com/en-us) 

# 始め方
## Unityインストール
Unity2022.3以降のUnityをインストールしてください。
手元の環境のUnity6では動作しなかったので、2022.3.2Xを使用しています。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878081/651be6c1-66c3-166f-0eea-33b594e746f1.png" alt="Unity6でのエラーメッセージ、UnsupportedUnityVersionのポップアップエラー画面" title="Unity6でのエラーメッセージ", width=256>

## PackageManager経由でのインストール
MuseサイトでAnimate/GetStartedを押すと、PackageManager経由のインストール方法を表示されます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878081/1ebfb4dd-baea-2425-adca-8f333da5e506.png" alt="UnityMuseサイトでのインストール方法のスクリーンショット、パッケージマネージャー自体の使い方や、パッケージのURLが記されている。" title="PackageManager経由のインストール方法", width=512>

Unityのパッケージマネージャーのプラスボタンから「Add package by name」を選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878081/35c0526f-25fd-b448-c5c0-496d1adf6161.png" alt="PackageManager経由のインストール方法。AddPackageByNameのメニュー表示されている" title="PackageManager経由のインストール方法1", width=256>

「com.unity.muse.animate」を記入し、Addボタンを押します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878081/94a328fc-349f-bb66-399f-660aef4775da.png" alt="PackageManager経由のインストール方法。AddPackageByNameのメニューにcom.unity.muse.animateを入力している。" title="PackageManager経由のインストール方法2", width=256>

タブにMuseメニューが出てくるので、NewAnimateGeneratorからツールを起動します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878081/59f84783-c086-3c96-fbe4-9ad856c66c21.png" alt="MuseAnimationツールの起動方法、タブから起動する。" title="MuseAnimationツールの起動方法。", width=256>

アカウントを選択します。
利用規約等のポップアップが表示されます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878081/3a0c5d0f-2e60-065a-3d05-66e47fb96209.png" alt="MuseAnimationツール内の、アカウント選択画面。" title="Museのアカウント選択。", width=512>

# 生成に関する設定
空欄に生成したいアニメーションに関するプロンプトを入力します。

Generationsは一度に生成するモーション数です。
まとめて生成して、近いものを選ぶのがいいですね。
1~4までの数字を指定可能です。

Duration(sec)でアニメーションの長さを指定出来ます。
ちなみに3(秒)で設定したアニメーションでは、174フレームのAnimationClipが生成されました。
あくまで目安だと思います。
1~5までの数字を指定可能です。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878081/ee680846-537a-489b-708a-c6d32a561867.png" alt="MuseAnimationツール内の生成に関する設定の画面が表示されている。" title="生成の設定画面", width=256>

# 生成
## 汎用系なモーションを生成
とりあえず簡単そうな単語を入力してアニメーションを生成してみます。
「walk happy」としてみます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878081/9554052c-03b8-88d7-ae1e-0d5cd598c24e.gif" alt="MuseAnimationツール内の画面、WalkHappyで生成したアニメーションの結果が表示されている。" title="WalkHappyで生成したアニメーション。", width=512>

いい感じですね。
歩き方が軽快な感じとか、上を向いている感じとかhappyだなと思います。

こちらは「roll」のプロンプトです。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878081/aa4a125c-fe19-9273-4b9c-e4807563c548.gif" alt="MuseAnimationツール内の画面、Rollで生成したアニメーションの結果が表示されている。" title="Rollで生成したアニメーション。", width=512>

こちらもいい感じですね。
前後の立ち姿勢の指定はしてないですが、ゲームでよくある使い方になっていると思います。

## ポーズが重要なモーションの生成
Unity公式サイトのOKポーズを想定し、アピールモーションを生成してみます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878081/4f0c4aba-faaa-5202-3b18-a514b1c9ee4d.png" alt="Unity公式サイトの画像、UnityChanがThumbsUpしている。" title="UnityChanがThumbsUpしている画像。", width=256>

プロンプトは以下とします、具体的な単語はGoogle翻訳で得ました。
- アピール(Appeal)
- 右手で親指を立てる(thumbs up with right hand)
- 左手を腰に当てる(put your left hand on your waist)
- 頷き(nod)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878081/3543652d-a9d2-cc3e-956e-5f4dcb54eb3b.gif" alt="MuseAnimationツール内の画面、ThumsUpなどで生成したアニメーションの結果が表示されている。" title="ThumsUpなどで生成したアニメーション。", width=512>

前述の2つのアニメーションと比較して難易度が高いようで、なかなかイメージするアニメーションが生成されませんでした。
何度が生成し近いアニメーションを選びましたが、それでも左手の位置がイメージと異なります。
修正していこうと思います。

# 編集に関する設定
ツール画面下部の【Make Editable】ボタンを押下し、【EditOptions】を表示させます。
生成したアニメーションをいくつかの区間に分割して編集しますので、分割の粒度を指定出来ます。
スライダーを右に動かすほど、分割が細かくなります。
どの程度分割されるか、どのタイミングで分割されるかはアニメーションの内容によって変動するようです。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878081/88b22db6-48dd-4d7b-ed63-256dd200bf1f.png" alt="Make Editableを押下後に表示されるEditOptionsの、分割具合のスクリーンショット", title="EditOptionsのスクリーンショット", width=256>

EditOptionsで【Done】ボタンを押すと編集画面に入れます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878081/27123ae3-39ee-1cb0-863d-a61b6db959b6.png" alt="EditOptionsで【Done】ボタンを押した後に表示される編集画面のスクリーンショット", title="編集画面", width=512>

手首、足首などいくつかの部位を移動/回転コントロールできるようです。
肩などの部位は移動のみコントロールできるようでした、エイムのような概念のようです。

KeySettingから分割区間ごとの設定が出来ます。
- Transition Duration...その区間をどれだけの長さとするか。右(カメのアイコン)に動かすほど、長く取るようです
- Extrapolated Pose...オンだとこの区間の最後までポーズを維持しているように感じました。オフだと区間の最後は次のフレームに遷移しています
- Loop to first pose...最終区間のみオンにすることが出来ます。オンの場合は開始区間の最初のポーズとつながり、いわゆるループモーションとなります。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878081/f24b2311-bb8c-c7ba-a486-ae03de04a5e1.png" alt="EditOptionsで【Done】ボタンを押した後に表示される編集画面のスクリーンショット", title="編集画面", width=256>

ある程度修正出来ました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878081/7c153b1e-f26a-27c6-f383-b35f57075bcc.gif" alt="MuseAnimationツール内の画面、ThumsUpなどで生成し、修正したアニメーションの結果が表示されている。" title="ThumsUpなどで生成し、修正したアニメーション。", width=512>

### 出力に関するボタン
AnimationClipは画面下のExportから保存可能です。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878081/fc47cf68-85af-4ce7-8b13-b7ba62f6e5b8.png" alt="出力ボタンのスクリーンショット", title="出力ボタンのスクリーンショット", width=256>

編集画面からの書き出しは画面上のアイコンから行います。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878081/f7f0fd31-936a-fcd6-01ec-1dac4df0b0ce.png" alt="出力ボタンのスクリーンショット", title="出力ボタンのスクリーンショット", width=256>

# 実際にアニメーションをキャラクターに流す
生成したアニメーションを、SDUnityChan、UnityChan、Robotに流してみます。
Humanoidアニメーションですので、当然問題なくリターゲットしてくれます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878081/30a0430b-96d1-e148-680b-6208b866242d.gif" alt="WalkHappyのプロンプトで生成されたAnimationClipを、SDUnityChan,UnityChan,Robotに流した動画", title="WalkHappyのAnimationClipを流す", width=512>

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878081/ae93c98f-431a-bf68-45b9-21fc59ae6e71.gif" alt="Rollのプロンプトで生成されたAnimationClipを、SDUnityChan,UnityChan,Robotに流した動画", title="RollのAnimationClipを流す", width=512>

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878081/dacb7cee-683c-a0c1-e91d-4aa275f9482b.gif" alt="ThumbsUpのプロンプトで生成されたAnimationClipを、SDUnityChan,UnityChan,Robotに流した動画", title="ThumbsUpのAnimationClipを流す", width=512>

# 感想
歩きや前転など、汎用的なモーションを気軽に作れるのは非常に便利だと思います。
Unityエディタのみで、誰でも簡単に、数秒で生成できることは、イテレーションの観点から何にも変えられないメリットだと思います。
生成が難しいアニメーションでも、ある程度修正可能な点も素晴らしいと思います。

しかし何度生成しても足の接地感は気になりました。
また修正画面においてはいくつかの不便を感じてしまいました、主に感じた点は以下です。
(私が操作方法に気がついていないだけであれば申し訳ないです)
- 指の編集が出来ない
- ローカル回転を直接制御できない骨がある
- アニメーションカーブを確認する事ができない
- タイミングを数値で調整する事ができない
- FullBodyIKのように、1つのコントローラの操作で全身が動く。この際に再推定が走っているのかかなり重い
- SceneViewと視点操作方法が異なる
- Ctrl+Zの戻る操作が使えず、画面上の戻るボタンを押す必要がある

微細な調整が難しく、商業レベルで使うのはかなり難しいと感じます。
他のAIサービスと同様に「エンジニアがモック開発で使うくらいならできるかも」くらいの精度だと感じました。
とは言え「歩き」「武器攻撃」などのベーシックなアニメーションはAssetStoreに並んでいますし、UnityChanのパッケージにもいくつか含まれているので、基本的にはそれらを使用させていただくのがいいと思います。
望みのアニメーションが見つからない場合の選択肢の1つとしては覚えておこうと思います。

あとすごく細かいですが、セッション単位で.assetファイルが生成される点は正しいのかは気になりました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878081/b742c6f7-5a50-f36c-b7c4-1075a8d3ef2c.png" alt="Assets/MuseAnimateSessinsフォルダが生成され、Session.assetファイルが複数個作成されていスクショ", title="Session.assetファイルが複数個作成されていスクショ", width=256>

また精度向上はもちろん、足滑り、カクつきを抑えるなどのオプションや、全ての骨のローカル回転を指定できるモードがほしいと感じました。
他のサービスでは画像や動画をヒントにしてアニメーションを生成してくれるものもあるので、そういったアプローチにも期待したいです。

いずれにしても記事執筆時点ではPreviewパッケージなので、今後に期待したいと思います。
個人的にはとても面白い取り組みだと思うので、アップデートがあれば追っていきたいです。

# その他リンク
https://unity-chan.com/contents/guideline/
https://unity-chan.com/download/releaseNote.php?id=UnityChan
https://unity-chan.com/download/releaseNote.php?id=SDUnityChan
https://assetstore.unity.com/packages/3d/characters/robots/robot-kyle-urp-4696?locale=ja-JP