Houdini 19.5 キャラクタ KineFX

アニメーションの転送

On this page

KineFXフレームワークの主な目標の1つは、あるスケルトンまたはリグのアニメーションを別のスケルトンまたはリグに転送するための単純明快なソリューションを用意し、リターゲットの結果を仕上げたりクリーンアップするためのツールを提供することです。

このフレームワークに関係する核心部のワークフローこそが、 アニメーションのリターゲット ワークフローです。 リターゲットとは、あるキャラクタ( ソース )のアニメーションを受け取り、それを別のキャラクタ( ターゲット )に転送する工程のことです。

KineFXは堅牢で柔軟なシステムなので、ソースのキャラクタとターゲットのキャラクタ間の形態と階層構造が大きく異なったとしても制御することができます。

例:

核心部のリターゲットワークフロー

核心部のリターゲットワークフロー

Note

基本的にアニメーションのリターゲットは、ソースキャラクタとターゲットキャラクタをリターゲット操作でそれらのスケルトンを合わせる際に静止ポーズを使用します。

手順1: ソースとターゲットを取り込む

  1. ネットワークエディタ内で以下の操作を行ないます:

    • 転送したいアニメーションの ソース (mocap、アニメーションスケルトン、アニメーションキャラクタ)用にKineFXインポートノードを配置します。

    • そのソースアニメーションの転送先の ターゲット (静的スケルトンまたはスケルトン変形するキャラクタ)用にKineFXインポートノードを配置します。

    例: ソースアニメーションスケルトン用とターゲットスキンキャラクタ用のインポートノード
  2. ソースターゲット の両方のKineFXインポートノードのパラメータエディタで、入力として使用するスケルトンまたはキャラクタファイルを指定します。

    例: ソースのKineFXインポートノードの入力ファイル
    例: 入力が指定された状態のインポートノード
例: ターゲットキャラクタ(左)とソーススケルトン(右)。Christophe Desse氏によるキャラクタモデル提供

手順2: ソースポーズとターゲットポーズを合わせる

  1. Rig Match Pose SOPノードを配置します。

    この Rig Match Pose SOP ノードは、ソースとターゲットのスケルトンのポーズをワールド空間で合わせてから、それらのジョイントトランスフォーム値または Rest Pose(静止ポーズ) をPointアトリビュートとして保存することができます。

    FBIK(フルボディIK)ソルバは、このRest Pose(静止ポーズ)をデータポイントの1つとして使用してリターゲットを計算します。

    Tip

    さらに、 Rig Match Pose SOP ノードは、ソースとターゲットのスケルトンのスケールや比率がまったく違っていても、それらのスケルトンを合わせることができます。

  2. 以下の操作を行ないます:

    • ソース のKineFXインポートノードのアニメーションポーズ出力を Rig Match Pose SOP ノードのソーススケルトン入力(2番目の入力)に接続します。

    • ターゲット のKineFXインポートノードのアニメーションポーズ出力(3番目の出力)を Rig Match Pose SOP ノードのターゲットスケルトン入力(1番目の入力)に接続します。

      例: ソースとターゲットのKineFXインポートノードが接続されたRig Match Pose
  3. Rig Match Pose SOP ノード選択して、マウスカーソルをビューポート内に移動させてからEnterを押します。

    これでRig Match Pose操作 状態 になります。

    この状態になると、Rig Match Poseツールバーとポップアップメニューにアクセスできるようになります。

    例: ビューポートでのRig Match Pose操作状態

    他にも、ビューポートで 初期のマッチング結果 が表示されます。

    デフォルトでは、 Rig Match Pose SOP はソースとターゲットのスケルトンの 境界ボックス を見てから、それらの境界ボックスが一致するようにポイントをスケール/移動させます。 この挙動は、 Rig Match Pose SOPMatch Size > Enable Match Bounds パラメータ(デフォルトは オン )によって有効化されています。

    この Enable Match Bounds を有効にすると、ソース用( Reference Group フィールド)とターゲット用( Target Group フィールド)に別々にポイントグループを定義することができるフィールドが表示されます。 これらのポイントグループは、境界ボックスに含まれるソースポイントとターゲットポイントを決めます。 これは、マッチング内容から尻尾とか羽などを除外したい時に非常に役立ちます。 また、ソーススケルトンとターゲットスケルトンのサイズが異なっていても(例えば、ソースが大人でターゲットが子供)、このノードは、それらのサイズが合うように 自動的に サイズを変更します。

    Tips

    • ソースポイントとターゲットポイントのすべて、または、大部分を境界ボックスのマッチグループに追加したい場合、それらのグループにはルートジョイントを 追加しないでください 。ルートジョイントは境界ボックスのマッチングには不要であり、マッチングの妨げになる可能性があります。

    • 二足歩行のスケルトンで肩と腰のジョイントのみを境界ボックスによってマッチングさせるだけでも非常に良い結果が得られたりします。

      例: 肩と腰のジョイントのみでの境界ボックスによるマッチング

    境界ボックスによるマッチングを使用 したくない 場合は、 Enable Match Bounds パラメータを無効にすることで100%手動でポーズのマッチングを行なうことができます。

  4. Enable Match Bounds無効 、または、 手順3Reference Group フィールドと Target Group フィールドに何もポイントを 追加しなかった 場合、ソースのグローバルトランスフォームハンドルを選択して、ソーススケルトンをワールド空間内のターゲットスケルトンの位置まで 移動 させます。 できるだけ2つのスケルトンが重なるようにしてください。

    ソースがターゲットよりもあまりにも小さい/大きい場合は、さらにグローバルトランスフォームハンドルを使用してターゲットスケルトンのサイズに合うようにソーススケルトンをスケールさせてください。

    例: ソーススケルトンのグローバルトランスフォームハンドル
  5. ソーススケルトンの各ジョイントがそれに呼応するターゲットスケルトンのジョイントと重なるように 回転 させて、ソーススケルトンのグローバルトランスフォームを調整します。

    正確に合わせる 必要はありません が、この目標は、ターゲットスケルトンとソーススケルトン間のオフセットをできるだけ少なくすることです。

    メモ

    • Rig Match Pose状態で表示されるスケルトンジョイントを移動もスケールも しないでください

    • デフォルトでは、ソーススケルトンの操作のみが有効になっています。しかし、Rig Match Pose状態の時に両方のスケルトンをトランスフォームさせたいのであれば、 Rig Match Pose SOP のパラメータエディタの Interaction セクションにある Enable Target を有効にすることで可能です。

    Tip

    ソーススケルトンのジョイントを回転させる時は、別アングルでスケルトンを表示して、すべてのジョイントが整列されているかどうか確認するのを忘れないでください。

    • ソーススケルトンの 肩のジョイント を回転させて腕を整列させます。

    • ソーススケルトンの 腰のジョイント を回転させて足の位置を合わせます。

      Example: Rotating the hip and shoulder joints
    • 最後にいくつか調整するため、肘、手首、膝、足首、頭などのジョイントがそれぞれ呼応するターゲットスケルトンのジョイントと重なるように回転させます。

これで、ソーススケルトンはそれに呼応するターゲットスケルトンと同じワールド空間位置をほぼ占有しているはずです。

例: 最終的にマッチングさせたポーズ

手順3: ソースポイントをターゲットポイントにマッピングする

  1. Map Points SOPノードを配置します。

    Map Points SOP ノードは、ソースとターゲットのジョイントペアの参照を作成し、それらの関連性をマッピングアトリビュートとして保存します。 ソースとターゲットのジョイントペアは、拘束のようなリレーションシップを持ちます。

    FBIK (フルボディIK)ソルバは、マッピングアトリビュートを使用して、ジョイントペア内のソースジョイントとターゲットジョイント間の オフセット を計算します。

  2. 以下の操作を行ないます:

    • Rig Match Pose ノードのターゲットスケルトン出力(1番目の出力)を Map Points SOPノードのターゲットスケルトン入力(1番目の入力)に接続します。

    • Rig Match Pose ノードのソーススケルトン出力(2番目の出力)を Map Points SOPノードのソーススケルトン入力(2番目の入力)に接続します。

      例: Rig Match Poseノードに接続されたMap Pointsノード
  3. Map Points SOPノードを選択して、マウスカーソルをビューポート内に移動させてからEnterを押します。

    これでMap Points操作 状態 になります。

    例: ビューポートでのMap Points操作状態

    メモ

    • KineFXインポート系ノードの Rig Color パラメータは、Map Pointsスケルトンのカラーを決めます。

  4. リターゲットで使用したいFBIKソルバのタイプを考えましょう。

    • Physical Full Body IK ソルバを使用する予定であれば、そのソルバには 疎らな マッピングが好まれます。

      そのため、スケルトンの任意追加でないメインのジョイントペアのみをマッピングしてください。 例えば、roots(ルート)、hips(腰)、ankles(足首)、shoulders(肩)、wrists(手首)、heads(頭)です。

    • FABRIKソルバを使用する予定であれば、そのソルバには 密な マッピングが好まれます。

      そのため、スケルトンのメインのジョイントペアと任意追加のジョイントペアのすべてをマッピングしてください。 例えば、roots(ルート)、knees(膝)、hips(腰)、ankles(足首)、shoulders(肩)、elbows(肘)、wrists(手首)、spines(背骨)、heads(頭)さらにはマッピングで有益そうな他のジョイントです。

  5. ターゲットスケルトンのジョイントをソーススケルトンのそれに呼応するジョイントにマッピングします。

    • ジョイントをクリックしてから、もう片方のスケルトンのそれに呼応させるジョイントをクリックすると、それらのジョイント間にリンクが形成されます。

      このリンクは、ビューポート内ではジョイント間に破線で表示されます。

    • ジョイントを⇧ Shiftクリックしてから、もう片方のスケルトンのそれに呼応させるジョイントを⇧ Shiftクリックすると、そのマッピングが ミラー化 されます。 このミラー化のマッピングが成功するかしないかは、それらのジョイントの位置とスケルトン内のポイント名の類似性に次第です。 例えば、ソーススケルトンのl_shoulderジョイントを⇧ Shiftクリックしてから、ターゲットスケルトンのl_shoulderジョイントを⇧ Shiftクリックすると、両方のスケルトンの右側の肩ジョイントもお互いにマッピングされます。

    • ジョイントを選択してから背景を⌃ Ctrlクリックすると、そのジョイントペアのマッピングが削除されます。

    • ジョイントを選択してから背景を⇧ Shift + ⌃ Ctrlクリックすると、そのジョイントペアのマッピングとミラー化されたジョイントペアのマッピングも削除されます。

    例: ジョイントペアのマッピング

これで、ソーススケルトンとターゲットスケルトンが完全にマッピングされているはずです。

例: 最終の疎らなポイントマッピング

手順4: ソースのモーションをターゲットに転送する

  1. Full Body IK SOPノードを配置します。

    Full Body IK SOP ノードは、ソースアニメーションのフレーム毎に以下の処理を行ないます:

    • Rig Match Pose SOP を使って定義したRest Pose(静止ポーズ)内の Map Points SOP を使って定義したジョイントペア間のオフセット距離を計算します。

    • そのオフセット距離とソースのトランスフォームを使用して、ターゲットスケルトン内のジョイントのトランスフォームゴールまたは ターゲットポジション を決定します。

    • ターゲットスケルトンのジョイントをそのターゲットポジションまで移動またはトランスフォームさせます。

  2. 以下の操作を行ないます:

    • Map Points SOP ノードのターゲットスケルトン出力(1番目の出力)を Full Body IK SOP ノードのターゲットスケルトン入力(1番目の入力)に接続します。

    • Map Points SOP ノードのソーススケルトン出力(2番目の出力)を Full Body IK SOP ノードのソーススケルトン入力(2番目の入力)に接続します。

      例: Map Pointsノードに接続されたFull Body IKノード
  3. Full Body IK SOP ノードを選択して、マウスカーソルをビューポート内に移動させてからEnterを押します。

  4. アニメーションを再生します。

これで、ターゲットスケルトンがソーススケルトンのアニメーションによって駆動されているはずです。

例: ソースアニメーションを使ったターゲットスケルトン

手順5: リターゲットの結果を確認する

  • Joint Deform SOPノードを配置します。

    Joint Deform SOP は、ビューポート内にリターゲット操作の結果を表示します。 ターゲットがスキンキャラクタだった場合、ビューポート内には、すべてのスケルトン変形によるキャラクタのアニメーションを表示できるようになります。

  1. 以下の操作を行ないます:

    • Full Body IK SOP ノードのターゲットスケルトン出力(1番目の出力)を Joint Deform SOP ノードのアニメーションポーズ入力(3番目の入力)に接続します。

    • ターゲットのKineFXインポートノードのRestジオメトリ出力(1番目の出力)を Joint Deform SOP ノードのRestジオメトリ入力(1番目の入力)に接続します。

    • ターゲットのKineFXインポートノードのキャプチャポーズ出力(2番目の出力)を Joint Deform SOP ノードのキャプチャポーズ入力(2番目の入力)に接続します。

      例: Full Body IKノードとKineFXターゲットインポートノードに接続されたJoint Deformノード
  2. アニメーションを再生すると、ビューポート内でリターゲットの結果を確認することができます。

    例: ソースアニメーションで動かしたターゲットスケルトン。Christophe Desse氏によるキャラクタモデル提供
  3. Full Body IK SOPノードを選択します。

  4. パラメータエディタ で、あなたが望んでいるソルバの挙動になるようにそのFull Body IK SOPノードのパラメータを設定します。

  5. 再度アニメーションを再生します。

    あなたが選択したFBIKソルバのタイプとあなたが定義した他の設定があなたの求めているリターゲット結果に ならなかった 場合は、その Full Body IK SOP ノードのパラメータ設定(特に Iterations )をもう少し調整するか、 Solver タイプを切り替えてください。

    求めている結果が得られるまでこれらの設定を引き続き試行錯誤します。

  6. 必要に応じてリターゲットの結果をクリーンアップして仕上げます。

    詳細は、リターゲット結果を仕上げるを参照してください。

別のRest Poseを使用してアニメーションをリターゲットする

リターゲット用のソースに(Tポーズといった)標準的なRest Pose(静止ポーズ)が定義されて いない 場合、それが原因でリターゲット用に上手くポーズ間を 合わせる のが非常に難しくなります。 例えば、モーションキャプチャアニメーションファイルの最初のフレームに標準的なTポーズが定義されていないことはよくある話です。

例: ソースのRest PoseがTポーズになっていない場合のリターゲットの結果。Christophe Desse氏によるキャラクタモデル提供

このような状況で役に立つのは、スケルトンまたはキャラクタに対して 新しい 標準的なRest Poseを指定できることです。 新しいRest Poseを指定することで、 Rig Match Pose SOP を使ったスケルトンの合わせが非常に楽になり、さらには、リターゲット操作の結果を最適化しやすくなります。

How to

  1. Rig Stash Pose SOPノードを配置します。

    Rig Stash Pose SOP ノードは、ソースのRest Poseを新しいRest Poseに置換します。

  2. 新しいRest Poseを格納するノードを作成します。

    例えば、以下のようないくつかの方法で新しいRest Poseを取り込むことができます:

    • 有効なRest Poseを含んだディスク上のファイルを参照する File SOP

    • 有効なRest Poseの状態を含んだ Stash SOPノード。

    • 有効なRest Poseを含んだアニメーションスケルトンを取り込んだ別のKineFXアニメーションインポートノードと、そのRest Poseの時間にアニメーションをフリーズさせた TimeShift SOPノード。

    Note

    新しいRest Poseには 静的 なトランスフォームしか使用できません。

  3. 以下の操作を行ないます:

    • ソースのKineFXインポートノードの 出力Rig Stash Pose SOP のリグ 入力 (1番目の入力)に接続します。

    • 手順 2 で作成したノードの 出力Rig Stash Pose SOP のポーズソース(2番目の入力)に接続します。

      このノードは、新しいRest Poseが定義されるソーススケルトンまたはキャラクタを1番目の入力として受け取り、新しいRest Poseを2番目の入力として受け取ります。

    • Rig Stash Pose SOP ノードの 出力 をリターゲットネットワークの Rig Match Pose SOP ノードの 入力 に接続します。

    例: 新しいRest Poseネットワーク

これでリターゲットネットワークの Rig Match Pose SOP が新しいRest Poseを使用するようになりました。

例: クリーンで標準的なソースRest Poseを使ったリターゲット。Christophe Desse氏によるキャラクタモデル提供
See also

KineFX

プロシージャルリギング

互換性

アニメーションのリターゲット

ペイン