Houdini 20.5 キャラクタ KineFX

スケルトンの扱い方

On this page

KineFXスケルトンの紹介

KineFXでは、すべてがSOPポイントです。 ポイントのワールドトランスフォームは、 ポジション + 3×3変換行列(移動, 回転, スケール) で定義されています。 ポイントにtransformアトリビュートとnameアトリビュートが含まれていれば、そのポイントは ジョイント になります。

KineFXの階層または スケルトン は、 ポリゴンライン で繋がったポイントで表現されます。 階層内のジョイントの親子関係は、 頂点順 で決定されます。 そのため、階層を走査する際に ポイント順が考慮されるわけではありません

ゼロからスケルトンを作成してオブジェクトレベルからそのスケルトンを取り込んだり、または、他のDCCパッケージからスケルトンをインポートすることができます。

KineFXのスケルトン vs. オブジェクトレベルのスケルトン

KineFXは、ボーンベースのオブジェクトレベルのリギングツールとは違って、ジョイントベースのシステムです。 オブジェクトレベルのボーンとジオメトリレベルのジョイントの主な違い:

  • ボーンは長さを持ちます。 それに対して、ジョイントは親からのオフセットができるようにローカル空間の移動だけを考慮します。

  • ボーンの向きは固定されています。 つまり、ボーンの子は、親の長さで指定された距離だけ常に-Z方向にオフセットされます。

  • ボーンはスケール補正に対応していません。 これが原因で、Squash-and-Stretch(潰しと伸ばし)アニメーションパイプラインが非常に扱いにくくなり、パフォーマンスに影響します。

  • キャプチャ(スキン)の変形はボーン自体によって駆動されません。 代わりにそのような変形はボーンオブジェクト内のCapture Region SOPで駆動されます。この Capture Region SOP のキャプチャポーズと現行ポーズとの差分がオブジェクトレベルのスキンの変形を駆動させます。

  • オブジェクトレベルのキャプチャポーズはスキンに付着します。 つまり、スケルトンのパーツを削除した途端にスキンが壊れてしまいます。その一方でSOPスケルトンの場合、キャプチャポーズはJoint Deform SOPの2番目の入力で定義します。つまり、ジオメトリの再キャプチャ(再スキン)する必要なくSOPキャプチャポーズを変更することができます。例えば、スケルトンのジョイントの向きに変更を加えたり、キャラクタのピボットを調整することができるものの、それによってスキンに影響が及ぶことはありません。

スケルトンの作成

スケルトンの描画

Skeleton SOPを使ってジョイントを描画することで、ゼロからスケルトンを作成することができます:

  1. ネットワークエディタでジオメトリ(SOP)レベルに入って、Skeleton SOPを配置し、それを選択して、そのディスプレイフラグを有効にします。

  2. キャラクタのジオメトリノードを配置して、そのテンプレートフラグを有効にします。これによって、スケルトンを描画する時にビューポート内にキャラクタのジオメトリを表示させることができます:

    Tip

    ビューポート内でのテンプレートジオメトリの表示方法は変更することができます。 Display Options ウィンドウを開いて(マウスカーソルをビューポート内に移動させてからDを押します)、 Set display options forTemplate Model Geometry に設定し、 Draw ドロップダウンメニューからどれかのオプションを選択します。 Smooth Shaded または Smooth Wire Shaded のどれかを使用することを推奨します。

  3. そのSkeleton SOPを選択します。

  4. ビューポートの左側にあるツールバーのをクリックするか、または、マウスカーソルをビューポート内に移動させてEnterを押します。 これでSkeletonビューアステートに入ります。この状態になると、ビューポート上部にあるSkeltonツールバー、メニューオプション、Skeletonステート用ホットキーにアクセスすることができます。

  5. Skeletonツールバーで、 ModeCreate に設定します。

    Tip

    Fトグルは、 ModeCreateModify を切り替えます。 キーボードショットカットの詳細は、Skeletonホットキーを参照してください。

  6. Joint Placement ドロップダウンメニューから View Based モードを選択します。このモードでは、ジョイントはジオメトリの中点に配置されます。オプションの詳細は、ジョイントの配置を参照してください。

  7. スケルトンを描画します:

  8. スケルトンを修正するには、Skeletonツールバーの Tweak Mode をオンにします。 Child Compensate がオフの場合、ジョイントをドラッグすると、そのジョイントとその子ジョイントも移動します。 Child Compensate がオンの場合、ジョイントをドラッグするとそのジョイントのみが移動し、その子ジョイントは移動しません:

    Tweak Modeがオン、Child Compensateがオフ
    Tweak Modeがオン、Child Compensateがオン
  9. スケルトン内のジョイントを整列させます:

    • ビューポートの右側にあるツールバーのをクリックして、ビューポート内にコンストラクション平面を表示します。

    • クリックして、 Construction Plane Handle をオンにします。

    • コンストラクション平面ハンドルをクリックして、 Align normal with world X axis を選択します。 これは、コンストラクション平面の法線がX軸を向くように変更します:

    • スケルトン内のジョイントを選択します。

    • ビューポート内でクリックして、 Snap Selection to Construction Plane を選択します。

      ジョイントをコンストラクション平面上にスナップさせる前と後(赤い矢印をドラッグすると比較することができます)
  10. ジョイントの名前を変更します:

    • Skeletonビューポートステートで、ポイントを選択します。

    • Skeletonツールバーの Name フィールドで、そのポイントの名前を変更します。

  11. ビューポート内にジョイント名を表示させるには:

    • テンプレートジオメトリをゴーストに設定します:

      • ビューポート上にマウスカーソルを置いてDを押して、Display Optionsウィンドウを出します。

      • Markers タブで、 Set display options forTemplate Model Geometry に設定します。

      • Ghosted をオンにします。

    • ジョイント名の表示を有効にします:

      • ビューポートの右側にあるツールバーの Visualizationアイコンをクリックして、ビジュアライザを有効にします。

      • Visualizationアイコンをクリックして、 Sceneをクリックして、 Markerを選択します。

      • 表示されるEdit Visualizerウィンドウで、 Attribute フィールドをnameに設定します。

      名前が変更されたジョイントの表示

Geometry SpreadsheetやRig Treeビューでジョイントを確認する

Geometry SpreadsheetRig Treeビューでは、スケルトンジョイントの情報を確認することができます:

Geometry Spreadsheet

  1. ペインの上部にある New Tabアイコンをクリックして、 New Pane Tab Type ▸ Inspectors ▸ Geometry Spreadsheet を選択します。

  2. 上部のツールバーの Pointsをクリックします。すると、各ジョイントには、nameアトリビュートとtransformアトリビュートがあることが確認できます:

    他のPointアトリビュートを表示するには、 View を選択して、表示したいアトリビュートをオンにします。

Rig Treeビュー

  1. ペインの上部にある New Tabアイコンをクリックして、 New Pane Tab Type ▸ Animation ▸ Rig Tree を選択します。

  2. TypeJoints に設定します。すると、Rig Treeビューには、ジョイントとその階層関係が表示されます。この例では、tailジョイントがルートジョイントになっています:

Joint Placementオプション

スケルトンを描画する時、ジョイントをジオメトリ上にどのように配置したいのか選択することができます。 Skeletonビューポートステートで、 Joint Placement ドロップダウンメニューからジョイントの配置方法を選択することができます。

View Based

ジオメトリの中点にジョイントを配置します。 現行ビューからジオメトリを通過する直線を考えてみてください。 その直線とジオメトリとの交点の中で一番近い交点と一番遠い交点の中点にジョイントが配置されます。

推奨

View Basedモードで作業する時は、キャラクタを中央で分ける正投影ビュー(例えばRightビュー)に切り替えると良いでしょう。

右側正投影ビューを使用したジョイント配置
Normal Based

サーフェスの法線を使用してジオメトリの中点にジョイントを配置します。 ジオメトリサーフェスと直交してジオメトリを通過する直線を考えてみてください。 その直線とジオメトリとの交点の中で一番近い交点と一番遠い交点の中点にジョイントが配置されます。

白い円は、ジョイントが配置されるジオメトリ内部の位置を示しています:

Freehand

コンストラクション平面が表示されていれば、ジョイントはそのコンストラクション平面にスナップします。 ビューポートの右側のツールバーのをクリックすることでコンストラクション平面が表示されます。

ビューポート内のコンストラクション平面

コンストラクション平面ハンドルが非表示であれば、クリックして、 Construction Plane Handle をオンにします。

Skeletonビューアステートでは、コンストラクション平面ハンドルをクリックして Align normal with world [X|Y|Z] axis を選択することで、コンストラクション平面の向きを設定することができます。 例えば、 Align normal with world Y axis オプションを選択すると、コンストラクション平面の法線はY軸に向きます。

コンストラクション平面にスナップするFreehandモードのジョイント配置

コンストラクション平面が非表示であれば、ジョイントは画角と直交する平面上に配置されます:

コンストラクション平面が非表示の場合のFreehandモードのジョイント配置
Surface

ジオメトリサーフェス上にジョイントを配置します:

ラインをジョイントチェーンに変換する

自身でスケルトンジョイントを描画する方法だけでなく、Rig Doctor SOPやSkeleton SOPを使用して何かしらのSOPポリゴンラインをジョイントチェーンに変換することもできます:

  1. ネットワークエディタ内で、例えばLine SOPなどのラインを生成するSOPノードを配置します。

  2. パラメータエディタで、そのラインのプロパティを調整します。例えば、 Length パラメータや Points パラメータを上げます。そのラインのポイントを表示するには、ビューポートの右側にあるツールバーの Display Pointsをオンにします:

  3. そのラインジオメトリをRig Doctor SOPまたはSkeleton SOPに接続します:

    ラインをジョイントチェーンに変換

    デフォルトでは、Skeleton SOPは、ジオメトリのポイントトランスフォームを初期化し、有効なポイント名を付けます(KineFX階層では、ジョイントにnameアトリビュートとtransformアトリビュートがあることが必須になっています)。 しかし、Rig Doctor SOPは、デフォルトではポイントに名前を付けるだけで、ポイントトランスフォームを初期化しません。 ポイントトランスフォームを初期化するために、 Initialize Transforms パラメータをオンにしてください。

  4. Geometry Spreadsheetで、これらのポイントの名前とトランスフォームを確認することができます:

    初期化された名前とポイントトランスフォーム
  5. ビューポート内にKineFXスケルトンを表示します。つまり、Rig Doctor SOPまたはSkeleton SOPを選択して、ビューポート上にマウスカーソルを置いてEnterを押します。ライン上の各ポイントがスケルトンのジョイントになっています:

    Rig Doctor SOPやSkeleton SOPで生成されたジョイントチェーン

    ジョイント軸を表示するには、ビューポート内でクリックして、 Display Joint Axes をオンにします。

Tip

Rig Doctor SOPやSkeleton SOP以外の場所でジョイントチェーンを表示させたいのであれば、Visualize Rig SOPを使用すると良いでしょう:

Visualize Rig SOPにディスプレイフラグを設定します。 必要に応じて、 Joint Scale を上げて、ジョイント軸を見やすくします:

ジョイントの向きの変更

いくつかの理由で、階層内のジョイントの向きを変更したい場合があります:

  • モーションキャプチャスケルトンのジョイント回転がおかしい場合。

  • ゼロからスケルトンを構築した時に腕が良い角度で曲がるようにしたい場合。

  • スケルトンに何かを追加したり削除した時にジョイントの角度がズレてしまった場合。

このセクションにはジョイントの向きを扱うためのツールやメソッドがいくつか用意されています。

ジョイントの向きの自動変更

単純なジョイントチェーンだと、Orient Joints SOPを使用することで、それらのジョイントの向きを自動的に変更することができます。 ここでは、色々な向きのジョイントで構成されたジョイントチェーンから始めます:

  1. スケルトンが格納されているSkeleton SOPの出力をOrient Joints SOPの入力に接続します。

  2. Orient Joints SOPの Reference Vector には、子ジョイントの方に向かわせるジョイント軸の方向を設定します。例えば、ジョイントのX軸が子ジョイントの方を向くようにしたいのであれば、 Reference Vector(1, 0, 0)に設定します:

    ジョイントのX軸が子ジョイントの方に向くようになりました

Orientation Pickingを使ったジョイントの向きの変更

Orientation Pickingは、ジョイントを親ジョイントまたは子ジョイントの方に向くように変更することができます。 スケルトンを作成/修正する時はSkeleton SOPのOrientation Pickingモードを、リターゲットをクリーンアップする時はRig Pose SOPのOrientation Pickingモードを使用します:

  1. ネットワークエディタ内で、Skeleton SOPまたはRig Pose SOPを選択します。

  2. マウスカーソルをビューポート内に移動させてからEnterを押して、そのSOPのビューアステートに入ります。

  3. Skeleton SOPを使用している場合、Skeletonツールバーの Child Compensate パラメータを有効にします。 Rig Pose SOPを使用している場合、 World Space パラメータを有効にします。

  4. ビューポート内でクリックして、 Display Joint AxesShow Handle を有効にします。

  5. 向きを変更したいジョイントを選択します:

    ジョイントの元々の回転の挙動
  6. ;を押してOrientation Pickingモードにします。ハンドルがOrientation Picking用ハンドルに変わります:

  7. ジョイントの回転基準となるメインの軸(主軸)を設定します。 この例では、(Z軸は肘から手首に向かった腕の方を向いているので)Z軸をそのままにし、他の軸はそのZ軸を基準に回転させたいです。 Z軸ハンドルの端にある青いボックス形状を⌃ Ctrlクリックします。すると、そのボックス形状がピラミッド形状に変わります。これでZ軸が主軸として設定されました:

    主軸として選択されたZ軸
  8. 副軸を設定します。これは、特定のリンク(ジョイント間のライン)に整列させたい軸を指定します。ジョイントの向きは、副軸が選択したリンクに整列するように主軸基準で回転します。

    この例では、X軸を肩から肘までのリンクに整列させたいです:

    • X軸ハンドルの端にある赤いボックス形状をクリックします。すると、そのボックスが黄色に変わります。これは選択されていることを意味します。

    • 肩から肘までのリンクをクリックします。肩から肘までのリンクと肘から手首までのリンクを含んだ平面を想像してください。X軸はZ軸(主軸)を基準に回転し、この平面と整列します:

    主軸を基準に副軸を回転

    このテクニックによって、肘と膝のジョイントが良い向きに変更されます:

    Orientation Picking後のジョイントの新しい回転の挙動
  9. ;を押してOrientation Pickingモードから抜けます。

主軸と副軸に基づいたジョイントの向きの変更

ビューポートステートのパラメータから主軸と副軸を指定することで、ジョイントの向きを変更することができます:

  1. ネットワークエディタ内で、Skeleton SOPを選択します。

  2. マウスカーソルをビューポート内に移動させてからEnterを押して、Skeletonビューアステートに入ります。

  3. ビューポート内をクリックして、 Display Joint Axes を有効にします。

  4. Sを押しながらドラッグして、向きを変更したいジョイントを矩形選択します。

  5. マウスカーソルをビューポート内に移動させてからPを押してParametersウィンドウを開きます。

  6. Viewer State Dialog タブで、 Primary AxisSecondary Axis を設定します:

    Primary Axis

    子ジョイントの方へ向ける軸。

    Secondary Axis

    Up方向へ向ける軸。

  7. ビューポート内でクリックして、 Orient Selected Joints を選択します。ジョイントチェーン内の軸が更新されます。

コンストラクション平面を使用したジョイントの向きの変更

コンストラクション平面を使用してジョイントチェーンのジョイント回転軸を調整することができます。 この例では、二足歩行の腕の肘の軸の向きを変更します:

  1. ネットワークエディタ内で、Skeleton SOPを選択します。

  2. マウスカーソルをビューポート内に移動させてからEnterを押して、Skeletonビューアステートに入ります。

    ジョイントの元々の回転の挙動
  3. 向きを変更したいジョイントが存在するジョイントチェーン内のすべてのメインジョイントを選択します。例えば、向きを変更したいジョイントが肘だった場合は、肩、肘、手のジョイントを選択します:

    コンストラクション平面を使用して向きを変更するジョイントの選択
  4. ビューポートの右側にあるツールバーのをクリックして、ビューポート内にコンストラクション平面を表示します。

  5. ビューポート内をクリックして、 Orient Construction Plane to Selection を選択します。選択したジョイントの方へコンストラクション平面が向くようになります:

    選択したジョイントの方へ向いたコンストラクション平面
  6. 向きを変更したいジョイント(s)を選択します。この例では、肘ジョイントを選択します:

  7. ビューポート内をクリックして、 Snap Selection to Construction Plane を選択して、ジョイントの向きを更新します。このテクニックによって、肘と膝のジョイントが良い向きに変更されます:

    コンストラクション平面にスナップさせた後の肘の新しい回転の挙動

スケルトンのミラー化

片側だけスケルトンを描画してSkeleton Mirror SOPを使用すれば、もう片側のスケルトンのジョイントを簡単に生成することができます:

  1. 上記の例を参考に、片側だけスケルトンを描画します:

  2. Skeleton SOPをSkeleton Mirror SOPに接続します。

  3. キャラクタのジオメトリノードのテンプレートフラグをオンにします。

  4. Skeleton Mirror SOPを選択して、そのディスプレイフラグをオンにします。これでスケルトンをミラー化しつつキャラクタのジオメトリを表示させることができます:

  5. ミラー化したいジョイントを選択します:

    • Skeleton Mirror SOPで、 Group パラメータのアイコンをクリックします。

    • ビューポート内で、⇧ Shiftを押したまま矩形ドラッグして、ミラー化したいジョイント(例えば、すべての手足のジョイント)を選択して、Enterを押します。すると、それらのジョイントが Group パラメータに追加されます。

      ミラー化したいジョイントを選択
  6. ミラー化したジョイントの名前を変更します。Skeleton Mirror SOPの Token PositionStartFind TokensL_Replace TokensR_に設定します。 これは、ミラー化したジョイントに対してL_で始まるジョイント名を検索し、そのジョイント名をR_で置換します。例えば、L_armという名前のジョイントがあれば、そのミラー化されたジョイントの名前はR_armになります。

    ミラー化されたジョイント

Note

Skeleton Mirror SOPの Mirroring Style パラメータは、選択したジョイントのトランスフォームを新しくミラー化されるジョイントに転写する方法を決めます:

  • 入力のトランスフォームを回転させてジョイントをミラー化したい場合は By Rotation を選択します。 このモードを使用すると、アニメーションの移動を反転させるので、下流のポージングはFK回転だけしか実行できないようになります。FK回転のみを使ってスケルトンのポージングをして、マイナスのジョイントスケールが不要である場合には、このモードが役に立ちます。

  • 入力のトランスフォームをマイナスでスケールさせることでジョイントをミラー化したい場合は By Scale を選択します。 このモードを使用すると、下流のポージングは回転と移動の両方でミラー化することができるようになります。ただし、すべてのトランスフォームがマイナスでスケールされます。そのため、この方法だと、スケルトンをゲームエンジンや他のDCCにエクスポートする際に問題が起こり得ます。

スケルトンのブレンド

Skeleton Blend SOPを使用することで、2つのアニメーションスケルトン間で(全体的または部分的に)トランスフォームをブレンドすることができます。 これは、疎らな階層を密な階層にブレンド、または、密な階層を疎らな階層にブレンドする必要がある時に役立ちます。

以下の例では、 Electraテストジオメトリの腕のアニメーションと足のアニメーションをブレンドします:

  1. スケルトンのブレンドを行なうネットワークをセットアップします:

    • 2個のRig Pose SOPを追加して、それら2つの異なる動きをアニメーションさせます。

    • 片方のアニメーションスケルトンをSkeleton Blend SOPの1番目の入力に雪像し、もう片方のアニメーションスケルトンをSkeleton Blend SOPのマルチ入力に接続します。

    • このSkeleton Blend SOPの出力は、他のスケルトン(s)からの影響が適用された1番目の入力スケルトンです。

    • Joint Deform SOPによって、その変形ジオメトリを表示することができます。

    腕のアニメーション
    足のアニメーション
  2. Skeleton Blend SOPの weight スライダを調整することで、異なる入力スケルトンが1番目のスケルトンに与える影響力を制御することができます。 例えば、2番目のスケルトンのスライダを0.5に設定すると、出力されるスケルトンは、その2番目のスケルトンのアニメーションの50%を使用します。

    スケルトンのブレンドウェイトの調整

    Blend Masking パラメータでは、 weight スライダの使い方を選択することができます。3つのモードから選択することができます:

    No Masking

    weight スライダを使用して、入力スケルトンが1番目のスケルトンに与える影響力を制御します。

    Set From Attribute

    上流ノードのアトリビュート値で weight スライダ値を上書きします。 このアトリビュートは Mask Attribute で指定することができます。 このモードは、ポイント単位のブレンドに対応しています。

    Scale From Attribute

    上流ノードのアトリビュート値を weight スライダ値の乗数として使用します。 このアトリビュートは Mask Attribute で指定することができます。 このモードは、ポイント単位のブレンドに対応しています。

    Note

    アニメーションスケルトンをワールド空間でブレンドする場合( World Space がオンになっている場合)、ブレンドオペレーションを使用する前にそれらのスケルトンが同じワールド空間にある必要があります。

How-to

To...Do this

ジョイントとその子ジョイントを移動させる

Skeletonツールバーの Tweak Mode をオン、 Child Compensate をオフにします。

子ジョイントを移動させずにジョイントを移動させる

Skeletonツールバーの Tweak ModeChild Compensate の両方をオンにします。

ジョイントを矩形選択する

Skeletonビューポートステートで、Sを押したまま矩形ドラッグしてジョイントを選択します。

ビューポート内にジョイント名を表示する

  1. テンプレートジオメトリをゴーストに設定します:

    • ビューポート上にマウスカーソルを置いてDを押して、Display Optionsウィンドウを出します。

    • Markers タブで、 Set display options forTemplate Model Geometry に設定します。

    • Ghosted をオンにします。

  2. ジョイント名の表示を有効にします:

    • ビューポートの右側にあるツールバーの Visualizationアイコンをクリックして、ビジュアライザを有効にします。

    • Visualizationアイコンをクリックして、 Sceneをクリックして、 Markerを選択します。

    • 表示されるEdit Visualizerウィンドウで、 Attribute フィールドをnameに設定します。

Rig Treeビュー内でサブツリーを全展開する

⇧ Shiftを押したままジョイントをクリックします。

KineFX

概要

キャラクタ要素の準備

APEXグラフを使用したリギング

APEXスクリプトを使用したリググラフの構築

リグコンポーネントを使用したリギング

ビューポート内でアニメーションを付ける

SOPベースのアニメーション

変形

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

H20以前

ペイン

別表