日本でハリウッドVFXを制作! 「経産省アイディアボックス」 結果:  
●まとめエントリはこちら ●FAQ ●お問い合わせは左のメールフォームから

2009年7月29日水曜日

Kolektiv「Particle」DVD メモ(1):エミッタ

車のスピンでは、どこか一つのタイヤに重量が集中し、その部分からの白煙は増加する。
スクリプトで、ロー、ピッチ、ヨーに応じてエミットレートをマルチプライするようにして、コントロールすることができる。


--------------------
/tireSmoke CREATION

//initialize per-particle attrs
buoyancyPP = rand(0.3,0.5) * 0.55;

時間がたつにつれて、パーティクルが浮いていく動きを加える。

浮力の値をパーティクル毎にをランダムに設定する。
rand関数から生まれるのは0.3~0.5の間の数値。
そのままでは浮力が大きすぎるので、それに0.55を乗算して少なくしている。

0.3=>0.165
0.35=>0.1925
0.4=>0.22
0.45=>0.2475
0.5=>0.275

このように実際の値は、0.165~0.275の間の値をとる。
最初から
buoyancyPP = rand(0.165,0.275)
にしてもよいような気もする。
そうなると設定が細かすぎるというなら、
buoyancyPP = rand(0.1,0.3)
でもよいのではないのか??

なぜわざわざ、大きな値を使ってあとからその数値を少なくしているのか、このあたりの意図が、よくわからない。


さて、この値は、ランタイム・エクスプレッションにおいて、「position」のY軸増加値として使われる。

クリエイション・エクスプレッションで、このエクスプレッションを記述する理由は
パーティクルが発生した次のフレームで、パーティクルが移動する計算の時に、必要であるため、
次のフレームへ移動する前に準備する必要があるから。

ようするに「buoyancyPP」とは各パーティクルの位置を変えるために必要な増加値である。
Y値を、一フレームでどのぐらい増加させるかを決めているだけである。

オンラインヘルプの「パーティクル アトリビュートのリスト」を見るとわかるが「buoyancyPP」というアトリビュートはパーティクル・オブジェクト・ノードには存在しない。

まったくのユーザー任意のアトリビュートであり、このアトリビュートPPを作成しても「buoyancy」というアトリビュートが操作されるわけではない。

どちらかというと、なんらかのパーティクル毎のアトリビュートではなく、変数である。
理解しやすくするために「buoyancyPP」という名前を付けているに過ぎないが、これが逆にそういったPPアトリビュートが存在するかのようなイメージを植え付けてしまう。

この方法しかないということはわかるが、パッと見た感じでは、初心者には、わかりにくい。

さて、このエクスプレッションにより、個々のパーティクルの浮き上がる速度のバリエーションをつくることができる。

ただ、実際にパーティクルに変化をもたらすのは、ランタイム・エクスプレッションの「position」であり、このエクスプレッションだけでは何の変化ももたらさない。



//define lifespan
lifespanPP = rand(0.75,2.25);


// scale velocity at birth for added randomness
velocity *= rand(1,3);

速度(velocity)は、クリエイション・エクスプレッションで、発生時のデフォルト値に対して、ランダム関数で発生した数字を乗算している。
これにより個別のパーティクルの発生時の速度が異なる。




--------------------
//tireSmoke RUNTIME
// five parts buoyancy
position += <<0,>>;

クリエイション・エクスプレッションで作られたbuoyancyPPの値を利用する。
一フレーム毎に、buoyancyPPの値がPositionのY値へプラスされていく。

これは、スピンする車のタイヤから煙が発生し、それが時間がたつにつれて、昇っていく表現のために使われている。
フィールドなどをつかうのではなく、パーティクル個々の座標値を変化させることにより、上昇するアニメーションを作っている。

 

0 件のコメント:

コメントを投稿