アクション状態は、特定のデフォーマが ICE ツリー内でアニメートされる方法をコントロールするために使用できるフレームワークです。これは、基本的に状態システムであり、どのデフォーマでどのアクション状態が使用されているかを継続的に追跡します。ユーザは、アクション状態が切り替わる条件の ICE ロジックと、デフォーマのアニメーションをどのようにブレンドするかを指定します。
アクション状態は、腕の向きを操作して手を振らせたり、アクターに頭をかかせたりするために、特定のデフォーマに対するコンストレイントとともに使用することになるでしょう。アクション ソースからアニメーション データを取得して特定のデフォーマを操作することもできます(以下を参照)。たとえば、アクターが走行ポーズ状態にあるときに、アクターの走行に合わせて上半身デフォーマだけを回転させる「胴のひねり」アクション ソースにブレンドすることもできます。
次の例に、アクション状態を使用するシンプルな方法を示します。簡単に言うと、群集シミュレーションでは、アクターは通常の歩行運動ポーズ状態で定義された歩行サイクルにあります。アクターが歩行している間にアクター インスタンス(パーティクル)がグローバル Z 軸の特定の位置に達すると、アクターの右腕が上へ回転して敬礼ポーズになります。Z 軸の少し先に進んだ時点で、アクターの腕が下へ回転して歩行サイクルにおける通常の位置に戻ります。
次に、アクション状態の変化を ICE ツリーで示します。この図の各番号は、図の下の手順の番号に対応しています。
この例をベースとして使用する場合、基本的な作業の流れは次のとおりです。
1 |
シミュレーション ポイント クラウドの[シミュレーション](Simulation)領域で、ICE ツリーを作成します。 アクターのポーズ状態データが最初に計算されるようにするために、このツリーをスケルトン シミュレーションの ICE ツリーの上部に配置します。 |
2 |
アクション状態を使用する条件のロジックを作成します。 この例では、グローバル Z 軸上でパーティクル(アクター インスタンス)の位置が 35 ユニットより高く 50 ユニットより低いというのが条件です。 |
3 |
[アクション状態の設定](Set Action State) コンパウンドで、このロジックを、[新しい状態 ID](New State ID)として定義してある最初のアクション状態をアクティブ化するためのトリガーとして使用します。 この例では、[新しい状態 ID](New State ID)は、定義済みの最初のアクション状態に合わせて 1 に設定されています。 |
4 |
作成する最初の状態の Action State コンパウンドを取得し、そのオプションを設定します。 この例では、[アクション状態 ID](Action State ID)は 1 に設定され、[トランジション期間](Transition Duration)は 10 フレームに設定されています。 |
5 |
コンストレイントまたはアニメートする各アクター リグ プロキシ デフォーマを取得します。 この例では、RightArm デフォーマと RightForearm デフォーマがコンストレイントされます。 |
6 |
既定のアニメーションの操作に使用するコンストレイントを追加します。アクション ソース内のアニメートされた特定のパラメータを使用してアニメーションを操作することも可能です。詳細は、次のセクションを参照してください。 この例では、Crowd Orientation Constraint コンパウンドが使用されて、各デフォーマを回転させ、敬礼ポーズの状態にしています。RightArm が[回転 Z](Rotation Z)値の -15 にコンストレイントされ、RightForearm が[回転 Z](Rotation Z)値の -150 にコンストレイントされています。 |
7 |
Action State Transition Weight コンパウンドを使用し、デフォーマのオリジナルのポーズから、このアクション状態で定義するポーズまでの値をブレンドします。 この例では、歩行サイクルでの腕デフォーマの向きが、コンストレイントで定義される向きとブレンドされます。Fcurve ノードによって、トランジションのイーズインがスムーズになります。 |
8 |
最初のアクション状態の[新しいアクション状態をトリガー](Trigger New Action State)をその次のものに設定するロジックを定義します。最初の Action State ノードで、[新しい状態 ID](New State ID)を、トリガーがアクティブになると同時に切り替えたいアクション状態の ID に設定します。 この例におけるロジックは、パーティクルのグローバル Z 軸での位置が 50 ユニットを超えると、それが引き金となり次のアクション状態(アクション状態 ID 2)が使用されるというものです。 |
9 |
トリガーされる次のアクション状態を作成します。 この例では、このアクション状態の ID は 2 です。ここで使用されているアニメーションは、基本的に、最初の状態で定義されているアニメーションの逆です。RightArm デフォーマと RightForearm デフォーマが回転され、歩行ポーズで定義されているそれらのオリジナルの位置に戻ります。 この例では、ブレンドをオリジナルの値に戻すために Subtract ノードで値 1 が使用されています。 |
アクション状態を使用する場合は、特定のデフォーマだけをアニメートするアクション ソースを使用して、それらのデフォーマのアニメーション(右腕を振るアニメーションなど)を操作できます。リグ プロキシ全体に影響を与えるアクション ソースを使用することもできますが、この場合はそのアクション ソース内の特定のアニメートされたパラメータだけにアクセスして一定のデフォーマをドライブする必要があります。オリジナル アクション ソースのどのフレームを使用するかを選択することも可能です。
オリジナル ソース モデルのアクション ソースを直接 ICE ツリーに取り込んでから、Get Action Source at Frame ノードを使用して、特定のフレームでアクション ソースから 1 つまたはすべてのアニメートされたパラメータを取得できます。このノードを使用する場合、データにアクセスするためにアクション ソースをロードしてポーズ状態を作成する必要はありません。ただし、アクション ソースの内容をよく把握しておく必要があり、アニメーション データを使用するために ICE 内で独自のロジックを設定する能力も必要です。
以下に、アクション ソース内のデータを使用してデフォーマのアニメーションを操作するために必要な作業の概略を示します。
この例では、左側の 3 つの腕デフォーマはそれぞれ Get Data ノードに存在し、向きコンストレイントを使用して設定されます。これらのデフォーマはすべて Execute ノードに接続されます。Execute ノードは、アクション状態システムの一部である Action State コンパウンドに接続されます。
使用するアニメーションが入った、オリジナル モデルのアクション ソースを取得します。このソースには、コントロールしたいデフォーマのアニメーションだけが含まれていても、リグ全体のアニメーションが含まれていてもかまいません。
次の図中の例では、「後頭部をかく」ためのアクション ソースがロードされています(2)。このアクション ソースには、アクターの左腕デフォーマのアニメートに使用されるアニメートされた腕回転パラメータが含まれています。
アクション ソースに含まれるフレームのすべてまたは一部を取得します。特定のフレームだけを使用する場合は、以下の図の例(3)に示されているように、使用するフレームを指定するロジックを作成してください。
Get Action Source at Frame ノードで、デフォーマのアニメーションを操作するために使用する特定のアニメートされたパラメータを取得します。[Explorer] > [このノードの項目リスト](Items list in this node)から選択してください。
この例では、各 Get Action Source at Frame ノード(4)が、コンストレイントされるアクターの左腕(上腕、前腕、および手)のデフォーマごとに、ローカルの[回転 X](Rotation X)のアニメートされたパラメータを取得します。
Get All Frames from Duration コンパウンドはファクトリ コンパウンドではなく、CrowdFX サンプル シーンの 1 つで使用できるコンパウンドです。
アニメートされた回転パラメータ(RBicep_kine_local_rotx など)を選択するとスカラが返されますが、文字列から軸(「x」など)を除去するとベクトルまたは回転タイプが返されます。回転タイプを取得するには、アクション ソースを保存する前にオリジナル アニメーションで回転順序にキーフレームを設定する必要があります。回転順序にキーを設定しなかった場合は、Euler to Rotation ノードを使用して回転タイプを取得できます。
Get Action Source at Frame ノードのアニメーション データをコンストレイント コンパウンドに接続するか、または他のロジックを使用して、デフォーマのアニメーションを操作します。
この例では、各 [群集の向きコンストレイント](Crowd Orientation Constraint) コンパウンドを使用して、その Get Action Source at Frame ノードから提供される回転値を持つ対応するデフォーマをコンストレイントしています。