LlParticleSystem/ja
< LlParticleSystem
Jump to navigation
Jump to search
Revision as of 05:20, 14 January 2008 by Asuka Neely (talk | contribs)
LSL ポータル | 関数 | イベント | 型 | 演算子 | 定数 | 実行制御 | スクリプトライブラリ | カテゴリ別スクリプトライブラリ | チュートリアル |
要約
関数: llParticleSystem( list <span title="パーティクルシステムルール一覧のフォーマット[ rule1, data1, rule2, data2 . . . ルール、データ ]" style="border-bottom:1px dotted; cursor:help;">rules );
仕様
プリム内にあるスクリプトに含まれているパーティクルエミッターの状態を設定するパーティクルシステムを定義します。この関数を同じプリムにあるいずれか他のスクリプトが呼んでいる場合、同一のパーティクルエミッターの状態として修正するでしょう。 各プリムは幾何学中心を中心とした、ひとつのパーティクルエミッターのみ所有でき、 プリムの有効な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 | ||
(未実装) 隠されていますが、リストにあります。 | 0x200 | |||
パーティクルを除去し、多くのほかのPSYS_PART_*_MASKとは両立しません。 | 0x80000000 | |||
(未実装) パーティクルにランダムな加速率を適用するために用いられると推測されます。 | - | |||
(未実装') パーティクルの分散上でランダムな重点を指定することに用いられると推測されます。 | - | |||
(未実装) 一気に多くのパーティクルを分散させる源に痕跡を付与するために用いられると推測されます。 | - | |||
システムの表現 | ||||
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}} | Specifies a half angle, in radians, of a circular or spherical "dimple" or conic section (starting from the emitter facing) within which particles will NOT be emitted. Valid values are 0.0, which will result in particles being emitted in a straight line in the direction of the emitter facing, to PI, which will result in particles being emitted in a full circular or spherical arc around the emitter, not including the "dimple" or conic section defined by PSYS_SRC_ANGLE_BEGIN. If the pattern is PSYS_SRC_PATTERN_ANGLE, the presentation is a 2D flat circular section. If PSYS_SRC_PATTERN_ANGLE_CONE or PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY is used, the presentation is a 3D spherical section. Note that the value of this parameter and PSYS_SRC_ANGLE_BEGIN are internally re-ordered such that this parameter gets the larger of the two values. | 23 | |
float}} | DEPRECATED: Use PSYS_SRC_ANGLE_BEGIN instead. Works similar to its replacement rule, except the edge of the section is aligned with the emitter facing, rather than its center. | 10 | ||
float}} | DEPRECATED: Use PSYS_SRC_ANGLE_END instead. Works similar to its replacement rule, except the edge of the section is aligned with the emitter facing, rather than the section's center. | 11 | ||
PSYS_SRC_TARGET_KEY | key}} | Specifies the key of a target object, prim, or agent towards which the particles will change course and move. They will attempt to end up at the geometric center of the target at the end of their lifetime. Requires the PSYS_PART_TARGET_POS_MASK flag be set. caveat 4 | 20 | |
Particle Appearance | ||||
PSYS_PART_START_COLOR | vector}} | unit vector}} specifying the {{LSLG|color}} of the particles upon emission. | 1 | |
PSYS_PART_END_COLOR | vector}} | unit vector}} specifying the {{LSLG|color}} the particles transition to during their lifetime. Only used if the PSYS_PART_INTERP_COLOR_MASK flag is set. | 3 | |
PSYS_PART_START_ALPHA | float}} | alpha}} of the particles upon emission. Valid values are in the range 0.0 to 1.0. Higher values are more opaque; lower ones are more transparent. | 2 | |
PSYS_PART_END_ALPHA | float}} | alpha}} the particles transition to during their lifetime. Only used if the PSYS_PART_INTERP_COLOR_MASK flag is set. Valid values are the same as PSYS_PART_START_ALPHA. (caveat 1) | 4 | |
PSYS_PART_START_SCALE | vector}} | scale}} or size of the particles upon emission. Valid values for each direction are 0.04 (0.03125) to 4.0, in meters. Since particles are essentially 2D sprites, the Z component of the vector is ignored and can be set to 0.0. | 5 | |
PSYS_PART_END_SCALE | vector}} | scale}} or size the particles transition to during their lifetime. Only used if the PSYS_PART_INTERP_SCALE_MASK flag is set. Valid values are the same as PSYS_PART_START_SCALE. | 6 | |
PSYS_SRC_TEXTURE | string}} | Specifies the name of a texture in the prim's inventory to use for each particle. Alternatively, you may specify an asset key UUID for a texture. | 12 | |
Particle Flow | ||||
PSYS_SRC_MAX_AGE | float}} | Specifies the length of time, in seconds, that the emitter will operate upon coming into view range (if the particle system is already set) or upon execution of this function (if already in view range). Upon expiration, no more particles will be emitted, except as specified above. Zero will give the particle system an infinite duration. (caveat 2) | 19 | |
PSYS_PART_MAX_AGE | float}} | Specifies the lifetime of each particle emitted, in seconds. Maximum is 30.0 seconds. During this time, the particle will appear, change appearance and move according to the parameters specified in the other sections, and then disappear. | 7 | |
PSYS_SRC_BURST_RATE | float}} | Specifies the time interval, in seconds, between "bursts" of particles being emitted. Specifying a value of 0.0 will cause the emission of particles as fast as the viewer can do so. | 13 | |
PSYS_SRC_BURST_PART_COUNT | integer}} | Specifies the number of particles emitted in each "burst". | 15 | |
Particle Motion | ||||
PSYS_SRC_ACCEL | vector}} | Specifies a directional acceleration vector applied to each particle as it is emitted, in meters per second. Valid values are 0.0 to 100.0 for each direction, as region coordinates. | 8 | |
PSYS_SRC_OMEGA | vector}} | llTargetOmega}}) has no effect on emitter spin. (caveat 3) | 21 | |
PSYS_SRC_BURST_SPEED_MIN | float}} | Specifies the minimum value of a random range of values which is selected for each particle in a burst as its initial speed upon emission, in meters per second. Note that the value of this parameter and PSYS_SRC_BURST_SPEED_MAX are internally re-ordered such that this parameter gets the smaller of the two values. | 17 | |
PSYS_SRC_BURST_SPEED_MAX | float}} | Specifies the maximum value of a random range of values which is selected for each particle in a burst as its initial speed upon emission, in meters per second. Note that the value of this parameter and PSYS_SRC_BURST_SPEED_MIN are internally re-ordered such that this parameter gets the larger of the two values. | 18 |
警告
- パーティクルシステム実行によるバグ(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にて修正されています。
- 0ではないエミッター効果時間(PSYS_SRC_MAX_AGE) の設定にてパーティクルシステムを使っているとき、パーティクルシステムで組まれたトリガがオフになることなく再起動するかもしれない、と伝えるほうがいいかもしれません。これはエミッターが幾つかのプリムの設定が更新もしくは他のビューアに送信するときにリセットするのが原因でバグが発生しているようです。結果的に、timerを使うか、著しい遅延と一度発生時間を消滅させてパーティクルシステムを消すべきかもしれません。
- PSYS_SRC_OMEGAで定義される回転は、リージョン座標システムに相対的で、プリムのローカル座標システムとは相対的ではありません。
- パーティクルは、PSYS_SRC_TARGET_KEYルールとPSYS_PART_TARGET_POS_MASKフラグで設定されている、指定された人型アバタに向かって動いていて、終点はアバターの矩形の幾何学中心、あいにくにも、アバタの股間部に直撃しているように表示されるでしょう。対象のアバタのほかの箇所を終点にしたい場合は、代わりに終点にしたい場所にした対象プリムを設置すべきで、PSYS_SRC_TARGET_KEYルールの値にそのプリムのキーを使用します。
- Second Life viewerは余りにも小さくみえる距離にあるオブジェクトは淘汰するように最適化されています。もしエミッターがとても小さいなら、距離のことがもとで最適化され、パーティクルシステムとそのエミッター間で表示されないでしょう。
サンプル
この例は光っている赤い球の効果を作成します。
<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 Wikiの関連した項目が参考になるかもしれません。