てんちょーの技術日誌

自分がつまづいたこととかメモ

[Houdini] Vellum Constraints を読んでみた その6

概要

こちらの続きです

shop-0761.hatenablog.com

環境

OS: Windows 10
Houdini: 19.0.622
Redshift: redshift_v3.0.62 (たぶん)

読んでいく

Shape Match

ドキュメントより

Define Pieces パラメータによって決定された各ピースに対して、ポイントを元々の(静止)形状まで引っ張り戻す拘束を作成します。 この拘束を使用することで、例えばCloth拘束などの既存拘束に剛性を足したり、この拘束自体で他のVellumジオメトリと相互作用できるほぼ剛体のオブジェクトを作成することができます。


Tip Shape Match拘束は、通常では Mass を Calculate Uniform に設定し、整合性の取れたサイズのジオメトリで非常に上手く動作します。 この類のジオメトリを生成したいのであれば、Remesh SOPを使用すると良いでしょう。


Tip この拘束タイプを使用した効果的なワークフローは、シミュレーション出力に対してExtract Transform SOPを使用してピース毎に向きを持ったポイントを生成してから、 Transform Pieces SOPを使用してオリジナルのレンダージオメトリをそれらのポイントまでトランスフォームさせることです。 このワークフローだと、拘束がコリジョンポイントまたはピンにおいて剛性の維持に失敗した際の何かしらの小さな変形が起きるのを回避することもできます。

内容としては Pressure に近いです
各 piece ごとに全頂点を polyline で結び、下記を設定します

  • __stretchconstraints (group)
  • restlength (各頂点の座標) * Rest Length Scale (Stretch の Rest Length Scale の値)
  • type (ここでは shapematch)
  • Stiffness (Stretch の Stiffiness の値)
  • Damping Ratio (Stretch の Damping Ratio の値)
  • restVector ({0, 0, 0, 1})

Glue

ドキュメントより

各ポイントが、自身のピースのメンバーでない隣接ポイントを検索します。 これは、各ポイントをその隣接に維持させるDistance拘束を構築します。 これは、プロキシミティ(近接度)で自動的にポイント間を接着させるシステムを構築する時、特に分離を結合させる時に役立ちます。

cluster attribute を使う場合、 piece attribute を持っている必要があります

createGlueConstraints はちょっと長いですが、
大半は不正チェックとランダム性を出すための処理です
コメントが詳しいので詳細はそちらに譲ります

対象の point から nearpoints で良さそうな point を見つけられたら、polyline を結び
下記を設定します

  • __stretchconstraints (group)
  • restlength (対象の point と 良さそうなpoint の距離) * Rest Length Scale (Stretch の Rest Length Scale の値)
  • type (ここでは stitch)
  • Stiffness (Stretch の Stiffiness の値)
  • Damping Ratio (Stretch の Damping Ratio の値)

Constraints Per Point より多い分は prim を削除しておきます

Tips

公式チュートリアル

今更ですがチュートリアルを見つけたので貼っておきます

www.sidefx.com

Group Name を $OS で指定する

こうしておくとちゃんとノードの名前を変えるようになるし、
opname で指定するときの視認性もよさそうです (手元では preset 登録しました)

まとめ

VEX を見ていると各 preset でもコードの書き方が違うので
複数人で作ってるのが読み取れます
VEXのコーディング規約出してほしいな...

何かあれば Twitter までお気軽にどうぞ~ twitter.com