LlParticleSystem/ja

From Second Life Wiki
Jump to navigation Jump to search

要約

関数: llParticleSystem( list <span title="パーティクルシステムルール一覧のフォーマット
[ rule1, data1, rule2, data2 . . . ルール、データ ]" style="border-bottom:1px dotted; cursor:help;">rules
);

ルールの一覧が組まれているプリムを含んでいるパーティクルシステムを定義します。

• list rules パーティクルシステムルール一覧のフォーマット
[ rule1, data1, rule2, data2 . . . ルール、データ ]

仕様

プリム内にあるスクリプトに含まれているパーティクルエミッターの状態を設定するパーティクルシステムを定義します。この関数を同じプリムにあるいずれか他のスクリプトが呼んでいる場合、同一のパーティクルエミッターの状態として修正するでしょう。 各プリムは幾何学中心を中心とした、ひとつのパーティクルエミッターのみ所有でき、 プリムの有効なZ方向に指向する、ローカルZ軸に沿って並びます。

この関数は、プリムのパーティクルエミッターの状態を更新するだけのものです。エミッターを異なる状態に変更したいなら(たとえば、異なるパーティクルシステム全体を分散させる、あるいはエミッターを完全にオフにする)、 代わりに描写したい新しいパーティクルシステムのパラメータでこの関数を呼ぶだけです。空のリストを指定するとエミッターはオフに切り替わります。

パーティクルは基本的に2Dのスプライトで、常にビューアのカメラ表面に描写されます。

ルール/データは以下に定義されます。

ルール / 定型値 説明
システムの動作
PSYS_PART_FLAGS integer}} hexadecimal|16進法}}、あるいは同時に一つ以上の、以下のフラグ定型(|演算子を用る)で指定されるかもしれません。 0
PSYS_PART_BOUNCE_MASK 設定時、指定のパーティクルがエミッターのZの高さでのリージョン面で跳ね返るでしょう。"跳ね返る"上で、各パーティクルは重心とアングルが逆向きになります。これは面より下に落下するパーティクルに限定の動きです。 0x004
PSYS_PART_EMISSIVE_MASK 設定時、パーティクルは完全に明るい状態で、グローバルライティング(太陽光)に左右されません。 そのほかの場合では、パーティクルは標準のグローバルライティングを加えている状態で発光されるでしょう。部分的な光は、パーティクルを非放射状に照らします。 0x100
PSYS_PART_FOLLOW_SRC_MASK 設定時、パーティクルはエミッターの位置と相対的に動きます。そのほかの場合では、パーティクルの位置と動きはエミッターの位置/動きには左右されません。このフラグはPSYS_SRC_BURST_RADIUS ルールでは無効です。 0x010
PSYS_PART_FOLLOW_VELOCITY_MASK 設定時、パーティクルは動きあるいは拡散の方向に上向きで適応して回転します。そのほかの場合では、標準のエミッターの回転を基準として常に放散されます。 0x020
PSYS_PART_INTERP_COLOR_MASK 設定時、パーティクルの色とアルファが、パーティクルの効果時間中、開始設定から終了設定へと変換します。変換はスムーズに補完されます。 0x001
PSYS_PART_INTERP_SCALE_MASK 設定時、パーティクルの大きさと形状が、パーティクルの効果時間中、開始設定から終了設定へと変換します。 0x002
PSYS_PART_TARGET_LINEAR_MASK (非公式な追記) 設定時、放散したパーティクルがPSYS_SRC_TARGET_KEYで指定された対象に向かって一直線に移動します。このモードで、PSYS_SRC_ACCEL、PSYS_SRC_BURST_RADIUS、そして場合によってはほかのルールが排除されます。 0x080
PSYS_PART_TARGET_POS_MASK 設定時、放散したパーティクルが有効時間中にPSYS_SRC_TARGET_KEYルールで指定された対象に向かって、移動を調整してコースが変わります。対象が指定されていない場合、範囲外に移動した場合、あるいは有効ではない対象が指定された場合、パーティクルは発散しているプリム自身を対象にします。 0x040
PSYS_PART_WIND_MASK llWind/ja|風}}に影響されます。 パーティクル上で、補助的な効力として作用されます。 0x008
PSYS_PART_BEAM_MASK (未実装) 隠されていますが、リストにあります。 0x200
PSYS_PART_DEAD_MASK パーティクルを除去し、多くのほかのPSYS_PART_*_MASKとは両立しません。 0x80000000
PSYS_PART_RANDOM_ACCEL_MASK (未実装) パーティクルにランダムな加速率を適用するために用いられると推測されます。 -
PSYS_PART_RANDOM_VEL_MASK (未実装') パーティクルの分散上でランダムな重点を指定することに用いられると推測されます。 -
PSYS_PART_TRAIL_MASK (未実装) 一気に多くのパーティクルを分散させる源に痕跡を付与するために用いられると推測されます。 -
システムの表現
PSYS_SRC_PATTERN integer}} 基本的な分散パターンを指定します。 9
PSYS_SRC_PATTERN_ANGLE SYS_SRC_ANGLE_BEGINとPSYS_SRC_ANGLE_ENDによって定義される2次元循環部に存在するパーティクルです。 パーティクル面の方向は、エミッターのリージョンの回転と相対的にX=0です。 0x04
PSYS_SRC_PATTERN_ANGLE_CONE PSYS_SRC_ANGLE_BEGINとPSYS_SRC_ANGLE_ENDによって定義される3次元球状部に存在するパーティクルです。 0x08
PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY (非公式な追記:非関数として振舞います) PSYS_SRC_ANGLE_BEGIN PSYS_SRC_ANGLE_ENDによって定義される3次元球状部に存在するパーティクルですが、ANGLE_CON パターンと対義です。(すなわち、ANGLE_CONEが無効な場所だとANGLE_CONE_EMPTYのパーティクルがあり、逆の場合もしかり) 0x10
PSYS_SRC_PATTERN_DROP 存在するパーティクルがエミッターのポジションに無重力で落下していきます。PSYS_SRC_BURST_RADIUS、PSYS_SRC_BURST_SPEED_MINとPSYS_SRC_BURST_SPEED_MAXルールは無効です。 0x01
PSYS_SRC_PATTERN_EXPLODE 放出動作規則に一致している全方向に放散して存在するパーティクルです。 0x02
PSYS_SRC_BURST_RADIUS float}} パーティクルが作られるであろうエミッターからの距離を指定します。このルールはPSYS_PART_FOLLOW_SRC_MASKフラグの設定時は無効です。 http://forums.secondlife.com/showthread.php?t=226722 のテストでは、最大値は50.00を指し示します。 16
PSYS_SRC_ANGLE_BEGIN float}} 分散されないだろうパーティクルの、円状もしくは球状もしくは円錐状の(エミッター面から始まる)部分のラジアンの半分のアングルを指定します。エフェクトは一致しているのを反転されるのにも関わらず、有効な値はPSYS_SRC_ANGLE_ENDと同じものです。パターンがPSYS_SRC_PATTERN_ANGLEの場合、パーティクルの表現は2次元の平らな環状部上です。PSYS_SRC_PATTERN_ANGLE_CONEかPSYS_SRC_PATTERN_ANGLE_CONE_EMPTYが使われている場合、パーティクルの表現は3次元の球状部上です。このパラメータとPSYS_SRC_ANGLE_ENDの値は パラメータが2つの値の小さいほうを取得するように内部で再実行されることに注意しましょう。 22
PSYS_SRC_ANGLE_END float}}

分散されないであろうパーティクルの、円状もしくは球体の"くぼみ"、もしくは円錐状の(エミッター面から始まる)部分のラジアンの半分のアングルを指定します。有効な値が0でエミッター面からPIの方向へ一直線に放散されたパーティクルを生じ、PSYS_SRC_ANGLE_BEGINによって定義された、完全な円状もしくは"くぼみ"を含まないエミッター周りの球体の弧もしくは円錐状の部分で発散され始めるパーティクルを生じるでしょう。パターンがPSYS_SRC_PATTERN_ANGLEの場合、表現は二次元の平らな環状部上です。PSYS_SRC_PATTERN_ANGLE_CONEかPSYS_SRC_PATTERN_ANGLE_CONE_EMPTYが使われている場合、表現は3次元球状部上です。このパラメータの値とPSYS_SRC_ANGLE_BEGINは2つの値の大きいほうを取得するように内部で再実行されます。||align="center"|23

PSYS_SRC_INNERANGLE float}} 廃止: 代わりにPSYS_SRC_ANGLE_BEGINを使用します。 代替するルールとよくにた動きは、中心よりもかなりエミッター面寄り部分の端にはいきません。 10
PSYS_SRC_OUTERANGLE float}} 廃止: 代わりにPSYS_SRC_ANGLE_ENDを使用します。 代替するルールとよくにた動きは、中心部よりもかなりエミッター面寄りな部分にはいきません。 11
PSYS_SRC_TARGET_KEY key}} パーティクルがコースと動きを変えるであろう方向の対象のオブジェクト、プリム、もしくはエージェントのキーを指定します。有効時間の終了時は、対象の幾何学的中心へと最終的に試みます。PSYS_PART_TARGET_POS_MASKの設定が必要です。caveat 4 20
パーティクルの見栄え
PSYS_PART_START_COLOR vector}} color|色}}を指定する{{LSLG|unit vector|一個のvector}}です。 1
PSYS_PART_END_COLOR vector/ja|vector}} color|色}}を指定する{{LSLG|unit vector|一個のvector}}です。PSYS_PART_INTERP_COLOR_MASKマスクを設定している場合のみつかえます。 3
PSYS_PART_START_ALPHA float}} alpha/ja|アルファ}}を指定します。有効な値は0.0~1.0の範囲です。高い数値ほどさらに不透明になり、小さい数値ほどさらに透明になります。 2
PSYS_PART_END_ALPHA float}} alpha|アルファ}}を指定します。PSYS_PART_INTERP_COLOR_MASKフラグを設定している場合のみ使えます。有効な値はPSYS_PART_START_ALPHAと同じです。(caveat 1) 4
PSYS_PART_START_SCALE vector}} パーティクル発散開始時の形状やサイズを指定します。各方向で有効な値は0.04 (0.03125)~4.0mです。パーティクルは基本的に2Dスプライトなので、vectorのZ構成は無効であり、0.0で設定すべきです。 5
PSYS_PART_END_SCALE vector}} パーティクルが有効時間の間に変換する形状とサイズを指定します。PSYS_PART_INTERP_SCALE_MASKフラグを設定している場合のみ使えます。有効な値はPSYS_PART_START_SCALEと同じです。 6
PSYS_SRC_TEXTURE string}} 各パーティクルに用いる、プリム内のテクスチャ名を指定します。代わりに付与するキーとしてテクスチャのUUIDを指定することも出来るでしょう。 12
パーティクルの落下
PSYS_SRC_MAX_AGE float}} (パーティクルシステムがすでに設定されている場合)エミッターが視界に入り始めるように指示、あるいは(すでに視界にある場合)この関数が実行開始する秒単位の間隔を指定します。終了直後、それ以降パーティクルが分散されないと、上記の指定は除去されます。0はパーティクルシステムを無期限で継続します。(caveat 2) 19
PSYS_PART_MAX_AGE float}} 秒単位で各パーティクル発散有効時間を指定します。最大30.0秒です。この時間の間、パーティクルは他の部分で指定されたパラメータにあわせて表示され、見かけを変えて、動いて、そして非表示になるでしょう。 7
PSYS_SRC_BURST_RATE float}} 放出されているパーティクルが発散する時間間隔を秒単位で指定します。0.0の値はビューアが可能な限りの速さでパーティクルが放散を起こすように指定します。 13
PSYS_SRC_BURST_PART_COUNT integer}} 各"発散"で放出されるパーティクルの数を指定します。 15
パーティクルの動き
PSYS_SRC_ACCEL vector}} 放散された各パーティクルに当てはめられる方向加速度のvectorを、メートル毎秒で指定します。有効な値は、リージョン構成上の各方角で0.0~100.0です。 8
PSYS_SRC_OMEGA vector}} llTargetOmega/ja|llTargetOmega}}参照)はエミッター回転上では働きません。(caveat 3) 21
PSYS_SRC_BURST_SPEED_MIN float}} メートル毎秒で各パーティクル発散時に選択される発散速度の、ランダムな範囲の最小値を指定します。 このパラメータの値とPSYS_SRC_BURST_SPEED_MAXは、この2つの値で小さいほうを取得するように内部で再実行されることに注意しましょう。 17
PSYS_SRC_BURST_SPEED_MAX float}} メートル毎秒で各パーティクル発散時に選択される発射速度の、ランダムな範囲の最大値を指定します。このバラメータの値とPSYS_SRC_BURST_SPEED_MINは、この2つの値で大きいほうを取得するように内部で再実行されることに注意しましょう。 18

警告

  1. パーティクルシステム実行によるバグ(VWR-2146参照)のようで、、PSYS_PART_END_ALPHAとPSYS_PART_INTERP_COLOR_MASKフラグは、常に補正された結果としてPSYS_PART_END_ALPHAの値を加えるでしょう。そして1から初めて0.5進めるなら、パーティクルの効果時間の半分のとき0.75のアルファを期待します。1.25になろうとするとバグが発生します。結果的に、いつも加えられた後にこれの必要とする数値より高めに設定にするなどすれば、パーティクルが消滅しなくなります。
    • これは WindLight First Look test Viewerにて修正されています。
  2. 0ではないエミッター効果時間(PSYS_SRC_MAX_AGE) の設定にてパーティクルシステムを使っているとき、パーティクルシステムで組まれたトリガがオフになることなく再起動するかもしれない、と伝えるほうがいいかもしれません。これはエミッターが幾つかのプリムの設定が更新もしくは他のビューアに送信するときにリセットするのが原因でバグが発生しているようです。結果的に、timerを使うか、著しい遅延と一度発生時間を消滅させてパーティクルシステムを消すべきかもしれません。
  3. PSYS_SRC_OMEGAで定義される回転は、リージョン座標システムに相対的で、プリムのローカル座標システムとは相対的ではありません。
  4. パーティクルは、PSYS_SRC_TARGET_KEYルールとPSYS_PART_TARGET_POS_MASKフラグで設定されている、指定された人型アバタに向かって動いていて、終点はアバターの矩形の幾何学中心、あいにくにも、アバタの股間部に直撃しているように表示されるでしょう。対象のアバタのほかの箇所を終点にしたい場合は、代わりに終点にしたい場所にした対象プリムを設置すべきで、PSYS_SRC_TARGET_KEYルールの値にそのプリムのキーを使用します。
  5. Second Life viewerは余りにも小さくみえる距離にあるオブジェクトは淘汰するように最適化されています。もしエミッターがとても小さいなら、距離のことがもとで最適化され、パーティクルシステムとそのエミッター間で表示されないでしょう。
All Issues ~ Search JIRA for related Bugs

サンプル

Example Particle Script/ja


この例は光っている赤い球の効果を作成します。 <lsl>

       llParticleSystem( 
[PSYS_PART_FLAGS, PSYS_PART_WIND_MASK

便利なスニペット

integerに(から)色とアルファの値を蓄積(回収)のための使い勝手のいい関数です。
<lsl> integer ColorAlphatoRGBA(vector color, float alpha) { return (((integer)(alpha * 255.0) & 0xFF) << 24)

注意点

  • クライアントの標準のパーティクル総数は、4096が基本設定です。クライアントが視界範囲で全ての有効なパーティクルシステムを表現するであろう最大パーティクル総数です。優れたパーティクルシステムのデザインは、そのパーティクルが周囲の人に邪魔になることと他の人達のパーティクルシステムを枯らしていくこと、を避けるのがキーポイントです。そのようなものとして、そんな多くのパーティクルの分散で、あなたのパーティクルエミッターがトラブルに遭う経験をしているならば、パーティクルの枯れをさけることはできないかもしれません。クライアント/ビューアのラグ(小さいフレームレート)はこれらが原因でもまた発生する可能性があるので、パーティクルは表現するために少ない最適地を選びます。これの最善な解決策は、あなた自身がデザインとテストを行なうとき、他のパーティクルシステムが相対的に制限しない、少ないラグの環境で動かすことです。
  • 一度パーティクルが分散されると、直接的な動きはPSYS_PART_TARGET_POS_MASKフラグかthe PSYS_PART_FOLLOW_SRC_MASKフラグの、PSYS_SRC_ACCELによってのみ影響され得ます。そのようになるので、旋回渦エフェクト(オブジェクトが発している方向にビューアを一度向けた、消滅しはじめ、またはアバターがsim/gridから去ったときのようなもの)を作る良い方法はありません。

関連項目

記事

•  LSL での色
•  透明度

特記事項

Search JIRA for related Issues

Signature

function void llParticleSystem( list rules );
この翻訳は 原文 と比べて古いですか?間違いがありますか?読みにくいですか?みんなで 修正 していきましょう! (手順はこちら)
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。