To... | Do this |
---|---|
シミュレーションの品質(詳細レベル)を制御する |
|
正確で高速なアニメーションコライダーを取得する |
可能な限り、 Collider Type には常に Animated (Rigid) を使用してください。 これによって、フレーム間の補間が非常に正確になります。 MPM Configure Spinning Tireサンプルを見ると、何もカスタムVelocityフィールドを追加する必要なく、摩擦のみを使用してマテリアルが移動していることが分かります。 |
MPMパーティクルが薄いコライダーを通過しないようにする |
|
段状の乱れがない連続した滑らかな放出を得る |
|
シミュレーションにフォースを適用する |
MPMはSOPですが、 |
金属板や中空オブジェクトのような薄いオブジェクトをシミュレーションする |
|
パーティクルが移動しないように空間内にピン留めする |
この効果を実現するには、 MPM Configure Softbodyサンプルは、 Point Group をピン留めする方法を説明した素晴らしいデモです。
内側のポイントを取り出し、 |
可視シミュレーション領域外に飛んでいったポイントを除去する |
これは、何かが爆発したり、大量の水飛沫が飛ぶ場合に役立ちます。
|
マテリアル同士の引っ付きの効果を弱くする |
2つのマテリアルを一緒にシミュレーションする時、バックグラウンドグリッドは共有されます。 2つのポイントがお互いに非常に近い時、それらのポイントはマテリアルプロパティを共有しているので、マテリアルはボクセル内で半分はマテリアルAのように、もう半分はマテリアルBのように動作します。 Grid Scale を下げると、マテリアル間の滲みが軽減されます。 以下のサンプルでは、水が土の山に落とされますが、思ったとおりに流れ落ちません。 Grid Scale を 1 に変更すると、ボクセルはパーティクルとほぼ同じサイズになります。 これを行なえば、水は流れ落ちるようになり、土パーティクルも一緒に流れ落ちるため、よりリアルなルックが生成されます。
|
シミュレーションをスローモーションで実行する |
これをセットアップする方法を示したサンプルは、MPM Configure Spinning Tireサンプルを参照してください。 |
シミュレーションを速く走らせる |
システムがあまりにも保守的であると感じ、サブステップ数を下げても同様の結果が得られるようであれば、これを行なうと良いでしょう。 ただし、この値を下げすぎるとシミュレーションが不安定になってしまいます。 または、 CFL Condition と Material Condition を上げてみるのも良いでしょう。 これによって、Velocity拘束とStiffness拘束が緩和されシミュレーションが高速化される場合があります。 |
揺れてはいけないマテリアル(濡れた砂など)の揺れを修正する |
例えば、それぞれの既存値に |
跳ねてはいけないマテリアル(雪など)の跳ねを修正する |
これによって、マテリアルは少し圧縮されますが、マテリアルが落ち着く時に跳ねが除去されます。 |
高速で移動するパーティクルが空中で崩壊しないように、または、エッジ周辺に段状のパターンが出ないように修正する |
シミュレーションはSparse(疎)なので、パーティクルが非常に高速に移動していると、そのパーティクルが移動する領域を維持して網羅するのに十分な速さでバックグラウンドグリッドが拡張されない場合があります。 これが原因で、マテリアルの形状が崩れ、ボクセル状のパターンが現れてしまいます。 この値を上げると、アクティブ領域が拡張されます。 デフォルトでこの最大値が低い理由は、シミュレーションから飛び出すパーティクルによっておかしな爆発が発生してしまう場合を考慮しているからです。 GPUメモリが不足してシミュレーションがクラッシュしないようにするためにアクティブ領域はクランプされます。
|
マテリアルの特性が変化して不安定になったシミュレーションを修正する |
デフォルトでは、MPM Solverは、シミュレーション全体においてマテリアル特性は一定であると想定します。 これは、MPM Solverがフレーム毎に Material Condition を再計算してしまわないようにするための最適化です。 しかし、シミュレーション実行中にマテリアル特性が変化する場合、サブステップが適切に調整されていないと不安定になってしまいます。 このチェックボックスを無効にするとシミュレーションは遅くなりますが、 Material Condition を一定に保つことで安定性が確保されます。 |
アニメーションするターゲットに追従するMPMパーティクルを取得する |
|
可変摩擦を持つコライダーを作成する |
|
粉砕しないオブジェクト(ゴムやゼリーなど)を簡単にポイント変形させる |
|
マテリアルの挙動と粉砕にバリエーションを加える |
float noise = fit(abs(snoise(@P*5,5,0.5,1)), 0, 0.25, 0, 1); @E *= fit01(noise, 1, 4); 例えば、このコードは、ノイズ値を生成してから、それをスケールして |