Houdini Vellum Attributesの比較

7 min読了の目安(約7000字TECH技術記事

前書き

HoudiniのVellum Simulationを行う際のパラメーターやAttributeを, レンダリングして比較を行う
Vellum Attributesといっても膨大なので, Collision以外の, 特にConstraintType:Cloth のときに 挙動に大きく影響をもたらす, 以下のものを比較する

  • Substeps
  • 三角メッシュ vs 四角メッシュ
  • @mass
  • トポロジの違い(density)
  • @stiffness
  • @dampingratio

Vellum Solver Settings

Substepsの比較

はじめに, VellumSolverのSubstepsの違いによるシミュレーション結果の比較を行う

Tldr

  • デフォルトの1はプレビュー用にとどめ, 5以上が好ましい
  • 必要以上に大きくしてもシミュレーション結果は変わらないので, シミュレーションによって適切な設定を見つける
  • 結果が大きく変わるので, 優先的に設定を行う

公式ドキュメントによると, 5以上に設定せよとの記述が見られる

The default substeps can be very aggressive, usually if the Vellum solver is too stretchy, raising substeps to 2 or 5 is a good first start.
Vellum Solver SOP

A good starting point for clothing is 5 substeps, because that gives the solver a chance to work on a smaller timestep, which helps it resolve the energy in a more realistic fashion.
Cloth simulation


Substeps:1~20の比較

  • デフォルトの12では, 衝突を正しく処理できておらず, 布が伸びている
  • 5以上であれば, ほぼシミュレーション結果は変わらず, 自然なシミュレーションのようである
  • Substepsを大きくすると, 布の変形に対する正確性が増し, 計算時間が増える

以降の比較では基本的に, Substeps=5以上を使用する

Vellum Geometry Attributes

Vellum Geometryで使用されるAttributeについての比較

四角ポリゴン vs 三角ポリゴン

VellumObjectとして使用するソースメッシュのトポロジーが, 三角ポリゴンあるいは四角ポリゴンでの比較

Tldr

  • こだわりがなければ三角ポリゴンを使用する
  • 高解像度ではそこまで差がでないので, あまり気にしなくて良い


上段が三角メッシュ, 下段が四角メッシュ

  • 高解像度になるにつれ, 差異はほぼ見られない
  • triのほうがきれいかも? という印象がある

公式ドキュメント内に積極的な指定は見当たらないが, 三角形についての言及は以下のページで見られる

そこまでの差異が見られないという点でも, 以降の比較では三角ポリゴンでのシミュレーションを行う

Mass(@mass) の比較

@massPointAttributeの差異の比較

Tldr

  • 布の質量/慣性を定義する重要なAttribute
  • 結果が大きく変わるので, 優先的に設定を行う


massのレンダリング比較

massとは

  • 質量
  • 単位はKg
  • 慣性(Inertia)の大小を表現する値
  • massが大きいほど, 慣性が大きい, 動きにくい
  • 運動の第2法則 - Wikipedia

Houdiniでは, PointAttributeである@massで, 各Pointごとに設定される

Topologyの違いの比較

低解像度, 高解像度でのシミュレーション結果の比較を行う
Houdini18.0で導入された, MassのCalculate Uniform/Varying という計算方法の確認が目的

Tldr

  • Calculate Varyingを選択して, Densityを設定すると, lo-res / hi-res の影響をそこまで受けずに, 一様な@massの定義が可能
  • 解像度の違いによる見た目の違いについては, どうしても発生する

Massに直接値を代入する(Set Uniform)

各Pointの@massを直接設定する方法

  • Houdini18以前ではこのモードがデフォルトであった
  • 各Pointに一様な@massが代入されてしまうため, 低解像度と高解像度のモデルでは, 総質量が変化してしまうため, シミュレーション結果が大きく変わってしまう

densityとは

MassのModeがCalculate Varying/Calculate Uniformの際に使用されるパラメーター
Houdiniの単位(Units)の二乗あたりの布の質量を定義する

  • デフォルトはmなので, 1m^2 あたりの kg を設定する

densityの値をもとに, 各Pointに@massを分配して設定する

  • VellumObjectトポロジーの密度の影響を受けずに, 一様な質量の設定が可能

Deinstyを使用する(Calculate Varying)

densityを使用して, トポロジによらず, VellumObject自体の質量を定義する

  • Houdini18以降のデフォルトのモード
  • Varying / Uniformの違いは, つながっている辺の数を考慮して分配するかどうか
    • Uniformでは, ( 総面積 * Density ) / @numpt という式で, 各pointに@massを分配
    • Varyingでは, 更にPointがつながっている辺の数を加味して@massを計算する

Topologyの違いによる差異はみられど, 慣性の感じがかなり近い結果になっている

Vellum: Constraint Attributes

Vellum Constraint Geometryで使用されるAttributeの比較

Vellum Constraints SOP ノードにより,拘束用のジオメトリが計算/生成される

  • Constraint Type パラメーターにより, 生成される拘束のタイプが異なる
  • ConstraintType:Clothのばあい, bend (Bend Across Triangles) / strech (Distance Along Edges or Trangle Strech) 2種類のConstraint Geometry が生成される
    • PrimGroupでbend / strech に分けられている
    • bend / strech で共通名のAttributeを使用する
    • Vellum Constraints SOPでは, bend / strech それぞれのAttributeを設定することができる

H16時代の(Vellum以前の)Clothのページで, シミュレーションが違えど似たようなAttributesについてのページがある

Constraint Typeはたくさんあるので, ConstraintType:Clothのときにデフォルトで使用される, Bend Across Triangles拘束と, Distance Along Edges拘束の2つについての比較を行う

Stiffness(@stiffness)

0 ~ 1e+10 の範囲で設定するPrimAttribute

How strongly to enforce the constraint. High values may not be achieved with a given iteration count, but low values should stop getting stronger at a certain iteration level.

ConstraintGeometryで定義された形状に対する収束度合いの強さを定義するAttribute

tldr

  • 値を大きくすればするほど, ConstraintGeometryの形状を尊重する (元の形状を保つ)
  • 小さい値であれば, やわらかいとろとろな布, 大きくすれば, かちかちプラスチック下敷き となる
  • 結果が大きく変わるので, 優先的に設定を行う
  • Intensity と同義語と考えて良さそう

Strech Stiffness (Distance Along Edges)

Strech(伸び) の変形強度

  • Distance Along Edgesの場合, Constraint Geometryのエッジ長をどれだけ尊重するかどうか

デフォルトは1e+10

  • 最大値の1e+10(10億)がデフォルトになっている
  • これは, ほぼ伸びが発生しない設定

Bend Stiffness (Bend Across Triangles)

Bend(曲げ) の変形強度,

  • それぞれの隣り合う三角ポリゴン同士の角度を保とうとする強さ

デフォルトは0.0001

100を超えてくると, ほぼ曲がらない下敷きのような挙動になる

Damping Ratio(@dampingratio)

0.0 ~ 1.0 の範囲で設定するPrimAttribute

Higher than 0.1 likely stops the constraint from converging. Helps suck energy from system.

tldr

  • 値を大きくすればするほど, 運動エネルギーが逃げる量が増える
  • 小さい値であれば, 各ポイントがあばれて, 大きい値であれば, おとなしい結果となる

Strech Damping Ratio (Distance Along Edges)

デフォルトは0.001

Bend Damping Ratio (Bend Across Triangles)

デフォルトは0.01

Bend / Strech Damping Ratio