パーティクル単位のアトリビュートには、パーティクル オブジェクトの各パーティクルのアトリビュート値が保存されます。たとえば、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 に基づいてパーティクルのカラーを指定するには
パーティクル カラー(Particle Color)ウィンドウが表示されます。
rgbPP というパーティクル単位のアトリビュートが追加されます。このアトリビュートは各パーティクルの RGB カラー要素(赤 / 緑 / 青)を制御します。
パーティクルが選択されていない場合は、RGB PP アトリビュートを追加すると、パーティクルのカラーが黒に変わります。RGB PP アトリビュートを追加すると、パーティクルの既定のカラーがオフになり、各パーティクルに <<0,0,0>> というカラー値(黒)が割り当てられます。
球の代わりに各パーティクルのパーティクル ID (Particle Id)が表示されます。
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 へのカラー割り当てを無視します。
左側、中央、右の列のパーティクルがそれぞれ赤色、白色、青色で表示されます。
上のエクスプレッションの最初の文は、パーティクル ID が 2 以下であるパーティクルのカラーを赤に設定します。ベクトル <<1,0,0>> は RGB カラー方式で赤色を表します。
2 番目の文は、パーティクル ID が 2 より大きく、かつ 6 より小さいパーティクルのカラーを白に設定します。ベクトル <<1,1,1>> は RGB カラー方式で白色を表します。
3 番目の文は、上記の条件を満たさないパーティクルのカラーを青色に設定します。すなわち、パーティクル ID が 6 以上であるパーティクルが青色になります。ベクトル <<0,0,1>> は RGB カラー方式で青を表します。
次の手順では、前とは違った方法で、パーティクル ID の値に基づいてアトリビュートを制御します。
パーティクルの半分を赤色、残りを青色にするには
if ((particleId % 2) == 0) rgbPP = <<1,0,0>>; else rgbPP = <<0,0,1>>;
アニメーションを再生すると、フレームごとにランタイム エクスプレッションが実行されます。パーティクル 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 が奇数であるパーティクルは青色になります。
作成時のエクスプレッションが実行され、パーティクル ID の値に基づいて、パーティクルが赤色、白色、または青色になります。
フレームごとにランタイム エクスプレッションが実行されます。アニメーションを再生すると、パーティクルが赤色または青色になります。
プログラミング言語で一般的に使用される配列の添字(インデックス)表記を使用して、個々のパーティクルに値を代入することはできません。
たとえば、3 つのパーティクルからなる不透明度 PP (Opacity PP)アトリビュートを作成したと仮定して、次のような方法で値を代入することはできません。
opacityPP[0] = 0.3; opacityPP[1] = 0.5; opacityPP[2] = 1;