APEX Scene Animate [Mardini2024]

これはMardini2024のDay18 APEX Scene Animateの動画を視聴してまとめたものです。

[動画](https://www.youtube.com/watch?v=PFwe0CflT-8)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/071fac89-cfbe-26dd-6468-803b45d8fde1.png)

公式のサンプルファイル 　今回はありません

[Day17 Flip Solver](https://qiita.com/jyouryuusui/items/c1927d6815e3e25bc144) |　Day18 APEX Scene Animate  |　[Day19 Joint Capture Biharmonic](https://qiita.com/jyouryuusui/items/1022cae78638ab9b27c6)

APEX Scene Animateノードは、APEXアニメーションのコントロールを行うことができます

[APEX Scene Animateのヘルプ](https://www.sidefx.com/docs/houdini/nodes/sop/apex--sceneanimate.html)


# 概要

- APEX Scene Animateノードを使用するために、Animateデスクトップに切り替えると便利です
- Electraジオメトリを利用して検証します
- Rig Treeタブではリグ（Base.rig）、スケルトン（Base.skel）、コントロールシェイプ（controlshapelibrary）、ベースシェイプ(Base.shp)を確認できます
- APEX Scene Animateノードに接続し、IKコントロールを使用してアニメーションをつけることができます
- Kボタンでキーフレームを設定し、ローカルスペースとワールドスペースを切り替えて複数のコントロールを一緒に移動することができます
- Selection Setsを作成し、上半身全体を一緒に動かすことができます
- Locatorをシーンに追加し、ピボットポイントやSelection Setsとして使用できます
- Constrainsを使用して2つのコントロールを結びつけることができます
- ダイナミックモーションツールを使用してジャンプアニメーションを作成できます
- APEX Scene Invokeノードを使用してアニメーションを出力します
- ラグドールフィジックスのドキュメントは少ないそうです
- SideFX Content LibraryからAPEXの使い方を学ぶことができます

# APEX Scene Animate

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/28f83484-a186-6dfa-eec3-e21d7945fc96.png)

## Animateデスクトップへの切り替え

まずデスクトップモードをAnimateに切り替えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/cd418ba5-359f-f89e-554d-56b8c3be8741.png)

下のウィンドウを最小化し、パースペクティブだけになるようにシングルビューに切り替えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/d850c906-0655-409d-20c9-3d14c3bf9fd5.png)


## Electraジオメトリの設定

objネットワークでElectraジオメトリを追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/566f3fd9-e408-b097-1ecd-f21968d87df3.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/92d5d464-0d69-fa0c-282c-f415dca70d65.png)

testgeometry_electra1ノードの中に潜り、Test Geometry Electraを見ていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/6e93a3ca-c04d-d9b4-c1b0-02622c780ca1.png)

初期状態のOutputであるSkin SurfaceをAPEX Sceneに変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/d303f8c0-1474-3870-230e-a1d5fac0fe65.png)

これでAPEX Scene Animateノードと一緒に使用するための必要な設定が全て初期化されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/fe971a68-e996-e61c-47f7-31d0e9bec848.png)

NodeInfoを確認すると、Packed Geosが含まれていることを確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/864c56e0-0c8c-00b6-fa30-8a467c573183.png)

何が起こっているのかを理解するために、Rig Treeペインを追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/252dc9c3-e6c1-a9c8-c7e5-a99a54cc184c.png)

electra_charの中には、リグ（Base.rig）、スケルトン（Base.skel）、コントロールシェイプ（controlshapelibrary）、ベースシェイプ(Base.shp)があります。

これらは実際にアニメーションを作成するために使用するものです。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/a031cb8a-2a83-41ce-1e0b-660c0b50e9eb.png)

## APEX Scene Animateノードの使用

APEX Scene AnimateをElectraノードの最初の出力に接続します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/da8a4b0b-9989-4396-3822-55f92a3e4ed6.png)

ここからアニメーションを開始できます。
APEX Scene Animate作成時に左側の「Animate」状態は自動で有効になります。これが有効だと、コントロールハンドルがすべて表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/c138d29c-417d-f971-651f-c51936761cba.png)

コントロールハンドル

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/97104dd2-0613-4be0-58e9-b0e0b02b8e32.png)

## IKコントロール

手の上にIKコントロールがたくさんあります。
例えば、手をクリックして、重心を動かすことができます。

![apex1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/8e85d7f9-b83f-12a5-1b1c-bbecb2c82ca1.gif)


膝と肘用のポールは膝がどこを向いているのかを制御します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/0d785bf4-9fc4-8ef1-cebb-699d343f5fd1.png)

上部には鎖骨ローテーターがあり、肩を制御します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/bb2e5259-72d9-2c21-7d8e-cc176dbc7491.png)

## キーフレームの設定

アニメーションを行うために、キーフレームを設定します。移動させたら、Kキーを押してキーフレームを設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/f25eb070-2d57-cdf8-77b8-6754c2d5b4e5.png)

しかし、キーフレーム化されるのは、事前に選択したものだけに限定されます。(今回は腰を選択してキーフレーム化しましたが、手に移動してみるとキーフレームが無く、それぞれ独立していることがわかります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/cf8b3510-3336-e5ef-f8bd-22a4363742ec.png)


これをうまく使用する方法は、すべてのコントロールをピン留めすることです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/02c17b49-8702-04ef-1b20-73cf36068b69.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/e382ac41-5533-a096-9cbe-5d23babc1da0.png)

ピン留め状態にすると、左側のチャンネルリストにすべてポップアップされます。
変更を加えてKを押すと、すべてがキーフレームされます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/ed93a9e8-07ae-de20-f4f6-decc3e75c20d.png)

腰を上に移動し、そこでキーフレームを設定します。（再びKを押します）



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/9712ac12-e117-d51e-85e2-0312b78549b2.png)

上記の画像のとおり、手がその場に残されているという問題があります。
（なぜなら、独自のIKに従うからです）

この状態を解消させるには、Shift+クリックして複数のハンドルを選択することです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/12808e37-8ee8-95c2-ee0f-ede34249ca08.png)

## ローカル座標とワールド座標の切り替え

Shift+クリックして、腰・右手・左手の3つを選択します。
その３つをすべて上に移動しようとすると、あらぬ方向に移動してしまう問題が生じます。これは、それぞれがローカル座標で移動しているためです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/9780b0bb-1eb3-25c2-e41c-e1e5f2d5693c.png)

必要に応じて、右クリックからAlignmentMode切り替え（もしくはショートカットのM）でワールド座標にアライメント切り替えをすると、３つ一緒に上に移動できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/ce199740-5949-9848-dde9-88600e973e94.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/3d26ae9c-bf27-58d8-f436-2ba1899add4c.png)

動画ではフレーム1でしゃがんで、フレーム24で上に移動しています。
とはいえ、この結果はあなたが正確に望むものではないかもしれません。

## Selection Sets

もっと自然にアニメーションを行う良い方法は、一緒に移動したい上半身のすべてを含めることです。
両手を選択し、胴体も選択します。（先程は腰なのでその一つ上の場所です）
そして、Selection Setsを右クリックして、Create Set from Selected（選択したものからセットを作成）します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/62d48942-0884-3f7f-a443-409e55086a9e.png)

これによりset1が作成され、ダブルクリックでUpper_bodyに名前変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/6454138a-f610-091c-fec2-7261dc288505.png)

Upper_bodyをクリックすると、それら3つを同時に選択できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/a5270193-999d-68d1-6e0d-03b776681eea.png)


作成したあとからSelection Setsに追加することもできます。
例えば、Upper_bodyに肘のポールを追加したい場合、Shift+クリックでこのポール両方を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/798a687e-eb20-65bd-6816-252d3d7fb47e.png)


そして、Upper_bodyを右クリックし、「Add Selection Sets」で追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/9625e853-c41d-9d0a-2d05-84865ec7e817.png)

選択された２つのポールが追加され、５つになったことが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/272c0f41-b646-e4b6-ae4b-36100d3b8fd1.png)

これでUpper_bodyを選択するたびに、上半身を一括で移動させることができます。



## Locator（ロケーター）の使用

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/d6796d34-5fe9-e49f-b961-1fc80d7374cb.png)

次にLocatorというツールを見てみましょう。
ビューポートの上部で、Locatorに移動できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/d888d66e-9448-660f-48fb-1d0c81ef3b83.png)


何も選択せずにHを押すと、シーンにLocatorが追加されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/437f475b-de41-36b9-64aa-b82516a2e8ba.png)

Locatorをピボットポイントとして使用できます。
また、Selection Setsとしても使用できます。

Locatorを両手の中心に移動しておきます。
そのうえで両手を選択し、加えてLocatorもShift+クリックで選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/c0b9c9f4-fc5e-9015-ee3a-72ce3bacd68e.png)

先ほどと同様に右クリックからCreate Set from SelectedでSet1を作成し、Hand_pullに名前を変更します。


![apex2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/b278944f-dcb8-6f7e-69b9-d16954451913.gif)

これでLocatorを選択するとHand_pullも選択されるため、両手を簡単に選択して移動できるようになります。毎回右手と左手を選択する手間が省けます。

Selection SetsとLocatorについての注意点は、それ自体がピボットを持っている点です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/34280d40-84d9-24ec-bd3b-2563a99df54a.png)

Hand_pullまたはUpper_bodyを選択して、コントロールしているピボットを見ていきます。

そこで新しいペインに移動します。New Pane Tab Type > Animation > APEX Selection Sets　を選びます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/83754c0c-2d91-6c2f-eefb-3e6c7f504928.png)

Selection Sets[APEX]ペインのSelection Sets下に、Upper_bodyとHand_pullがあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/9a7f0776-d42c-926d-1194-6eda9062efca.png)

このelectraとBaseを拡張すると、黄色のマーカーが出てきます。これがピボットを保持しています。以下の図でいうと、Baseの中にあるspine_mid、Locatorの中にあるLocator_0です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/d6935f91-70c0-f9a5-1406-8f3bae450860.png)

一度Selection Setsを作ったあとでもピボットを変更することができます。
異なる場所にピボットを作りたい場合は、右クリックからMake Primary Controlを選択することで切り替えられます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/fec494c2-0086-9a5f-c244-74c1cbc020a3.png)

## モードの切替

ビューモードに切り替えると、キャラクターがアニメーションを失います。
しかし、心配しないでください。アニメーションが消えたわけではありません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/6497aaac-d639-2670-51ed-24e1b70674a8.png)


ポーズモードに戻ると、再び表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/d0e0753e-8704-4645-eaf2-7678459bb785.png)

これがAPEXの仕組みです。
すべてはこのsceneanimateノードの中に含まれており、作業が終了したら実際にアニメーションを呼び出して、アニメーションをロックする必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/ea0e2156-e16a-5133-df6c-1363123b9409.png)

## Constraintsの使用

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/b797d440-8b23-be03-6dc8-e330a3052d0b.png)


次に見るのは、Constraintsです。
Constraintsは、任意の2つのコントロールを拘束した状態にするのに役立ちます。
まず両手を前に移動させ、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/69c614bc-d075-11e5-0224-edf5a93fc0b9.png)

両手を選択した状態でHを押します。
そうすると、2つの間にConstraintsされた接続が作成されます。
それらの間を走る点線で確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/2abceb28-de2a-17c4-316f-30dd578b38ac.png)


そして、ポーズモードで右手か左手どちらかを動かすと、もう1つの手もConstraintsされているのがわかります。

![apex3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/c8f9487d-d2e4-0409-a1a5-94e7c728f807.gif)

この機能はキャラクターが何かを持っている場合に役立ちます。

次はConstraintsの簡単な解除方法についてです。
Selection SetsのAll_Controlsをクリックし、Ctrl+Hを押すと、すべてのConstraintsが削除されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/63d1d810-0b85-7d59-63b4-e2fa1a1c483f.png)


これで、再び独立した状態で手が動かせるようになりました。


## ダイナミックモーションの作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/7a26cb3d-190d-ecdc-a43a-828cc2c37e5f.png)


次にダイナミックモーションを見ていきます。
ダイナミックモーションを表示するために、非常に基本的なジャンプアニメーションを作成します。（ジャンプ前、ジャンプ中、ジャンプ後の3つの状態を作成します。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/f379b1af-31da-9941-9ec9-75d75e7a8162.png)

ダイナミックモーションツールに移動します。
ジャンプ前のフレームで重心（spine_mid）を選択し、Hを押します。
すると、黄色い新しい放物線運動を開始できます。
ここで気をつけるのが、ジャンプ後のフレーム（最後のフレーム）に移動して、最後にもう一度Hを押します。
そうすると、白色のカーブとカーブの天井となるGridが得られます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/e490a78d-ec85-9e47-b3bc-2ea53e2c57e3.png)


これで、キャラクターはジャンプするときにそのカーブに沿って移動し、このカーブを調整してジャンプの高さを調整できます。
（ジャンプ時のカーブをスムーズにしてくれます）

![apex4.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/d81eccdd-d445-644d-d264-c72fb9d2fb2b.gif)

アニメーションに満足したら、Ctrl+Gを押して、「Bake to Keys」でキーにベイクします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/4fb3aa35-2279-33ff-872c-d94264c66273.png)

これにより、間に多くのキーフレームが追加され、アニメーションが更新されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/7c80e2d5-e090-cbe6-d407-57685fdeda1d.png)


## APEX Scene Invokeノードの使用

アニメーションができたら、Scene Invokeを使用できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/0f87ef67-bcb4-5660-1543-119ea26882bb.png)

sceneanimateノードをScene Invokeの最初の入力に接続します。
その後に、Output All Character Shapesボタンを押すことで、これでアニメーションが出力されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/f8086baa-26ef-4f38-ad7e-967e21887254.png)


また、Nodeinfoを確認すると2つのPacedGeoの形式になっているのがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/ad38cdd2-0b11-4d9c-e0e8-cc5da5422103.png)


そこで、Unpack Folderノードを使用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/0b2d6427-dcb8-20c4-e504-f4b05bc92544.png)


このノードの上部にアスタリスクを追加します。
デフォルトが、（/*）なので、（/**）に変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/7ae1c445-7ffc-2337-da34-d5a945748422.png)

これにより、2レベルのアンパックが行われ、ここからさらに2つのUnpackを行ってジオメトリに戻ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/f9dd43d1-bb11-bf90-5729-dedf06a41987.png)

## ラグドールフィジックスの設定

ラグドールフィジックスの設定は少し手間がかかりますが、Configure Joint Limitsノードのヘルプファイルに参考情報があります。（もともとあまりドキュメントがないらしいです）

https://www.sidefx.com/docs/houdini/nodes/sop/kinefx--configurejointlimits.html

Electraモデルにラグドールフィジックスを適用する方法を学ぶことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/d86b9fcf-9f40-c3a7-734a-ad51d07dc35f.png)

## その他のジオメトリの使用

SideFX Content LibraryからダウンロードできるElectraリグやLuchador、Chickenなどのジオメトリを使用して、APEXの使い方を学ぶことができます。

https://www.sidefx.com/ja/contentlibrary/

特に以下のライブラリーがおすすめとのことです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/04357b5c-8a3c-059d-428f-638d77979007.png)

https://www.sidefx.com/ja/contentlibrary/electra-rig/

https://www.sidefx.com/ja/contentlibrary/luchador-chicken/


APEX PillowやKineFX/APEXワークフローも参考になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/e9af2a6f-11bd-dcc3-a98a-d52e54d68a0e.png)

https://www.sidefx.com/ja/contentlibrary/apex-pillow/

https://www.sidefx.com/ja/contentlibrary/kinefxapex-workflow/



amaterasさんの「[APEX解体新書](https://qiita.com/amateras/items/e576dcb144390407b74b)」では、さらに詳しい解説（APEXの概念からグラフの読み書き、リグの組み方までの工程）が記事になっていますので、そちらもご参照ください。