[Houdini] Vellum Constraints を読んでみた その8
概要
こちらの続きです
環境
OS: Windows 10
Houdini: 19.0.622
Redshift: redshift_v3.0.62 (たぶん)
読んでいく
途中で出てくる Model については Triangle Stretch の項でまとめて紹介します
Tetrahedral Fiber
ドキュメントより
各四面体が、ポイント上のmaterialWで指定された方向(このアトリビュートがなければ{0, 0, 1})に沿って平坦化を試みる拘束に変換されます。 これらの拘束をVellum Constraint Propertyを使って、シミュレーション中にそれがアニメーションされるほどに弱い剛性を設定することで、ボリュームの収縮効果をシミュレーションすることができます。
注) Houdini 19.0.622, 19.0.720 では Tetrahedral Fiber を含む Vellum Solver を
実行するとHoudini がクラッシュする可能性があります
(手元の環境の問題かもしれないですが)
2022/11/13 追記
どうやらグラボのドライバーとのかみ合わせが悪いようです
とりあえず手元では下記で動いているっぽいです
Geforce Game Ready ドライバー 526.47
Houdini 19.0.796 (daily)
事前準備として、まず Tet Conform
でポリゴンを四面体にしておきます
次に materialW
Attribute を作成します(Attributeがない場合は自動で {0,0,1} で作成されます )
この materialW
は最終的にジオメトリの local space に変換されることに注意です
実際の処理は、対象となる point が
- 四面体 (typeId == 21) である
__constraintsrc
属している- 4点からなる prim に属している
ときに行われます
computeTetRestMatrix
ここでは p3 を各点から打ち消す (p3 を原点に戻す) ことで、四面体の体積の公式である
に落とし込むことができます
(Mを転置しているのはおそらくこの後の計算で便利だからかな...?)
の場合は、 逆行列が存在しないので打ち切ります
参考
そして、 restMatrix : M の逆行列、 volume: 四面体の体積、として値を返します
computeTetFiberRestLength
materialW
について軽く触れておきます
ここでは materialW
がすでにあれば、各頂点の値を全て足して正規化します
その後、material W は restM の転置行列と掛け算することで、座標変換されます
すべて成功した場合、4点は tet
として addprim されます
その prim に対して下記を設定します
- __stretchconstraints (group)
- restlength (四面体の体積)
- type (ここでは Non-LinearARAP なら
tetfiber
, それ以外ならtetfibernorm
) - Stiffness (Stretch の Stiffiness の値)
- Damping Ratio (Stretch の Damping Ratio の値)
- restvector (materialW)
Tetrahedral Stretch
Model によって type が変わります
- Non-Linear ARAP :
tetarapnl
- Linear ARAP :
tetarap
- Scale-Invariant ARAP :
tetarapnorm
さらに Preserve Volume
が有効になっていれば、 上記文字列の末尾に vol
が付与されます
処理内容は computeTetFiberRestLength
とほぼ同じです
差は Stretch の Rest Length Scale
が考慮されるくらいです
- __stretchconstraints (group)
- restlength (四面体の体積) * Rest Length Scale (Stretch の Rest Length Scale の値)
- type (Modelによって異なる)
- Stiffness (Stretch の Stiffiness の値)
- Damping Ratio (Stretch の Damping Ratio の値)
- restvector ({0, 0, 0, 1})
Tips
Softbody
ドキュメントより
各四面体は、指定した剛性に応じて伸びや捻じれを除去することで四面体をAs-Rigid-As-Possible(ARAP:可能な限り硬く)に維持する拘束に変換されます。 Preserve Volume が有効になっている場合、 Tetrahedral Volume 拘束の動作方法と同様に、この拘束は、さらに非常に強い内部剛性を使いつつ、指定した Damping Ratio を使って体積の維持を試みます。
まとめ
ようやく Constraint Type ごとの分岐に終わりが見えてきました...
何かあれば Twitter までお気軽にどうぞ~ twitter.com