LoginSignup
37
17

More than 3 years have passed since last update.

Houdiniの新しいリギングとアニメーション:KineFX機能まとめ

Last updated at Posted at 2020-12-01

この記事はHoudiniアドベントカレンダー2020 1日目の記事です。

Houdini18.5になりOBJレベルのボーンから、SOPレベルのボーンに移行しました。
これらのツールセットはKineFXと呼ばれ、非常に多くの機能を有します。
image.png

そこで今年は、KineFXでよく使うノードのパターン集として、いつでも使えるカンニングペーパー的な記事を目指して執筆します。

SOP一覧

KineFXの種類は、TabのKineFXで確認できます。
image.png

SOPには63個の機能があり、それぞれの機能は以下の通りです。
kinefxsop.png

ジョイントの編集 Rigpose

rigposeノードはKineFXの根幹を担う、最も基本的なノードです。
image.png
ポリゴンのライン情報を入力するだけでそれがスケルトンに変換されて、ポイントがジョイントとして動作します。その実態は、Compute Rig Poseノードです。(ノードの中に入るとこのノードが存在します)
RigPoseノードにはname Attributeもtransform Attributeも必須ではありませんが、スケルトンとしての構造が正しい状態でなければなりません。正しい構造とは、「Parentは必ず一つ」そして「ループしていない」構造のことです。
image.png
問題ないスケルトンの変換
image.png
変換NG

RigTreeタブ、もしくはRigTreeウィンドウ、RigDoctorでスケルトン構造が正しいかどうかをチェックできます。問題がある場合はエラーを返します。(図ではboxの入力でエラーになっています。エラーの原因はポリゴンが閉じている=ループが発生しているからです)
image.png

parentは何で定義されているのか

Attributeではなく、頂点(vertex)の順で決定します。つまり、ポイント番号をsortのreverseを逆にしてもボーンの方向は変わりません。逆転させたい場合はreverseノードを使用します。線形頂点番号の逆転が発生するため、親子関係が逆転します。ただし、Parent1つに対してChildが複数存在する場合はトラバースしたものとして別途処理されます。これを逆転させるとParentが複数となるのでエラーとなります。

スケルトンの健全性確認 RigDoctor

スケルトンの健全性を確認してくれます。Debug Hierarchyにチェックをしておくと、不正なスケルトンの場合に検知してくれます。(!マークで警告してくれます。)
image.png
image.png
ただし、最も使用する用途としては、name Attributeそしてtransform Attributeの付与です。
デフォルトでPoint Namesの設定として接頭辞の設定が可能です。(名前だけ付与する場合はDegug Hierarchyなどは不要な処理なのでチェックを外してもよいかもしれません)
transform Attributeの付与はデフォルトではチェックされていません。付与したい場合は、Initialize Transformsにチェックを入れます。するとlocaltransform Attributeとtransform Attributeが付与されます。

スケルトンの作成と編集 Skeleton 

1からスケルトンを作成することができます。また、正しい構造であればポリゴンを入力することでスケルトンへの変換も可能です。
image.png
スケルトンの作成時は、ビューポート上部のエリアをまずは設定します。
image.png

スケルトンの作成

image.png
ジョイント作成時のnameのデフォルトではpoint_*です。名前を変えたい場合は、後からジョイントを選択して変更する必要があります。ジョイントの作成後に位置の微調整を行いたい場合は、Mode:CreateからMode:Modifyに変更して、リグで右クリックからの ShowHandleのチェックを入れてハンドルを表示さて操作します。
image.png

いちいちジョイントを選択して名前変更するのが面倒な場合は、Skeletonノード選択状態で、RigTreeでそれぞれの名前をダブルクリックすると名前を編集できます。※ジョイントのNameは必ず固有でなければならないため、同じ名前は厳禁です。
image.png

同様にskeleton選択時であればビューポートのジョイント選択時、「P」の押下でパラメータを出して名前やジョイントの位置変更が可能です。
image.png

stashに注意

skeletonより上流を変更したのにデータが反映されない場合はstash(しまっておく)機能が働いている可能性があります。上流のデータの再取得のためにはstash inputを行う必要があります。ただし、ここで様々な作業を行っていた場合そのデータも消えてしまうので、skeletonの利用は計画的に行う必要があります。

キャプチャとデフォーム

Houdiniには従来からのキャプチャ方法が3種類ありますが、KineFXでは基本的にBoneCaptureBiharmonicを使用します。
image.png
rigposeを回転すると、ジオメトリがキャプチャされて動作します。
capp.gif
objレベルの存在しないボーンを探しにいってしまうWarningは出ますが、BoneCaptureProximityでも一応動作します。
image.png
最後の一つBoneCaptureは動作しません。

従来の3つのキャプチャに加え、KineFXではPackされたオブジェクトのキャプチャが追加されています。
それがCapturePackedGeometryです。機械のように固いオブジェクトをジョイントに対して追従させます。
最終的な変形はBoneDeformで行います。
image.png
bcap.gif

IK Chains

IKChainsの注意点は、Blendの初期値が0であること
その他に、複数のIKを設定する場合、RootがGoalの先に存在する場合、Goalが固定されて動作するという事です。仮に、IKchainsを連ねる場合はタブではなく、別ノードとしてIKChainsを付与してやる必要があります。
ikchain.gif
image.png
twistとgoalが用意できない場合は、Match By Nameにチェックを入れます。
image.png

Full Body IK

フルボディ インバース キネマティクス アルゴリズムを使用して、モーションを SOP ベースのスケルトンに転送します。このノードは、name Attribute、transform Attributeが必須です。
主にリターゲティング時はmappointsと併用し、MapUsingではMapping Attributeを使用します。
name Attributeのみで動作させる場合は、Match By Attributeに変更します。
image.png

少ないコントローラーでの操作

name Attributeさえあれば、基本的にMatch By Attributeを行うと、mappointなしで動作させることができます。最終的な形にRigを移動した後、SkeletonBlendやBlendShapeを行うことで、スムーズなアニメーションを行うことも可能です。
image.png
tree.gif

リターゲット

リターゲティングについては、既に様々なサイトで解説されているので、そちらを参照ください。
SideFX KINEFX MOTION RETARGETING (モーションリターゲティング)
ボーンデジタル KineFXでモーションリターゲティング
IndyZone KineFX

メモ:RigMatchPoseをする前に、第2インプットにrestposeを入れ込んだRigStashPoseを埋め込んでおくと、微調整が減って便利です。
image.png

回転角度制限 FBIK Configure Joints

FullBodyIKキネマティクス ソルバーで使用されるジョイントプロパティを設定するノードですが、便利な機能が存在しています。FullBodyIKで回転する際の角度制限を付けることができます。
image.png

image.png

FullBodyIK時の回転角度の制御は、ConfigurationsのLimitにおいて行います。
image.png
すると、辞書型のfbik_jointconfig Attributeが付与されます。
image.png

重心取得 FBIK Configure Joints

全体の重心を計算して、1つのポイントを追加します。
image.png
image.png
重心はCenter Of Mass のAdd Point at Center of Massにチェックを入れることで設定できます。
image.png
このように単体での重心取得に使用する以外に、FullBodyIKノード内の、Add Center of Mass Targetのチェックと合わせて使用すると、バランスを取るような動作を実現できます。

ジョイントの選択 Attach Control Geometry

AttachControlGeometryを使用して、ジョイントに対して、必要なオブジェクトを付与すると便利です。
注意点としてこのオブジェクトに付与するnameはprimitiveタイプであるという点です。
image.png
sphereのジオメトリをアタッチした場合、sphereのクリックがjointの選択と同義となります。
image.png

VOP一覧

RigAttributeVOPにもKineFXノードが追加されています。
image.png

VOPには38個の機能があり、それぞれの機能は以下の通りです。
KINEFXVOP.png

特定方向を見る LookAt

LookAt(KineFX)とLookAtConstraintの違いは、Offset機能とBlend機能の有り無しです。つまり、LookAtConstraintはLookAt(KineFX)のラッパーです。
オフセットの更新ボタンを押すと、現在の入力を使用した計算の結果が隠され、これが「rest」変換として設定されます。
LookAtの注意点は、LookAtのxformに入力するのは、ボーンの先端ではなく、実際に回転を行う根本だということです。
image.png
LookAtのtoについてはターゲットとなるpoint_3を、fromは実際に位置情報が変更するpoint_2ではなく回転が発生するpoint_1を入力します。
image.png

bonelookat.gif

親に追従する Parent Constraint

parent constraintではupdate offset、clear offsetの設定によっては、思わぬ状態でconstraintされるので注意が必要です。
image.png
new parentに付与することで、実際にスケルトンの結合が行われなくとも、親の動きに追従します。
image.png

const.gif

カーブを追従させる Curve Solver

おおまかなガイド用のラインを作成し、そのガイドにそってカーブを作成します。髪の毛やしっぽなどに応用できます。
image.png
これまではgetpointtransformで取得していたが、getpointtransform「s」で複数のポイントをワイルドカード「*」で一括取得する、そしてsettransfomsで適用する。
image.png
csolver.gif

パスに追従させる Transform From Path

パスにそって、移動するアニメーションを作る場合にこのノードを使用します。
image.png
curveposに対して0→1のアニメーションを行います。
image.png
デフォルトだと、LookAtOffsetが0なので、カーブの向きが固定されてしまいます。
カーブの方向に向いてほしい場合は、この値を少し上げます。
cvv.gif

まとめ

今回は使いそうなノードを抜粋して記述しました。
これ以外にもRigAttributeWrangleやMotionClipなど色々な機能がありますが、時間がいくらあっても足りないので、今回はこれでおわりにしたいと思います。
去年書いた、「ディニ子をつくる:Houdiniでキャラクターモデリング」と「HoudiniでUV展開&リグ入門」でオブジェクトレベルのボーンを嫌というほど触った身からすると、KineFXは本当に使いやすいので助かります。
※ディニ子もOBJボーンからKineFXに生まれ変わりました。去年のモデルと見比べてみても面白いかもしれません。
diniani.gif
Houdini19ではさらにリギングやアニメーションが拡張されるとのことです。
キャラクターアニメーション以外にも、HoudiniのプロシージャルワークフローにKineFXは想像しないような活用がされていくでしょう。
この記事が今後のKineFX利用時のお役に立てれば幸いです。

37
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
17