特定のパーティクルを操作する

パーティクル単位のアトリビュートには、パーティクル オブジェクトの各パーティクルのアトリビュート値が保存されます。たとえば、rgbPP アトリビュートには各パーティクルの rgbPP 値が保存されます。

各パーティクルには、固有のパーティクル識別子(数値)があります。パーティクル識別子は、パーティクル オブジェクトのパーティクル単位アトリビュートであるパーティクル ID (Particle Id)に保存されます。パーティクル オブジェクトを作成すると、0 から始まる連続したパーティクル ID が各パーティクルに自動的に割り当てられます。

たとえば、パーティクル ツール(Particle tool)を使用してワークスペース内のポイントをクリックし、5 つのパーティクルからなるパーティクル オブジェクトを作成したと仮定します。最初にクリックした位置にパーティクル ID 0 (Particle Id 0)のパーティクルが作成され、2 番目にクリックした位置にパーティクル ID 1 (Particle Id 1)のパーティクルが作成され、3 番目にクリックした位置にパーティクル ID 2 (Particle Id 2)のパーティクルが作成され、以下同様です。

エミッタからパーティクルが放出される場合は、最初に放出されるパーティクルから順番に連続したパーティクル ID が割り当てられます。最初に放出されるパーティクルはパーティクル ID 0、2 番目のパーティクルはパーティクル ID 1、3 番目のパーティクルはパーティクル ID 2 になり、以下同様です。

パーティクル ID アトリビュートを使用して、特定のパーティクルにパーティクル単位のアトリビュート値を代入することができます。

パーティクル ツール(Particle tool)を使用して、9 つのパーティクルからなるグリッド(名前は ColorGrid )を作成します。アトリビュート エディタ(Attribute Editor)で、パーティクルのパーティクル レンダー タイプ(Particle Render Type)球(Spheres)に設定します。パネル メニューからシェーディング > すべてをスムーズ シェード(Shading > Smooth Shade All)を選択して、パーティクルをシェーディング モードで表示します。

パーティクルのパーティクル ID に基づいて、各パーティクルに異なったカラーを割り当てることができます。

particleId に基づいてパーティクルのカラーを指定するには

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

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

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

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

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

  4. アトリビュート エディタ(Attribute Editor)パーティクル レンダー タイプ(Particle Render Type)メニューから数値(Numeric)を選択します。

    球の代わりに各パーティクルのパーティクル ID (Particle Id)が表示されます。

  5. エクスプレッション エディタ(Expression Editor)ColorGridShape を選択し、次の作成時のエクスプレッションを入力します。
    if (particleId <= 2) 	rgbPP = <<1,0,0>>; else if ((particleId > 2) && (particleId < 6)) 	rgbPP = <<1,1,1>>; else rgbPP = <<0,0,1>>;
    

    作成時のエクスプレッションは、アニメーションを巻き戻すたびに実行されます。パーティクルにカラー割り付けの効果はまだ現れません。数値(Numeric)パーティクル レンダー タイプ(particle render type)は、rgbPP へのカラー割り当てを無視します。

  6. アトリビュート エディタ(Attribute Editor)で、パーティクルのパーティクル レンダー タイプ(Particle Render Type)を再び球(Spheres)に設定します。

    左側、中央、右の列のパーティクルがそれぞれ赤色、白色、青色で表示されます。

    上のエクスプレッションの最初の文は、パーティクル ID が 2 以下であるパーティクルのカラーを赤に設定します。ベクトル <<1,0,0>> は RGB カラー方式で赤色を表します。

    2 番目の文は、パーティクル ID が 2 より大きく、かつ 6 より小さいパーティクルのカラーを白に設定します。ベクトル <<1,1,1>> は RGB カラー方式で白色を表します。

    3 番目の文は、上記の条件を満たさないパーティクルのカラーを青色に設定します。すなわち、パーティクル ID が 6 以上であるパーティクルが青色になります。ベクトル <<0,0,1>> は RGB カラー方式で青を表します。

    次の手順では、前とは違った方法で、パーティクル ID の値に基づいてアトリビュートを制御します。

パーティクルの半分を赤色、残りを青色にするには

  1. 次のランタイム エクスプレッションを入力します。
    if ((particleId % 2) == 0) 	rgbPP = <<1,0,0>>; else rgbPP = <<0,0,1>>;
    
  2. シーンを再生します。

    アニメーションを再生すると、フレームごとにランタイム エクスプレッションが実行されます。パーティクル ID が偶数のパーティクルは赤色になり、パーティクル ID が奇数のパーティクルは青色になります。

    最初の文は剰余演算子(%)を使用して、パーティクル ID を 2 で割った余りを計算し、この余りを 0 と比較します。余りが 0 である場合、このパーティクルに赤色が割り当てられます。RGB カラーの <<1,0,0>> は赤色です。

    2 番目の文では、剰余演算の余りが 0 でない場合に、パーティクルを青に設定します。RGB カラーの <<0,0,1>> は青色です。たとえば、パーティクル ID 0 を 2 で割ると商は 0 で余りは 0 です。余りが 0 なので、パーティクル ID 0 を持つパーティクルは赤を受け取ります。

    パーティクル ID 1 を 2 で割ると商は 0 で余りは 1 です。余りが 1 なので、パーティクル ID が 1 のパーティクルは青に設定されます。

    パーティクル ID 2 を 2 で割ると商は 1 で余りは 0 です。余りが 0 なので、パーティクル ID 1 を持つパーティクルは青を受け取ります。エクスプレッションはオブジェクトの各パーティクルについて実行されます。

    その結果、パーティクル ID が偶数であるパーティクルは赤色になり、パーティクル ID が奇数であるパーティクルは青色になります。

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

    作成時のエクスプレッションが実行され、パーティクル ID の値に基づいて、パーティクルが赤色、白色、または青色になります。

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

    フレームごとにランタイム エクスプレッションが実行されます。アニメーションを再生すると、パーティクルが赤色または青色になります。

    注: プログラマの皆様へ、

    プログラミング言語で一般的に使用される配列の添字(インデックス)表記を使用して、個々のパーティクルに値を代入することはできません。

    たとえば、3 つのパーティクルからなる不透明度 PP (Opacity PP)アトリビュートを作成したと仮定して、次のような方法で値を代入することはできません。

    opacityPP[0] = 0.3;
    opacityPP[1] = 0.5;
    opacityPP[2] = 1;