[Houdini] Vellum Constraints を読んでみた その10
概要
こちらの続きです
環境
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
読んでいく
hair
ドキュメントより
エッジ上の距離とエッジ間の屈曲で構成された拘束を生成します。 この屈曲には、エッジの捻じれも含まれるので、Torsion(ねじり力)効果を出すことができます。
参考
add_stretch_shear_constraints
__stretchsrc
を対象に
- 対象の point が 1つの prim にのみ属している
- ポリゴンである
- ポリゴンが開いている (閉じていない)
を満たす point を見つけます
その point と隣接する point を結ぶ polyline を追加し下記を設定します
- __stretchconstraints (group)
- restlength (polyline の長さ) * Rest Angle Scale (Stretch の Rest Length Scale の値)
- type (ここでは
stretchshear
) - stiffness (Stretch の Stiffiness の値)
- damping Ratio (Stretch の Damping Ratio の値)
add_bend_twist_constraints
__bendsrc
を対象に point と隣接する point を結ぶ polyline を追加し下記を設定します
- __bendconstraints (group)
- restvector * Rest Length Scale (Bend の Rest Length Scale の値)
- type (ここでは
bendtwist
) - stiffness (Bendの Stiffiness の値)
- damping Ratio (Bend の Damping Ratio の値)
TODO: computeBendTwistRestVector
の中身はあんまり分からず...
知っている方がいましたら、教えてほしいです...
この辺かな...
branchweld
attribute を持っていたら、createBranchWeldConstraints
を呼びます
createBranchWeldConstraints
まず weld と 対象の point を polyline で結び、下記を設定します
値はコードベタ書きです
- restlength : 0
- stiffness : 1e20 ( 1.0 * 1020 )
- dampingratio : 0.001
- type : branchstitch
その後、bend / twist に適切な point を探します
weld に隣接 point (neighbours) のうち、下記を満たすものです
- n → weld に向かう half edge のときの n
- neighbours が 1つしかないとき
見つかれば、computeBendTwistRestVector
を用いて restVector を計算します
角度上限を反映し、先程の2点を polyline で結び下記を設定します
- restvector
- __bendconstraints (group)
余談ですが、角度上限の条件式を軽く下記のようなコードで検証しました
float maxang = radians(180); float rad = radians(179); vector4 restvec = quaternion(rad, set(0, 1, 0)); vector4 v = qconvert(restvec); float length = length(v); printf("q %f \n", restvec); printf("v %f \n", v); printf("length: %d, maxang: %d\n", length, maxang);
q {0.000000,0.999962,0.000000,0.008727}
v {0.000000,3.124139,0.000000,1.000000}
length: 3.28028, maxang: 3.14159
と、想定している角度比較と計算誤差があるような...
(len がもう少し小さくなってほしいはず)
rad を 171 にすると length と等しくなります
まとめ
これでようやく肝になる部分は読み終わったはず...!
わからないところはいくつかありますが...
以後は Constraint の Output / GUIDE 周りの話になるかと思います
何かあれば Twitter までお気軽にどうぞ~ twitter.com