アニメートする際は、コントロールのトランスフォーム空間を変更して、手でボディ部分や他のオブジェクトに触れたり、一緒に動かしたりするなど、さまざまな状況に適合させたい場合があります。このためにはコントロール内でプリセット コンストレイント システムを作成する必要があるため、リグの複雑度によっては解決の困難な問題となることがあります。
コントロールリグ空間の切り替え を行うことで、アニメーションのニーズに応じて、コントロールを他のリグ要素に簡単かつ動的に再ペアレント化することができます。空間は コントロールリグ アセット 内で事前に定義するか、シーケンサー 内で作成できるため、柔軟性があります。
このドキュメントでは、シーケンサーおよびコントロールリグにおける空間の切り替えの概要について説明します。
前提条件
- コントロールリグ アセット が作成済みであること。この詳細については、「コントロール リグ クイックスタート」ページを参照してください。
- アニメート時に空間を切り替える機能に [Animation Mode (アニメーション モード)] パネルからアクセスできること。そのためには [Animation Mode] を有効にしておく必要があります。
- シーケンサーに関する 基礎知識 があること。空間の切り替えは主に シーケンサー 内でのコントロールリグの使用に依存するためです。
シーケンサーにおける空間の切り替え
コントロールリグをアニメートする際に空間を切り替えるには、[Animation Mode] が有効な状態で [Animation (アニメーション)] パネルにアクセスします。このパネルの [Spaces (空間)] セクションをクリックして、空間を切り替えるためのインターフェースを表示します。
マウス カーソルを ビューポート に合わせて Tab キーを押すことで、一時的な [Spaces] メニューを開くこともできます。
親 (ペアレント) とワールド空間
デフォルトでは、[Parent (親)] と [World (ワールド)] という、コントロールに適用可能な 2 つの主要な空間があります。
通常のコントロール向けの空間はデフォルトで [Parent] に設定されます。これにより、コントロールはコントロールリグ アウトライナで定義された親空間内に配置されます。たとえば、Neck (首) コントロールを選択するとその親空間がハイライト表示され、それが現在のトランスフォーム空間であることを示します。これを [Anim Outliner (アニメーション アウトライナ)] 内の階層に相互に関連付けることができます。
[World] をクリックすると、選択したコントロールのトランスフォーム空間が変更され、絶対ワールド座標に相対するものとなります。事実上、これにより、選択しているあらゆるコントロールがコントロールリグ内の階層における位置から動的にペアレント解除されます。
カスタム空間
あらゆる コントロール、ボーン、または Null をトランスフォーム空間として使用できることで、コントロールを他のコントロールに動的に再ペアレント化できるため、空間の切り替えをさまざまな目的で使用することができます。
選択したコントロールにカスタム空間を加えるには、空間の ヘッダ メニュー にある [+ (追加)] アイコンをクリックし、目的の リグ要素 を選択します。これによって、選択可能な空間として空間のリストに追加されます。
ボーン、コントロール、または Null のいずれかをカスタム空間として選択することはできますが、再ペアレント時の循環リグ エラーを回避するために、通常は コントロール を選択することをお勧めします。
空間の切り替えをキーフレーム化する
空間のメリットの一つとして、アニメーション内の空間を変更できる点が挙げられます。キャラクターの手が接触ポイントにあり、これらのポイントをアニメートする際に便利です。
異なる空間を選択すると、そのコントロールの 空間キーフレーム と、そのコントロールのビジュアル位置を維持する補正 トランスフォーム キーフレーム が自動的に作成されます。また、それぞれの空間キーフレームでは、その空間の期間にわたってトラック上で固有の色を使用します。
コントロールによって空間が切り替わると、それらのコントロールがその新しい親のローカル空間を占有します。このため、それらのコントロールの空間座標は以前のものとは異なるものになります。単一フレームでは、このように空間の切り替えが行われます。カーブ エディタ でキーフレームを表示することで、これを可視化できます。
プレイヘッドを異なる空間のキーフレームに移動して親コントロールを操作することで、空間の切り替え機能をプレビューすることができます。この例では、Head コントロールが親の場合、これによって手の IK コントロールに影響が及びます。手をキーフレーム化する必要はありません。
ベイク
アニメーションの空間の切り替えを最終化したら、キーフレームの最終結果をベイクできます。最終的なアニメーションをデフォルトの親空間に戻して固定したい場合に便利です。
選択したコントロールをベイクするには、[Spaces] メニューの [Bake… (ベイク)] をクリックして、次の図で示されているベイク ダイアログ メニュー を開きます。
1.ベイク先のトランスフォーム空間です。通常は、コントロールの元の空間を復元するために [Parent] を選択しますが、親以外のトランスフォーム空間を維持したい場合は、他の空間を選択したり追加したりすることもできます。 2.ベイクの設定です。次のプロパティが含まれます。
名称 | 説明 |
---|---|
Start Frame (開始フレーム) | ベイクする範囲を定義する、シーケンサー内の開始フレームです。 |
End Frame (終了フレーム) | ベイクする範囲を定義する、シーケンサー内の終了フレームです。 |
Reduce Keys (キーを削減) | これを有効にすると、ベイク プロセス実行後に 単純化 プロセスが実行され、許容量に基づいて冗長なキーフレームが削除されます。 |
Tolerance (許容) | この 許容 の値が大きいほど、フィルタリングされるカーブが元のものから変化することが可能になります。そのため、[Reduce Keys (キーを削減)] が有効な場合は、除去されるキーフレームの数がより多くなります。 |
設定と環境設定
シーケンサーで使用される空間キーフレームの色は [Editor Preferences (エディタの環境設定)] ウィンドウで変更できます。これらの設定にアクセスするには、Unreal Engine のメニューから [Edit] > [Editor Preferences] をクリックして [Curve Editor (カーブ エディタ)] セクションに行き、次のプロパティを見つけます。
設定 | 説明 |
---|---|
Parent Space Custom Color (親空間カスタム カラー) | 現在の空間が [Parent] に設定されている場合に使用するキーフレーム トラックの色です。 |
World Space Custom Color (ワールド空間カスタム カラー) | 現在の空間が [World] に設定されている場合に使用するキーフレーム トラックの色です。 |
Control Space Custom Colors (コントロール空間カスタム カラー) | カスタム コントロールの名前を追加し、これらのコントロールで使用するキーフレーム トラックの色を明示的に設定できるカスタマイズ可能な配列です。 |
コントロールリグ アセットにおける空間の切り替え
空間の切り替えは、コントロールリグ アセット内に事前ビルドすることもできます。コントロールに共通空間を事前に定義することで、シーケンサーでこれらを継続的に追加する必要性を軽減したい場合に役立ちます。また、ロジックを作成して、コントロールの属性を通じて空間の切り替えを制御することもできます。
カスタム空間を事前に定義する
コントロールリグ アセット内で目的の コントロール を選択し、[Details (詳細)] パネルに移動して [Available Spaces (使用可能な空間)] プロパティを見つけます。この配列を使って、トランスフォーム空間として使用する別のリグ要素を事前に定義できます。
[Add (+)] ボタンをクリックして新しいエントリを追加し、ドロップダウン メニュー で使用する [Type (タイプ)] と [Element (要素)] を指定します。前述のとおり、カスタム空間としてボーン、コントロール、または Null のいずれかを選択できますが、再ペアレント時の循環リグ エラーを回避するために、通常は コントロール を選択することをお勧めします。
[Available Spaces] プロパティでアイテムを指定すると、そのコントロールの切り替え可能な空間として、このカスタム空間が自動的にリストに表示されます。
Dynamic Hierarchy (動的階層) ノード
コントロールリグ グラフ内では、Dynamic Hierarchy ノードを使って空間の切り替え機能を表現することができます。コントロールリグのグラフ 内を右クリックして、[Dynamic Hierarchy (動的階層)] に含まれる次の各ノードを見つけます。
名称 | 画像 | 説明 |
---|---|---|
Add Parent | リグ要素に 2 つ目の親を追加します。新しい親の初期ウェイト値は「0」で、Set Parent Weights を使ってそのウェイト値を設定できます。このノードには次のオプションが含まれています。
|
|
Get Parent Weights | リグ要素のすべての親の現在のウェイト配列を返します。 | |
Set Parent Weights | リグ要素の親のウェイト配列を設定します。ウェイトの数は、リグ要素の親の数と同じである必要があります。 | |
Switch Parent | リグ要素を新しい親に切り替えます。このノードには次のオプションが含まれます。
|
空間の切り替えをプレビューする
空間の切り替え機能は 動的階層 システムを基にビルドされており、コントロールリグ アセット内でのプレビューとデバッグが可能です。
[Rig Hierarchy (リグ階層)] パネルの [Options (オプション)] をクリックし、[Dynamic Hierarchy (動的階層)] を有効にします。これにより、リグ グラフ ロジックから生じる空間の切り替えを考慮した代替の階層ビューが有効になります。
この例では、親を ワールド空間 に切り替えるコントロールが考慮されています。リグ階層アウトライナでは、動的階層 が有効であることを示す 青色 でハイライト表示します。
また、ビューポート内で選択されている コントロール を右クリックして [Test Space Switching (空間の切り替えをテスト)] を選択するか、Tab キーを押すことで、異なる空間の切り替えを一時的にテストすることもできます。