ベクトルまたはベクトル配列アトリビュートの要素に代入する

エクスプレッションでは、ベクトル アトリビュートまたはベクトル配列アトリビュートの要素を参照または設定することはできません。この制約を解決する方法を次の例で示します。カラー アトリビュートの操作の詳細については、カラーを操作するを参照してください。

ランダムに配置された 100 個のパーティクルからなるパーティクル オブジェクト(名前は Cloud )を作成したと仮定します。シェーディング > すべてをスムーズ シェード(Shading > Smooth Shade All)をオンにし、パーティクル単位の rgbPP アトリビュートを追加します。次に、以下の作成時のエクスプレッションを入力します。

CloudShape.position = sphrand(1);
vector $pos = CloudShape.position;
CloudShape.rgbPP = <<0,$pos.y,0>>;

これら 3 つの文は、クラウド(Cloud)オブジェクトの各パーティクルについて 1 回ずつ実行されます。

最初の文は、パーティクルに対し、半径 1 の球状の領域内にランダムな位置を与えます。sphrand(1) 関数は、X、Y、および Z 位置コンポーネントに対して、-1 より大きく、1 より小さい値を与えます。

2 番目の文は、ベクトル変数 $pos にパーティクルの位置アトリビュートを代入します。

3 番目の文は、パーティクルの RGB PP アトリビュートに RGB カラーを代入します。

ベクトル CloudShape.rgbPP アトリビュートの左側 / 中央 / 右側の要素は、RGB カラーの赤 / 緑 / 青の要素を表します。したがって、3 番目の文は、パーティクルの RGB カラーの赤と青の要素に 0 (無色)を代入し、緑の要素にクラウドの Y 座標値を代入します。

RGB カラーの緑の要素では 0 以下の値は 0 とみなされるため、パーティクルの Y 座標が XZ プレーンの下にある場合はパーティクルが黒色になり、XZ プレーンの上にある場合はパーティクルがほとんど黒色(Y 座標が 0 に近い場合)から完全な緑色(Y 座標が 1 の場合)までの範囲で変化します。

以上のようにして、パーティクルの位置に応じてパーティクルのカラーを黒色と緑色の間で変化させます。

particleShape1.rgbPP = <<1,0,CloudShape.position.z>>;

この文はエラーになります。CloudShape.position.z は、CloudShape.position というオブジェクトの z というアトリビュートであると解釈されます。

意図したとおりの結果を得るには、次のような文を使用します。

vector $temp = CloudShape.position;
particleShape1.rgbPP = <<1,0,$temp.z>>;

最初の文は、ベクトル CloudShape.position アトリビュートの 3 つの要素を読み取り、それらの要素をベクトル変数 $temp に代入します。2 番目の文は、$temp の右側の要素(すなわち、CloudShape.position の右側の要素)を読み取り、その要素を particleShape1.rgbPP の右側の要素に代入します。

particleShape1.rgbPP.y = 1;

この文もエラーになります。ベクトル アトリビュートの要素に値を代入することはできません。