KineFX
#Houdini でSOP階層でRigging / Skinningを完結させるためのフレームワーク、ノード群 KineFX以前は、obj階層でのRig操作で大変だった
線によるグラフ構造を親子構造のあるSkeletonとして解釈できる
KineFXはアニメーションのためのパラメータやジョイント操作、プレビューのノードがバラバラに存在してしまい、直感的にアニメーション制作がしづらいという難点があり、これを克服するためにAPEXができた Rigging/SkinningはHoudiniがむずいというより必要な幾何操作がむずい
Rig操作系
skeleton
通常のpolylineのジオメトリをSkeletonに変更できる
ポイントに必要なAttributeが付与される
s@name
v@P : ワールド(Geo内)位置
3@transform : ワールド(Geo内)の回転・拡縮
4@localTransform : ローカルの位置・回転・拡縮
他にも任意パラメータで4@effectivelocaltransformやv@scaleintrinsicがある
rig pose
rig attrib wrangle
上記のAttributeをVEX上で上書きできる
ワールド系かローカル系のどちらかの変更にする(変更が競合すると計算結果がわかりづらくなる)
4@localTransform、v@P + 3@transformは従属的に再計算されるっぽい
rotate()などで直接回転行列を操作すると、axis_angleに直すときに値がとびとびになり結果がおかしくなるため、なるべく quaternion()を用いたほうが安定する
rig stash pose
full body IK
orient joints
skeletonでつけたジョイントトランスフォームは線に対して直交してつかない場合があるが、これを正してくれる
Skinning系
capture packed geo
packed geometryに対して、Skeletonをつける
blended weightなどは想定していない
メカのようなものに適しているが、ヒューマノイドや生物などの関節は表現できない
packed geometryのnameはprimitiveにつけておく
joint capture biharmonic
skinに対して、boneのweightをつける
自然なデフォーム結果を得られる
内部的にtetembedを使って、skinとskeletonをつなぐ四面体充填をしている
自前でskinとskeletonを結ぶグラフをつくってもよい
四面体充填できないものは動作しない(Houdiniが落ちる)
capture attrib unpack
boneCaptureのattributeをわかりやすいかたちに直してくれる
それぞれの対応するskeletonのpoint index (i[]@boneCapture_index) とweight (f[]@boneCapture_data) をそれぞれ配列で持っている
wrangleで扱いやすくする
操作が終わったらcapture attrib packでskinとして利用可能な状態に戻す
capture attrib unpack
i[]@boneCapture_index, f[]@boneCapture_dataとindexとjoint名のindex-pairが必要
Ref
Simulation結果をKineFX用のRigに変換してアニメーションをあとづけする
https://www.youtube.com/watch?v=k9i_PqjnQds
花のネットワークでは、KineFXの中でもFK、IKの連鎖を作ったり、Vellumを下流でおこなったりと、Simulationと手付けのAnimationを高度に融合させている
ただしKineFXで解釈する場合は、単なるp@orientからの単純なTransform変換ではうまく解決せず座標系違いなどを直した上で、正しい3@transformをつける必要があったりする
Chirstopherはこれを専用VOPを組み流用している