てんちょーの技術日誌

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

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

概要

こちらの続きです

shop-0761.hatenablog.com

環境

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

読んでいく

Weld Points

ドキュメントより

これ自体は拘束ではありませんが、weldアトリビュートを編集して、計算用にポイントを論理的に単一ポイントに結合します。 しかし、それらのポイントは独立したポイントの状態のままです。 さらに、これは、論理的に結合されたエッジの箇所にBend拘束を構築して、その結果を一枚の平坦なピースのように作用させることができます。 Vellum Post Process SOPは、シミュレーション後のそれらのWeld頂点を、レンダリングでジオメトリが繋がっているように見えるように繋ぎ直すことができます。

他と比べるとややノード量があります

create_welds

Constrain to Closest Point が有効なときは nearpoint で、そうでないときは自身の ptnum を使って __targetsrc グループから point を探し出します

すでに有効な weld or id を持っているときは、それを使います
なければ 上記で見つけた point を設定します

id Attribute がある : weld は point ID
id Attribute がない : weld は ptnum

値が1または自身を参照している場合は、接合なしを意味しますが、他のポイントからは、このポイント に 接合することができます。 idアトリビュートが存在しなかった場合は、この値はポイント番号を意味します。存在すれば、それはポイントIDです。

www.sidefx.com

collapse_welds

id があり、有効な ptnum が見つかれば、その値で weld を上書きします 自身と結合しようとしている weld を無効化しておきます

scale_stretch_breaking2

__stretchsrc に属しており、有効な weld がある場合に下記を設定します

  • breakthreshold (設定に応じてScaleする)
  • breaktype (Breaking の Type)

add_bend_constraints3

createDihedralConstraintFromNewlyWeldedPrimitives の話ですが、
Bend Across Triangles の createDihedralConstraint とほぼ同じ内容なので省略します

copy_bend_attributes

対象 prim から取得した point が属する prim を対象に __bendconstraints に属していない かつ type が bend のprimが持つ値を
合算し平均を取ったものを設定します

  • stiffness
  • dampingratio

reset_welded_restvectors

以前から少し出ていた restVector ですが、ここで再計算しておくようです

Struts

ドキュメントより

各ポイントが、自身のピースのメンバーで真っ直ぐな見通し線の方向にある反対側のポイントを検索します。 Struts(支柱)は、各ポイントとそのポイントの間にDistance拘束を構築します。 これは、完全にFEMによる解法を使わずに、オブジェクトの剛性と体積を表現した内部支柱のような、たくさんの楊枝を構築します。

  1. 対象としている point から Direction Attribute ( N ) から ray を飛ばし、
    最初に交差した prim を見つけます
  2. その prim が持つ point のうち対象と同一 class ではない (自身でもない) もので
    一番近い point (bestpt) を取得します
    Test Normals が有効な場合、
    bestpt の normal と Direction Atttribute の内積が 0 以上のものを採用します

対象としている point と bestpt を結び、下記を設定します

  • __stretchconstraints (group)
  • restlength (対象としている point と bestpt の距離) * Rest Length Scale (Stretch の Rest Length Scale の値)
  • type (ここでは distance)
  • Stiffness (Stretch の Stiffiness の値)
  • Damping Ratio (Stretch の Damping Ratio の値)

remove_duplicates にて、__stretchconstraints を対象に
primpoints で取得できるポイント番号が完全に一致するものを削除しておきます

Tips

各略称

tgt : target

Wrangle の Enforce Prototypes

houdinifx.jp

idtopoint

id Attribute があれば、その値をもとに ptnum を返します なければ、ptnumがidとして使用され、大体のケースはptnumがそのまま返ってきます

www.sidefx.com

Rewire Vertices

Fuse より自由に再接続できるノード

www.sidefx.com

まとめ

過去に見てきた処理と重複するとこがちらほら出てきました
思ったよりこのシリーズが長くなってきましたが、引き続き読んでいこうと思います

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