Houdini 21.0 ノード APEXノード

rig::MultiBoneIKFromArray

インバースキネマティクスを使用し、入力と出力を配列として指定して、ルートポジション、ゴールおよび捻じれポジションからジョイントの配置および方向付けを行ないます。

On this page
Since 20.0

インバースキネマティクスを使用し、入力と出力を配列として指定して、ルートポジション、ゴールおよび捻じれポジションからジョイントの配置および方向付けを行ないます。

Solvers

In the input port, solver, you can specify the solver to use for computing the IK solution - the default IK Solver (solver = 0) or the IK with Constraints Solver (solver = 1).

IK Solver

This solver produces a reasonably stable solution. When usetwist is set to true, the solution is aligned with the twist pole vector.

IK with Constraints Solver

This solver allows you to specify per-joint rotation limits, and per-joint damping (which helps to prioritize the rotation of the individual joints). This solver does not use the twist pole vector since it isn’t meaningful in the presence of rotation limits.

You can provide the joint configurations through the dictionary in the properties port, where each dictionary entry configures the properties for a single joint. See the descriptions of the joint properties below. The dictionary has the following format:

{
    "<joint_index>" : {
        "rotation_upper_limits" : Vector3(M_PI, M_PI, M_PI),
        "rotation_lower_limits" : Vector3(-M_PI, -M_PI, -M_PI),
        "restangle" : Vector3(0, 0, 0),
        "damp" : Float(0.5)
        "dampangle" : Vector3(0, 0, 0),
        "damprolloff" : Vector3(1, 1, 1),
    }
}

The dictionary entry’s key is the index of the joint in the in array. For example, a key of "0" applies the configuration to the first joint, a key of "1" applies the configuration to the second joint, and so on. The example below is a configuration for the first joint:

{
    "0" : {
        "rotation_upper_limits" : Vector3(M_PI, M_PI, M_PI),
        "rotation_lower_limits" : Vector3(-M_PI, -M_PI, -M_PI),
        "restangle" : Vector3(0, 0, 0),
        "damp" : Float(0.5)
        "dampangle" : Vector3(0, 0, 0),
        "damprolloff" : Vector3(1, 1, 1),
    }
}

The dictionary is sparse, and joints that are not in the dictionary have their default values set to those in the above examples.

Joint Properties

property

Description

rotation_upper_limits

Upper Rotation Limit

A set of XYZ angles (in radians with XYZ rotation order) that defines the upper rotation limit. The maximum rotation value is π radians.

rotation_lower_limits

Lower Rotation Limit

A set of XYZ angles (in radians with XYZ rotation order) that defines the lower rotation limit. The minimum rotation value is -π radians.

restangle

Rest Angle

This adds a pre-rotation to the rest orientation of the joint (in radians with XYZ rotation order). The rotation limits are applied with respect to the rest orientation.

damp

Joint Damping

This is a multiplier that adjusts the damping applied to the joint. A value of zero represents complete damping, while a value of 1 represents no damping. A highly damped joint may have less motion than a joint that is able to move freely.

dampangle

Damp Angle

A set of XYZ angle offsets (in radians with XYZ rotation order), from the upper and lower rotation limits, at which to apply additional damping. For example, if the X upper rotation limit is 60 degrees and the X damp angle is 20 degrees, the additional damping is applied to the solution after the X angle reaches 40 degrees.

This is an additional damping that is applied after the initial joint damping has taken effect.

damprolloff

Damp Angle Rolloff

This is a multiplier that adjusts the additional damping to apply once the damp angle has been reached. A value of zero represents complete damping, while a value of 1 represents no damping.

入力

in: Matrix4Array

すべての入力ジョイントのワールド空間トランスフォームの配列。

rootdriver: Matrix4

出力のルートジョイントを配置するワールド空間トランスフォーム。

twist: Matrix4

ソルバの極ベクトル。 これは、 usetwist がTrueに設定されている場合にのみ使用されます。

goal: Matrix4

IKソルバのワールド空間ゴールトランスフォーム。

stretch: Float

ストレッチ係数。1の値は、ソルバを実行する前のゴールに到達するように、入力ジョイントの長さを均一に伸縮させます。 0の値は、入力長をそのまま維持します。0から1の間の値は、ストレッチ係数を線形補間します。

squash: Float

スカッシュ係数。伸縮時にジョイントと直交する2つの軸のスケールを制御します。 0の値はスケールがそのままになり、1の値は伸縮時にスケールを圧縮し、負の値はスケールを広げます。 0から1の間の値が推奨されます。

blend: Float

入力トランスフォームとブレンドさせる結果の割合を制御します。

dampen: Float

Slows the convergence to the IK solution. A value of 0 represent no damping, while a value of 1 represents maximum damping. This is only used when solver is set to 0 (default solver). The IK with Constraints Solver (solver = 1) uses per-joint damping.

trackingthreshold: Float

精度の閾値。 値が小さいほど解の精度が向上しますが、計算時間が長くなります。 値が大きいほど計算時間は短くなりますが、解の精度が悪くなります。 これは、 solver が0(デフォルトのソルバ)に設定されている場合にのみ使用されます。

twistoffset: Float

後処理に適用する追加の捻じれ回転(度)。

usetwist: Bool

Trueに設定されている場合、 twist マトリックスを使用して捻じりを適用します。

resiststraight: Bool

Falseに設定されている場合、IKゴールがジョイントチェーンの長さ( trackingthreshold の許容値を含む)よりも遠くにある時は、IKチェーンはゴールの方向に完全に真っすぐになります。 Trueに設定されている場合、IKの解をもっと真っすぐにする試みは行なわれません。 解を素早く求めるために、 resiststraight はデフォルトでTrueに設定されています。 これは、 solver が0(デフォルトのソルバ)に設定されている場合にのみ使用されます。

keeproot: Bool

Trueに設定されている場合、 rootdriver の元のトランスフォームを維持します。 Falseに設定されている場合、IKソルバによって返されるルートを使用します。

keepscales: Bool

Trueに設定されている場合、出力ジョイントは入力ジョイントと同じスケールを維持します。 Falseに設定されている場合、出力ジョイントは単位スケールを使用します。

usegoalrot: Bool

Trueに設定されている場合、最後の出力ジョイントはゴールと同じ回転になります。 Falseに設定されている場合、最後の出力ジョイントは最後の入力ジョイントと同じローカル回転になります。

solver: Int

The solver used to compute the IK solutions. 0 is the default IK Solver and 1 is the IK with Constraints Solver. See solvers for more information.

properties: Dict

When solver is set to 1 (IK with Constraints Solver), this dictionary holds per-joint IK configuration values.

出力

out: Matrix4Array

すべての出力ジョイントのワールド空間トランスフォーム。

See also

APEXノード