パーティクル シェイプ(particle shape) ノードにカスタム アトリビュートを追加し、そのアトリビュートの値をエクスプレッションで制御することができます。
カスタム アトリビュートを追加するには
ハイパーグラフ(Hypergraph)またはアウトライナ(Outliner)を使用して、シェイプ ノードを選択します。
アトリビュートの追加(Add Attribute)ウィンドウが表示されます。
3 つの float (浮動小数点数)を要素とする vector (ベクトル)型のアトリビュートを作成します。
浮動小数点型のアトリビュートを作成します。
整数型のアトリビュートを作成します。
on/off 値からなるアトリビュートを作成します。
データ入力値として英数字を取る string アトリビュートを作成します。
「列挙型」リスト、つまりプルダウン リストから選択ができるアトリビュートを作成します。
1 つの値をオブジェクトの全パーティクルに適用する、オブジェクト単位のアトリビュートを作成します。データ型に vector を、アトリビュート タイプをスカラーに設定すると、3 つの数字からなる単一の値と考えることができます。
パーティクル単位のアトリビュートを作成します。このタイプのアトリビュートには、パーティクルごとに異なる値を代入できます。
最小(Minimum)と最大(Maximum)は、アトリビュート エディタ(Attribute Editor)またはチャネル ボックス(Channel Box)に入力できるアトリビュート値の最大値と最小値を設定します。既定値は、アトリビュートの既定値を設定します。アトリビュート値はエクスプレッションで制御できるため、これらのオプションに値を入力しなくても構いません。
エクスプレッションは、最小(Minimum)と最大(Maximum)の値によって制限されるわけではありません。エクスプレッションで指定する値が、アトリビュートに代入されます。エクスプレッションでは、アトリビュート エディタ(Attribute Editor)またはチャネル ボックス(Channel Box)に入力されたアトリビュートの値あるいは既定(Default)値を読み取ることができます。
スカラー(Scalar)を選択した場合は、初期状態アトリビュートの追加(Add Initial State Attribute)をオンに設定して、初期状態アトリビュートを作成することはできません。
配列(Array)アトリビュートの最小(Minimum)、最大(Maximum)、既定(Default)の各値は指定できません。
新しいアトリビュートは、アトリビュート エディタ(Attribute Editor)の追加のアトリビュート(Extra Attributes)セクションに表示されます。アトリビュート エディタ(Attribute Editor)ではアトリビュート名は常に先頭が大文字で表示されますが、入力する場合は、大文字 / 小文字の区別も含めてエクスプレッション エディタ(Expression Editor)に表示されるとおりのスペルを使用する必要があります。
カスタム アトリビュートに値を代入するには
10 個のパーティクルからなるオブジェクト(名前は sunspot)を作成し、そのオブジェクトのパーティクル シェイプ(particle shape)ノードに浮動小数点型のオブジェクト単位のアトリビュート(名前は glow)を追加します。グロー(glow)アトリビュートに浮動小数点型の値を代入するには、次のような作成時のエクスプレッションを使用します。
sunspotShape.glow = 11.5; print (sunspotShape.glow + "\n");
アニメーションを巻き戻すと、sunspotShape の glow アトリビュートに値 11.5 が渡されます。この値は、print 文によりスクリプト エディタ(Script Editor)に表示されます。このエクスプレッションはオブジェクトのパーティクルごとに 1 回ずつ実行されるため、値は 10 回表示されます。
10 個のパーティクルからなるシェイプ ノード(名前は sunspot)に、ベクトル配列のパーティクル単位アトリビュート(名前は heat)を追加します。各パーティクルの熱(heat)アトリビュートに異なる値を代入するには、次のような作成時のエクスプレッションを使用します。
float $randomNumber = rand(1); sunspotShape.heat = <<$randomNumber,0,0>>; print(sunspotShape.heat + "\n");
アニメーションを巻き戻すと、エクスプレッションがパーティクルごとに 1 回ずつ、全部で 10 回実行されます。
最初の文は $randomNumber 変数に 0 から 1 の範囲に含まれるランダムな数値を設定します。次の文では、1 つのパーティクルの熱アトリビュートにベクトルを代入します。熱アトリビュートに代入されるベクトルの一番左側の要素は、文の実行ごとに異なる値を取る乱数です。真中の要素と右側の要素は常に 0 です。
熱アトリビュートに代入されるベクトルは、<<0.57, 0, 0>>、<<0.32, 0, 0>>、<<0.98, 0, 0>> などになります。
print 文によって、熱アトリビュートの値がスクリプト エディタ(Script Editor)に表示されます。
オブジェクトにベクトルのカスタム アトリビュートを追加すると、ベクトルの要素がアトリビュート エディタ(Attribute Editor)に表示されますが、各要素の値をアトリビュート エディタ内で編集することはできません。ベクトルのカスタム アトリビュートの値を変更するには、エクスプレッションを使用するか、またはアトリビュート エディタ(Attribute Editor)からコンポーネント エディタ(Component Editor)を起動する必要があります。