[Houdini] Vellum Constraints を読んでみた その9
概要
こちらの続きです
環境
OS: Windows 10
Houdini: 19.0.622
Redshift: redshift_v3.0.62 (たぶん)
一部下記で確認しています
Geforce Game Ready ドライバー 526.47
Houdini 19.0.796 (daily)
Vellum Open CL Error on new install | Forums | SideFX
読んでいく
Triangle Stretch
ドキュメントより
各三角形は、指定した剛性に応じて伸びや捻じれを除去することで三角形をAs-Rigid-As-Possible(ARAP:可能な限り硬く)に維持する拘束に変換されます。
Clothに行きたかったんですが、前段としてこちらを把握しておく必要があります
Triangle Stretch には下記のようにエネルギーモデルがあり、
迷ったら Scale-Invariant ARAP にするのが良さそうです
Scale-Invariant ARAP
解を求める時に三角形の面積や四面体の体積を考慮することで複数のスケールでも剛性値が同じような挙動になるAs-Rigid-As-Possibleモデル。 通常では、このオプションがたいていの材質(皮膚や筋肉など有機的な材質を含む)に対して最善の選択肢となります。
ほぼ computeTetFiberRestLength
と同じですが、
computeTriRestMatrix
部分だけ異なります
fromTriangleSpaceXform
p0, p1, p2 からなる面からワールド座標系に変換するための matrix を計算します
computeTriRestMatrix
fromTriangleSpaceXform
の結果は直交行列のため、
転置を取ると逆行列と同値になります
ここではパフォーマンスの観点から invert
ではなく、
transpose
を使っているようです
その後、xy平面へ変換し行列式と、restMatrix を詰めておしまいです
2x2 の行列の行列式は、下記のように平行四辺形の面積と同義のため、
1/2 倍することで三角形の面積を求めています
余談ですがこの関数自体がたぶんどこかのコードのコピペなので、
matrix2 M を作るときの transpose は不要なんじゃないかな...?
すべて済むと下記を設定しています
- restlength (三角ポリゴンの面積)
- restvector (restlength の計算に用いた 2x2 の行列を vector4 として保持)
- type (ここでは
triarapnl
ortriarap
ortriarapnorm
前述のエネルギーモデルを考慮しての命名) - __stretchconstraints (group)
- stiffness (Stretch の Stiffiness の値)
- damping Ratio (Stretch の Damping Ratio の値)
cloth
ドキュメントより
Distance Along Edges 拘束と Bend Across Triangles 拘束の両方で構成された拘束を生成します。
Stretch Type によって、
Distance Along Edges / Triangle Stretch のどちらかの設定を引き継ぎます
その後、Bend Across Triangles と同様の設定をします
まとめ
Triangle Stretch 自体は constraint type のうち、早めに見ていたんですが
どうしても内容が分からず合間に行列の勉強をちまちましていました...
いざ身構えて cloth を改めて見に行ったら、以前やった内容の流用だったので
あっさり終わってしまいました...
何かあれば Twitter までお気軽にどうぞ~ twitter.com