よくConstraintを忘れるのでメモがてら
Glue, Soft, Hardと基本の3つと、Pinとかいろいろほかにもあります。 とりあえず破壊でよく使う基本3つ
Houdini 17くらいまではSoftがなく、ConstraintもPrimitive Wrangleで設定してた気がする。
テストシーン


hip fileはこちら(Houdini 18.0.287)
Constraint Geometryの作成
もっとも単純なConnect Adjacent Piecesを使用する。
使用する際、最低限設定する必要があることは以下2つ
- Connection Type
以下画像を参考に、ラインを生成する場所
- Length Attribute
これがないとSoft, Hardコンストレインが正常に動作しない
Search Radius, Max Search Points, Max Connectionsは適宜設定


その他、Find Boundary Connectionsにチェックをいれ、
Cluster Attributeにアトリビュートを入れると指定したアトリビュートが異なるピース間でConstraint Geometryを作成できます。
窓ガラスと窓枠の間にConstraint Geometryを作成する際などに使えます。

他にもHoudini17.5から nameなどの条件でConstraint Geometryを作成する
自分でラインを作成してから使用する2つがある。
Constraint Attributesの作成
今は、RBD Constraint Propertiesで簡単にアトリビュートを設定できる。
まず最初にConstraint Typeで使用したいコンストレインの種類を選択する
Constraint NameはDOP内での指定に必要なので基本的には変更しない。
その他、よく使うもののみ説明
| Constraint Type | イメージ | 効果 |
|---|---|---|
| Glue | 接着剤でくっついてる | 一定以上の力で分離する |
| Soft | スライムやバネ | 柔らかく元に戻ろうとする |
| Hard | ずれるだけで分離しない | 固く元に戻ろうとする |
Glueの場合

| パラメーター | 説明 |
|---|---|
| Strength | くっつく力の強さ。-1で絶対に離れなくなる。 |
| Strength Variuance | くっつく力にランダムさを加える |
| Half Life | くっつく力が減衰する速さ |
| Propagation Rate | くっつく力が広がる速さ |
| Propagation Iterations | くっつく速さが広がる反復回数 |

Switch Constraint Type When Brokenにチェックをいれると
Glue Constraintが一定以上の強さで分離した箇所からSoft Constraintに移行する。
その後のパラメーターはSoft Constraintと同じで、DOP内でもGlue, Soft両方の設定をする必要がある。
Softの場合

| パラメーター | 説明 |
|---|---|
| Degrees of Freedom | コンストレインが位置、回転、もしくは両方に影響するか |
| Stiffness | 低いとびろーんとした弱いバネのようになり、高いとぼよんぼよんした強いバネになる |
| Damping Ratio | バネの力の減衰率、0は減衰なし、1が程よい感じ |
Angular Stiffness, Angular Damping Ratioは回転への影響のみ変更する場合に使用
Plasticityは次回別の機能と一緒に紹介
Hardの場合

| パラメーター | 説明 |
|---|---|
| Degrees of Freedom | コンストレインが位置、回転、もしくは両方に影響するか |
| Constraint Force Mixing | あげると固い感じになる |
| Error Reduction Parameter | 元に戻ろうとする強さ |
Hardはちょっとわかりづらい。
Constraint Force Mixingではなく、Error Reduction Parameterを調整することのが多いかもしれない。
Constraintを使用する

- Constraint Networkノードを画像のように接続
- Geometry Sourceまたは、SOP PathでSOP上のConstraint Geometryを指定する。
- Constraint Networkの第二入力に使用したいコンストレインタイプのノードを接続する。
- 複数の種類を使う場合はMergeでつなぐ

Bullet Soft Constraint Relationship
GlueとHardの際はデフォルトのままだとConstraint NameとData Nameが異なるため、
RBD Constraint Properties等で設定したConstraint Nameと、
Constraint RelationshipのData Nameを同じにする必要がある。

Constraintを削除する
Glue ConstraintはStrength以上の力が加わると自動で分離するが、
SoftとHardはDOP内で、SOP Solverを使用し切ってあげないとそのままつながり続ける。
- SOP Solverを作成し、Constraint Networkの第三入力につなぐ。
- SOP Solverの中に入り、relationship_geometryにPrimitive Wrangleを接続する。
- Primitive Wrangleに後述するWrangleを記述してConstraint Geometryを削除する。
- 必要であればPrimitive WrangleにOutputを接続する。


削除処理のWrangle

if(@distance > chf("distance")) { removeprim(0,@primnum,0); }
@distanceの部分を以下のように書き換えることで距離以外で削除することができる。
複数の指定も可能で、これ以外の自作の条件で削除することもできる。
とりあえずなんでもいいのでremoveprimでPrimitiveを削除すればいい。
| Attribute | 説明 |
|---|---|
| angle | 角度(ラジアン) |
| distance | 距離 |
| force | フォースの強さ |
| impact | 衝撃の強さ |
| torque | 回転の大きさ |