噴水を作るツール 1

噴水の作り方

噴水の作成手順の概略は以下のようになります。
詳しい作り方は 噴水の作り方 を参照してください。

  1. 水面になるオブジェクトを作成
  2. エミッターとパーティクルを作成
  3. フィールド(gravity)を作成
  4. パーティクルと水面オブジェクトのコリジョン設定

噴水作成ツールの例 1

  1. 以下の MEL スクリプトを makeFountain1.mel という名前で作ります。
    global proc makeFountain1()
    {
    	circle;
    	rotate 90 0 0;
    	scale 5 5 1;
    	string $plname[] = `planarSrf`;
    
    	string $ename[] = `emitter -pos 0 0.5 0 -type "direction" -dx 0 -dy 1 -dz 0 -rate 100 -spread 0.1 -speed 10.0`;
    	string $pname[] = `particle`;
    	connectDynamic -emitters $ename[0] $pname[0];
    
    	string $gname[] = `gravity -pos 0 0 0 -magnitude 9.8`;
    	connectDynamic -fields $gname[0] $pname[0];
    
    	collision -resilience 0.3 -friction 0.1 $plname[0] $pname[0];
    	connectDynamic -collisions $plname[0] $pname[0];
    
    	setAttr ($pname[1] + ".particleRenderType") 1;
    	setAttr ($pname[1] + ".lifespanMode") 1;
    	setAttr ($pname[1] + ".lifespan") 2.2;
    }
    
  2. Script EditorFile → Source Script によって makeFountain1.mel を読み込みます。
  3. Script Editor のインプットウインドウで、makeFountain1() を実行します。
    (makeFountain1() 実行後の図)
    [makeFountain1() 実行後の図]
  4. アニメーションを実行します。
    [アニメーション実行後の図]

スクリプトの解説

global proc makeFountain1()
makeFountain1 というプロシージャを宣言します。
circle;
circle をひとつ作ります。
この circle を使って水面を作ります。
rotate 90 0 0;
X, Z 平面に水平になるように回転しておきます。
scale 5 5 1;
適当にスケールをかけます。
string $plname[] = `planarSrf`;
Planar によって水面を作ります。
string $ename[] = `emitter -pos 0 0.5 0 -type "direction" -dx 0 -dy 1 -dz 0 -rate 100 -spread 0.1 -speed 10.0`;
エミッターを以下のフラグにしたがって作ります。
-pos 0 0.5 0
エミッターの位置は (0, 0.5, 0)
-type "direction"
エミッターの種類は "direction"
-dx 0 -dy 1 -dz 0
パーティクルの出てゆく方向は (0, 1, 0)
-rate 100
パーティクルでる割合は 1 秒間に 100 個
-spread 0.1
パーティクルの出てゆく角度は 0.1 度
-speed 10.0
パーティクルの速度は 10.0
string $pname[] = `particle`;
エミッターから出てくるパーティクルを作成します。
connectDynamic -emitters $ename[0] $pname[0];
エミッターとパーティクルをコネクトし、 エミッターによってパーティクルが作られるようにします。
string $gname[] = `gravity -pos 0 0 0 -magnitude 9.8`;
重力のフィールドを作成します。
フラグは以下の通りです。
-pos 0 0 0
フィールドの位置は (0, 0, 0)
-magnitude 9.8
重力係数は 9.8
connectDynamic -fields $gname[0] $pname[0];
重力のフィールドとパーティクルをコネクトし、 パーティクルにフィールドが働くようにします。
collision -resilience 0.3 -friction 0.1 $plname[0] $pname[0];
水面とパーティクルに対してコリジョンの設定を行います。
このコマンドによって geoConnctor ノードが作成されます。
フラグの意味は以下のとおりです。
-resilience 0.3
弾性係数は 0.3
この値が大きいほど、大きく跳ね返ります。
-friction 0.1
摩擦係数は 0.1
跳ね返ったときの角度が変わります。
connectDynamic -collisions $plname[0] $pname[0];
水面とパーティクルのコリジョンが実際に衝突するようにします。
setAttr ($pname[1] + ".particleRenderType") 1;
パーティクルシェイプノードの particleRenderType アトリビュートを 1 にして、 パーティクルの形を MultiStreak にします。
setAttr ($pname[1] + ".lifespanMode") 1;
パーティクルシェイプノードの lifespanMode アトリビュートを 1 にして、 Lifespan Mode を Constant にします。
setAttr ($pname[1] + ".lifespan") 2.2;
パーティクルシェイプノードの lifespan アトリビュートを 2.2 にします。
これによってパーティクルが発生してから 2.2 秒で消滅するようになります。

練習

練習課題

参考


Prev | Next
Home | Contents
Mail