[Houdini] Vellum Cloth の Stretch / Bend Rest Length Scale を比較してみた
概要
こちらで用意したものを使って比較してみようと思います
今回のサンプルファイルはこちら
環境
OS: Windows 10
Houdini: 19.5.435
内容
実際に出来た動画がこちら
48Frame以降にパラメータが反映されます
今回のケースだと Bend Rest Angle の違いはよくわかりませんね...
Rest Length Scale の用途
Distance拘束のRest Length(自然長)は、ポイント間の元々の距離になっています。 このスケールを使用することで、この距離を長くしたり短くすることができます。 0に設定すると、それらのポイントが引っ付くようになります。
Bend拘束のRest Angle(自然角)は、三角形の間の元々の二面角になっています。 このスケールを使用することで、この角度を広げたり狭めることができます。 0に設定すると、それらの三角形が平坦な面として扱われます。
要するに元の Mesh に対して Scale をかけることができます
例えば、柔らかめにシュミレーションをかけ、途中で Scale を小さくして物体に張り付かせる みたいなことも出来ます
#Houdini pic.twitter.com/0SfGW0iZKb
— てんちょー / 筑野(ちくの)えり💕🍱 (@shop_0761) 2021年11月28日
補足
今回のパラメータ変更は vellumsolver ノード内で行っています
これは Vellum のシュミレーション時には Rest Length Scale という
Attribute が存在しないためです
Houdini での実装詳細はこの辺とかが参考になるかなと
そのため、同等の Scale 処理を別の場所でやる必要がありそうでした
そこで、vellumsolver ノードをダブルクリックして、
内部で Vellum Constraint Properites ノードを使用しています
ここで注意すべきことは、stretch / bend は group で分けられているため、
Group を指定しておく必要があります
あとは keyframe を打つか、 VEX で書くかすると反映されます
VEXでの注意事項は下記です
- 表記名とパラメータ名は違う
@
は不要
if(@Frame > 48) { restscale = chf("rest_length_scale"); }
おまけ
また、DOP Network で1から組む版も用意してあります
こちらは Geometry Wrangle を使用しています
DOP 版の VEX は Rest Length Scale がないので、
@restlength *= chf("rest_length_scale");
としてしまうと
毎フレーム計算されてしまうので要注意です
Geometry Wrangle を使う場合、
どの Geometry に対して操作するかを指定する必要があります
今回は ContraintGeometry が対象なので、こんな感じです
よく見ると、
Vellum Constraint Properties ノードも ConstraintGeometry を指定していました
さらに Vellum Constraint Properties ノードも
内部的には掛け算をした結果を Rest Length として保持しており、
Rest Length Scale という Attribute 自体はないことがわかります
余談 - is_patch_installed -
rest length scale の処理を追う過程で、
Vellum Source > single_emission > is_patch_installed を見ていました
ここはちょっと特殊で処理が追いにくい (よくわかってない) のですが
Emission Type によって、patchname を持つ point が生成されるかどうか
分岐しているようでした
おそらく patch の compile block が呼ばれなくなるので、add_patchname も実行されず
is_patch_installed 単体が参照されたときには patchname がない
ということなのかな...?
まとめ
パラメータによって、適用方法が異なるのがちょっとわかりにくいポイントですね...
何かあれば Twitter までお気軽にどうぞ~ twitter.com