Adsense

2007年12月9日日曜日

エフェクト系は苦手・・・(llParticleSystem)

なかなか時間がとれずに Yaz Mania 玉やダンス玉のメモリ節約化に手がまわっていませんが、今日はエフェクト系スクリプトが苦手な私もパーティクルなどに挑戦してみました。どうしても、、、苦手なんですよね~。

で、、、玉しかつくれないセンスですから、、、

作ったのは雪だるま(笑

正直、、、「今月から SL はじめたの?」といわれそうなオブジェクトですが、、、この子の両手の玉と帽子から3種類の雪の結晶を飛ばすようにしてみました。

こんな感じ、、、
image

赤い帽子に円錐のフレキシ使っただけ進歩かも(w


とてもパーティクルについて語れるような経験はないんですが、ちょっとだけ私が試行錯誤したことを書いてみると、、、雪がちらちらを舞い降りるを表現するのに「風の影響」を使おうと最初がんばったのですが、意外に in-world の風って強いみたいですね、、、

PSYS_PART_FLAGS, PSYS_PART_WIND_MASK|PSYS_PART_EMISSIVE_MASK みたいに風の影響を受けながら、明るく見える雪をちらつかせようとしましたが、、、結構流されてしまいました。

WIND_MASK によって横に流されるパーティクルを無理やり下のほうに落とすために PSYS_SRC_ACCEL の z 値を大きく(マイナスなので数字は小さく、、、ですが)すると、確かに下にはいくようになるのですが、とても早い動きになってしまいます。

ちょっと横に流されすぎる風の影響をうけないで、ちらちらとさせたいので WIND_MASK は却下しました。(もしかしらら、WIND_MASK を使いながらゆっくり下に、、、なんてできるのかもしれませんが、私は探せませんでした)

ゆっくり、、、と考えると SPEED の調整かな、、、と思ったのですが、どうやら PSYS_SRC_BURST_SPEED_MIN/MAX での最小・最大速度の設定は、プリムからパーティクルが飛び出すときの速度の「ばらつき」の範囲指定みたいですね。

なので、最小と最大にちょっと幅をもたせてあげると、まるでポップコーンのようにぱらばらのスピードでパーティクルがプリムから飛び出してきます。

ということは、、、つまりパーティクルが放出されたあとの「速度」を決めるのは PSYS_SRC_ACCEL ということになります。ACCEL 自体は速度ではなくて「加速度」なので、3次元方向への加速度を指定できます。(m/s*s みたいです) なので、下方向への加速度として z にマイナスの値をいれる、それも数値を小さくすると加速される度合いが弱まって、ゆっくり落ちてくる、、、と考えました。

これでゆっくりと落ちるようになりますが、下方向への加速度(つまり、、、重力ですよね~ 9.8m/s*s)が弱まる分だけ、プリムから放出されたパーティクルは、たとえば放出方向を上に向けていれば、重力が弱まった分だけ高く舞い上がってから落ちてくる、、、という動きになるんです。

BURST_SPEED_MIN/MAX にちょっとだけ幅をもたせて、放出速度のばらつきが発生すると、いい感じでパーティクルそれぞれの落ち方が変わります。これがMIN/MAX も同じ速度だとばらつきが発生しないので、あまり見た目的に「雪が舞い降りる」としては美しくなかったりします。(等間隔でぱらぱらと落ちてくる感じです、、あ、あと PATTERN は ANGLE です)

ばらつき(というか、ゆらぎ?なのかな)を発生させるという点では llLookAt と llFraud を使って放出方向に変化をもたせるのもひとつの手ですね。 また、PATTERN が ANGLE系の場合は PSYS_SRC_OMEGA のベクトル値で回転を指定できるようです。(その場合は乱数ではありません)

ということで、、、最終的には以下のようになりました。
image
どちらかといえば、、、スキー場とかにある「降雪機」みたいな動きになっています(笑

でも、、、Particle って難しいですね~。 PSYS_SRC_PATTERN で指定するパターン(ANGLE, ANGLE_CONE, ANGLE_CONE_EMPTY (undocumented みたい) , DROP, EXPLODE...) などはまだピンときてません(笑
Reference: http://www.lslwiki.net/lslwiki/wakka.php?wakka=llParticleSystem

[追記]
あとでやってみると PATTERN を ANGLE_CONE にして OMEGA で z 軸でまわしてみるとこれはこれでいいのかもしれません。ですが、プリムの下にはパーティクル雪が降らないので、、、なかなか工夫が必要みたいですね。