2010年8月24日火曜日

Particle Instancerをランダムに回転

Particle Instancer(パーティクルインスタンサー)をランダムに回転させたい




Particle に ParParticle タイプのアトリビュートを追加し、ランダム関数を使った式を与えて制御します。


1. Outliner(アウトライナ)の Display メニュー>Shapes にチェックを入れ、インスタンサーを割り当てたパーティクルのシェイプノードを選択します。


2. メインメニューの Modify メニューから Add Attribute(アトリビュートの追加)を選択します。


3. Add Attribute ウィンドウの Particleタブ>userVector1PP をクリックし、OK ボタンを押します。
ここで追加するアトリビュートは userVector1PP に限らず、任意の PerParticle(Array) タイプの Vector 型アトリビュートで構いません。


4. アトリビュートを追加した particleShape の AttributeEditor(アトリビュートエディタ)を開き、Per Particle (Array) Attributes > userVector1PP をマウス右ボタンクリックします。
Creation Expression...(作成式)を選択すると ExpressionEditor(エクスプレッションエディタ)が開きます。


5.次のような Expression(式)を設定します。

 Creation(パーティクル作成時に実行される式):
 particleShape1.userVector1PP=<>;

 Runtime after Dynamics(ダイナミクス中に実行される式):
 $currentVct = particleShape1.userVector1PP;
 $rnd = $currentVct + 1 ;
 particleShape1.userVector1PP = <<$rnd.x,$rnd.y,$rnd.z>>;


6. ParticleShapeのAttributeEditor(アトリビュートエディタ)>Instancer (Geometry Replacement)セクション>Rotation Options>Rotation を userVector1PP に変更します。


パーティクル発生時に個々のパーティクルの回転が 0-360 度の範囲でランダム化され、
RuntimeExpression によって発生時の回転値に 1frame につき1づつ回転値を追加しています。
回転軸を固定するのであれば RumtimeExpression の乱数の指定を特定の軸のみに設定します。
 particleShape1.userVector1PP = <<$rnd.x,0,0>>;

上記の式では回転値はランダムですが、回転速度は一定です。
さらに回転速度をランダムにするには、さらにパーティクルに新しい Vector 型もしくは Float 型のアトリビュートを追加し、式を次のように書き換えます。
 Creation:
 particleShape1.userVector1PP=<>;
 particleShape1.userScalar1PP = rand(10);

 Runtime:
 particleShape1.userVector1PP = particleShape1.userVector1PP + particleShape1.userScalar1PP;