On this page |
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ソルバの実効時間をスケールします。 これを使用することで、Bullet時間のような効果を出すことができて、Houdiniのプレイバーとは異なる時間レートでVellumソルバの物理計算が実行されます。 値を2にすると、布が2倍速で落下するようになり、0.1にすると、0.1倍速で遅くなります。
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によって既にこの厚みが設定されているはずです。
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次の積分に戻されます。
Limit Acceleration in Velocity Update
パーティクルのVelocityがダイナミクスの何かの結果として変更可能な量を制限します。 これは、なにか瞬間的な動きが大きなフォースとして認識されないのを回避することができるので、 パーティクルが遠くに飛んでいってしまわないようにするのに役立ちます。
Limit Displacement on Collision
衝突を解決する時に、その衝突補正が加速度の量よりも大きくパーティクルを動かしてしまう場合に、その効果を制限します。 モデルの一部が布にひっかかって、ありえないような形で布を引っ張ってしまう時は、潔く失敗するのが望ましいです。
Breaking Frequency
接合と拘束が切断ポイントに到達したかどうかをテストする回数。 値が大きいほど、計算精度が良くなりますが、切断された拘束のトポロジーの変化量に応じて計算が遅くなってしまいます。
Never
切断のテストをしません。
Per Frame
サブステップ数に関係なくフレーム毎に1回だけチェックします。
Per Substep
サブステップ毎にチェックします。
Disable Broken Welds
接合が切断された時、2つの新しいポイントが隣接した状態から動き始めます。
切断を発動させたものが原因でサーフェスが自然な感じに離れない場合、衝突検出を発動してサーフェスを押し離すため、
切断が発生した時に爆発のような動きを招きます。
このオプションは、ポイントの接合を解除した時にそれらのポイントが自己干渉しないようにdisableself
アトリビュートを設定します。
ただし、これによって、層になった布が自己貫通を引き起こしてしまうことに注意してください。
Sleeping
Enable Auto Sleep
十分な時間の間にほぼ静止状態になっているパーティクルに対して、stopped
アトリビュートを1
に設定してスリープにします。
Pin to Targetビジュアライゼーションを使用することで、スリープになっているポイントを可視化することができます。
Velocity Threshold
パーティクルをスリープさせるのに必要なパーティクルの移動速度の遅さ。
パーティクルがこの速度以下になっている間の時間がdeactivation_time
アトリビュートに累積されます。
この速度を超えると、deactivation_time
がゼロにリセットされます。
Sleep Delay
パーティクルがスリープに入るためにVelocity Threshold以下の状態になっている必要のある秒数。 パーティクルを再度目覚めさせる方法は、Wake Up POPを参照してください。
Grain Collisions
Vellum Grainsは、別々のコリジョンパスを使用して、Grain間の干渉を扱います。 以下のパラメータは、その挙動を制御します。 これらのパラメータは、POP Grainsのパラメータと同様です。
Search Scale
交差し得るパーティクルは、2つのパーティクルのpscale
アトリビュートの平均値をこれでスケールした距離の範囲内にあると想定されます。
通常では干渉は拘束の反復中に更新されないので、これは過大評価です。
そのため、現在の干渉パーティクルだけでなく、前の反復が原因で干渉を起こし始める可能性のあるパーティクルも記録する必要があります。
これは、凝集したパーティクル内の引力の範囲にも影響を与えます。
Max Neighbors
サブステップ内で起こり得る干渉を検索する時に考慮されるパーティクルの最大数。 この制限は、ある箇所でパーティクルが非常にたくさん作成されている際に、過度な計算を回避するのに役立ちます。
Global Weight
Repulsion(反発力)ウェイト、Attraction(引力)ウェイト、Friction(摩擦)ウェイトに適用される共通ウェイトスケール。 拘束の平均化を使用していないので、安定性を良くするには、これを下げる必要があります。特に、Attractionの強度が強く使用されている時です。 1 / Max Neighborsの値で安定するはずですが、収束が遅くなってしまいます。
Assume Uniform Radius
各パーティクルの半径は、pscale
アトリビュートを使って決定します。
すべてのパーティクルが同じ半径であれば、より高速化された構造体を使って近接パーティクルを検索することができます。
Enable Constraint Averaging
複数のパーティクルが同時に衝突した時、これは、すべての拘束を平均化します。 これは、安定性を確保するのに効果的ですが、モーメンタム(運動量)を維持しません。 そのため、膨大なパーティクルが凝集した時に内部フォースと組み合わさって自身のフォースを加速化させてしまいかねないです。
Repulsion Weight
パーティクル干渉フォースのウェイト。 値をゼロにすると、パーティクル干渉が無効になります。
Repulsion
パーティクルを引き離す強度。値が大きいほど弾みの少ない反発力になります。
Attraction Weight
隣接パーティクルがお互いに近い時に自然な感じに引っ付けさせるウェイト。 値をゼロにすると、パーティクルの凝集が無効になります。
attractionweight
Pointアトリビュートを使えば、スケールをかけることができます。
Attraction
隣接パーティクルがお互いに引っ付く強さ。値が大きいほど、弾みの少ない粘着力になります。
Enable Mass Shock
パーティクルの位置と重力を考慮して、人工的に質量にスケールをかけます。 パーティクルの位置が高いほど質量を軽くすることによって、パーティクルの積み重なりがもっと速く収束し、もっと安定するようになります。
Shock Scaling Power
適用するスケールの大きさ。 数値が大きいほど、連続パーティクル間の差異が広がります。 値をゼロにすると、パーティクル間の比率はなくなり、値を1にすると、垂直に積み重なる2個のパーティクル間の比率は15%になります。
数値を大きくしすぎてしまうと、パーティクルが極端に軽くなり、システムが不安定になります。
Shock Axis
パーティクル質量の変化比率を定義するために使用するUpベクトル。
積み重ねる方向を指定するので、通常では、ここには重力の反対方向を指定します。
OpenCL
Kernel Options
カーネルに対して必要なコンパイルフラグを指定します。
Note
Apple OSX OpenCLコンパイラは、カーネルオプション間にはスペースを1個だけにする必要があります!
Finish Kernels
Finish Kernelsが無効な時、次のソルバに進む前にOpenCLカーネルが完了するのを待たなくなります。 これによって、ソルバの結果が実際に必要となるまで、バックグラウンドでOpenCLカーネルを走らせることができます。 デバッグまたはタイミングを単純化したいのであれば、正しい箇所でエラーが検出できるようにカーネルが終了するのを待った方が便利です。
Recompile Kernels
ディスクからカーネルを読み込む時、計算毎にそのカーネルを再生成されないようにそのカーネルをキャッシュ化します。 これを有効にすると、強制的にそのカーネルを再ロードして再コンパイルします。 これは、変更されたコードを#includeファイルが参照していたり、そのカーネルファイルを外部テキストエディタで変更した場合に役立ちます。
これは、プロトタイプが完了した時には必ず無効にしてください。
OpenCL Graph Coloring
グラフカラーを実行した時、高速な並列のOpenCLアルゴリズムが使用されます。 残念なことに、これは四面体メッシュに対する他の計算と比べて10倍以上のメモリを必要とします。 そのため、その計算を収めるほどのメモリのないシステムでは、そのカラーパスは成功しません。 これを無効にすることで、すべてのグラフカラーを強制的に遅い逐次手法で処理させて、実際の計算にかかるRAMを抑えることができます。
Examples
VellumSmokeSheet Example for Vellum Solver dynamics node
このサンプルでは、VellumシミュレーションとSmokeシミュレーションを組み合わせて、風に揺れるシーツを作成する方法を説明しています。
The following examples include this node.
VellumSmokeSheet Example for Vellum Solver dynamics node
このサンプルでは、VellumシミュレーションとSmokeシミュレーションを組み合わせて、風に揺れるシーツを作成する方法を説明しています。
See also |