XSIのシミュレーション
パーティクル > 作成と削除 > キャッシュと再生モード > 放射の設定 > パーティクルタイプの設定
 パラメータのアニメート > 初期状況の作成 > パーティクルイベント > 衝突と回避 > フォースの適用
  ゴールの設定 > デフォーム > スプライトの使用 > オブジェクトのアタッチ > パーティクルのスケッチ
   Fluid(流体) > Explosion(爆発) > パーティクルのレンダリング > パーティクルシェーダ
プロパティ ParticlesOp > FluidOp > ExplosionOp > emissionプロパティ > PType

衝突と回避
パーティクルの衝突には、障害物への衝突と、パーティクル同士の衝突・回避がある。

障害物への衝突はパーティクルイベントとして扱われる。パーティクルクラウドを選択してSimulateツールバーからModify > Environment > Set Obstacleで障害物オブジェクトをPickする方法と、PTypeプロパティのEvents(イベント)タブからNew Event(新規イベント)ボタンを押して設定する方法がある。

パーティクル同士の衝突と回避は、PTypeプロパティのinterpart.(パーティクル間)タブで設定する。同じパーティクルタイプ同士でも、別のパーティクルタイプでとでも衝突・回避を設定することができる。しかし、パーティクル同士の衝突・回避は、単一のパーティクルクラウドで定義されたパーティクルタイプのみ対応しており、複数のクラウドは使用できない。別のパーティクルタイプと衝突させるには、同じクラウドに複数のエミッタをアタッチする必要がある。

パーティクル同士の衝突・回避は、パーティクルシミュレータでのみ設定できる。


障害物との衝突の作成
パーティクルクラウドを選択してSimulateツールバーのコマンドから障害物を設定すると、パーティクルクラウドに複数のエミッタとパーティクルタイプがアタッチされている場合、全てのパーティクルタイプに衝突のパーティクルイベントが作成される。(障害物1つにつき1イベント。)デフォルトではトリガーにCollision(衝突)、アクションにBounce(バウンス)が設定されるが、消滅や他のパーティクルを放出するなど、Bounce(バウンス)以外の動作をさせることも可能。変更の方法についてはパーティクルイベントページへ。

パーティクルタイプごとに衝突を設定するには、障害物を設定したいPTypeプロパティのEvents(イベント)タブからNew Event(新規イベント)ボタンを押して作成する。イベントの設定方法についてはパーティクルイベントページへ。


障害物に対するの反応の定義
障害物の設定をした後、各パーティクルタイプが障害物に対してどのように反応するのかを設定する。手順は以下のとおり。
1. パーティクルタイプごとに、PTypeプロパティエディタを開く。
2. Envir.(環境)タブをクリックし、Obstacle(障害物)プロパティを(摩擦・弾性)変更する。
☆ここで設定した値は、障害物オブジェクトが持つObstacleプロパティPhysical(物理的)パラメータで設定した値に乗算される。関係をシンプルに保つには、最初に障害物の方の値で大まかな設定し、その後PTypeの方のパラメータで調整するとよい。


パーティクルのサイズを考慮して衝突させる
PTypeプロパティのEnvir.(環境)タブObstacle(障害物)の設定で、Use size for collision(衝突検知にサイズを使用)をオンにすると、衝突の際にパーティクルのサイズを考慮する。オフになっている場合は、衝突の際にパーティクルがオブジェクトに入り込むので注意が必要。


衝突の精度の設定
ParticlesOp / FluidOp / ExplosionOpCollisionsタブで、Iterations(反復)Interframes(中間フレーム)の数を設定できる。Interationsには1間隔あたりの、Interframesには1フレームあたりのパーティクルの位置の計算回数をそれぞれ指定する。パラメータを大きな値にするほど精度が高まるが、計算時間も長くなる。また、衝突によっては、数値を大きく設定すると、同じステップでパーティクルが複数の障害物と衝突するという状況になり、予期せぬ動作が発生することがある。

Explosionシミュレータを使用している場合は、Check Particles(パーティクル確認)も選択することで、パーティクルと障害物との衝突を検知し、パーティクルの反応の仕方を推測することも可能。このオプションがオフの場合は、構造体との衝突のみが検出される。


パーティクル同士の回避
パーティクルを互いに回避させるには
1. パーティクルタイプのPTypeプロパティを開き、Interpart.(パーティクル間)タブを開く。
2. Interparticle Avoidance(パーティクル間の回避)Enable(有効)にチェックを入れてパラメータをアクティブにする。
3. 同じパーティクルタイプのパーティクル同士で回避させる場合は、Enable avoidance with same PType(同じPTypeで回避有効)を選択する。このオプションを選択しない場合は、回避させる相手となる別のパーティクルタイプも設定し、Avoidanceパラメータをアクティブにする必要がある。
4. 磁気の反発フォースフィールドのような、回避フォースのIntensity(強度)を設定する。パーティクルが別のパーティクルタイプを回避するようにした場合、パーティクルタイプ同士の総回避フォースは、それぞれのIntensity値の積で決まる。
5. Radius(半径)を設定する。Radiusはパーティクルから測って、Intensityの影響が消えるまでの最大距離となる。


パーティクル同士の衝突
パーティクル同士を衝突させるには
1. パーティクルタイプのPTypeプロパティを開き、Interpart.(パーティクル間)タブを開く。
2. Interparticle Collision(パーティクル間の衝突)Enable(有効)にチェックを入れてパラメータをアクティブにする。
3. 同じパーティクルタイプのパーティクル同士で回避させる場合は、Enable collision with same PType(同じPTypeで衝突有効)を選択する。このオプションを選択しない場合は、っ衝突の相手となる別のパーティクルタイプも設定し、Collisionパラメータをアクティブにする必要がある。
4. 衝突のProbability(確率性)を0から100までのスケールで設定する。0では衝突の可能性はなく、100では衝突が保証される。パーティクルが別のパーティクルタイプと衝突するようにした場合、パーティクルタイプ同士の総衝突確率は、それぞれのProbabilityの積で決まる。
5. Radius(半径)を設定する。Radiusはパーティクルが衝突する最小距離。(Softimage単位)
6. Elasticity(弾性)を設定して、パーティクル同士が衝突したときの跳ね返りの度合いを確定する。0から1まで。1で最大。パーティクルが別のパーティクルタイプと衝突するようにした場合、パーティクルタイプ同士の総弾性率は、それぞれのElasticity値の積で決まる。


パーティクルタイプ同士の衝突を正しく作成するための注意
Radius(半径)を最小限のサイズに維持すること。
パーティクル同士が簡単に跳ね返りすぎないように、パーティクルの移動速度の高速化を回避すること。速度を抑えるには、PTypeプロパティGeneral(一般)タブでAllowed Linear Velocity Range(リニア速度範囲有効)Max値を設定する。制御の難しいパーティクルも、この方法で制御しやすくなる。
パーティクルが衝突の際に強く跳ね返りすぎる場合は、衝突のElasticity(弾性)値を下げること。