Houdini 20.0 Vellum

Tipsとトラブルシューティング

On this page

ソース

  • Vellumは、連続衝突検出を使用します。これは、高速に移動するジオメトリが布をテレポートしないようにするのに良いですが、フレーム毎にポイントがランダムになっている場合には役に立ちません。

  • ジオメトリシーケンスがうまく動作すると思い込まないでください。$F+1を設定したTime Shift SOPをジオメトリシーケンスに接続し、そのTime Shift SOPとそのジオメトリシーケンスをSequence Blend SOPに接続して、ブレンドされるかどうか確認してみてください。ブレンドされていない場合、idアトリビュートが存在していないためにその問題を起きているのかどうかチェックしてください。idアトリビュートはポイント番号を上書きするので、場合によって、そのマッチングを修正できることがあります。Match Topologyを使ってみれば、フレームが変わってもポイント番号の整合性が保たれるようにすることもできます。

    Note

    たとえソースが動作していても、ソースをサブディビジョン化すると動作しないことがあります。 Vellumは前フレームのポイントのみを扱うので、フレーム毎にポイント番号がランダムに変わっているかどうかを気にしません。 Subdivide SOPは、プリミティブ番号が異なれば、異なるポイント番号を生成します。 同様に、サブディビジョン化の前にidアトリビュートのマッチングをしていたのであれば、サブディビジョン化の後でそれをマッチングさせることで、おそらく間違った結果を防ぐことができるでしょう。

pscale

デフォルトのVellumのpscaleは小さいですが、入力のpscaleアトリビュートの方が優先されます。 つまり、シーケンスに既に想定外の値が入っている可能性があります。おそらく、その値は非常に小さいことでしょう。

Vellumは、pscaleが小さすぎない方が上手く動作します。逆に大きすぎるとハード衝突の前にColliderの上で布が浮いてしまいます。 一般的には、pscaleはエッジ長より大きくしないようにします。そうしないと自己交差を招いてしまいます。

Vellumは、オリジナルジオメトリに対してBulletと同様に事前処理を行なうので、ポイントがお互いに重なっていても破裂しません。 Vellumは、オリジナルの距離をアトリビュートに記録し、そのアトリビュートを使って衝突向けにpscaleを下げます。 布が分離されると、それが近くに戻らないようにそのアトリビュートを緩めます。 pscaleを非常に大きな値に設定すれば、布が吹き飛ばされないようになりますが、その大きなpscaleを使って衝突テストが行なわれるようになります。 これだと、布が定着するまで這うようになります。

pscaleは必ず健全性をテストしてください。 Vellum Solver SOPVisualize タブには、各ポイント上に球を配置して厚みを表示するパラメータがあります。 これは、非常に小さすぎてデフォルトでは見えないかもしれません。状況に応じてデフォルトのpscaleを調整してください。

速度 vs 品質

できるだけ高速に、できるだけルックを良く布シミュレーションを行なうために調整可能な領域が主に4つあります。

  1. Substeps:

    これは、フレームをさらに小さいステップに分割し、高速に移動する布には必須です。 単一サブステップ内で衝突が非常に多くて変化が多い場合には、三角形すべてをお互いに衝突させることになるので、布シミュレーションが遅くなってしまいます。 サブステップを小さくすることで衝突境界が改善され、期待以上にパフォーマンス低下が軽減される可能性があります。

  2. Constraint Iterations:

    これによって、伸縮と屈曲の拘束を動作させることができます。伸縮も屈曲もしない硬さ布を表現するには、数値を大きくする必要があります。通常では、これは、あなたが考えている以上に軽いです。

    目安となる最小値は、布の“直径”です。 これが“最長の最短パス”、つまり、布の表面上の一番遠くにあるポイントを検索し、それらのポイント間の最短パスを調べて、そこを通過するのに必要なエッジの数を数えます。 実際には、処理するフォースの中で重力が一番大きいのと同様に、布の破片の“高い”エッジの数を評価することができます。100%の精度である必要性はありません。

    サブステップを上げると、フォースの量が実質的に下がるので、反復数を下げることができます。

  3. Collision Passes:

    外部衝突と自己衝突の両方を処理します。これらの衝突は、拘束の反復間で交互に行なわれます。 例えば、50回の反復の内、5回衝突があれば、各衝突で10回の反復が行なわれます。 これを上げることで、衝突の失敗を補助することができますが、代わりにサブステップを上げることを考えると良いでしょう

    サブステップが2で、10回の衝突は、サブステップが1で、20回の衝突とほぼ同じですが、前者のほうが望ましいです。

  4. Post Collision Passes:

    すべての拘束の反復が完了した後に、それらの追加パスがすべてをクリーンアップするために行なわれます。 これらのパスは拘束に作用しないので、布はテントを張るようにならず、Colliderの形状に押し込まれた箇所に突起ができます。 これが衝突の失敗の回避の最後の試みです。

問題の解決

伸縮性

XPBDは、布が硬化しすぎないようにうまく処理しますが、反復が十分でない場合には、収束が失敗する可能性があります。 その結果が伸張した感じになっている場合、Constraint Iterationsを上げてください。 Substepsを上げるのも役立ちますが、通常ではConstraint Iterationsの方が処理が軽いです。

突起の問題

先が尖ったジオメトリと高解像度の布を衝突させると、局所部分のみが変形して、他はそのままの状態になります。 この原因は、衝突解像度が全体的にローカルだからです。 Vellumは、衝突したポイントのみを動かし、残りのメッシュは定常のままにします。 これを解決するには、その衝突を、布のスムージングパスに代用する必要があります。これを行なう方法が2つあります:

  1. Collision Passes: デフォルトの10は、すべての拘束パス内に10個の衝突検出を混ぜます。この値は、最大でConstraint Iterationsまで上げることができます。デフォルトのセットアップでは、この値を100にします。

  2. Substeps: すべての反復数を上げます。

コリジョンの失敗

  1. Cloth Thickness:

    デフォルトの布は非常に薄いです。布をもっと厚くすると、ハード衝突の前に布が浮いてしまう余裕代が出来てしまいます。エッジ長よりも大きくしないように注意してください。

  2. Substeps:

    これは、すべてをあまり動かさずに修復しなければならないエラーを軽減します。解像度の高い布ほど、サブステップが必要になります。

  3. Post Collision Passes:

    最後の試みとして、物事が正しくなるように機会を増やします。これはサブステップを上げること以上に役立つ可能性があります。 あなたが持っているすべての“レイヤー”に対して、これを当てるようにします。

  4. Layer Shock:

    布に適切な順序、つまり、あるレイヤーが他のレイヤーの上に載っている場合、レイヤー番号が高いほど、上のレイヤーにすることができます。 これは、整数アトリビュートで、その値の差分のみが使用されます。 衝突時に、高いレイヤー番号のポイントほど軽くなり、レイヤーの完全な双方向、片方向の作用を可変させることができます。

非対称な解

Vellumは、ヤコビ法ではなくガウス・ザイデル法を使用しています。 これによって、解が高速に収束しますが、その過程では、滑らかに更新されません。 そのため、物事が完全に収束しない場合、誤差が布の特定の一部に集中して、均一に広がらず、結果として変な非対称になります。 これは、 Smoothing Iterations を使って対処します。 これを上げると、誤差のスパイクが滑らかになって、不都合な部分が減ります。デフォルトの10は、おそらくどの場合にでも適しています。

手に負えないオブジェクト

場合によっては、オブジェクトが運動量保存則に反して、なにかおかしな内部エネルギーで加速したりスピンしはじめることがあります。

考えられる原因は、自己交差で、特にpscaleが大きすぎる場合に起こります。

解決方法は、Plasticity(可塑性)を使って、最終設定をRest設定にすることで、すべての内部エネルギーを除去することです。

他に考えられる原因は、解が収束せずに、システム内にエネルギーが非対称で残ってしまったからです。 こうなると、エネルギーが増大して、自己交差がなくてもシミュレーションでスピンが発生してしまいます。 これは、特に圧力拘束と支柱拘束で見受けられます。 Smoothing IterationsとDampingを上げることで、これを回避することができます。 場合によっては、(プリミティブによって)拘束の順番をランダムに並べたり、(拘束を構築する前の)ポイントをランダムに並べることで、解決することもあります。

不安定なピン

強い屈曲拘束とハードピンは、数値的な安定性に問題を起こす可能性があります。この回避策は、ソフト拘束を使用することです。 Smoothing Iterationsは、それを対処します。

シミュレーションの再開

ドレープの出力または前のシミュレーションを開始点として使用する時、アトリビュートに注意しなければなりません。

IDs

  • 複数の破片をマージしたら、idアトリビュートが干渉していないかどうかチェックしてください。

  • プリミティブを削除したら、拘束ネットワークがその変更に合っているかどうかチェックしてください。

  • 接合ポイントが正しい位置になっているかどうかチェックしてください。

  • 後処理で接合をしてみてください。

オーバーラップ

初期フレームのオーバーラップは、overlap_selfまたはoverlap_externalのアトリビュートが存在しない場合にのみ計算されます。 そのため、シミュレーションを再開すると、古い値を取得してしまいます。 これは、古い値が有効な解からのものだった時には合理的ですが、距離が間違えている場合は問題です。 これは、独自の運動量を取得した領域では間違った解が生成され、その結果、チラツキが発生します。 伸縮率を高く設定し、収束が失敗した領域を赤く表示することで、これらの“ホットスポット”が見つかります。 通常では、overlap_*を削除するのが安全な選択です。

コリジョンが動作しない

Vellumは、すべてでありませんがほとんどのジオメトリタイプと衝突することができます。

Sphere, Tube, Circle, Metaball

プリミティブモードでは、中心ポイントにのみ衝突します。

Bezier/NURBS Curves

ポリゴンハルに衝突します。

Bezier/NURBS Mesh Surfaces

ハルポイントのみに衝突します。

VDB, Volume, HeightField

SOPレベルでは、表現的ポイントのみ衝突します。

DOPsでは、Terrain Collider Objectを使用するとHeight Fieldに対して動作するようになります。 同様に、VDB/SDFは、Static Objectの使用と Collision DetectionUse Volume に設定することで動作するようになります。

Polygon Soups

元のポリゴンと同じです。

Tetrahedra

Tetrahedral Open Faces トグルで制御します。これはデフォルトでオンになっています。四面体メッシュの外側の三角形と衝突します。

Packed Geometry:

元のジオメトリと同じです。

他のパックタイプ

Fast Extraction オプションに対応しているかどうかで異なります。 Repack SOP(Repack Packed Fragmentsオプションの使用を含め)を使用することで、メモリ使用量が増えるものの、Fast Extractionに対応したパックジオメトリに変換することができます。 特に、デフォルトのRBDはFast Extractionに対応していないパックフラグメントを使用していますが、それをリパックすることで修正することができます。

Note

Vellumがコリジョンに対応できるようにするには、RBDシミュレーションをパックフラグメントからパックジオメトリに変換する必要があります。 そのため、布をRBDシミュレーションに反応させたいのであれば、Assemble SOPの後にリパックする必要があります。

しわの寄った布、または、もつれたヘアー

原点から10,000ユニット以上遠ざけて布またはヘアーをシミュレーションすると、布が皺になったり、ヘアーが絡んだりする問題を引き起こしてしまう可能性があります。 オブジェクトを原点に近づければ、この問題が解決するはずです。 しかし、それが選択肢にならない場合、64ビット計算を使用することで、もっと精度を上げることができます。 ただし、これは非常に遅くなるため、通常では推奨しません。 詳細は、64ビット計算のセットアップを参照してください。

Vellum

ソフトボディ

流体

拘束

コリジョン

その他

上級