[Houdini] Vellum Constraints を読んでみた その5
概要
こちらの続きです
環境
OS: Windows 10
Houdini: 19.0.622
Redshift: redshift_v3.0.62 (たぶん)
読んでいく
Stitch Points
ドキュメントより
Distance拘束を使って同じジオメトリ内のポイントを縫合します。 これらのポイントは、実際には幾何学的に繋がっている必要はありません。 これは、ジャケットを閉じた状態に維持したり、ポケットがひらひらしないようにするのに役立ちます。
詳細な機能紹介
create_stitch_constraints
ノード までは Attach To Geometry
の create_target_constraints
ノード とほぼ同じです
createStitchConstraint
も createAttachConstraint
とほぼ同じです
共通設定は以下の通りです
- __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 ファイルもあります
Pressure
ドキュメントより
Define Pieces パラメータによって決定された各ピースに元々の体積を記録し、その体積を維持する(多くのポイントで定義された)拘束を構築します。 この拘束は全体的に適用されるので、風船のように1箇所を圧搾すると他の箇所が膨張します。 pressurescalePointアトリビュートを使用することで、ポイント毎に圧力拘束の効果をスケールさせることができます。 このアトリビュートを使用すれば面白い膨張効果を表現することができますが、例えばピン留めされていない風船のpressurescaleが片側だけほぼゼロになっていた場合だと不均衡なフォースを発生してしまうので注意して使用してください。
詳細な機能紹介
はじめに、 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 が返ります
uniqueval
vex だと nuniqueval と組み合わせて for を回して走査する使い方っぽいです
今回は wrangle が Numbers で nuniquevals で回数指定しているケースを見ました
printf
さすがにそろそろ困ってきたので、ログ出力したいな...とおもったらありました
参考
Group 構文 @__class=0 ^!__constraintsrc
これは @__class=0
かつ __constraintsrc
に属するもの
という意味です
個人的に分かりにくかったので図を用意しました
スペースを開けて条件を並べると結合(和集合)される
というのがポイントです (積集合だと思ってました)
そのため、 ^
を使い前のパターン条件を引き継ぎながら、
!
で打ち消すというやや遠回りな解決方法になっています
構文を日本語に直すなら、下記のような感じでしょうか
@__class=0
のグループから、__constraintsrc
をではない部分を差し引く
まとめ
今まで手元で雑に各 Constraints の設定をしていたんですが、
ちゃんとサンプルデータを元にしたほうが実挙動を把握する上で
便利そうなのでちゃんと用意しようと思いました...
数学で頭を抱えるならまだしも(?)
Houdini でも知らない技がたくさん出てきますね...
何かあれば Twitter までお気軽にどうぞ~ twitter.com