2018年10月2日火曜日

Firestormでパーティクルをつくるよ(まとめ)

よぴです。

ブログを開設したものの、何を書けばいいのか解らず、相変わらず放置気味ではありますが、たまにはモノづくりの事も書こうと思います。

ダンスショーの演出において、パーティクルは華やかさを添えてくれる良きパートナー。

使いやすい有料のアイテムもあるけれど、Firestorm使っている人は、
よかったら無料なので気軽に試してみてください(*^^)v 

ではでは、まず最初の一歩。以下の動作をインワールドでお願いします。

①まずは制作ツールからプリムを一個出してください。

②次にプリムを右クリックで選択しつつ

制作→オブジェクト→パーティクルを編集

③すると


箱から基本のパーティクルが噴出し、数値を操作するパネルが出てきます。

さて、ここからが本題。

まずは左上のPatternから。


プルダウンを開けると、ここにも色んな選択メニューがあります。
私が使うのは主にExplodeとAngle。大体がこの二つで作れるので、他は良く解っていなかったりします(いきなり)。特にAngle Cone Emptyに関しては、wikiを見ても「未実装」と書いてあります。
書いてあるけれど実際には組み込まれていないという意味?(「ややこしいから書かないで下さいよ」と言ってやりたい…w)

★Explode: 球状
★Angle: 球状、半球状、円錐状、またはリング状
★Angle Cone: 円状、半未実装円状、弧または放射状
★Angle Cone Empty: 未実装。Angleと逆でパーティクルがスプレーされない範囲を書くものだった。
★Drop:初速なしでパーティクルを作成。

一応選択してみると、Angle Cone Emptyのパーティクルは、プリムの真ん中でぼわっとくすぶっています。
(下の画像は分かりやすいようにプリムを半透明にしています)
数値を変えると何らかの動きをするかもしれませんが
私はやりません。


次にこの部分の解説です。

上から

★Burst Rate: パーティクルの放出間隔
数値が大きくなる程、放出間隔が広くなります。

★Burst Count: 一回の放出で発生するパーティクルの数
一回の放出につき何個放出するか…ですが、私は大体2~5個を目安にしています。

★Angle Begin: パーティクルが発生しない円や球のくぼみ・円錐の範囲(Endの逆)
★Angle End:  パーティクルが発生しない円や球のくぼみ・円錐の範囲(Beginの逆)
数値を入れてお確かめください。ちなみに私はほぼ弄りません。パターンによって2D円の範囲だったり、3D球の範囲だったりします。

Angle(球状、半球状、円錐状、またはリング状)、Angle Cone( 円状、半円状、弧または放射状)のパーティクル作成時に使います。

★Source Max Age: 放出持続時間
ここに「10」とか入れてみると、10秒でパーティクルの放出が停止します。

★Particle Max Age: 表示持続(寿命)
1メートルなら1メートルまでパーティクルが放出されます。
その先の距離からはパーティクルは表示されません。
ショーのパーティクルを作る際、とても便利な数値です。

★Start Glow: 出現時のグローの値
★End Glow: 消滅時のグローの値

放出されるパーティクルがボヤっと光ります。
ちょっと幻想的な演出をしたい際はここの数値を調整してみてください。

次はここ


★Texture: テクスチャー
お好きなテクスチャーをここにインベントリからドロップしてください。

★Burst Radius: パーティクルの発生範囲
ここに例えば1と数値を入れると、プリムから四方1mは発生せず、1m先から粒が現れます。ここの数値も、意図的にアバターにパーティクルをかぶせたくない時など、よく使う部分です。

★Burst Speed Min: 出現時の初速の最小値
★Burst Speed Max: 出現時の初速の最大値

数値が大きい程素早くパーティクルが動きます。

★Start Alpha: 出現時の透明度
★End Alpha: 消滅時の透明度

ここの数値は、出現時1、消滅時0としか設定したことがありません。
この場合、現れた粒がだんだんと透明になって消えます。
透明なところから消えるまでにクッキリとテクスチャの形を表示したいのであれば、
出現時0、消滅時1と数値の入れ方は逆になります。

次いきますねw


★Scale Start: 出現時のサイズ
★Scale End: 消滅時のサイズ
そのまんまなので、あえて解説はいらないかな?

★Target Key: 移動目標(オブジェクト、プリム、アバター)
ここで指定したプリムに向かってパーティクルをどうにかしたいなどと言うときに使います。右のチェックリスト、
Target Position(Target Keyへ粒子が向かう)、Target Linear(Target Keyへ直線的に向かうようになる)にチェックを入れた際、ここで指定してください。

★Acceleration: 放出時の加速度
XYZ、その向きに向けての加速度を設定します。雨なんかの降り注ぐパーティクルを作る場合、ここのZの値を変えていきます。

★Omega: エミッタの回転速度
その方向に向けて回転しながら粒が飛んでいきます。

★Start Color: 出現時の色
★End Color: 消滅する際の色
これもそのまんまです。
ここを設定するとき、右のチェックリストからInterpolate Color(色を変化させる)にチェックを入れておく必要があります。

で…。ブレンドモードを設定する場所がありますが…。

ここは、ほぼ使いません。
使わないので良く解りませんw

解る範囲で書きますと

※上のプルダウンリスト
Blend One
Blend Zero(黒くなる)
Blend Dest Color
Blend Src Color
Blend 1 - Dest Color
☆Blend 1 - Sec Color
Blend Src Alpha

※下のプルダウンリスト
Blend One
Blend Zero

Blend Dest Color
Blend Src Color
Blend 1 - Dest Color
Blend 1 - Sec Color
Blend Src Alpha
☆Blend 1 - Src Alpha

本当に殆ど解っていないw この部分は☆をつけたデフォルトのものを固定です(;^ω^)

最後に


ここは出てきたパーティクルがどう動くかを決めるリストです。

★Bounce: SIMのZ座標平面で跳ね返る
★Emissive: 明るさ全開
★Follow Source: エミッター(発生源のプリム)に連動して移動する
★Follow Velocity: 放出方向に合わせてパーティクルを回転させる
★Interpolate Color: 色を変化させる
★Interpolate Scale: 粒子の大きさを変化させる
★Target Position: Target Keyへ粒子が向かう
★Target Linear: Target Keyへ直線的に向かうようになる
★Wind: 風の影響を受ける
★Ribbon: リボンのように繋がった状態のパーティクルを描画する

★copy: ここを押すとパーティクルのスクリプトが生成され、コピーされるので
何かにコピペしてください。
★inject: 作成中のプリムの中にスクリプトが生成されます。


ここまで私の言葉で懸命に解説してきましたが…。
この数値、直接スクリプト内を変更する際も同じパラメーターの名前ですので、
ここを見ても良く解らないことは
http://wiki.secondlife.com/wiki/LlParticleSystem/ja
こちらをご覧になってみてください(;^ω^)

で、今回は例として粒が降り注ぐパーティクルを例として作ってみました。
解説もチマチマっと書いてみたので、どこがリンクしてるかをお確かめくださいませ!

****************************************************************

default
{
    state_entry()
    {
        llParticleSystem(
        [
            PSYS_SRC_PATTERN,PSYS_SRC_PATTERN_EXPLODE,
            PSYS_SRC_BURST_RADIUS,5,//粒子の数
            PSYS_SRC_ANGLE_BEGIN,0,//パーティクルが発生しない範囲(開始)
            PSYS_SRC_ANGLE_END,0,//パーティクルが発生しない範囲(終了)
            PSYS_SRC_TARGET_KEY,llGetKey(),
            PSYS_PART_START_COLOR,<1.000000,1.000000,1.000000>,//出現時の色
            PSYS_PART_END_COLOR,<1.000000,1.000000,1.000000>,//消滅する際の色
            PSYS_PART_START_ALPHA,1,//出現時の透明度
            PSYS_PART_END_ALPHA,0,//消滅時の透明度
            PSYS_PART_START_GLOW,0.3,//出現時のグローの値
            PSYS_PART_END_GLOW,0,//消滅時のグローの値
            PSYS_PART_BLEND_FUNC_SOURCE,PSYS_PART_BF_SOURCE_ALPHA,
            PSYS_PART_BLEND_FUNC_DEST,PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA,
            PSYS_PART_START_SCALE,<0.050000,0.050000,0.000000>,//出現時のサイズ
            PSYS_PART_END_SCALE,<0.500000,0.500000,0.000000>,//消滅時のサイズ
            PSYS_SRC_TEXTURE,"1dae7b09-dfcd-9aa0-8433-a7ae03c8e48c",//テクスチャーUUID
            PSYS_SRC_MAX_AGE,0,//放出持続時間
            PSYS_PART_MAX_AGE,5,//表示持続時間
            PSYS_SRC_BURST_RATE,0.1,//パーティクルの発生範囲
            PSYS_SRC_BURST_PART_COUNT,5,//粒の数
            PSYS_SRC_ACCEL,<0.000000,0.000000,-0.300000>,//速度と方向
            PSYS_SRC_OMEGA,<0.000000,0.000000,0.000000>,//速度と回転
            PSYS_SRC_BURST_SPEED_MIN,0.01,//出現時の初速の最小値
            PSYS_SRC_BURST_SPEED_MAX,0.5,//出現時の初速の最大値
            PSYS_PART_FLAGS,
                0 |
                PSYS_PART_EMISSIVE_MASK |
                PSYS_PART_INTERP_COLOR_MASK |
                PSYS_PART_INTERP_SCALE_MASK
        ]);
    }
}
****************************************************************

「チャンネルでパーティクルのON OFFも操作したいよぅ…」という方は、
上記で赤文字表記した llParticleSystem
より前の部分を

default
{
state_entry()
{
llListen(000,"","","");//お好きなチャンネルを設定
}
listen(integer chan, string name, key id, string msg)
{
if(msg=="P_off")//消すコマンド
{
llParticleSystem([]);
}   
else if(msg=="P_on")//出すコマンド
{

と書き換えて、最終行に
}
を一つ足してください。

おまけ!

役に立つかどうかですが、最後に私物のインワールド用カンペテクスチャを貼り付けておきますね。
アップロードして、適当な大きさでチラチラ見て使います…。
「私さえ解ればいいや…」と、誰かに見せる目的で作られていない為、かなり見えにくいのはご容赦ください。

素敵なパーティクルを沢山作ってみてくださいね♪
(場所によっては作ったパーティクルは迷惑になり、怒られる要因となりますので、場所を選んで遊んでくださいネ)





0 コメント:

コメントを投稿