[Houdini] Vellum Constraints を読んでみた その3
概要
こちらの続きです
環境
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 の値)
__stretchconstraints
と restlength
に関しては、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つの平面(またはその部分集合)がなす角度である)
少し複雑だったので、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
houdini などで出てくる hedge
は ヘッジではなく、 half edge
の略称みたいです
まとめ
ようやく気になっていた拘束の実態について触れられるようになってきました
ただ、ハーフエッジについて勉強していたり、コードを図に起こしたりで
ちょっとあっさり目になってしまいました...
何かあれば Twitter までお気軽にどうぞ~ twitter.com