てんちょーの技術日誌

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

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

概要

こちらの続きです

shop-0761.hatenablog.com

環境

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

読んでいく

Stitch Points

ドキュメントより

Distance拘束を使って同じジオメトリ内のポイントを縫合します。 これらのポイントは、実際には幾何学的に繋がっている必要はありません。 これは、ジャケットを閉じた状態に維持したり、ポケットがひらひらしないようにするのに役立ちます。

詳細な機能紹介

www.sidefx.com

create_stitch_constraintsノード までは Attach To Geometrycreate_target_constraintsノード とほぼ同じです

createStitchConstraintcreateAttachConstraint とほぼ同じです

共通設定は以下の通りです

  • __stretchconstraints (group)
  • Stiffness (Stretch の Stiffiness の値)
  • Damping Ratio (Stretch の Damping Ratio の値)

__stretchsrc かつ TargetGroup な point を対象に下記を調べます

Use Closest Location on Primitive / Constrain to Closest Point が共に有効なとき

xyzdist で今見てる point から一番近い primtive を取得します
このときの primitive は三角ポリゴンである必要があります

またポリゴンが閉じていないときは UV を remap しておきます

  • restlength (xyzdist の戻り値) * Rest Length Scale (Stretch の Rest Length Scale の値)
  • type (ここでは ptprim)

Constrain to Closest Point のみ有効のとき or 共に無効のとき

  • Constrain to Closest Point が有効 : nearpoint で一番近い point を取得
  • 共に無効 : AttachするジオメトリのTargetGroup な point の中から、
    対応する index の point を見つけようとする

  • restlength (一番近いpointまでの距離) * Rest Length Scale (Stretch の Rest Length Scale の値)

  • type (ここでは stitch)

良さそうな動画を見つけたので貼っておきます

Vellum Constraint Features | John Lynch | H18 Masterclass - YouTube

サンプルの hip ファイルもあります

www.sidefx.com

Pressure

ドキュメントより

Define Pieces パラメータによって決定された各ピースに元々の体積を記録し、その体積を維持する(多くのポイントで定義された)拘束を構築します。 この拘束は全体的に適用されるので、風船のように1箇所を圧搾すると他の箇所が膨張します。 pressurescalePointアトリビュートを使用することで、ポイント毎に圧力拘束の効果をスケールさせることができます。 このアトリビュートを使用すれば面白い膨張効果を表現することができますが、例えばピン留めされていない風船のpressurescaleが片側だけほぼゼロになっていた場合だと不均衡なフォースを発生してしまうので注意して使用してください。

詳細な機能紹介

www.sidefx.com

はじめに、 connectivity で point に attribute を付与します
(事前に自分でやっておいてもよいです)

add_pressure_constraints1 にて、各 class attribute に相当する group ごとに処理をします 下記を設定します
volume attribute はかなり前にcompute_volume ノードで計算済みです

  • __stretchconstraints (group)
  • restlength (各頂点の volume attribute の和) * Rest Length Scale (Stretch の Rest Length Scale の値)
  • Stiffness (Stretch の Stiffiness の値)
  • Damping Ratio (Stretch の Damping Ratio の値)

Tips

Attribute VOP の Vex Source

こうすることで、 既存の Wrangle の処理を参照して実行できるようです
Reference Copy でもいいような気もしますが...

nuniquevals

expression で見たことないやつが出てきたので貼っておきます
固有の値の数...という日本語がわかりにくいのですが、
例えば name attribute が piece0, piece1, piece2 とあったときに
nuniquevals では 3 が返ります

www.sidefx.com

uniqueval

vex だと nuniqueval と組み合わせて for を回して走査する使い方っぽいです
今回は wrangle が Numbers で nuniquevals で回数指定しているケースを見ました

www.sidefx.com

printf

さすがにそろそろ困ってきたので、ログ出力したいな...とおもったらありました

参考

www.sidefx.com

Group 構文 @__class=0 ^!__constraintsrc

これは @__class=0 かつ __constraintsrc に属するもの
という意味です

個人的に分かりにくかったので図を用意しました

スペースを開けて条件を並べると結合(和集合)される
というのがポイントです (積集合だと思ってました)

そのため、 ^ を使い前のパターン条件を引き継ぎながら、
! で打ち消すというやや遠回りな解決方法になっています

構文を日本語に直すなら、下記のような感じでしょうか

@__class=0 のグループから、__constraintsrc をではない部分を差し引く

www.sidefx.com

まとめ

今まで手元で雑に各 Constraints の設定をしていたんですが、
ちゃんとサンプルデータを元にしたほうが実挙動を把握する上で
便利そうなのでちゃんと用意しようと思いました...

数学で頭を抱えるならまだしも(?)
Houdini でも知らない技がたくさん出てきますね...

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