Houdini 20.5 MPM

トラブルシューティング

To...Do this

シミュレーションの品質(詳細レベル)を制御する

MPM ContainerParticle Separation パラメータを下げます。 このパラメータは、ソース、コライダー、ソルバの品質を決定します。 FLIPの場合と同様に、 Particle Separation パラメータが小さいほどディテールが細かくなります。

正確で高速なアニメーションコライダーを取得する

可能な限り、 Collider Type には常に Animated (Rigid) を使用してください。 これによって、フレーム間の補間が非常に正確になります。

MPM Configure Spinning Tireサンプルを見ると、何もカスタムVelocityフィールドを追加する必要なく、摩擦のみを使用してマテリアルが移動していることが分かります。

MPMパーティクルが薄いコライダーを通過しないようにする

  1. MPM ColliderGeometry セクションの Voxel Size を下げます。これは、グローバル解像度を上書きし、ジオメトリからより細かなメッシュを作成することができます。

    元のメッシュ

    Voxel Sizeを下げて細かくしたメッシュ

  2. MPM SolverAdvanced タブにある Enable Particle-Level Collisions チェックボックスを有効にします。 これによって、2回目のコリジョンステップをマテリアルポイント上で直接実行することができます。 これによって幾分計算量が増えますが、より精度の高いコリジョンが得られます。

  3. その Enable Particle-Level Collisions の隣りにあるドロップダウンメニューから Velocity-Based Move Outside Colliders を選択します。 このオプションは、衝突応答をパーティクルのVelocityに適用し、次のインテグレートステップ(積分工程)時にパーティクルがコライダーの外側で移動するようにVelocityを調整します。 これは、パーティクルがコライダーの内側に潜り込まないようにするのに最も適切な方法ですが、不安定になる可能性があります。

    薄いコライダーのサンプルは、MPM Configure Water Glassサンプルを参照してください。

段状の乱れがない連続した滑らかな放出を得る

MPM SolverSolver タブの Iterations セクションにある Global Substeps パラメータを上げます。 これによって、より滑らかな放出ストリームが生成されます。

Global Substepsを上げる前

Global Substepsを上げた後

シミュレーションにフォースを適用する

MPMはSOPですが、MPM Solverの中に入ることで、そこでPOP Wrangle DOPを使用してカスタムフォースをセットアップすることができます。

金属板や中空オブジェクトのような薄いオブジェクトをシミュレーションする

MPM SourcePoints from Geometry セクションにある Type パラメータはデフォルトで Volume に設定されています。 その設定だと、ジオメトリはパーティクルで充填されます。 これを Surface に変更すると、ジオメトリサーフェスがパーティクルで覆われるようになります。 しかし、散布状態によってはジオメトリに穴が空き、レンダリングやリターゲットでは使いにくいものになってしまいます。 Relax Iterations を有効にすることで、パーティクルがもっと均一に散布されます。

Relax Iterationsを有効にする前

Relax Iterationsを有効にした後

ボックスの上に落ちた中空のイカ蟹

パーティクルが移動しないように空間内にピン留めする

この効果を実現するには、MPM SourcePin Constraints セクションにあるパラメータを使用します。

MPM Configure Softbodyサンプルは、 Point Group をピン留めする方法を説明した素晴らしいデモです。 内側のポイントを取り出し、Attribute Wrangleを使用してその内側ポイントを空間内にピン留めすることで、耳と鼻が自由に動き回れるようにすることができます。

可視シミュレーション領域外に飛んでいったポイントを除去する

  1. MPM ContainerGeometry TypeConvex Geometry に変更し、 BoundariesDelete に設定します。

  2. MPM Containerの入力を、境界ボックスとして使用するカメラフラスタムを参照したObject Merge SOPの出力に接続します。

これは、何かが爆発したり、大量の水飛沫が飛ぶ場合に役立ちます。

マテリアル同士の引っ付きの効果を弱くする

MPM ContainerResolution セクションにある Grid Scale を下げます。

2つのマテリアルを一緒にシミュレーションする時、バックグラウンドグリッドは共有されます。 2つのポイントがお互いに非常に近い時、それらのポイントはマテリアルプロパティを共有しているので、マテリアルはボクセル内で半分はマテリアルAのように、もう半分はマテリアルBのように動作します。 Grid Scale を下げると、マテリアル間の滲みが軽減されます。

以下のサンプルでは、水が土の山に落とされますが、思ったとおりに流れ落ちません。 Grid Scale1 に変更すると、ボクセルはパーティクルとほぼ同じサイズになります。 これを行なえば、水は流れ落ちるようになり、土パーティクルも一緒に流れ落ちるため、よりリアルなルックが生成されます。

Grid Scaleを変更する前

Grid Scaleを変更した後

シミュレーションをスローモーションで実行する

  1. MPM SolverIterations セクションにある Time Scale パラメータを下げます。0.1の値は時間を10倍遅くします。

  2. MPM ColliderMPM Solverの間にTime Shift SOPを追加します。

  3. そのTime Shift SOPの Integer Frames チェックボックスを無効にします。

  4. Frame パラメータには、浮動小数点フレームとtimescale値を乗算するエクスプレッション($FF*ch("../mpmsolver/timescale"))を設定します。

これをセットアップする方法を示したサンプルは、MPM Configure Spinning Tireサンプルを参照してください。

シミュレーションを速く走らせる

MPM SolverIterations セクションにある Substeps Max パラメータを下げます。

システムがあまりにも保守的であると感じ、サブステップ数を下げても同様の結果が得られるようであれば、これを行なうと良いでしょう。 ただし、この値を下げすぎるとシミュレーションが不安定になってしまいます。

または、 CFL ConditionMaterial Condition を上げてみるのも良いでしょう。 これによって、Velocity拘束とStiffness拘束が緩和されシミュレーションが高速化される場合があります。

揺れてはいけないマテリアル(濡れた砂など)の揺れを修正する

MPM SourceMaterial セクションにある Stiffness (E) を上げ、 Cohesion をそれと同じ係数で下げます。

例えば、それぞれの既存値に0.01を乗算すると良いでしょう。 これによって、揺れがなく、元の結果に非常に近い結果が得られます。

跳ねてはいけないマテリアル(雪など)の跳ねを修正する

MPM SourceMaterial セクションにある Critical CompressionCritical StretchStiffness (E) を上げます。

これによって、マテリアルは少し圧縮されますが、マテリアルが落ち着く時に跳ねが除去されます。

高速で移動するパーティクルが空中で崩壊しないように、または、エッジ周辺に段状のパターンが出ないように修正する

MPM SolverSimulation セクションにある Max Voxel Dilation を上げます。

シミュレーションはSparse(疎)なので、パーティクルが非常に高速に移動していると、そのパーティクルが移動する領域を維持して網羅するのに十分な速さでバックグラウンドグリッドが拡張されない場合があります。 これが原因で、マテリアルの形状が崩れ、ボクセル状のパターンが現れてしまいます。 この値を上げると、アクティブ領域が拡張されます。 デフォルトでこの最大値が低い理由は、シミュレーションから飛び出すパーティクルによっておかしな爆発が発生してしまう場合を考慮しているからです。 GPUメモリが不足してシミュレーションがクラッシュしないようにするためにアクティブ領域はクランプされます。

Max Voxel Dialationを上げる前

Max Voxel Dialationを上げた後

マテリアルの特性が変化して不安定になったシミュレーションを修正する

MPM SolverAdvanced タブにある Assume Unchanging Material Properties チェックボックスを無効にします。

デフォルトでは、MPM Solverは、シミュレーション全体においてマテリアル特性は一定であると想定します。 これは、MPM Solverがフレーム毎に Material Condition を再計算してしまわないようにするための最適化です。 しかし、シミュレーション実行中にマテリアル特性が変化する場合、サブステップが適切に調整されていないと不安定になってしまいます。 このチェックボックスを無効にするとシミュレーションは遅くなりますが、 Material Condition を一定に保つことで安定性が確保されます。

アニメーションするターゲットに追従するMPMパーティクルを取得する

MPM SourcePin Constraints セクションにある Initialize as PinnedEnable AnimationUse Input Animation のチェックボックスを有効にします。

ポイントをアニメーションにピン留めする前

ポイントをアニメーションにピン留めした後

可変摩擦を持つコライダーを作成する

  1. MPM Colliderの入力にコリジョンオブジェクトを接続し、必要な Friction を設定します。

  2. 元のコリジョンオブジェクトから出力を分岐させて、その出力にAttribute Paint SOPを追加して接続し、摩擦を増やしたい領域をペイントします。

  3. そのAttribute Paint SOPの出力にScatter SOPを追加して接続し、 Density Attribute チェックボックスを有効にしmaskアトリビュートを指定することで、ペイントした領域上にポイントをばら撒きます。

  4. そのScatter SOPの出力にVDB from Particlesを追加して接続し、ポイントをVDBに変換し、その出力を2つ目のMPM Colliderの入力に接続します。

  5. その2つ目のMPM Colliderの Friction を設定します。以下の例では、傾斜(1つ目のMPM Collider)には Friction 値を0に、ペイントした領域(2つ目のMPM Collider)には Friction 値を10に設定しています。

  6. それら2つのMPM ColliderをMerge SOPを使ってマージし、その出力をMPM Solverの2番目の入力に接続します。

摩擦なし

ペイントした領域に摩擦があります

粉砕しないオブジェクト(ゴムやゼリーなど)を簡単にポイント変形させる

  1. MPM Solverの後にTime Shift SOPPoint Deform SOPを使用することで、元のジオメトリをシミュレーションされたMPMポイントにリターゲットすることができます。

  2. Time Shift SOPを追加し、その入力をMPM Solverの出力に接続し、そのTime Shift SOPの出力をPoint Deform SOPの2番目の入力に接続します。

  3. そのTime Shiftの Frame1に設定して、静止フレームでフリーズさせます。これは、 その Frame パラメータフィールドを右クリックして Delete Channels を選択してから、そこに1と入力することで、1番目のフレームが参照されます。

  4. 元のソースジオメトリの出力をそのPoint Deform SOPの1番目の入力に接続し、そのMPM Solverの出力をそのPoint Deform SOPの3番目の入力に接続します。

マテリアルの挙動と粉砕にバリエーションを加える

Attribute Wrangle SOPを使用することで、これを行なうことができます。

float noise = fit(abs(snoise(@P*5,5,0.5,1)), 0, 0.25, 0, 1);
@E *= fit01(noise, 1, 4);

例えば、このコードは、ノイズ値を生成してから、それをスケールしてnoise変数に格納します。 再びそのノイズ値をスケールして、それを@Eアトリビュートで乗算します。 この@Eアトリビュートは、 Stiffness (E) (ヤング率)です。 これによって、MPM Sourceは不均一に粉砕されます。

MPM

はじめよう

MPM Configureサンプル

次のステップ

上級者