パーティクル サンプラ(Particle Sampler)ノードを簡単に使えるように、パーティクル サンプラ ノードを使用して一般的なエフェクトを実現する例を示します。パーティクル サンプラ ノード アトリビュート(Particle Sampler Info)の詳細については、パーティクル サンプラ ノード アトリビュートを設定するを参照してください。
第 1 の方法の例を示します。パーティクル サンプラ(Particle Sampler Info)ノードを使用してテクスチャ配置ノードを駆動します。テクスチャ配置ノードはシェーダ カラーにテクスチャを配置します。この例では、パーティクルの存在時間を使用してパーティクルにカラーを設定します。
例: パーティクルの存在時間を使用してパーティクルのカラー設定する
これを行うには、次の MEL コマンドを Maya ヘルプ(Maya Help)からコピーして、それをスクリプト エディタ(Script Editor)にペーストします。
emitter -pos 0 0 0 -type volume -r 100 -vsh cone -alx 8; particle; connectDynamic -em emitter1 particle1; setAttr particleShape1.lifespanMode 1; setAttr particleShape1.lifespan 2.0; setAttr particleShape1.particleRenderType 8;
白熱光はカラーと同じですが、発光して見えるので、ライトを加える必要がありません。
新しいランプ、テクスチャ配置ノード、および パーティクル サンプラ(Particle Sampler Info) ノードが作成されます。ライフ カラー(Life Color)は実際にはアトリビュートではありません。カラーへの接続をこのようにセットアップするように指示するコントロールに過ぎません。
ランプによってカラーがパーティクルの存在時間に従って色付けされます。
次に、パーティクル サンプラ(Particle Sampler Info) ノードのコントロールのいくつかを変更します。
カラーが変わる順序が逆になります。パーティクルが赤から緑、そして青に変わるかわりに、青から緑に、そして赤に変わります。
次に、テクスチャ ノードのコントロールを変更します。
ノイズがランプに適用され、赤、緑、および青のパーティクルがランダムになります。
パーティクルの色がランプを 2 回以上サイクルすることに注意してください。
第 2 の方法の例を次に示します。これは、rgbPP で直接カラーを駆動する方法です。この方法は、存在時間(age)以外のアトリビュートをエクスプレッションまたはランプで使用するときに用います。
例: rgbPP を持つパーティクル サンプラ(Particle Sampler Info)ノードを使用する
これを行うには、次の MEL コマンドを Maya ヘルプ(Maya Help)からコピーして、それをスクリプト エディタ(Script Editor)にペーストします。
emitter -pos 0 0 0 -type volume -r 100 -vsh cone -alx 8; particle; connectDynamic -em emitter1 particle1; setAttr particleShape1.lifespanMode 1; setAttr particleShape1.lifespan 2.0; setAttr particleShape1.particleRenderType 8;
パーティクル カラー(Particle Color) ウィンドウが表示されます。
新しいパーティクル サンプラ(Particle Sampler Info) ノードが作成され、そのカラー出力が color attribute に接続されます。すでにパーティクル サンプラ(Particle Sampler Info)ノードを作成していれば、それを使用して、接続エディタ(Connection Editor)で直接接続することができます。
particleShape1.rgbPP = << mag(particleShape1.velocity) / 10, 0.0, 1 -mag(particleShape1.velocity)/10 >>;
これにより、Maya は速度が増加するとパーティクル カラーを青から赤に変えます。
この例ではエクスプレッションを使用して特定のエフェクトを実現しました。しかし、パーティクル サンプラ(Particle Sampler Info) ノードでエクスプレッションを使わなくてもかまいません。異なるエフェクトをもたらすランプを使用することもできます。
パーティクル サンプラ(Particle Sampler)ノードの outIncandescence 出力は、RGB PP アトリビュートがあれば、それを自動的に使用することに注意してください。RGB PP がなければ、colorRed/colorGreen/colorBlue を使用します(これらのアトリビュートが存在する場合)。
RGB PP を使用する利点は、パーティクル単位のアトリビュートに使用できる方法で、その値を設定またはアニメートして、結果をソフトウェア レンダリングで表示することができることです。その後で、同じカラー アトリビュートを使用して、ハードウェアとソフトウェアの両方のレンダリングで使用することもできます。
ただし、RGB PP はエクスプレッションとランプ(またはコンポーネント エディタ)でしかアニメートすることはできません。ライフ カラー(Life Color)を使用することの利点は、テクスチャ配置ノードを使用して、そのコントロールを利用できることです。特に、u と v のコントロールがあるのでランプだけでなく任意のテクスチャを使用できるのは便利です。必要があれば、パーティクル サンプラ(Particle Sampler Info) ノードは互換性のあるどのアトリビュートでも接続できます。
カラーの場合と同様に、ライフ透明度(Life Transparency)も使用できます。パーティクル透明度マッパや存在時間マッパの代わりに、パーティクル サンプラ(Particle Sampler Info)ノードの outUvCoord アトリビュートとテクスチャ配置ノードを使用します。
カラーの場合と同様に、不透明度 PP (Opacity PP)などのパーティクル単位のアトリビュートを使用できます。パーティクル サンプラ(Particle Sampler Info) ノードの outTransparency アトリビュートを使用します。
例: フェード アウトするパーティクルの作成
これを行うには、次の MEL コマンドを Maya ヘルプ(Maya Help)からコピーして、それをスクリプト エディタ(Script Editor)にペーストします。
emitter -pos 0 0 0 -type volume -r 100 -sro 0 -spd 1 -vsh cylinder -afx 1; scale -r 5 0.5 5 ; particle; connectDynamic -em emitter1 particle1;
opacityPP = 1 / (0.01 + mag( position ));
(パーティクルが原点にあるときに 0 で割るのを防ぐため、分母に 0.01 を加えます。)
レンダー ノードの作成(Create Render Node)ウィンドウが表示されます。
新しいパーティクル サンプラ(Particle Sampler Info)ノードが作成され、その outTransparency がシェーダの透明度(transparency)に接続されます。カラーや白熱光の場合と同様に、outTransparency 出力は不透明度 PPアトリビュートがあればそれを使用し、なければ不透明度を使用します。
不透明度と透明度は逆の関係にあります。ある物の不透明度が高くなると、その透明度は低くなります。パーティクル サンプラ(Particle Sampler Info)ノードの outTransparency 出力を接続すると、このノードは自動的に不透明度を透明度に変換して、正しい結果が得られるようにします。
任意のパーティクル単位のアトリビュートを、制御したいシェーダ内のアトリビュートに接続することができます。そうすれば、パーティクル単位のアトリビュート上にエクスプレッションを作成し、好きなように制御できます。
例: 煙の作成
これを行うには、次の MEL コマンドを Maya ヘルプ(Maya Help)からコピーして、それをスクリプト エディタ(Script Editor)にペーストします。
curve -d 3 -p -6.861087 0 7.36723 -p -2.43128 0 2.685247 -p 2.685247 0 -2.43128 -p 6.968851 0 -6.714884 -k 0 -k 0 -k 0 -k 1 -k 1 -k 1 ; emitter -type curve -r 100 -sro 0 -nuv 0 -cye none -cyi 5 -spd 6 -srn 0 -nsp 0 -tsp 0 -mxd 0 -mnd 0 -dx 0 -dy 1 -dz 0 -sp 0 ; particle; connectDynamic -em emitter1 particle1;
次に、使用していない任意のパーティクル単位のアトリビュートを使用します。たとえば、ここでは親 U (Parent U)と親 V (Parent V)は必要ないので、それらのアトリビュートを使用します。
ここでは、説明を簡単にするために親 U と親 V を使用しましたが、これらは簡単に追加でき、しかも使用されていないためです。ただし、ユーザ定義アトリビュートならどれでも使用できます。自分で定義するアトリビュートでも使用できます。
parentU = 0.7 + 2*(age/finalLifespanPP); parentV = age /(1.5*finalLifespanPP);
煙のように、パーティクルが時間の経過とともに密度が薄くなりノイズが多くなるようにしたいとします。
この例ではエクスプレッションを使用して特定のエフェクトを実現しました。しかし、パーティクル サンプラ(Particle Sampler Info) ノードでエクスプレッションを使わなくてもかまいません。異なるエフェクトをもたらすランプを使用することもできます。
レンダー ノードの作成(Create Render Node)ウィンドウが表示されます。
接続エディタ(Connection Editor)が表示されます。