カスタム アトリビュートに代入する

パーティクル シェイプ(particle shape) ノードにカスタム アトリビュートを追加し、そのアトリビュートの値をエクスプレッションで制御することができます。

カスタム アトリビュートを追加するには

  1. オブジェクトのトランスフォーム(Transform)ノードではなくパーティクル シェイプ(Particle Shape)ノードを選択します。

    ハイパーグラフ(Hypergraph)またはアウトライナ(Outliner)を使用して、シェイプ ノードを選択します。

  2. 次のいずれかを実行します。

    アトリビュートの追加(Add Attribute)ウィンドウが表示されます。

  3. ロング ネーム(Long name)フィールドにアトリビュートの名前を入力します。
  4. アトリビュートの作成: キー設定可(Make attribute: Keyable)オプションがオンに設定されていることを確認します。
  5. 次のデータ型の 1 つを選択します。
    vector

    3 つの float (浮動小数点数)を要素とする vector (ベクトル)型のアトリビュートを作成します。

    float

    浮動小数点型のアトリビュートを作成します。

    int

    整数型のアトリビュートを作成します。

    boolean

    on/off 値からなるアトリビュートを作成します。

    string

    データ入力値として英数字を取る string アトリビュートを作成します。

    enum

    「列挙型」リスト、つまりプルダウン リストから選択ができるアトリビュートを作成します。

  6. 次のアトリビュートタイプの 1 つを選択します。
    スカラー(Scalar)

    1 つの値をオブジェクトの全パーティクルに適用する、オブジェクト単位のアトリビュートを作成します。データ型に vector を、アトリビュート タイプをスカラーに設定すると、3 つの数字からなる単一の値と考えることができます。

    パーティクル単位(配列) (Per Particle (Array))

    パーティクル単位のアトリビュートを作成します。このタイプのアトリビュートには、パーティクルごとに異なる値を代入できます。

  1. アトリビュートを追加する場合は、追加(Add)ボタンをクリックします。OK ボタンをクリックしてアトリビュートを追加し、アトリビュートの追加(Add Attribute)ウィンドウを閉じます。

    新しいアトリビュートは、アトリビュート エディタ(Attribute Editor)追加のアトリビュート(Extra Attributes)セクションに表示されます。アトリビュート エディタ(Attribute Editor)ではアトリビュート名は常に先頭が大文字で表示されますが、入力する場合は、大文字 / 小文字の区別も含めてエクスプレッション エディタ(Expression Editor)に表示されるとおりのスペルを使用する必要があります。

カスタム アトリビュートに値を代入するには

  1. カスタム アトリビュートに値を代入する場合は、スタティック アトリビュートまたはダイナミック アトリビュートに値を代入する場合と同じ技法を使用することができます。

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)を起動する必要があります。