Difference between revisions of "LlParticleSystem/ja"

From Second Life Wiki
Jump to navigation Jump to search
m (Undo revision 850712 by Mako Nozaki (Talk))
 
(2 intermediate revisions by one other user not shown)
Line 1: Line 1:
{{LSL Function/color/ja}}{{LSL Function/alpha/ja}}{{LSL_Function/ja
{{LSL_Function/ja|func_id=229|func_sleep=0.0|func_energy=10.0
|func_id=229|func_sleep=0.0|func_energy=10.0
|func=llParticleSystem|sort=ParticleSystem
|func=llParticleSystem
|inject-1={{LSL_Function/ParticleSystem/ja|llParticleSystem([])}}
|p1_type=list|p1_name=rules|p1_desc=パーティクル構成ルールの一覧を [ rule1, data1, rule2, data2 . . . rulen, datan ] という形式にしたもの。
|p1_type=list|p1_name=rules
|func_desc='''rules''' のリスト内容に従って、スクリプトが入っているプリムのパーティクル構成を定義します。
|func_desc='''{{LSL Param|rules}}''' のリストに沿って定義されたパーティクルが、 スクリプトの入っているプリムに設定されます。
|return_text
|return_text
|spec=
[[スクリプト]]が入っている[[プリム]]の[[particle emitter|パーティクル放出器]] (particle emitter) の状態を設定する、パーティクル構成 (particle system) を定義します。同じプリムにある他のスクリプトも、この同じパーティクル放出器の状態を変更できます。従って、この関数で定義されるパーティクル構成は[[primitive property|プリムの属性]]であり、その点で (プリムの) サイズ、形状、色などと同様です。
各プリムは、ただ '''1個''' のパーティクル放出器を持ちます。その位置はプリムの [[geometric center|幾何学中心]] です。その方向はプリムの[[Viewer coordinate frames/ja#Local|ローカル]]な Z 軸に沿っており、正の Z 軸方向を向いています。
この関数だけが、プリムのパーティクル放出器の状態を変更できます。従って、放出器を別な状態に変えたい (例えば、全く別のパーティクル構成で放出したい、あるいは放出を完全に停止したい) 場合、新しく設定したいパーティクル構成のパラメタで、この関数を再度呼び出してください。<code>llParticleSystem([]);</code> という具合に空のリストを指定すると、放出器を停止します。
パーティクルは本質的に平面の "{{HoverText|スプライト|背景に重ねて画面表示する平面図形}}" であり、常にビューアのカメラに正対して描画されます。
ルール/データの値は以下のように定義されます。
|caveats=
# PSYS_SRC_MAX_AGE で放出期間をゼロ以外に指定したパーティクル構成を使う際、スクリプト側で何もしていないのに (もう停止している) パーティクルが再開してしまう場合があります。これはプリムの何らかの属性が更新された、あるいはビューアに何かが作用したかが原因で、放出器が "リセット" されるバグの為です。結果的に、{{LSLG/ja|timer}} 関数か強制的な [[llSleep/ja|sleep]] を使い、指定時間が過ぎたらパーティクル構成をクリアする必要があるかもしれません。Debbie Trilling がこの対処法について述べています: http://forums.secondlife.com/showpost.php?p=1996465&postcount=6
# PSYS_SRC_OMEGA で定義される回転の相対基準となるのは[[Viewer coordinate frames/ja#Region|リージョン]]座標系であり、プリムの[[Viewer coordinate frames/ja#Local|ローカル]]座標系ではありません。
# PSYS_SRC_TARGET_KEY ルールと PSYS_PART_TARGET_POS_MASK フラグによってアバターに向け放出されるパーティクルは、そのアバターを取り囲む直方体の幾何学中心まで行って消滅します。不幸なことに、これは股間を直撃するように見えてしまいます。アバターの別の部位を目標にしたい場合は、そこに目標となるプリムを置いてください。そしてそのプリムの UUID を PSYS_SRC_TARGET_KEY ルールの値に指定してください。
# Second Life ビューアは、小さすぎて殆ど見えない遠くのオブジェクトを間引いて描画するという最適化をしています。放出器が非常に小さくまた遠いため間引かれてしまう場合、それに設定されたパーティクルもまた描画されないでしょう。
|examples=
|examples=
*[[Example Particle Script]]
*[[Example Particle Script]]
Line 24: Line 10:




次第に大きくなる赤玉を次々に放出します。
この例では、だんだん大きくなる赤い球が放出されます。
<lsl>llParticleSystem( [
<source lang="lsl2">llParticleSystem( [
         PSYS_PART_FLAGS,      PSYS_PART_WIND_MASK | PSYS_PART_EMISSIVE_MASK,
         PSYS_PART_FLAGS,      PSYS_PART_WIND_MASK | PSYS_PART_EMISSIVE_MASK,
         PSYS_SRC_PATTERN,      PSYS_SRC_PATTERN_EXPLODE,  
         PSYS_SRC_PATTERN,      PSYS_SRC_PATTERN_EXPLODE,  
         PSYS_PART_START_COLOR, <1.0, 0.0, 0.0>
         PSYS_PART_START_COLOR, <1.0, 0.0, 0.0>
     ] );</lsl>
     ] );</source>
 
|helpers=
'''色と透明度を integer 値として管理するのに便利な関数:'''<br />
<lsl>integer ColorAlphatoRGBA(vector color, float alpha) {
    return (((integer)(alpha  * 255.0) & 0xFF) << 24) |
          (((integer)(color.x * 255.0) & 0xFF) << 16) |
          (((integer)(color.y * 255.0) & 0xFF) <<  8) |
            ((integer)(color.z * 255.0) & 0xFF);
}


vector RGBAtoColor(integer rgba) {
    return < ((rgba >> 16) & 0xFF) / 255.0, ((rgba >> 8) & 0xFF) / 255.0, (rgba & 0xFF) / 255.0 >;
}
float RGBAtoAlpha(integer rgba) {
    return ((rgba >> 24) & 0xFF) / 255.0;
}</lsl>
|also_articles
|also_articles
|also_events
|also_events
|also_functions
|also_functions=
|sort=ParticleSystem
{{LSL DefineRow||{{LSLG/ja|llLinkParticleSystem}}|}}
|notes=
|cat1
* ビューアが表示するパーティクル個数の標準は、通常 4096 に設定されています。これは視野にある全ての稼動中パーティクル構成に関して、ビューアが描画できる最大パーティクル数です。人々に "スパム" を行なわない、他人のパーティクル (が使うべきリソース) を圧迫しないためにも、良いパーティクル構成の設計が必要です。例えば、もしあなたのパーティクル放出器が期待するほどには多くの放出をしていないという場合、このリソース不足の犠牲者にされているかもしれません。パーティクルはどちらかというと描画の優先度が低いので、クライアント/ビューアのラグ (低フレームレート) も同様の問題を起こします。解決策として、自分のパーティクル構成を設計しテストする際には、比較的他から影響を受けない、ラグの少ない場所で行なうことです。
|cat2
* パーティクルが放出された後の進行方向は PSYS_SRC_ACCEL、PSYS_PART_TARGET_POS_MASK フラグ、PSYS_PART_FOLLOW_SRC_MASK フラグによってのみ制御されます。例えば "渦を巻く竜巻" の効果 (オブジェクトが喋る時、撤去される時、アバターが SIM/グリッドを立ち去る時にビューアで使われるような効果) を作成する良い方法というものはありません。その効果は、パーティクルの発生源を動かすことで実現可能です。(例えば旋回スクリプトで。)
|cat3
 
|cat4
|constants={{{!}} {{prettytable|style=margin-top:0; margin-right:0;}}
|cat5
{{!}}-{{Hl2}}
{{!!}}
{{!!}} ルール/設定値の定数
{{!!}} 型
{{!!}} 説明
{{!!}} 値
{{!}}- style="background-color:#ccffcc;"
{{!}} colspan="5" align="left"{{!}}'''パーティクル構成のふるまい'''
{{!}}-
{{!}}colspan="2"{{!}}PSYS_PART_FLAGS
{{!!}}{{LSLG/ja|integer}}
{{!!}}パーティクルの振る舞いを制御する様々なフラグ。設定値は 10 進数形式か [[hexadecimal/ja|16 進数]]形式の整数で指定するか、以下の 1 個以上のフラグ定数の ビット単位 OR を ("<nowiki>|</nowiki>" 演算子を用いて) 指定します:
{{!}}align="center"{{!}}0
{{!}}- style="background-color:#e0e0e0;"
{{!}}rowspan="15" style="background-color:#c0c0c0;" align="center" valign="center"{{!}}'''設<br />定<br />値'''
{{!}}colspan="2"{{!}}PSYS_PART_BOUNCE_MASK
{{!!}}設定すると、放出器の[[Viewer coordinate frames/ja#Region|リージョン]] Z 座標平面で跳ね返されるようになります。跳ね返る際、各パーティクルの速度と角度が反転します。これはその平面の上から落下してくるパーティクルにのみ作用します。
{{!}}align="center"{{!}}{{LSL_Hex|0x004|4}}
{{!}}- style="background-color:#e0e0e0;"
{{!}} colspan="2"{{!}}PSYS_PART_EMISSIVE_MASK
{{!!}}設定すると、パーティクルが{{HoverText|明るさ全開|訳注: プリム編集ダイアログの "テクスチャ" タブの "明るさ全開" が設定する状態。full-bright}}になり、環境光 (太陽光) の影響を受けなくなります。設定しない場合、パーティクルはその時の環境光の状態に応じて照らされます。この設定は非放出タイプのパーティクルにも効果があります。
{{!}}align="center"{{!}}{{LSL_Hex|0x100|256}}
{{!}}- style="background-color:#e0e0e0;"
{{!}} colspan="2"{{!}}PSYS_PART_FOLLOW_SRC_MASK
{{!!}}設定すると、パーティクルは放出器との位置関係を保ちながら移動します。(訳注: 放出器が移動すると、パーティクルもそれに同調して移動する。) 設定しない場合、パーティクルの位置と動きは、放出器の位置と動きに影響されません。このフラグは PSYS_SRC_BURST_RADIUS ルールを無効化します。
{{!}}align="center"{{!}}{{LSL_Hex|0x010|16}}
{{!}}- style="background-color:#e0e0e0;"
{{!}} colspan="2"{{!}}PSYS_PART_FOLLOW_VELOCITY_MASK
{{!!}}設定すると、パーティクルはその上端を進行方向/放出方向へ向けます。設定しない場合、パーティクルはその時点の放出器の傾きをもとにして放出されます。
{{!}}align="center"{{!}}{{LSL_Hex|0x020|32}}
{{!}}- style="background-color:#e0e0e0;"
{{!}} colspan="2"{{!}}PSYS_PART_INTERP_COLOR_MASK
{{!!}}設定すると、パーティクルの色と透明度の設定が、表示開始から消滅までの間で変化します。変化では滑らかな補間が行なわれます。
{{!}}align="center"{{!}}{{LSL_Hex|0x001|1}}
{{!}}- style="background-color:#e0e0e0;"
{{!}} colspan="2"{{!}}PSYS_PART_INTERP_SCALE_MASK
{{!!}}設定すると、パーティクルのサイズ/倍率の設定が、表示開始から消滅までの間で変化します。
{{!}}align="center"{{!}}{{LSL_Hex|0x002|2}}
{{!}}- style="background-color:#e0e0e0;"
{{!}} colspan="2"{{!}}PSYS_PART_TARGET_LINEAR_MASK
{{!!}}設定すると、放出されたパーティクルは PSYS_SRC_TARGET_KEY ルールで指定された目標へ直線的に移動します。このモードでは PSYS_SRC_ACCEL、PSYS_SRC_BURST_RADIUS、および場合によっては他のルールが無視されます。
{{!}}align="center"{{!}}{{LSL_Hex|0x080|128}}
{{!}}- style="background-color:#e0e0e0;"
{{!}} colspan="2"{{!}}PSYS_PART_TARGET_POS_MASK
{{!!}}設定すると、放出されたパーティクルは消滅するまでの間、PSYS_SRC_TARGET_KEY ルールで指定された目標へ向かって移動するように、表示中に進行方向を変えます。目標が指定されなかった場合、あるいは目標が範囲から外れた場合、あるいは不正な目標が指定された場合、パーティクルは自身のプリムを目標とします。
{{!}}align="center"{{!}}{{LSL_Hex|0x040|64}}
{{!}}- style="background-color:#e0e0e0;"
{{!}} colspan="2"{{!}}PSYS_PART_WIND_MASK
{{!!}}指定された場合、パーティクルの移動は[[llWind/ja|風]]によって影響を受けます。風はパーティクルに作用する二番目の力として適用されます。
{{!}}align="center"{{!}}{{LSL_Hex|0x008|8}}
{{!}}-
 
{{!}}- style="background-color:#e0e0e0;"
{{!}} colspan="2"{{!}}<s>PSYS_PART_BEAM_MASK</s>
{{!!}}(''未実装'') enum 値として存在しているだけです。
{{!}}align="center"{{!}}{{LSL_Hex|0x200|}}
{{!}}-
 
{{!}}- style="background-color:#e0e0e0;"
{{!}} colspan="2"{{!}}<s>LL_PART_HUD</s>
{{!!}}HUD および rez されたオブジェクトのパーティクル発生源を区別するためビューアによって使われます。
{{!}}align="center"{{!}}{{LSL_Hex|0x40000000|}}
{{!}}-
{{!}}- style="background-color:#e0e0e0;"
{{!}} colspan="2"{{!}}<s>LL_PART_DEAD_MASK</s>
{{!!}}パーティクルを削除します。どの PSYS_PART_*_MASK とも互換性がありません。
{{!}}align="center"{{!}}{{LSL_Hex|0x80000000|}}
{{!}}-
 
{{!}}- style="background-color:#e0e0e0;"
{{!}} colspan="2"{{!}}<s style="color:darkred;">LL_PART_RANDOM_ACCEL_MASK</s>
{{!!}}(''未実装 & コメントアウト'') パーティクルにランダムな強弱を適用するために使われるようです。
{{!}}align="center"{{!}} -
{{!}}-
 
{{!}}- style="background-color:#e0e0e0;"
{{!}} colspan="2"{{!}}<s style="color:darkred;">LL_PART_RANDOM_VEL_MASK</s>
{{!!}}(''未実装 & コメントアウト'') パーティクル放出時にランダムな速度を指定するために使われるようです。
{{!}}align="center"{{!}} -
{{!}}-
 
{{!}}- style="background-color:#e0e0e0;"
{{!}} colspan="2"{{!}}<s style="color:darkred;">LL_PART_TRAIL_MASK</s>
{{!!}}(''未実装 & コメントアウト'') 短いパーティクルを追加放出して "軌跡" を実現するために使われるようです。
{{!}}align="center"{{!}} -
{{!}}-
 
{{!}}- style="background-color:#ccffcc;"
{{!}} colspan="5" align="left"{{!}}'''パーティクル構成のみばえ'''
{{!}}-
{{!}} colspan="2"{{!}}PSYS_SRC_PATTERN
{{!!}}{{LSLG/ja|integer}}
{{!!}}全体的な放出パターンを指定します。
{{!}}align="center"{{!}}9
{{!}}- style="background-color:#e0e0e0;"
{{!}}rowspan="5" style="background-color:#c0c0c0;" align="center" valign="center"{{!}}'''設<br />定<br />値'''
{{!}} colspan="2"{{!}}PSYS_SRC_PATTERN_ANGLE
{{!!}}パーティクルを平面的な円の範囲に表示します。表示範囲は PSYS_SRC_ANGLE_BEGIN と PSYS_SRC_ANGLE_END で定義されます。表示範囲となる平面の向きは、放出器の[[Viewer coordinate frames/ja#Region|リージョン]]座標の傾きにおいて X=0 となる向きです。
{{!}}align="center"{{!}}{{LSL_Hex|0x04|4}}
{{!}}- style="background-color:#e0e0e0;"
{{!}}colspan="2"{{!}}PSYS_SRC_PATTERN_ANGLE_CONE
{{!!}}パーティクルを球状の範囲に表示します。表示範囲は PSYS_SRC_ANGLE_BEGIN と PSYS_SRC_ANGLE_END で定義されます。
{{!}}align="center"{{!}}{{LSL_Hex|0x08|8}}
{{!}}- style="background-color:#e0e0e0;"
{{!}}colspan="2"{{!}}PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY
{{!!}}(''未実装'') パーティクルを球状の範囲に表示します。表示範囲は PSYS_SRC_ANGLE_BEGIN と PSYS_SRC_ANGLE_END で定義されますが、ANGLE_CONE のパターンとは逆に解釈されます。(すなわち ANGLE_CONE でパーティクルが表示されない範囲ができたら、同じ設定値の場合 ANGLE_CONE_EMPTY ならば逆にそこにパーティクルが表示される。逆も同様。)
{{!}}align="center"{{!}}{{LSL_Hex|0x10|16}}
{{!}}- style="background-color:#e0e0e0;"
{{!}}colspan="2"{{!}}PSYS_SRC_PATTERN_DROP
{{!!}}パーティクルが放出器の位置から力を加えず落下するように表示します。PSYS_SRC_BURST_RADIUS、PSYS_SRC_BURST_SPEED_MIN、PSYS_SRC_BURST_SPEED_MAX ルールを無視します。
{{!}}align="center"{{!}}{{LSL_Hex|0x01|1}}
{{!}}- style="background-color:#e0e0e0;"
{{!}}colspan="2"{{!}}PSYS_SRC_PATTERN_EXPLODE
{{!!}}パーティクルを全方向へ打ち出すように表示します。burst 動作のルールに従います。
{{!}}align="center"{{!}}{{LSL_Hex|0x02|2}}
{{!}}-
{{!}}colspan="2"{{!}}PSYS_SRC_BURST_RADIUS
{{!!}}{{LSLG/ja|float}}
{{!!}}パーティクルの発生範囲を放出器からの距離で指定します。このルールは PSYS_PART_FOLLOW_SRC_MASK フラグが指定されると無視されます。http://forums-archive.secondlife.com/327/f5/226722/1.html でのテストによると最大値は 50.00 です。
{{!}}align="center"{{!}}16
{{!}}-
{{!}}colspan="2"{{!}}PSYS_SRC_ANGLE_BEGIN
{{!!}}{{LSLG/ja|float}}
{{!!}}パーティクルが放出されない範囲を指定します。範囲となる円/円錐のくぼみ/突出部分 (放出器の表面が起点) の角度を 1/2 したものをラジアンで指定します。有効な値は PSYS_SRC_ANGLE_END のそれと同じですが、意味は逆です。放出パターンが PSYS_SRC_PATTERN_ANGLE の場合、平面の円の範囲を表現します。PSYS_SRC_PATTERN_ANGLE_CONE あるいは PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY の場合、立体の球の範囲を表現します。このパラメタおよび PSYS_SRC_ANGLE_END の値は内部的に並び替えられ、このパラメタには小さいほうが割り当てられます。
{{!}}align="center"{{!}}22
{{!}}-
{{!}}colspan="2"{{!}}PSYS_SRC_ANGLE_END
{{!!}}{{LSLG/ja|float}}
{{!!}}パーティクルが放出されない範囲を指定します。範囲となる円/円錐のくぼみ/突出部分 (放出器の表面が起点) の角度を 1/2 したものをラジアンで指定します。有効な値は 0.0~{{LSLG/ja|PI}} です。0.0 の場合、放出器が向いている方向へ一直線にパーティクルを放出します。PI の場合、PSYS_SRC_ANGLE_BEGIN で定義されるくぼみ/突出部分を除いた全方向へ、放出器からパーティクルを放出します。放出パターンが PSYS_SRC_PATTERN_ANGLE の場合、平面の円の範囲を表現します。PSYS_SRC_PATTERN_ANGLE_CONE あるいは PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY の場合、立体の球の範囲を表現します。このパラメタおよび PSYS_SRC_ANGLE_BEGIN の値は内部的に並び替えられ、このパラメタには大きいほうが割り当てられます。
{{!}}align="center"{{!}}23
{{!}}-
{{!}}colspan="2"{{!}}<del>PSYS_SRC_INNERANGLE</del>
{{!!}}{{LSLG/ja|float}}
{{!!}}'''非推奨: 代わりに PSYS_SRC_ANGLE_BEGIN を使ってください''' 後継のルール (PSYS_SRC_ANGLE_BEGIN) と同様に動作しますが、放出器の中心でなく表面が範囲の基準になる点が異なります。
{{!}}align="center"{{!}}10
{{!}}-
{{!}}colspan="2"{{!}}<del>PSYS_SRC_OUTERANGLE</del>
{{!!}}{{LSLG/ja|float}}
{{!!}}'''非推奨: 代わりに PSYS_SRC_ANGLE_END を使ってください''' 後継のルール (PSYS_SRC_ANGLE_END) と同様に動作しますが、放出器の中心でなく表面が範囲の基準になる点が異なります。
{{!}}align="center"{{!}}11
{{!}}-
{{!}}colspan="2"{{!}}PSYS_SRC_TARGET_KEY
{{!!}}{{LSLG/ja|key}}
{{!!}}移動目標となるオブジェクト、プリム、アバターの UUID を指定します。それに向かってパーティクルは進路を変え、移動してゆきます。表示持続時間が尽きる時にちょうど目標の幾何学中心に到達するよう調整されます。PSYS_PART_TARGET_POS_MASK フラグが設定されていなければなりません。[[#警告|警告 3]]
{{!}}align="center"{{!}}20
{{!}}- style="background-color:#ccffcc;"
{{!}}colspan="5" align="left"{{!}}'''パーティクルの外観'''
{{!}}-
{{!}}colspan="2"{{!}}PSYS_PART_START_COLOR
{{!!}}{{LSLG/ja|vector}}
{{!!}}パーティクル出現時の[[Color/ja|色]]を表現した vector 値。
{{!}}align="center"{{!}}1
{{!}}-
{{!}}colspan="2"{{!}}PSYS_PART_END_COLOR
{{!!}}{{LSLG/ja|vector}}
{{!!}}パーティクルが表示持続時間を経過して消滅する時の[[Color/ja|色]]を表現した vector 値。PSYS_PART_INTERP_COLOR_MASK フラグが設定された時だけ使われます。
{{!}}align="center"{{!}}3
{{!}}-
{{!}}colspan="2"{{!}}PSYS_PART_START_ALPHA
{{!!}}{{LSLG/ja|float}}
{{!!}}パーティクル出現時の[[Alpha/ja|透明度]]を指定します。有効な値の範囲は 0.0 ~ 1.0 です。値が小さいほど透明に、大きいほど不透明になります。
{{!}}align="center"{{!}}2
{{!}}-
{{!}}colspan="2"{{!}}PSYS_PART_END_ALPHA
{{!!}}{{LSLG/ja|float}}
{{!!}}パーティクルが表示持続時間を経過して消滅する時の[[Alpha/ja|透明度]]を指定します。PSYS_PART_INTERP_COLOR_MASK フラグが設定された時だけ使われます。有効な値は PSYS_PART_START_ALPHA と同じです。
{{!}}align="center"{{!}}4
{{!}}-
{{!}}colspan="2"{{!}}PSYS_PART_START_SCALE
{{!!}}{{LSLG/ja|vector}}
{{!!}}パーティクルが出現する時のサイズを指定します。(単位: メートル。) 有効な値は各軸とも 0.04 (0.03125) ~ 4.0 です。パーティクルは本質的に平面のスプライトなので、vector 値の Z 軸要素は無視され 0.0 になります。
{{!}}align="center"{{!}}5
{{!}}-
{{!}}colspan="2"{{!}}PSYS_PART_END_SCALE
{{!!}}{{LSLG/ja|vector}}
{{!!}}パーティクルが表示持続時間を経過して消滅する時のサイズを指定します。PSYS_PART_INTERP_SCALE_MASK フラグが設定された時だけ使われます。有効な値は PSYS_PART_START_SCALE と同じです。
{{!}}align="center"{{!}}6
{{!}}-
{{!}}colspan="2"{{!}}PSYS_SRC_TEXTURE
{{!!}}{{LSLG/ja|string}}
{{!!}}各パーティクルで使用するテクスチャを指定します。プリムのインベントリ内にあるならばテクスチャ名を、インベントリ内に無いならばテクスチャの UUID で指定もできます。
{{!}}align="center"{{!}}12
{{!}}- style="background-color:#ccffcc;"
{{!}}colspan="5" align="left"{{!}}'''パーティクルの放出'''
{{!}}-
{{!}}colspan="2"{{!}}PSYS_SRC_MAX_AGE
{{!!}}{{LSLG/ja|float}}
{{!!}}放出器の放出持続時間を指定します。(単位: 秒。) (既にパーティクル構成が設定済みならば) 視界に入った時点からの、あるいは (既に視界に入っているならば) この関数が実行された時点からの時間となります。指定時間が過ぎると、上記の条件に合致しない限り、パーティクルは放出されなくなります。ゼロを指定するとパーティクルは無期限に放出されます。([[#警告|警告 1]])
{{!}}align="center"{{!}}19
{{!}}-
{{!}}colspan="2"{{!}}PSYS_PART_MAX_AGE
{{!!}}{{LSLG/ja|float}}
{{!!}}各パーティクルの表示持続時間を指定します。(単位: 秒。) 最大値は 30.0 です。パーティクルは出現した後、この時間をかけて、他のルールで指定されたパラメタに応じて外観を変えつつ移動し、消滅します。
{{!}}align="center"{{!}}7
{{!}}-
{{!}}colspan="2"{{!}}PSYS_SRC_BURST_RATE
{{!!}}{{LSLG/ja|float}}
{{!!}}放出されるパーティクルの "炸裂" (burst) 間隔を指定します。(単位: 秒。) 0.0 を指定すると、ビューアが可能な限り高速にパーティクルを放出します。
{{!}}align="center"{{!}}13
{{!}}-
{{!}}colspan="2"{{!}}PSYS_SRC_BURST_PART_COUNT
{{!!}}{{LSLG/ja|integer}}
{{!!}}一度の "炸裂" で放出されるパーティクルの数を指定します。
{{!}}align="center"{{!}}15
{{!}}- style="background-color:#ccffcc;"
{{!}}colspan="5" align="left"{{!}}'''パーティクルの動作'''
{{!}}-
{{!}}colspan="2"{{!}}PSYS_SRC_ACCEL
{{!!}}{{LSLG/ja|vector}}
{{!!}}各パーティクルが放出される際、それに適用される方向加速度ベクトルを指定します。(単位: メートル/秒。) [[Viewer coordinate frames/ja#Region|リージョン]]座標の各軸について 0.0 ~ 100.0 を有効な値として指定できます。
{{!}}align="center"{{!}}8
{{!}}-
{{!}}colspan="2"{{!}}PSYS_SRC_OMEGA
{{!!}}{{LSLG/ja|vector}}
{{!!}}放出器の各軸に関する回転速度を指定します。(単位: ラジアン/秒。) この値を設定するとプリムの Z 軸の正方向に向いていた放出器は "解放" され、めざましい回転を表現します。({{LSLG/ja|llTargetOmega}} 関数による) プリムの回転は、放出器の回転に影響しません。([[#警告|警告 2]])
{{!}}align="center"{{!}}21
{{!}}-
{{!}}colspan="2"{{!}}PSYS_SRC_BURST_SPEED_MIN
{{!!}}{{LSLG/ja|float}}
{{!!}}各パーティクルの初速の最小値を設定します。(単位: メートル/秒。) パーティクルが出現する際の初速は、これで指定される範囲からランダムに選ばれます。このパラメタおよび PSYS_SRC_BURST_SPEED_MAX の値は内部的に並び替えられ、このパラメタには小さいほうが割り当てられます。
{{!}}align="center"{{!}}17
{{!}}-
{{!}}colspan="2"{{!}}PSYS_SRC_BURST_SPEED_MAX
{{!!}}{{LSLG/ja|float}}
{{!!}}各パーティクルの初速の最大値を設定します。(単位: メートル/秒。) パーティクルが出現する際の初速は、これで指定される範囲からランダムに選ばれます。このパラメタおよび PSYS_SRC_BURST_SPEED_MIN の値は内部的に並び替えられ、このパラメタには大きいほうが割り当てられます。
{{!}}align="center"{{!}}18
{{!}}-
{{!}} style="font-size:80%" colspan="5" {{!}} LL_PART_* 定数は {{SourceLink|indra/llmessage/llpartdata.h|rev=1681|line=99}} にだけ現れ、それらのうち<span style="color:darkred;">赤</span>で示したフラグはコメントアウトされています。
{{!}}}
|deepnotes=
===欠けている 14===
14 という値を持つはずだった欠番の定数があり、基本的な列挙型 {{SourceLink|indra/llmessage/llpartdata.h|rev=1681|line=51|text=LLPSScriptFlags}} がそれを {{SourceLink|indra/llmessage/llpartdata.h|rev=1681|line=70|text=LLPS_SRC_BURST_DURATION}} という識別子で持っていますが、クライアントのソースで全く使われていません。炸裂持続時間が PSYS_SRC_BURST_PART_COUNT と PSYS_SRC_BURST_RATE で決まることを考えれば、これは当然です。
|cat1=Effects
|cat2=Light
|cat3=Particles
|cat4=Prim
|cat5=Stop
|cat6
|cat6
|location=
|location
}}
}}

Latest revision as of 05:31, 25 February 2016

要約

関数: llParticleSystem( list rules );

rules のリストに沿って定義されたパーティクルが、 スクリプトの入っているプリムに設定されます。

• list rules [ rule1, data1, rule2, data2 . . . rulen, datan ] 形式で指定された、パーティクルのルールリスト

仕様

パーティクル[1]を定義して、 スクリプト の入っている プリム の中にある パーティクルエミッター の状態を設定します。同じプリムに入っている他のスクリプトがこの関数を呼び出すと、同じパーティクルエミッターの状態を変更することになります。この関数で定義されたパーティクル自体は、プリムのサイズ、形、色などと同様に、 プリムのプロパティ となります。それぞれのプリムには 1 個の パーティクルエミッターだけしか存在できず、それは 幾何学的中心 に存在し、プリムの ローカル Z 軸に沿って、正の Z 方向を指します。

この関数だけがプリムのパーティクルエミッターの状態を変更することができます。つまり、エミッターを異なる状態にしたい場合 (例えば、まったく異なるパーティクルを放出したり、エミッターを停止したりしたい場合) 、この同じ関数を代わりに描画しようとしている新しいパーティクルのパラメタで呼び出せばいいです。空のリスト (例えば llParticleSystem([]); ) を指定すると、エミッターが停止します。

パーティクルは本質的には 2D の "Wikipedia logo"スプライト であり、常にビューアのカメラに正対して描画されます。

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

ルール/設定値の定数 ルールパラメタ 説明
パーティクルのふるまい
PSYS_PART_FLAGS integer flags パーティクルの振る舞いを制御する様々なフラグ。設定値は 10 進数形式か 16 進数 形式の整数で指定するか、以下の 1 個以上のフラグ定数の ビット単位 OR を ("|" 演算子を用いて) 指定します: 0
V
a
l
u
e
s
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_RIBBON_MASK パーティクルの流れを連続した帯状に結合します。 パーティクルテクスチャは引き伸ばされ(または絞られ)、右端が前のパーティクルの左端に結合されます。 リボンの「幅」は、開始スケールと終了スケールの「x」値で制御されます。 (「y」値は無視されます。 パーティクル間の距離は、各リボンセグメントの「長さ」を制御します。) 他のパーティクルエフェクトとは異なり、リボンセグメントは視聴者のカメラに向けてレンダリングされません。 新しいパーティクルのZ軸は、エミッタープリムのZ軸を模倣しています。 リボンセグメントは、「長さ」がない場合はレンダリングされません。これは、パーティクルがエミッタープリムのローカルZ軸を「上」または「下」にのみ移動する場合に起こります。 PSYS_PART_FOLLOW_VELOCITY_MASKはリボンには効果がありません。 シンプルなリボン効果を得るには、DROPパターン、TEXTURE_BLANK、ACCEL、WINDを使ってみてください。 0x400
PSYS_PART_TARGET_LINEAR_MASK 設定すると、放出されたパーティクルは PSYS_SRC_TARGET_KEY ルールで指定された目標へ等間隔の直線で移動します。このモードでは PSYS_SRC_ACCEL、PSYS_SRC_BURST_RADIUS、および場合によっては他のルールが無視されます。ターゲットがエミッターの「下」にあるときにPSYS_PART_BOUNCE_MASKを使用すると、リニアパーティクルストリームが上方に偏向し、ターゲットの上で終了します。 0x080
PSYS_PART_TARGET_POS_MASK 設定すると、放出されたパーティクルは消滅するまでの間、PSYS_SRC_TARGET_KEY ルールで指定された目標へ向かって移動するように、表示中に進行方向を変えます。目標が指定されなかった場合、あるいは目標が範囲から外れた場合、あるいは不正な目標が指定された場合、パーティクルは自身のプリムを目標とします。 0x040
PSYS_PART_WIND_MASK 指定された場合、パーティクルの移動はによって影響を受けます。風はパーティクルに作用する二番目の力として適用されます。 0x008
PSYS_PART_BEAM_MASK (未実装) enum 値として存在しているだけです。 0x200
LL_PART_HUD HUD および rez されたオブジェクトのパーティクル発生源を区別するためビューアによって使われます。 0x40000000
LL_PART_DEAD_MASK パーティクルを削除します。どの PSYS_PART_*_MASK とも互換性がありません。 0x80000000
パーティクルのみばえ
PSYS_SRC_PATTERN integer pattern 一般的な放出パターンを指定します。 9
V
a
l
u
e
s
PSYS_SRC_PATTERN_EXPLODE パーティクルを球状にスプレーするように表示します。パーティクルの初速は PSYS_SRC_BURST_SPEED_MIN と PSYS_SRC_BURST_SPEED_MAX で決まります。 EXPRODE パターンは ANGLE パラメタを無視します。 0x02
PSYS_SRC_PATTERN_ANGLE_CONE パーティクルを球状、半球状、円錐状、またはリング状にスプレーするように表示します。形状は PSYS_SRC_ANGLE_BEGIN と PSYS_SRC_ANGLE_END の ANGLE パラメタによって決まります。 ANGLE_CONE パターンは、 PSYS_SRC_ANGLE_BEGIN に 0.00000 、 PSYS_SRC_ANGLE_END に 3.14159 (または PI) (など) を指定すると、 EXPLODE パターンと同じように使用することができます。 0x08
PSYS_SRC_PATTERN_ANGLE パーティクルを円状、半円状、弧または放射状にスプレーするように表示します。形状は PSYS_SRC_ANGLE_BEGIN と PSYS_SRC_ANGLE_END によって決まります。円状パターンはプリムの X 軸について放射状に開きます。 0x04
PSYS_SRC_PATTERN_DROP 初速なしでパーティクルを作成します。 DROP パターンは PSYS_SRC_BURST_RADIUS 、PSYS_SRC_BURST_SPEED_MIN 、PSYS_SRC_BURST_SPEED_MAX の値を上書きして 0.00000 に設定します。 (DROP パターンのように動作する全てのパターンで、 RADIUS 、SPEED_MIN 、SPEED_MAX が設定されていたら 0.0000 に上書きされるようになっています) 0x01
PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY (未実装) PSYS_SRC_PATTERN_DROP パターンと同じように、このパターンは元々、 ANGLE パラメタの逆で、パーティクルがスプレーされない範囲を描くためにありました。 0x10
PSYS_SRC_BURST_RADIUS float radius パーティクルの発生範囲をエミッターからの距離で指定します。このルールは PSYS_PART_FOLLOW_SRC_MASK フラグが指定されると無視されます。http://forums-archive.secondlife.com/327/f5/226722/1.html でのテストによると最大値は 50.00 です。 16
PSYS_SRC_ANGLE_BEGIN float angle_begin パーティクルが発生しない円や球の「くぼみ」または円錐の断面の半角を、(エミッターが向いている方向を起点とした) ラジアンで指定します。指定可能な値は PSYS_SRC_ANGLE_END のそれと同じですが、効果は逆になります。パターンが PSYS_SRC_PATTERN_ANGLE の場合、 2D の円の範囲となります。 PSYS_SRC_PATTERN_ANGLE_CONE または PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY が使用されている場合、 3D の球の範囲となります。このパラメタおよび PSYS_SRC_ANGLE_END の値は内部的に並び替えられ、このパラメタには小さいほうが割り当てられます。 22
PSYS_SRC_ANGLE_END float angle_end パーティクルが発生しない円や球の「くぼみ」または円錐の断面の半角を、(エミッターが向いている方向を起点とした) ラジアンで指定します。指定可能な値は 0.0 から PI までで、 0.0 の場合、パーティクルがエミッターの向く方向に一直線に放出されることになり、 PI の場合、エミッターを中心として、PSYS_SRC_ANGLE_BEGIN で指定した「くぼみ」または円錐の断面を除いた、円または球状に放出されることになります。パターンが PSYS_SRC_PATTERN_ANGLE の場合、 2D の円の範囲となります。 PSYS_SRC_PATTERN_ANGLE_CONE または PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY が使用されている場合、 3D の球の範囲となります。このパラメタおよび PSYS_SRC_ANGLE_BEGIN の値は内部的に並び替えられ、このパラメタには大きいほうが割り当てられます。 23
PSYS_SRC_INNERANGLE float angle_inner 非推奨: 代わりに PSYS_SRC_ANGLE_BEGIN を使ってください 後継のルールと同様に動作しますが、エミッターの中心でなく表面が範囲の基準になる点が異なります。 10
PSYS_SRC_OUTERANGLE float angle_outer 非推奨: 代わりに PSYS_SRC_ANGLE_END を使ってください 後継のルールと同様に動作しますが、エミッターの中心でなく表面が範囲の基準になる点が異なります。 11
PSYS_SRC_TARGET_KEY key target 移動目標となるオブジェクト、プリム、アバターの UUID を指定します。それに向かってパーティクルは進路を変え、移動してゆきます。表示持続時間が尽きる時にちょうど目標の幾何学中心に到達するよう調整されます。 PSYS_PART_TARGET_POS_MASK フラグが設定されていなければなりません。 警告 4 20
パーティクルの外観
PSYS_PART_START_COLOR vector color_start パーティクル出現時のを表現した vector 値。 1
PSYS_PART_END_COLOR vector color_end パーティクルが表示持続時間を経過して消滅する時のを表現した vector 値。PSYS_PART_INTERP_COLOR_MASK フラグが設定された時だけ使われます。 3
PSYS_PART_START_ALPHA float alpha_start パーティクル出現時の透明度を指定します。有効な値の範囲は 0.0 ~ 1.0 です。値が小さいほど透明に、大きいほど不透明になります。 2
PSYS_PART_END_ALPHA float alpha_end パーティクルが表示持続時間を経過して消滅する時の透明度を指定します。PSYS_PART_INTERP_COLOR_MASK フラグが設定された時だけ使われます。有効な値は PSYS_PART_START_ALPHA と同じです。 4
PSYS_PART_START_SCALE vector scale_start パーティクルが出現する時のサイズを指定します。(単位: メートル。) 有効な値は各軸とも 0.04 (0.03125) ~ 4.0 です。パーティクルは本質的に平面のスプライトなので、vector 値の Z 軸要素は無視され 0.0 になります。 5
PSYS_PART_END_SCALE vector scale_end パーティクルが表示持続時間を経過して消滅する時のサイズを指定します。PSYS_PART_INTERP_SCALE_MASK フラグが設定された時だけ使われます。有効な値は PSYS_PART_START_SCALE と同じです。 6
PSYS_SRC_TEXTURE string texture 各パーティクルで使用するテクスチャのインベントリの中での名前を指定します。代わりに、テクスチャのアセットキー UUID を指定することもできます。 llLinkParticleSystem を使用し、テクスチャが UUID でない場合、テクスチャはエミッタープリムの中になければなりません (スクリプトと一緒でなくてもかまいません) 。 12
PSYS_PART_START_GLOW float glow_start 発光時のパーティクルの光り方を指定します。有効な値は0.0(光らない)から1.0(光りまくる)の範囲です。 26
PSYS_PART_END_GLOW float glow_end パーティクルがライフタイム中に遷移するグローを指定します。有効な値はPSYS_PART_START_GLOWと同じです。 27
Particle Blending
Note: 注:パーティクルシステムのブレンドパラメータは、OpenGLのglBlendFuncに直接ラップしています。glBlendFuncの公式を含む詳細なドキュメントは、公式のglBlendFuncドキュメントに記載されています。
PSYS_PART_BLEND_FUNC_SOURCE integer bf_source ブレンド関数が、入力されたパーティクルの色とアルファ情報を使用してレンダリング結果を生成する方法を指定します。デフォルトはPSYS_PART_BF_SOURCE_ALPHAです。 24
PSYS_PART_BLEND_FUNC_DEST integer bf_dest ブレンド関数がレンダリング結果を生成するために現在のフレームバッファの色とアルファの情報をどのように使用するかを指定します。デフォルトはPSYS_PART_BF_ONE_MINUS_SOURCE_ALPHAです。パーティクルを背景と調和させて不透明感をなくし、発光させるには、destにPSYS_PART_BF_ONE、sourceにデフォルトを使用します。その他のブレンドの組み合わせでは、パーティクルテクスチャの不可視/アルファ部分がレンダリングされてしまいますが、テクスチャの不可視領域が黒一色の場合は別です(場合によっては白一色の場合もあります)。 25
V
a
l
u
e
s
PSYS_PART_BF_ONE ソースやデスティネーションのRGBA値をスケーリングしない。 0x0
PSYS_PART_BF_ZERO ソースまたはデスティネーションのRGBA値をゼロにします。 0x1
PSYS_PART_BF_DEST_COLOR RGBAの値をデスティネーションのRGBAの値でスケーリングします。 0x2
PSYS_PART_BF_SOURCE_COLOR RGBA値をパーティクルソースのRGBA値でスケーリングします。 0x3
PSYS_PART_BF_ONE_MINUS_DEST_COLOR RGBA値をデスティネーションの反転したRGBA値でスケーリングします。 0x4
PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR RGBA値をパーティクルソースの反転したRGBA値でスケールします。 0x5
PSYS_PART_BF_SOURCE_ALPHA RGBA値をパーティクルソースのアルファ値でスケールします。 0x7
PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA RGBA値をパーティクルソースの反転したアルファ値でスケールします。 0x9
Particle Flow
PSYS_SRC_MAX_AGE float duration_system エミッターの放出持続時間を秒単位で指定します。 (既にパーティクル構成が設定済みならば) 視界に入った時点からの、あるいは (既に視界に入っているならば) この関数が実行された時点からの時間となります。指定時間が過ぎると、上記の条件に合致しない限り、パーティクルは放出されなくなります。ゼロを指定するとパーティクルは無期限に放出されます。 (警告 1) 19
PSYS_PART_MAX_AGE float duration_particle 各パーティクルの表示持続時間を秒単位で指定します。 最大値は 30.0 です。この時間の間に、パーティクルが出現し、他のルールで指定されたパラメタに応じて外観を変えつつ移動し、消滅します。 7
PSYS_SRC_BURST_RATE float burst_sleep 放出されるパーティクルの "炸裂" (burst) 間隔を秒単位で指定します。 0.0 を指定すると、ビューアが可能な限り高速にパーティクルを放出します。 13
PSYS_SRC_BURST_PART_COUNT integer burst_particle_count 一度の "炸裂" で放出されるパーティクルの数を指定します。 15
パーティクルの動作
PSYS_SRC_ACCEL vector acceleration 各パーティクルが放出される際、それに適用される方向加速度ベクトルをメートル/秒で指定します。 リージョン 座標の各軸について 0.0 ~ 100.0 を有効な値として指定できます。 8
PSYS_SRC_OMEGA vector omega エミッターの各軸に関する回転速度をラジアン/秒で指定します。この値を設定するとプリムの Z 軸の正方向に向いていたエミッターは "解放" され、めざましい回転を表現します。(llTargetOmega 関数による) プリムの回転は、エミッターの回転に影響しません。 (警告 2警告 3) 21
PSYS_SRC_BURST_SPEED_MIN float speed_min 各パーティクルの初速の最小値をメートル/秒で設定します。パーティクルが出現する際の初速は、これで指定される範囲からランダムに選ばれます。このパラメタおよび PSYS_SRC_BURST_SPEED_MAX の値は内部的に並び替えられ、このパラメタには小さいほうが割り当てられます。 17
PSYS_SRC_BURST_SPEED_MAX float speed_max 各パーティクルの初速の最大値をメートル/秒で設定します。パーティクルが出現する際の初速は、これで指定される範囲からランダムに選ばれます。このパラメタおよび PSYS_SRC_BURST_SPEED_MIN の値は内部的に並び替えられ、このパラメタには大きいほうが割り当てられます。 18
LL_PART_* 定数は viewer - indra/llmessage/llpartdata.h にだけ現れ、それらのうちで示したフラグはコメントアウトされています。

警告

  1. 放出期間 (PSYS_SRC_MAX_AGE) をゼロ以外に指定してパーティクルを使用すると、スクリプトが何も呼び出していないのに、パーティクルが再開してしまうことがあるでしょう。これは、プリムのプロパティが更新されたりビューワに送信されたりすると、エミッターが「リセット」されてしまうバグによるものです。結果として、 timer か強制 スリープ を使って、放出期間が切れたパーティクルを消去しなければならなくなります。 Debbie Trilling はこの回避策を投稿しました: http://forums-archive.secondlife.com/54/fa/260031/1.html#post1996465
  2. PSYS_SRC_OMEGA で設定する回転は リージョン 座標に対するもので、プリムの ローカル 座標に対するものではありません。
  3. 新規で作成すると、プリムエミッターはプリムの ZERO_ROTATION に設定されます。パーティクルの表示を設計している時に PSYS_SRC_OMEGA を使用すると、エミッターは回転することになります。その後 PSYS_SRC_OMEGA のベクトルを変更すると、エミッターは ZERO_ROTATION にはリセットされず、停止または変更されたときの回転軸に沿って回転し続けることになります。この結果、破損したプリムの中でパーティクルは(新しいエミッターの)新しいプリムの中に同じスクリプトを入れたときとは違うように見えることになります。
  4. アバターに向けて移動するパーティクルは、 PSYS_SRC_TARGET_KEY ルールが指定され PSYS_PART_TARGET_POS_MASK フラグが設定されると、アバターの Bounding Box の幾何学的中心に向かうことになります。残念なことに、これは股間を直撃するように見えてしまいます。アバターの別の部位を目標にしたい場合は、目標となるプリムを設置して、パーティクルを向かわせたい位置にそれを移動し、プリムのキーを PSYS_SRC_TARGET_KEY ルールの値に設定します。
  5. Second Life ビューワは、小さすぎて殆ど見えない遠くのオブジェクトを間引いて描画するという最適化をしています。エミッターが非常に小さく、距離が遠いために間引かれてしまっている場合、それに関連づいたパーティクルも描画されなくなります。
All Issues ~ Search JIRA for related Bugs

サンプル


この例では、だんだん大きくなる赤い球が放出されます。

llParticleSystem( [
        PSYS_PART_FLAGS,       PSYS_PART_WIND_MASK | PSYS_PART_EMISSIVE_MASK,
        PSYS_SRC_PATTERN,      PSYS_SRC_PATTERN_EXPLODE, 
        PSYS_PART_START_COLOR, <1.0, 0.0, 0.0>
    ] );

便利なスニペット

色と透過度を intteger で格納したり、 integer から復元したりするのに便利な関数:

integer ColorAlphatoRGBA(vector color, float alpha) {
    return (((integer)(alpha   * 255.0) & 0xFF) << 24) |
           (((integer)(color.x * 255.0) & 0xFF) << 16) |
           (((integer)(color.y * 255.0) & 0xFF) <<  8) |
            ((integer)(color.z * 255.0) & 0xFF);
}

vector RGBAtoColor(integer rgba) {
    return < ((rgba >> 16) & 0xFF) / 255.0, ((rgba >> 8) & 0xFF) / 255.0, (rgba & 0xFF) / 255.0 >;
}

float RGBAtoAlpha(integer rgba) {
    return ((rgba >> 24) & 0xFF) / 255.0;
}

注意点

  • ビューワが表示するパーティクル個数の標準は、通常 4096 に設定されています。これはクライアントが視野に入る全てのアクティブなパーティクルを描画する最大のパーティクル数です。良いパーティクルの設計の秘訣は、自分のパーティクルを「スパム」せず、他の人のパーティクルを締め出さないことです。例えば、もし自分のパーティクルエミッターが期待した数のパーティクルを放出していないという問題がある場合、このリソース枯渇の犠牲になっているかもしれません。パーティクルはどちらかというと描画の優先度が低いので、クライアント/ビューアのラグ (低フレームレート) も同様の問題を起こします。最善の解決策は、設計やテストのときに、他のパーティクルがあまりないラグの少ない環境に移動することです。
  • パーティクルが一旦発生すると、移動方向は PSYS_SRC_ACCEL 、PSYS_PART_TARGET_POS_MASK フラグ、 PSYS_PART_FOLLOW_SRC_MASK によってのみ制御されます。例えば "渦を巻く竜巻" の効果 (オブジェクトが喋る時、撤去される時、アバターが SIM/グリッドを立ち去る時にビューワで使われるような効果) を作成する良い方法というものはありません。その効果は、パーティクルの発生源を動かすことで実現可能です。(例えば旋回スクリプトで。)

関連項目

関数

•  llLinkParticleSystem

記事

•  LSL での色
•  透明度

特記事項

欠番 14

14 という値を持つはずだった欠番の定数があり、基本的な列挙型 LLPSScriptFlags がそれを LLPS_SRC_BURST_DURATION という識別子で持っていますが、クライアントのソースで全く使われていません。炸裂持続時間が PSYS_SRC_BURST_PART_COUNT と PSYS_SRC_BURST_RATE で決まることを考えれば、これは当然です。

Search JIRA for related Issues

脚注

  1. ^ 訳注:本来 "Particle System" とは "Particle" (粒子) の集合を指し、厳密には「パーティクルシステム」と訳すべきところですが、日本の SL ユーザの大半がこのパーティクルシステム自体を「パーティクル」と称し、逆に「システム」はコンピュータシステムのようなものを連想させてしまう可能性があることから、「パーティクル」と訳します。

Signature

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