On this page | |
Since | 17.0 |
Vellum Solversは一種のPOP Solverであり、内部三角形、エッジ干渉、明示的な拘束ジオメトリに対応しています。
Geometryデータには、シミュレーションのダイナミクス系アトリビュートをPointアトリビュートとして格納します。 さらには干渉ジオメトリも格納するので、その三角形またはポリラインメッシュを使用して、干渉の検出と解決を行ないます。 しかし、それらのポイントを一緒に維持させる方法は、別のConstraint Geometryデータで決定されます。 Constraint Geometryデータは、そのGeometryデータとポイントが1対1で対応しているようにしてください。 Constraint Geometryデータのポイントは、ソースポイントの特定のプロパティ(例えば、距離や曲げ角度)を維持するルールとして解釈されます。
POP Forcesをソルバ入力に接続することで、そのオブジェクトの挙動を調整することができます。
通常では、Vellum Object DOPを使って空っぽのVellumオブジェクトを作成し、Vellum Source DOPsを使って、このオブジェクトに1つ以上のジオメトリを追加します。
パラメータ ¶
Common ¶
Enable Collisions
衝突検出を行なうかどうかを制御します。
Self Collisions
自己衝突を検出するかどうかを制御します。
Time Scale
Vellumソルバの実効時間をスケールします。 これを使用することで、バレットタイムのような効果を出すことができて、Houdiniのプレイバーとは異なる時間レートでVellumソルバの物理計算が実行されます。 値を2にすると、布が2倍速で落下するようになり、0.1にすると、0.1倍速で遅くなります。
Velocity Damping
動的なVelocityを強引に減少させる手法。 この量が直接Velocityにスケールされるので、急な移動が迅速に減衰します。
Iterations ¶
Substeps
各フレームをこのサブステップの数で分割します。 高速移動する衝突オブジェクトまたは急なフォースには、サブステップを上げる必要があります。
デフォルトのサブステップだと、非常に挑戦的な設定になっており、もしVellum Solverがあまりにも伸縮が大きいようでしたら、 通常だとサブステップを2とか5に上げると、ちょうど良く始めることができるでしょう。
Constraint Iterations
各サブステップ内で、この回数だけ拘束が実行されます。 硬い拘束を収束させるには、この反復回数を上げる必要があります。 最初に設定する目安はジオメトリの直径です。要するに、一番遠くのポイントまでのエッジの数です。
Smoothing Iterations
Constraint Iterationsは、収束が早いガウス・ザイデル法をデフォルトで使用しています。 しかし、剛性が高すぎたり、不可能な設定が原因で完全に収束しなかった場合、ひどい見た目の三角形でエラーを残してしまいます。 Smoothing Iterationsは、収束が遅いけど、もっと感じの良い方法でエラーを残すヤコビ法を使用しています。 デフォルトの10回は、エラーを滑らかにしますが、全体的な Constraint Iterations の回数が非常に多い場合は、この回数も上げる必要があります。
Collisions ¶
Collision Passes
実行する衝突検出パスの数。この衝突検出パスは、拘束反復と交互に行なわれます。 衝突検出は処理が重いので、この数を最小限に抑えるのが良いです。 しかし、交互に頻繁に処理することによって、小さいColliderが非伸縮拘束に対して無駄に負荷をかけてしまうテントポールのような現象を回避するのに役立ちます。 実際に試してみると、ほとんどの状況において10が適切であることが分かり、品質を上げるならサブステップを上げることで解決されることが多いです。
Post Collision Passes
すべての拘束が実行された後に、最後決戦の衝突検出が行なわれます。 衝突が最も目立つ失敗モードになる場合が多くて、次のフレームでは交差していないジオメトリから開始できるのが理想です。 そのため、最終クリーンアップのパスによって、それらの要件を成し遂げることができます。 私どもは、このパスの数は“積み上げる層の数 + 2”が妥当であると分かりました。 これによって、下側にあるColliderが、その上に積み上げられた層を完全に波立てるようにする伝搬させることができます。
Polish Passes
ある衝突パスにおいて、ある衝突ペアが完全に解決できないことがあります。 この数だけ追加したColliderペアのパスは、その衝突ペアが解決されるまで実行されます。 これらのパスはアクティブなColliderに対してのみ実行されるので(そして、新しい衝突検索が実行されないので)、非常に計算が軽いです。
Layer Shock
layer
整数Pointアトリビュートを使って、異なる層の布に属するポイントを示すことができます。
この番号が大きいほど、上層の布を参照します。
Layer Shockは、衝突を評価する際に、低いレイヤー番号ほど何倍も重くするので、高いレイヤー番号が低いレイヤー番号をよけるようになります。
他のダイナミクスは、このレイヤー番号の影響を受けません。
レイヤー番号の差分は、その2つの布間のレイヤーの数に関係なく修正されます。
この差分によって、一方向のシミュレーション、完全双方向のシミュレーションの制御方法が決まります。
Friction ¶
Static Threshold
完全摩擦が適用される閾値。 接線Velocityと法線インパルスの比率がこの閾値未満の時、接線Velocityが完全に摩擦から除去されます。 これは、重力だけでスライド可能な勾配角度のtan()のようなものです。
Dynamic Scale
Static Thresholdが失敗した場合、これは、動摩擦によって接線Velocityが減少する割合を制御します。
Enable External
外部ジオメトリとの干渉に適用する摩擦効果の度合いに対するスケール係数。
Enable Self
自己ジオメトリとの干渉に適用する摩擦効果の度合いに対するスケール係数。
Static SDF Enable
Volume Colliderの静摩擦に対するスケール係数。摩擦のない地面の作成に役立ちます。
Dynamic SDF Enable
Volume Colliderの動摩擦に対するスケール係数。摩擦のない地面の作成に役立ちます。
Advanced ¶
Integration
Velocityによってポイント位置を前へ前へ積分させていく時、振り子のような弧を描く動きだと、拘束予測がその予測を誤ってその動きが減衰していまいます。 2次プリディクタ(予測器)は、そのような弧を描く動きをもっと補って、システム内のエネルギーをもっと維持させます。
どのような場合でも、干渉が検出されれば、このシステムは、過度の跳ね返りを回避するために、1次プリディクタに戻します。
External Forces
VellumポイントはDOPフォースからフォースを受けます。 これをオフにすると、この効果が除去され、それらのポイントはPOPフォースからのみ影響を受けるようになります。
Default Mass
入力ジオメトリにmass
アトリビュートが存在しなかった場合、この値がそのポイントのデフォルト値として使用されます。
通常では、Vellum Constraints SOPによって既にmassが設定されているはずです。
Default Thickness
入力のシミュレーションジオメトリまたはコリジョンジオメトリにpscale
アトリビュートがなかった場合、この値が設定されます。
シミュレーションジオメトリに関しては、通常では、Vellum Constraints SOPによって既に厚みが設定されているはずです。
コリジョンジオメトリに関しては、pscale
Pointアトリビュートを手動で作成することで、この厚みの値が上書きされます。
Secondary Constraint Pass ¶
Enable Secondary Constraint Pass
このチェックボックスを有効にすると、指定した Constraint Group 内のすべての拘束が別々に計算され、交互に残りの拘束に渡されるようになります。
このオプションの主な用途が2つあります。 1つ目の用途は、他の拘束ほど頻繁に計算する必要のない負荷の高い拘束タイプがいくつか存在するので、このオプションを有効にして Solve Frequency を低く設定することでパフォーマンを上げることができることです。 例えば、絹や綿織物といった曲げ剛性の低い高解像度の布に対するCloth Bend拘束がそうです。 布が伸縮しないように必ずすべてのパスでDistance拘束を計算する必要があります。 しかし、絹や綿織物は曲げ抵抗が非常に弱く皺が寄りやすいので、Bend拘束は負荷が高く、さほど強くする必要がありません。 Bend拘束をセカンダリパスとして計算すれば、パフォーマンスが大幅に向上します。 ただし、この方法は革などの硬い材質には実用的ではありません。
2つ目の用途は、拘束トポロジーの頻繁な変化を引き起こす拘束です。
このような場合では、ソルバに拘束の計算順を変更させてしまうので、残りの拘束でジッターが発生する可能性があります。
例を挙げると、四面体で表現された有機組織があって、そこに滑りを有効にしたStitch拘束が取り付けられているとします。
この滑りが拘束トポロジーの変化を引き起こすと、拘束の計算順が変わるので四面体に若干ジッターが起こり得ます。
Constraint Group を@type=ptprim
に設定し、 Solve Frequency を1に上げることでStitch拘束を別のパスに移動させると、同じ剛性を維持しつつも、
計算順の変更が原因による四面体のジッターは軽減されます。
Constraint Group
交互でセカンダリパスで計算される拘束グループ(s)。
このパラメータは標準のグループ構文に対応しているので、明示的なグループ名とad-hoc(一時的な)グループを含めることができ、
@type==bend
のように1つ以上の拘束タイプを指定することが多いです。
これらのグループに含まれていない拘束は通常通りプリマリパスで計算されます。
Solve Frequency
セカンダリパスを計算する頻度。 1に設定するとプライマリパスと同じ頻度でセカンダリパスが計算されるのに対して、0.25に設定するとプライマリパスの4パスおきに1回計算されます(4分の1の回数)。
Multi-Pass Solve ¶
Enable Multi-Pass
Multi-Passオプションによって、特定の条件が満たされるまでサブステップを繰り返すことができます。 現在の条件は、無効化されたポイントが原因でジオメトリが引っかかり、無効化されていないポイントがストレッチを生成してしまう問題を修復するように設計されています。 コリジョンは常に拘束を未然に防ぐので、その結果として、布やヘアーがストレッチします。 自動的に無効化されたポイントに隣接したポイントは、過度なストレッチが検出されるとそれらのポイント自体が無効化されます。 この解決ステップは、ジオメトリが解放されるまで繰り返されます。
Maximum Passes
サブステップを繰り返す最大回数。 無効化する必要のある新しいポイントがなくなれば、そのプロセスが即座に停止します。
Disable Stretch Ratio
ポイントが無効化の対象となる判断をするための解決ステップの終わりにおけるストレッチ量。 これは、失敗したコリジョンがVellumオブジェクトを引き離している時期を検出するためにあります。 無効化するポイントを増やして失敗させることで、通常ではオブジェクトを解放することができるので、ストレッチを続けるよりも良い結果が得られます。
Collisions ¶
Disable Failed Collisions
ポイントがポストコリジョンパスの後で干渉を解決できなかった場合、そのポイントにdisabledフラグを立てて、そのポイントとそれが属するプリミティブが干渉なしで移動できるように許可します。
Reset Collided Points
disabledフラグのポイントは、絡みついた状況において何も干渉を検出しなくなっていて、且つ、disabledフラグのないポイントと繋がっている場合、そのポイント自体が再度アクティブになります。 disabledフラグのポイントは、あらかじめジオメトリの正しい側に移動させておくことが望ましいです。
Initialize Overlap Distances
overlap_self
とoverlap_external
のアトリビュートを作成し、ソルバの初期セットアップを評価できるように初期化します。
これらのアトリビュートが既に存在していれば、初期化されないことに注意してください。 モデリング操作が原因で設定が変わってしまった場合、それらのアトリビュートを削除しておいた方が良いでしょう。
Update Overlap Distances
overlap_self
とoverlap_external
を更新して、現在の設定を反映します。
これらの値は、この処理によって減少していくだけなので、初期化する時は大きな初期値を設定してください。
Tetrahedral Open Faces
これを設定すると、四面体メッシュの非共有フェースから干渉ジオメトリが生成されるようになります。 場合によっては、三角形シェルと四面体メッシュの両方を使って、この処理を冗長化したいことがあります。
Motion ¶
Max Acceleration
色々な加速度制限オプションを使うことで、シミュレーションが非現実的なフォースの追従にあまりこだわらないようにさせることができます。 加速度制限オプションを使わないと、大きなエネルギースパイクが発生してしまうことがあります。
Fallback to First Order Integration on Collision
ポイントが Max Acceleration を超過すると、鋭くて不連続な干渉の信号が出ていれば、2次予測が誤って、跳ね返りの形式で間違った動きを追加してしまうことが多いです。 この場合では、影響を受けるポイントに対しては、1次の積分に戻されます。
Note
GrainパーティクルとFluidパーティクルは、衝突の場合だけでなく、1次の積分へのフォールバックでも考慮されます。 このコントロールはシミュレーションを落ち着かせてパーティクルが迷子になるのを回避するのに役立つと同時に、 Grainや流体の動きの全体的な跳ね具合を緩めることができます。 Max Acceleration を上げることで、その跳ね具合を戻すことができます。
Limit Acceleration in Velocity Update
パーティクルのVelocityがダイナミクスの何かの結果として変更可能な量を制限します。 これは、なにか瞬間的な動きが大きなフォースとして認識されないのを回避することができるので、 パーティクルが遠くに飛んでいってしまわないようにするのに役立ちます。
Limit Displacement on Collision
衝突を解決する時に、その衝突補正が加速度の量よりも大きくパーティクルを動かしてしまう場合に、その効果を制限します。 モデルの一部が布にひっかかって、ありえないような形で布を引っ張ってしまう時は、潔く失敗するのが望ましいです。
Disable Broken Welds
接合が切断された時、2つの新しいポイントが隣接した状態から動き始めます。
切断を発動させたものが原因でサーフェスが自然な感じに離れない場合、衝突検出を発動してサーフェスを押し離すため、
切断が発生した時に爆発のような動きを招きます。
このオプションは、ポイントの接合を解除した時にそれらのポイントが自己干渉しないようにdisableself
アトリビュートを設定します。
ただし、これによって、層になった布が自己貫通を引き起こしてしまうことに注意してください。
Normalize Stress
時間と共に応力計算を正規化するので、 Substeps パラメータを上げるほど計算結果の精度が良くなります。
Breaking Frequency
接合と拘束が切断ポイントに到達したかどうかをテストする回数。 値が大きいほど、計算精度が良くなりますが、切断された拘束のトポロジーの変化量に応じて計算が遅くなってしまいます。
Never
切断のテストをしません。
Per Frame
サブステップ数に関係なくフレーム毎に1回だけチェックします。
Per Substep
サブステップ毎にチェックします。
Sliding Method
Attach to Geometry または Stitch Points の拘束を滑らせた時に、ターゲットジオメトリ上の次に近い位置を検索する際に使用されるメソッド。 Closest Point は、単に投影した滑り位置からターゲットジオメトリ上の一番近いポイントを選択します。 この手法は高速ですが、ターゲットジオメトリ内の凹部分では不適切に飛んでしまう可能性があります。 Traverse Polygons は、現在のターゲットプリミティブから開始して継続して外側へ走査して周辺のプリミティブ上で一番近いポイントを検索します。 この手法は処理が重いですが、凹状のターゲットジオメトリを上手く制御することができます。 Traverse Triangles (Optimized) は、改良された凹部分の制御において以前のオプションと同様ですが、特別な三角形距離関数を使用しているので何倍も高速化されています。しかし、三角形で構成されたターゲットジオメトリにしか使用することができません。
Tip
四角形で構成されたターゲットジオメトリは、Divide SOPを使って三角形化することができます。
Sleeping ¶
Enable Auto Sleep
十分長い間ほぼ静止状態になっているパーティクルのstopped
アトリビュートを1
に設定して、そのパーティクルをスリープ状態にします。
Pinnedビジュアライゼーションを使用すれば、どのポイントがスリープ状態になっているのか視覚化することができます。
Velocity Threshold
パーティクルがスリープ状態となる条件として必要となるパーティクルの移動速度。
この速度以下で移動している時間はdeactivation_time
アトリビュートに累積されます。
この速度を超えると、deactivation_time
アトリビュートは0にリセットされます。
Sleep Delay
パーティクルがスリープ状態となる条件として必要となる Velocity Threshold 以下でパーティクルが移動している秒数。 再度パーティクルを目覚めさせる方法に関しては、POP Awaken DOPを参照してください。
Grain Collisions ¶
Vellum Grainsは、別々のコリジョンパスを使用して、Grain間の干渉を扱います。 以下のパラメータは、その挙動を制御します。 これらのパラメータは、POP Grainsのパラメータと同様です。
Search Scale
2個のパーティクルのpscale
アトリビュートの平均値をこの値でスケールした距離の範囲内にあるパーティクルが交差の候補となります。
通常では拘束の反復中にコリジョンは更新されないので、これは過大評価です。
そのため、現在衝突しているパーティクルだけでなく、以前の反復によって衝突をし始める可能性のあるパーティクルも記録する必要があります。
これは、凝集での引力の範囲にも影響します。
Max Neighbors
サブステップで起こり得る衝突を検索する際に考慮されるパーティクルの最大数。 この最大数を制限することで、ある時点でパーティクルがたくさん生成されて過度な計算がされないようにするのに役立ちます。 このパラメータは、 OpenCL Neighbor Search が有効な場合は無視されます。 その場合、 Search Scale で決定された範囲内にあるすべての隣接パーティクルが考慮されます。
Assume Uniform Radius
pscale
アトリビュートを使用して、各パーティクルの半径を決めます。
すべてのパーティクルが同じ半径であれば、もっと高速な加速化構造を利用して隣接パーティクルを検索することができます。
Ignore Neighbors with Same Name or Piece
name
Pointアトリビュートが空っぽでない、または、piece
Pointアトリビュートがマイナスでない同じ値を持つ隣接パーティクルを無視します。
このオプションを有効にすることで、他のクラスタにのみ相互作用するGrainのクラスタを分けて作成することができます。
これと Shape Match 拘束を併せて使用して剛体の挙動をさせるといったことをよくします。
Enable Constraint Averaging
複数のパーティクルが同時に衝突した時、これは、すべての拘束を平均化します。 これは、安定性を保証するのに効果がありますが、運動量を維持しません。 そのため、凝集などの内部フォースと組み合わせた場合、凝集したパーティクルが自身のフォースで加速してしまいます。
Repulsion Weight
パーティクルの衝突力の度合いを決めるウェイト。 値を0にすると、パーティクルの衝突が無効になります。
これは、repulsionweight
Pointアトリビュートでスケールすることができます。
Repulsion
パーティクルを離す強さ。 値が大きいほど、ばねのような反発少なくなります。
Attraction Weight
パーティクル同士が近づいた時に自然にひっつく度合いを決めるウェイト。 値を0にすると、パーティクルの凝集が無効になります。
これは、attractionweight
Pointアトリビュートでスケールすることができます。
Attraction
隣接パーティクルがお互いにひっつく強さ。 値が大きいほど、ばねのような粘着が少なくなります。
Enable Mass Shock
重力に対してパーティクルの位置でパーティクルの質量を人為的にスケールします。 パーティクルが上方に位置するほど軽くすることで、パーティクルの積み上がりが速く且つ安定して収束するようになります。
Shock Scaling Power
実行するスケールの度合い。 値が大きいほど、連続するパーティクル間の差異が大きくなります。 値を0にすると、パーティクル間の比率がなくなり、値を1にすると垂直に積み上がった2個のパーティクル間は15%の比率になります。
値が大きすぎると、パーティクルが極端に軽くなって、システムが不安定になってしまいます。
Shock Axis
パーティクル質量の勾配を定義する際に使用されるUpベクトル。
この軸は、積み上げる方向となるので、通常では重力の逆方向を指定してください。
Fluids ¶
Vellum流体は、密度拘束を使用して流体を非圧縮性に維持し、さらに、粘度と表面張力を備えます。
phase
アトリビュートが0でないパーティクルが流体と見なされます。
Kernel Radius Scale
流体計算に使用されるカーネルの半径。 一般的には、デフォルト値の4が推奨されていますが、この値を少し増減させて違った効果を得ても構いません。 特に、この値は表面張力で生成される滴のサイズに影響を与え、値が大きいほど大きい滴が生成され、個別のパーティクルの数が少なくなります。
Note
値が大きいほどシミュレーションが遅くなり、隣接パーティクルのリストのためにメモリ使用量が増えます。 また、3未満または5より大きい値は不安定に陥る可能性があります。
Viscosity
流体の粘度。
粘度の値が低いと、シミュレーションが安定するのに対して、
値が高いほど蜂蜜のような液体をシミュレーションすることができます。
パーティクル単位のviscosity
アトリビュートを使用してこの値を乗算することで、粘度を可変させることができます。
phase
値が異なる流体パーティクルの粘度は個別に計算されるので、Multi-Phase流体(多相流)の挙動を実現することができます。
SDF Collision Viscosity
SDFコリジョンと接触した流体の粘度。 混在のところ、この値は、 Enable Minimal Solver が有効で、ソルバが地面またはSDFコリジョンオブジェクトを使用した場合にのみ使用されます。
Viscosity Solver
実行する粘度ソルバのタイプ。 Explicit は高速ですが、パーティクル数が多かったり、または、サブステップ数が少ないと不安定になる場合があります。 Implicit は遅いですが、パーティクル数が多くても、粘度値が高くても安定します。
Viscosity Tolerance
Implicit ソルバを使用した場合の粘度計算の許容値。 値が小さいほど精度が良くなりますが、その代わりに反復回数が増えます。
Max Viscosity Iterations
Implicit ソルバを使用した場合の最大反復回数。
Surface Tension
流体の表面張力。
この設定の値が大きいほど、流体の曲率が下がって、その結果として、ブロブが形成されます。
パーティクル単位のsurfacetension
アトリビュートを使用してこの値を乗算することで、表面張力を可変させることができます。
phase
値が異なる流体パーティクルの表面張力は個別に計算されるので、Multi-Phase流体(多相流)の挙動を実現することができます。
Spatial Sort Interval
Vellum FluidsとVellum Grainsは、隣接ポイントを必要とした計算をたくさん実施します。 一般的には、3D空間内の隣接ポイントがメモリ内でもお互いに近くにあるようにすることで、パフォーマンスは大幅に改善されます。 このオプションは、指定したフレーム間隔で空間的なパーティクルのソートを有効にします。
Note
このソートは、パーティクルのポイント番号を変えてしまうので、シミュレーションをする前にid
アトリビュートを追加すると良いでしょう。
Minimal Solver ¶
Enable Minimal Solver
Vellum Brush SOPで使用されている制限付きバージョンのソルバを有効化します。 現在のところ、これは制限事項があるのでブラシでのみ使用されている内部機能です。 布や他のソフトボディを非常に高速に静的ジオメトリと相互作用させることができます。 しかし、これはアニメーションするコリジョンまたは何かのアニメーション入力には動作しません。 このオプションはエンドユーザーには推奨していません。
OpenCL ¶
Kernel Options
カーネルに対して必要なコンパイルフラグを指定します。
Note
Apple OSX OpenCLコンパイラは、カーネルオプション間にはスペースを1個だけにする必要があります!
Finish Kernels
Finish Kernelsが無効な時、次のソルバに進む前にOpenCLカーネルが完了するのを待たなくなります。 これによって、ソルバの結果が実際に必要となるまで、バックグラウンドでOpenCLカーネルを走らせることができます。 デバッグまたはタイミングを単純化したいのであれば、正しい箇所でエラーが検出できるようにカーネルが終了するのを待った方が便利です。
Recompile Kernels
ディスクからカーネルを読み込む時、計算毎にそのカーネルを再生成されないようにそのカーネルをキャッシュ化します。 これを有効にすると、強制的にそのカーネルを再ロードして再コンパイルします。 これは、変更されたコードを#includeファイルが参照していたり、そのカーネルファイルを外部テキストエディタで変更した場合に役立ちます。
これは、プロトタイプが完了した時には必ず無効にしてください。
OpenCL Graph Coloring
グラフカラーを実行した時、高速な並列のOpenCLアルゴリズムが使用されます。 残念なことに、これは四面体メッシュに対する他の計算と比べて10倍以上のメモリを必要とします。 そのため、その計算を収めるほどのメモリのないシステムでは、そのカラーパスは成功しません。 これを無効にすることで、すべてのグラフカラーを強制的に遅い逐次手法で処理させて、実際の計算にかかるRAMを抑えることができます。
OpenCL Neighbor Search
OpenCLを使用してGrainsとFluidsの近傍検索を実行します。これは、CPUよりも高速ですが少しGPUメモリを多く消費します。
Examples ¶
VellumSmokeSheet Example for Vellum Solver dynamics node
このサンプルでは、VellumシミュレーションとSmokeシミュレーションを組み合わせて、風に揺れるシーツを作成する方法を説明しています。
See also |