てんちょーの技術日誌

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

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

概要

こちらの続きです

shop-0761.hatenablog.com

環境

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 or triarap or triarapnorm 前述のエネルギーモデルを考慮しての命名)
  • __stretchconstraints (group)
  • stiffness (Stretch の Stiffiness の値)
  • damping Ratio (Stretch の Damping Ratio の値)

www.sidefx.com

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