てんちょーの技術日誌

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

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

概要

こちらの続きです

shop-0761.hatenablog.com

環境

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

読んでいく

Distance Along Edges

ドキュメントより

表示ジオメトリ内の各エッジを、そのエッジ長を維持するDistance拘束に変換します。

__stretchsrc かつ __constraintsrc な point に対して、polylineで結び
下記を設定しています (add した polyline は prim です)

  • __stretchconstraints (group)
  • restlength (polyline の線分の長さ) * Rest Length Scale (Stretch の Rest Length Scale の値)
  • type (ここでは distance )
  • Stiffness (Stretch の Stiffiness の値)
  • Damping Ratio (Stretch の Damping Ratio の値)

__stretchconstraintsrestlength に関しては、pbd_constraints.h 内で設定しています
今後出てくる type の処理も同様に行われていそうです

String

ドキュメントより

処理の軽いヘアー拘束を生成します。 この拘束は、エッジ上の距離とエッジ間の角度を維持します。 しかし、捻じれ拘束がないので、エッジが自由にスピンしてしまいます。

とねじれ拘束がないようなので、用途によっては注意が必要です

Distance Along Edges をもとに更に加工します

見た目は Distance Along Edges と同じですが、
type : angle 分の polyline が増えています

__bendsrc かつ __constraintsrc な point に対して、

注目している点(midpt)と隣接点2つ(startpt, endpt)からなる2直線の内積(degree) が
Bend の Max Branch Angle より小さいとき

(computeAngleRestLength の図)

polylineで3点を結び下記を設定しています

  • __bendconstraints(group)
  • restlength (startpt->midpt, midpt -> endpt のベクトルの内積 range: -π ~ π) * Rest Length Scale (Stretch の Rest Length Scale の値)
  • type (ここでは angle )
  • Stiffness (Bend の Stiffiness の値)
  • Damping Ratio (Bend の Damping Ratio の値)

Bend Across Triangles

__bendsrc な point に対して、属している prim を取得します
各 primが下記を満たしていれば、処理を行います

  • 3頂点からなる prim である
  • ↑の point が全て __constraintsrc に属している
  • half edge が有効である
  • 面が閉じている

ドキュメントより、これを計算するようです

三角形の各ペア(入力が四角形以上であれば、暗黙的な三角形のペア)がその2つの三角形間の初期の二面角を維持する拘束を生成します。


二面角(にめんかく、英: dihedral angle)は、2つの平面(またはその部分集合)がなす角度である)

ja.wikipedia.org

少し複雑だったので、createDihedralConstraint で用いられている
computeDihedralRestLength を図にしてみました
この面の角度を維持するように restlength が計算されているようです

上記図の pt0~pt3 を polyline で結び下記を設定しています

  • __stretchconstraints (group)
  • restlength (二面角の大きさ range: -π ~ π) * Rest Length Scale (Stretch の Rest Length Scale の値)
  • type (ここでは distance )
  • Stiffness (Stretch の Stiffiness の値)
  • Damping Ratio (Stretch の Damping Ratio の値)

Pin to Target

ドキュメントより

指定したポイントが、ターゲットジオメトリ内の呼応するポイントにピン留めされます。 Vellum Solverのターゲットジオメトリは、通常では1番目の入力なので、そのアニメーションに一致しますが、これを上書きすることができます。

特に何もせずそのまま

Tips

ハーフエッジ

ハーフエッジについてあんまり良くわかってなかったので、
こちらを読みました、面白かったです

筑波大の三谷研の資料です

https://mitani.cs.tsukuba.ac.jp/lecture/jikken/polygon_operation.pdf

twitter.com

houdini などで出てくる hedge は ヘッジではなく、 half edge の略称みたいです

まとめ

ようやく気になっていた拘束の実態について触れられるようになってきました
ただ、ハーフエッジについて勉強していたり、コードを図に起こしたりで
ちょっとあっさり目になってしまいました...

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