パーティクル オブジェクトを他のオブジェクトと衝突させる場合は、衝突の発生後にエクスプレッションの文をトリガするようなエクスプレッションを作成することができます。それにより、たとえば、衝突を起こしたパーティクルのカラーや不透明度を変更することができます。
エクスプレッションの作成を準備するには
パーティクル衝突イベント エディタ(Particle Collision Events Editor)が表示されます。
選択したパーティクル シェイプ(particle shape)ノードにイベント(event)アトリビュートが追加されます。追加されたイベント アトリビュートは、エクスプレッション エディタ(Expression Editor)のアトリビュート(Attributes)リストに表示されます。
パーティクル衝突イベント エディタ(Particle Collision Events) を閉じます。
コリジョン(衝突)を操作するエクスプレッションを作成するには
ロング ネーム | ショート ネーム | 修正される問題 | データ型 |
---|---|---|---|
イベント(event) |
オブジェクトの各パーティクルが何かに衝突した回数がパーティクル単位で記録されます。 |
float array |
|
イベント数(Event Count) |
evc |
オブジェクトの全パーティクルで発生したイベントの総数です。 |
integer |
イベント テスト(Event Test) |
evt |
エクスプレッションまたは MEL の getAttr コマンドによってイベント テスト値を最後に読み取った後にオブジェクトでイベントが発生した場合、true に設定されます。 |
boolean |
イベント数(Event Count)とイベント テスト(Event Test)は、スタティック アトリビュートです。パーティクル オブジェクトを作成すると同時に、これらのスタティック アトリビュートがパーティクル シェイプ(particle shape) ノードに割り当てられます。イベント数とイベント テストは、エクスプレッション エディタ(Expression Editor)には表示されませんが、その値をエクスプレッション内で使用することができます。前述の手順に従って、まずイベント アトリビュートを作成してください。
5 つのパーティクルから成る、Peas という名前のオブジェクトを作成したとします。このオブジェクトは重力の作用で落下し、プレーンに衝突します。
最初のパーティクルがプレーンに衝突した瞬間に、そのパーティクルを赤く変色するようにします。
この操作は、後でエクスプレッションを使用してパーティクルにカラーを付ける場合、パーティクルの色が正しく表示されるようにするために必要です。
以上の操作で PeasShape にイベント アトリビュートが追加されます。
パーティクル カラー(Particle Color)ウィンドウが表示されます。
rgbPP というパーティクル単位のアトリビュートが追加されます。このアトリビュートは各パーティクルの RGB カラー要素(赤 / 緑 / 青)を制御します。
RGB PP アトリビュートを追加すると、パーティクルのカラーが黒に変わります。RGB PP アトリビュートを追加すると、パーティクルの既定のカラーがオフになり、各パーティクルに <<0,0,0>> というカラー値(黒)が割り当てられます。
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>>;
アニメーションを巻き戻しても、パーティクルは黒色のままです。作成時のエクスプレッションが存在しないため、パーティクルには既定の RGB PP カラー(黒)が割り当てられます。
パーティクルがプレーンに向かって落下します。各フレームが再生されるたびに、ランタイム エクスプレッションが実行されます。イベント アトリビュートは、パーティクル単位のアトリビュートです (アトリビュート名の末尾 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 回目以降の衝突が発生しても、各パーティクルは青色のままです。
アニメーションを巻き戻すと、既定の RGB PP 値である <<0,0,0>> が割り当てられるため、各パーティクルは黒色に戻ります。アニメーションをもう一度再生すると、各パーティクルのカラーは 1 回目と同様に白、赤、緑、青という順序で変わります。
巻き戻し時に表示されるフレームでパーティクルを黒以外のカラーで表示すると、アニメーションをさらに洗練することができます。たとえば、巻き戻し時にパーティクルを白色で表示するには、次の 2 通りの方法があります。
rgbPP = <<1,1,1>>;
この文は、オブジェクトの各パーティクルについて実行されるため、アニメーションを巻き戻すと、すべてのパーティクルが白色で表示されるようになります。
現在のフレームにおける PeasShape のすべてのアトリビュート値が初期状態値として保存されます。アニメーションを巻き戻すときは RGB PP の現在値が使用されます。再生したのはアニメーションの 2 番目のフレームですから、このフレームのパーティクル カラーである白がアニメーションの巻き戻しのために保存されます。
選択項目に設定(Set for Selected)を選択すると、すべてのアトリビュート値(位置、速度、加速度など)が初期状態値として保存されます。再生中に複数のアトリビュート値を変更すると、選択項目に設定によって不要なアトリビュート値が保存される可能性があります。そのような場合は、作成時のエクスプレッションを使用してください。