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

2009年5月31日日曜日

linstep (2)

オンラインヘルプを読んでいるときopacityPPにlinstepを使用した例をみつけた。

「linstep」については以前のエントリ「linstep (1)」でとりあげ、「ゴールに近づいたパーティクルの色を変える (2)」でパーティクルに対して使うことを試みたことがある。

今回は使用例のバリエーションとしてこのオンラインヘルプの例をもう少し掘り下げてみたい。


----------------------------------------
これがオンラインヘルプの例:
particleShape1.opacityPP = linstep(0,5,particleShape1.age);


age」は前回「パーティクルの時間に関する事柄」で見たように、パーティクルの年齢を秒数で示している。



ここでなぜ「age」を使うのかを考えてみる。

まずlinstepから見なおしてみる。
linstep」は第一引数~第二引数の範囲外においては0か1の値しか返してこない。
従ってこの例では第三引数は「0」~「5」の間にあるときしか「opacityPP」に変化が現れない。

これがフレームの値を返す「frame」であると、フレーム5においてすでに限界値に達してしまう。
これは肉眼では一瞬であり、linstepを使う意味があまり無い


しかし、24fpsの場合フレーム5では「0.2085秒」であり、まだまだ余裕がある。

実際に最大値5に達するには、
5÷0.0417=119.904・・・
と約120フレームが必要となる。これは時間にすると当然ながら5秒となる。


linstepでの第二引数は、opacityPPが「1」に達するまでの時間を決めることがわかる。



なら同じ秒数の返り値を持つ「time」を使ってみてはどうか?
timeを使うと、全パーティクルに同じ値が適用されることになる。
ようするに最初は全パーティクルが透明で、5秒に近づくにつれ、全パーティクルの透明でなくなる。
これが狙った効果ならこれでもよいかもしれないが、パーティクル単位のエクスプレッションを使わなくてもできる。


「age」を使った場合、フレームの位置に関係なく、個別のパーティクルの年齢に応じて、透明度がかわる。
たとえば、フレーム5にエミットされたパーティクルも、フレーム20でエミットされたパーティクルも一様に生まれてから5秒かけて透明度を変化させることができる。



メモ:linstepの引数に文字列が使われているため、linstepの引数として使用する前に、それを数字に変える作業が先に必要となる。
そのため( )が使われている。

(参照:オンラインヘルプ
文字列引数を引用符で囲む必要があります。たとえば、$faces がオブジェクトのフェース数を表している場合、( ) を使用して、出力する文字列を構築することができます。

 

0 件のコメント:

コメントを投稿