衝突を操作する

 
 
 

パーティクル オブジェクトを他のオブジェクトと衝突させる場合は、衝突の発生後にエクスプレッションの文をトリガするようなエクスプレッションを作成することができます。それにより、たとえば、衝突を起こしたパーティクルのカラーや不透明度を変更することができます。

エクスプレッションの作成を準備するには

  1. アウトライナ(Outliner)またはハイパーグラフ(Hypergraph)内で、パーティクル シェイプノードを選択します。
  2. ダイナミクス(Dynamics)メニュー バーからパーティクル > パーティクル衝突イベント エディタ(Particles > Particle Collision Event Editor)を選択します。

    パーティクル衝突イベント エディタ(Particle Collision Events Editor)が表示されます。

  3. イベントの作成(Create Event)ボタンをクリックします。

    選択したパーティクル シェイプノードにイベント(event)アトリビュートが追加されます。追加されたイベント アトリビュートは、エクスプレッション エディタアトリビュート リストに表示されます。

    パーティクル衝突イベント エディタ を閉じます。

コリジョン(衝突)を操作するエクスプレッションを作成するには

  1. 衝突するパーティクル シェイプ ノードを選択します。
  2. 衝突するパーティクルのシェイプ ノードのアトリビュート値(次の表を参照)を使用して、作成時のエクスプレッションまたはランタイム エクスプレッションを作成します。
    ロング ネーム ショート ネーム 説明 データ型

    イベント(event)

     

    オブジェクトの各パーティクルが何かに衝突した回数がパーティクル単位で記録されます。

    float array

    イベント数(Event Count)

    evc

    オブジェクトの全パーティクルで発生したイベントの総数です。

    integer

    イベント テスト(Event Test)

    evt

    エクスプレッションまたは MEL の getAttr コマンドによってイベント テスト値を最後に読み取った後にオブジェクトでイベントが発生した場合、true に設定されます。

    boolean

    イベント数(Event Count)イベント テスト(Event Test)は、スタティック アトリビュートです。パーティクル オブジェクトを作成すると同時に、これらのスタティック アトリビュートがパーティクル シェイプ ノードに割り当てられます。イベント数とイベント テストは、エクスプレッション エディタには表示されませんが、その値をエクスプレッション内で使用することができます。前述の手順に従って、まずイベント アトリビュートを作成してください。

5 つのパーティクルから成る、Peas という名前のオブジェクトを作成したとします。このオブジェクトは重力の作用で落下し、プレーンに衝突します。

最初のパーティクルがプレーンに衝突した瞬間に、そのパーティクルを赤く変色するようにします。

  1. シェーディング > すべてをスムーズ シェード(Shading > Smooth Shade All)を選択します。

    この操作は、後でエクスプレッションを使用してパーティクルにカラーを付ける場合、パーティクルの色が正しく表示されるようにするために必要です。

  2. アウトライナまたはハイパーグラフPeasShape を選択します。
  3. ダイナミクス(Dynamics)メニューバーからパーティクル > パーティクル衝突イベント エディタ(Particles > Particle Collision Event Editor)を選択します。
  4. パーティクル衝突イベント エディタイベントの作成(Create Event)ボタンをクリックし、ウィンドウを閉じます。

    以上の操作で PeasShape にイベント アトリビュートが追加されます。

  5. アトリビュート エディタダイナミック アトリビュートの追加(Add Dynamic Attributes)セクションにあるカラー(Color)ボタンをクリックします。

    パーティクル カラー(Particle Color)ウィンドウが表示されます。

  6. パーティクル単位のアトリビュートを追加(Add Per Particle Attribute)を選択し、アトリビュートの追加(Add Attribute)ボタンをクリックします。

    rgbPP というパーティクル単位のアトリビュートが追加されます。このアトリビュートは各パーティクルの RGB カラー要素(赤 / 緑 / 青)を制御します。

    RGB PP アトリビュートを追加すると、パーティクルのカラーが黒に変わります。RGB PP アトリビュートを追加すると、パーティクルの既定のカラーがオフになり、各パーティクルに <<0,0,0>> というカラー値(黒)が割り当てられます。

  7. エクスプレッション エディタ(Expression Editor)PeasShape を選択して、このランタイム エクスプレッションを(ダイナミクスの計算前、または後に)作成します。
    if (event == 1)
    	rgbPP = <<1,0,0>>;
    else if (event == 2)
    	rgbPP = <<0,1,0>>;
    else if (event >= 3)
    	rgbPP = <<0,0,1>>;
    else rgbPP = <<1,1,1>>;
    
  8. アニメーションを巻き戻します。

    アニメーションを巻き戻しても、パーティクルは黒色のままです。作成時のエクスプレッションが存在しないため、パーティクルには既定の RGB PP カラー(黒)が割り当てられます。

  9. アニメーションを再生します。

    パーティクルがプレーンに向かって落下します。各フレームが再生されるたびに、ランタイム エクスプレッションが実行されます。イベント アトリビュートは、パーティクル単位のアトリビュートです (アトリビュート名の末尾 2 文字が PP ではないため、名前からはパーティクル単位とは判断できません)。

    イベント アトリビュートには各パーティクルの衝突回数が記録されるため、パーティクルが最初にプレーンと衝突するまで、その値は 0 のままです。したがって、最初の衝突が発生するまでは、最後の else 文が実行されます。

    else rgbPP = <<1,1,1>>;
    

    イベントは 1、2、3 に等しくなく、また 3 を超える数値でもないため、この文が実行されます。RGB カラー方式のベクトル <<1,1,1>> は白色を表します。

    PeasShape の最初のパーティクルがプレーンに衝突すると、このパーティクルのイベント アトリビュートが 1 に設定されます。これが最初の代入の実行をトリガし、衝突するパーティクルの RGB PP の値に <<1,0,0>> が代入されます。RGB カラー方式では、このベクトルは赤色を表します (赤(R)が 1、緑(G)が 0、青(B)が 0であるため、赤色が生成されます)。

    イベント アトリビュートの値には、衝突のフレームでの衝突回数が反映されます。たとえば、フレーム 10 でパーティクルがプレーンに衝突した場合、イベント アトリビュートの値はフレーム 11 で更新されます。

    他のパーティクルがプレーンと最初に衝突した場合も、パーティクルが赤色に変わります。

    プレーンと 2 回目に衝突するまで(イベントが 2 になるまで)、各パーティクルは赤色のままです。2 度目の衝突後、パーティクルは緑に変わります。

    3 回目以降の衝突が発生し、イベントの値が 3 以上になると、パーティクルは青色になります。アニメーションの再生中に 4 回目以降の衝突が発生しても、各パーティクルは青色のままです。

  10. アニメーションを巻き戻します。

    アニメーションを巻き戻すと、既定の RGB PP 値である <<0,0,0>> が割り当てられるため、各パーティクルは黒色に戻ります。アニメーションをもう一度再生すると、各パーティクルのカラーは 1 回目と同様に白、赤、緑、青という順序で変わります。

    巻き戻し時に表示されるフレームでパーティクルを黒以外のカラーで表示すると、アニメーションをさらに洗練することができます。たとえば、巻き戻し時にパーティクルを白色で表示するには、次の 2 通りの方法があります。