Cascadeur でモーションを作るための覚え書き

https://twitter.com/koorinonaka/status/1645127953511251969

今回作ったモーション、工程毎でやったことを知見としてまとめます。

# Cascadeur って？
<iframe width="560" height="315" src="https://www.youtube.com/embed/b3OCTbT1NP4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
物理挙動を即時反映しながら調整できる、アニメーション作成ソフトウェアです。フレーム間の動きを滑らかに繋げたり、ポージングの調整を行うなど、様々な工程において AI（機械学習ではない）の力を感じさせてくれる、とても強力なツールだと思います。

カスケーダーと読む。多分。

# 動画を参考にモーションをトレースする
まずは動画を見ながら、モーションの動きを頼りに作っていくのが簡単です。

https://www.youtube.com/@MotionActorInc/about

> チャンネル内の動画はトレスフリー・アレンジフリーです。
> イラストやゲーム、アニメなどへの利用はご自由にどうぞ〜
> （ご利用いただいた旨を紹介いただけたら嬉しいです！）

大変ありがたいことに、参考にできる動画が多数公開されています。前後左右のカットもあるのが嬉しい！ちなみに [Cascadeur 公式チュートリアル](https://www.youtube.com/watch?v=gGUlM5JUOPc) でも使われています。

<iframe width="560" height="315" src="https://www.youtube.com/embed/f7AhowCYh4E" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
今回はこちらの動画を使います。

## リファレンス動画をインポートする
![00c68f4429068f7cbd8832b62f068a94.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41105/d8a948ff-5533-65e0-30a9-3ab5ae1ea176.gif)
動画をインポートすると、連番化された画像に変換されます。キーフレームがどこにあるのか、どの程度の尺間で作っていけばよいのか、などの指標になります。
![b6dc78f74c9375637e856e1c8184bfd4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41105/3fd135b8-4c8f-52fe-f6c0-44b8a477df53.png)
`File` `Import` `Reference video` を選択します。`Source` から動画を選択し、ロードされると以下項目が設定できるようになります。
- `Frames path` 連番化された画像の配置フォルダ。それなりに枚数が作成されるので、長い場合は `From` `To` で調整しましょう。
- `From` `To` 動画尺の指定。`Timestamp [Frame Number]` が右に表示されるので、必要なフレームで抜き出します

実行するとアウトライナに `MeshObject(0)` というプレーンメッシュが追加されます。見やすい位置やスケールを調整しましょう。尺を調整したい場合は、`MeshObject(0)` を選択して再度インポートすれば更新されます。

# 最初のポーズを作成する
まずは 0 フレーム目のポージングを作成していきます。

## オートポージングリグを使おう！
Cascadeur の特徴である、物理計算を元にポージングが反映されるリグです。

https://twitter.com/XXeichemXX/status/1626006763073073152

とても分かりやすいプレゼン動画！数種類のリグがプリセットで用意されていますが、まずはオートポージングで動かすのが簡単です。

### ポーズに必要なポイントを固定する
![9985b82ec994c51256b5ec463b26d834.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41105/b5a6c985-6544-fcc4-1c14-d6f4c5687912.png)
オートポージングリグでは、固定された（キーが打たれた）ポイントを元にポーズが計算されます。固定されていないポイントでは、ニュートラル（自然体）な位置回転が適用されます。これらは青色/緑色で色分けがされており、`Shift + Z` で切り替えができます。
![3f5a79cb833946ee5df5b20e297cd0da.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41105/7763cc68-ce68-4c53-da47-1e7ee71f110e.gif)
右足を動かしたときのポーズ計算の違い。腰のポイントを固定すると、上半身や左足の動きが制限されていることが分かります。
![6541ce74ae87f00f691e88d75d289c04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41105/ed07469d-6c08-954d-f495-afa456c1b907.png)
違和感を感じたら一旦ポイント固定を消してみる。固定されたポイント（画像では顔の向き、腰の位置、左右の手の位置）により、（この場合は左手が前に出ているので、ヘソの向きは少し右寄りに）自動でポージングを計算してくれます。
まずは大まかにどんなポーズにしたいのか、主要なポイントを入力しつつポーズを作っていきます。そのあとサブポイントで調整、という具合で進めるとよさそうです。**固定してもしなくてもポージングにほとんど変化がないポイントは外しておくと、次のキーフレームへの繋がりがスムーズになります**。

### 使い分けが大事
オートポージングはラフな作業に適していますが、細かい作業には向いていません。ブラッシュアップではポイントコントローラー、手のポージングではボックスコントローラーを使うのがよさそうです。

## Pivot で動かす
「腕全体で回したい」「つま先を固定しつつ足を持ち上げたい」など、とある基点を元に回転させたい場合。
![765e37337fde0a22d73468aa38edf92d.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41105/638b1c4f-127f-c69b-6e9d-029e9a1720b3.gif)
動かしたいポイントを選択します。支点となるポイントを右クリックで選択すると、枢軸として作用します。「ポイントを指定位置に持っていき、回転を調整する」よりも自然な動作が作れます。

# ブロッキングを作成する

<details><summary>ブロッキングってなんやねん、って人向け</summary>

![7395af84ba14950f1452ef8bee203f1d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41105/01dfa7cf-9b34-d650-df9e-954366dbf6e7.png)

</details>

## キーフレームを探す

![db3749b9a22e0f7bdd53b6090af21360.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41105/abf8de04-752c-92b3-607a-c4fb591cf2d5.png)
ふむふむ・・・。私はアニメーターではないので、アドバイスというには遜色があるかもしれませんが、以下の点を意識しています。
![e5ee464ff6aae11d6c9e8cf37bdfb280.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41105/4b4ee56a-2eb5-08f7-64ef-840753c1068e.gif)
- 足の接地や手の動きが切り替わるフレーム
- 動きが止まり、ポージングが印象的になるフレーム

![430183df68dfa3a577db1ab30d53c50b.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41105/f9037c2f-6b13-72d7-18c3-c6f43579c95b.gif)
（ゼェゼェ・・・）
大まかにキーフレームを作成します。細かい調整は後回しで、まずは全体感の作成です。

# インターポレーションの適用
![545ca5b0535d005b3982c46562a66956.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41105/256b2fa4-e02a-23c0-b150-83d173096e26.png)
トラック全体を選択（タイムラインのトラック名をクリック）し、タイムライン上部の `Interpolation on interval` を `Bezier clamped` に変更します。キーフレーム間のポージングを繋いで補完する機能です。
![1ddb510be4577ecfffa4748ac1ad0f30.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41105/f239404a-3ac3-52ae-5546-41ab44c8e268.gif)
これだけでもかなり、モーションらしくなってきたんじゃないでしょうか？

## 腕には FK を適用する
フレーム間が補完されて滑らかな動作になりましたが、腕は想定通りに動いていません。
これは `IK` の働きによるものです。タイムラインのトラックは通常 `IK` で設定されています。

<details><summary>IK と FK の概略</summary>

![3188b7fae9b57414ef743bbced62c379.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41105/6c4ba063-2953-ba1c-fd15-9ec7f4bce4cc.png)

</details>

![172035ab4200ff6a0ca99cc14c681546.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41105/18666784-3660-da34-efe0-466349190531.png)
トラックを開いて、`Arms` を押すと、全フレームが選択されます。上部の `IK` となっている箇所を `FK` に切り替えます。

:::note info
腕部位はとりあえず、全フレーム `FK` で OK
:::

![d725fab2d2401bfe9554bf9558805e00.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41105/428aa305-20fb-ad94-29d8-2a67db7ffe2b.gif)
上手く回転するようになりました。
![88c132f116dce1e5ebe15b7cf820898e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41105/f218dc0a-e18b-9525-17a7-8b9efc75b359.png)
しかし、細かく見ると変なポージングのフレームが存在するので、補完が上手くいくように調整します。特に武器を振るなど、「素早く」且つ「綺麗な軌跡を描く」部分は中間フレームを足す必要があります。

## フレーム間を可視化する機能
時間軸でどういった変化が発生しているのか、可視化できる便利な機能です。

### Ghost（残像）の表示
![f6f0f167d90fa323ca6606458e06a6c7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41105/22c4c9a2-105a-0db2-e6d5-bbf018e211ef.png)
前後のフレーム（またはキーフレーム）を残像として表示します。次に取るべきポーズ、位置間隔のおおよその目安とすることができます。
それぞれのボタンは「表示フレームの指定」、左右の数値は「フレーム数の設定」。右上の鍵マークはキーフレームのみをフィルタすることができます。
特に「接地した足の踏ん張りがある」「頭部は激しく動かさない」など、前後のフレームで位置を合わせるときに重宝します。

### Trajectory（軌跡）の表示
![bf9312a2cf86ec02fda6d931e0113013.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41105/e2ef288a-7369-65f3-a802-597b2327146e.png)
指定したフレーム間で、ポイント位置の軌跡を表示します。「勾配なくなだらかな軌跡に」「フレーム間の間隔を調整」することで自然な動きに近づきます。

## 伸びきった破綻を修正する
![e5ee464ff6aae11d6c9e8cf37bdfb280.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41105/93f3fb59-4a31-231d-446d-92a5e161489d.gif)
少し無理なポージングをする際、手や足先などが伸びきって破綻してしまう場合があります。
こうしたエラーは後述の `Auto Physics` で問題になりがちなので先に潰します。腕を伸ばす場合は、肩の位置を調整する、などするとよさそうです。中間含め、全てのフレームで問題がないか確認してください。

# Auto Physics の適用
![a700e950bede3992cb1f1490c40f3471.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41105/767c8a11-2b01-6d9e-4983-b49df9caec21.png)
ここまで来たらいよいよ `Auto Physics` の適用です。各部位の軌跡やポージングを、いい感じに整えてくれる機能です。
![2a8f41ca2396f67e5cecfb97a8a28e08.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41105/06e3fab9-75fe-0c7f-1aad-8e45d7e7f0fe.gif)
左が元の、右が適用後。腰の動きなど、滑らかなカーブで修正されているのが分かります。
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f34313130352f66626264323366302d663664342d313164362d323538622d6233313135646438306362302e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41105/e5ee06ea-c595-a27d-5b88-0176ae5ea1f3.png)
`Physics settings` の `Ghost offset` を OFF にして、元のメッシュ位置と重ね合わせます。適用するとどうなるのか、全フレームでチェックしてください。問題なければ `Snap to Auto Physics` を押し、各フレームに物理計算を適用します。

:::note info
![049d63278a423fbde9d5e00711bf53c2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41105/87450f63-1c4b-cee1-7853-7675dc31f7ab.png)
デフォルトでは `Fixing interpolation on change interval` が ON になっているので、全フレームが固定（緑色に）されてしまい、その後の修正を加えることが難しくなってしまいます。各キーフレームのみに適用する場合は OFF にしてください。
:::

## Auto Physics で荒ぶるときは
割とよく荒ぶる（見た目が崩れる）ので解決方法に悩まされましたが、大まかに次の2点が原因と言えそうです。

### モーションの破綻がある
キーフレームではうまくポージングできていても、補完された中間フレームで破綻が発生している場合があります。前後のキーフレームでポージングを修正してください。肩や腰のポイントとの位置関係を見直すと、期待した動作になるかと思います。
![24ae9f79603aaa830a06d8e800bfc85c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41105/418cffc0-e759-fc97-fb73-3c199e230517.png)
右足が伸びきった状態。前後のフレームで腰を落とす、右足を手前に引くなどするとよさそうです。

### フルクラムポイントの判定
足の接地判定に誤りがある場合があります。いい感じに判定を取ってくれるのですが、たびたび期待と違う動作をするので確認が必要です。
![86a6a585d61f4f5806321d7a906aa26c.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41105/dcc08760-24b7-db22-f235-03c70039c3f2.gif)
`Auto Physics` モードの時、タイムラインの上に以下の状態が表示されます。
- 両足が接地していると緑
- 片足が離れていると黄
- 両足が離れているとオレンジ

![792b67ee78580285544ce593f07098f7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41105/2ccafc35-eb80-0fac-4d8f-14e0e16c43d9.png)
接地面で緑のエリアが表示される。キーフレーム毎に確認して、この状態が一致していない場合は修正する必要があります。
![84014d3de7d60e4ffd1218ce6b79c156.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41105/17ebcec6-a8bc-74cc-e757-67a7fbc68766.png)
修正したいポイントを選択して、
![64a9f3f9804a113a4c313ef3a0874a2b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41105/16d53878-77b1-06b0-df83-e617de3cb499.png)
`Object properties` で `Fulcrum point` の設定。`Fulcrum state` を「接地していたら `Enforce`」「接地していなければ `NotFulcrum`」に変更して状態を強制します。既定の `Fulcrum` は Cascadeur 側で判定してくれるモードです。多分。

:::note warn
基本的には上手く判定してくれるはずで、何かアニメの破綻がないか見直した方がよいかもしれません。
:::

# RootMotion を作成する
ゲームで `Pawn` を動かすためのモーションを作成します。

<details><summary>RootMotion の概略</summary>

![0af5e1b2e942695d9e104c036cd12906.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41105/294156ce-311f-7e82-49ef-d93009991a73.png)

</details>

![8b77cd99950ad95972de7caa5fe24f54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41105/d4291ed6-adb5-376d-a1f2-c1d1d3037c6d.png)
1. `Scene settings` から `Copier` の設定を変更します
    1. `Rotate` の `Whole` を OFF（モーションによっては ON）
    1. `Position` は `Z` のみ ON。横軸の移動がある場合は `X` も ON、けどノイズが多いので手調整がよいかも。縦軸の移動も基本的には手付けになる。
1. `Fixing interpolation on change interval` を OFF
    1. `Auto Physics の適用` で触れたように、打たれたキーの Interpolation で調整されてしまうため
1. 全フレームを選択し、アウトライナから `Center of mass`（重心）を選択する
1. `Edit` `Copy interval` で区間内の値をコピー
1. アウトライナから `root` を選択して、`Paste Interval` で張り付け
![bea0bb0e84c999b1bb2bd502451c4696.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41105/e3f01b2d-36bd-53bc-a4de-b2f0a478dc84.png)
重心位置で RootMotion がコピーされます。`root` は表示されないため、ジョイントリグモードで確認する。

:::note info
ゲームにおいて `RootMotion` の動きはとても重要です。キャラ操作の触り感やスペックなどに強く影響します。大まかには `pelvis` や `center of mass` の位置で問題ありませんが、モーションによっては手動での調整が必要な場合もありそうです。
:::

# FBX 形式でエクスポート
`File` `Export Fbx/Dae` `Without Meshes` で完了！

# 参考
なんといっても公式のチュートリアルが参考になります。というかここに書いたことは全てチュートリアルから学びました。次は `Secondary Motion` について理解を深められたらいいなぁ。

<iframe width="560" height="315" src="https://www.youtube.com/embed/dztpzcyXMDw" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
最初に Cascadeur を触る人にオススメ。

<iframe width="560" height="315" src="https://www.youtube.com/embed/gGUlM5JUOPc" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
今回のように動画をリファレンスにしつつ、一工程ずつを詳しく解説。

<iframe width="560" height="315" src="https://www.youtube.com/embed/3PmZdd2Ls3U" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
歩き動作、ループ再生の作り方の解説。