On this page

比較

古いPOP

ダイナミックパーティクル

ジェネレータノード毎に別々のパーティクルプリミティブが作成され、ノードは、そのパーティクルプリミティブを操作するジェネレータから接続されていました。

パーティクルはストリームと呼ばれるポイントグループにあります。パーティクルすべてのサブセットを操作するノードブランチを作成することが簡単になりました。

フレーム毎にaccelが累積されていました。

フレーム毎にforceを累積し、他のダイナミクスとの相性が良くなりました。

デフォルトでmassアトリビュートが使われていました。

ソルバはデフォルトでmassを重要視するのに対して、デフォルトのPOPノードすべてが Ignore Mass がデフォルトの設定になっています。これは各ノードでオフにすることができます。この設定になっている理由は、FLIP流体がパーティクルシミュレーションに対してあまり意味のない方法でmassを使うからです。これは、合理的な方法でBullet RBDシミュレーションに直接適用することも可能です。

Collectノードを使って別々のジェネレータからのプリミティブを結合していました。

標準のMerge DOPを使ってパーティクルシステムを結合します。

ディスプレイフラグを使ってシミュレーションの出力を設定していました。

出力を変更するには、ネットワークを再接続しなければなりません。

HScriptのエクスプレッションで$ID$CRなどのローカル変数を使っていました。

より高速な処理とマルチスレッド処理をするためにVEXエクスプレッションを使います。

ほとんどC++で実装していました。

VOPとSOPを使って実装しているので、ソースネットワークを調べてそこから新しい挙動を設定することが可能になっています。

少ないパーティクルとC++ノードのネットワークの処理が非常に高速でした。

VOPのJUST-IN-TIMEコンパイルとノードネットワークのクッキングを使うので、基本的なオーバーヘッドが大きくなりました。しかし、パーティクル毎のエクスプレッションを使う場合、新しいVEXエクスプレッションは、古いHScriptエクスプレッションよりも非常に高速で、マルチスレッドによって高度なパーティクルシミュレーションを高速化しています。

Guideノードフラグを使ってビューアにガイド(例えば、フォース方向の可視化)を表示していました。

DOPには可視ガイドを隠すHiddenノードフラグがあります。ガイドと可視化はノードパラメータで制御します。

dragをVelocityとは逆方向の加速度として適用していました。これはdragの値を大きくすると不安定になり、ゼロに近づけると振動する場合があります。

dragはvelocityの二乗に比例するので、遅い速度の動きを保持しながらも極端なVelocityのより高速な圧縮が可能です。dragが暗黙的に適用(dragの方程式が直接計算されている)されているので、非常に大きなdragを使ってもオーバーシュートが回避されます。dragexpアトリビュートを使えば、パーティクル単位基準でdragモデルを切り替えることができます。

collisionノードを使って衝突検出とその反応の両方を操作していました。ノードフローの衝突反応の操作は扱いにくいものでした。

チェーンのパーティクルノードは、プロパティを使って衝突の挙動を指定します。Particle Solverノードは、そのプロパティに応じてDOP衝突に反応します。

整数のstateアトリビュートは、衝突プロパティの"ビットフィールド"でした。ビット単位の演算を使って整数値からプロパティの情報を引き出さなければなりませんでした。非表示のbacktrackアトリビュートは、パーティクルの発生場所を追跡していました。

lifeという名前の2つのfloat値で構成されるベクトルを使っていました。このベクトルの1番目のコンポーネントがageで、2番目のコンポーネントがlifespanでした。仮想ローカル変数$LIFEはその2つの値の比率でした。

agelifeという名前の2つのスカラーアトリビュートを使います。古い$LIFEの比率と同じ値を取得するには、VEXエクスプレッションで@nageを使います。

その他

  • ダイナミックパーティクルは古い"パーティクルイベント"システムと同じではありません。イベントは、パーティクルシステムが/partネットワーク内にしか存在できなかった初期の頃の制約を回避するためにありました。

  • Creep POPの機能は、POP VOPまたはPOP Wrangleに置き換わりました。posprim/pospath/posuvアトリビュートとprimuv()関数を使用してください。

パーティクルダイナミクス

はじめよう

挙動

次のステップ

リファレンス