Difference between revisions of "LlParticleSystem/ja"

From Second Life Wiki
Jump to navigation Jump to search
m (Undo revision 310613 by Shinnosuke Darkstone (Talk))
 
(6 intermediate revisions by 3 users 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_type=list|p1_name=rules
|p1_name=rules
|func_desc='''{{LSL Param|rules}}''' のリストに沿って定義されたパーティクルが、 スクリプトの入っているプリムに設定されます。
|p1_desc=パーティクルシステムルール一覧のフォーマット<br>[ rule1, data1, rule2, data2 . . . ルール、データ ]
|func_desc='''ルール'''の一覧が組まれているプリムを含んでいるパーティクルシステムを定義します。
|return_text
|return_text
|spec=
|examples=
{{LSLG|primitive/ja|プリム}}内にある{{LSLG|script/ja|スクリプト}}に含まれている{{LSLG|particle emitter|パーティクルエミッター}}の状態を設定するパーティクルシステムを定義します。この関数を同じプリムにあるいずれか他のスクリプトが呼んでいる場合、同一のパーティクルエミッターの状態として修正するでしょう。
*[[Example Particle Script]]
各プリムは{{LSLG|geometric center|幾何学中心}}を中心とした、ひとつのパーティクルエミッターのみ所有でき、 プリムの有効なZ方向に指向する、[[Viewer coordinate frames#Local|ローカル]]Z軸に沿って並びます。
*[[Neurocam Particle Engine]]


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


パーティクルは基本的に2Dの''スプライト''で、常にビューアのカメラ表面に描写されます。
この例では、だんだん大きくなる赤い球が放出されます。
<source lang="lsl2">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>
    ] );</source>


ルール/データは以下に定義されます。
|caveats=
# パーティクルシステム実行によるバグ({{Jira|VWR-2146}}参照)のようで、、PSYS_PART_END_ALPHAとPSYS_PART_INTERP_COLOR_MASKフラグは、'''常に'''補正された結果としてPSYS_PART_END_ALPHAの値を加えるでしょう。そして1から初めて0.5進めるなら、パーティクルの効果時間の半分のとき0.75のアルファを期待します。1.25になろうとするとバグが発生します。結果的に、いつも加えられた後にこれの必要とする数値より高めに設定にするなどすれば、パーティクルが消滅しなくなります。
#* これは [[WindLight/ja|WindLight]] First Look test Viewerにて修正されています。
# 0ではないエミッター効果時間(PSYS_SRC_MAX_AGE) の設定にてパーティクルシステムを使っているとき、パーティクルシステムで組まれたトリガがオフになることなく再起動するかもしれない、と伝えるほうがいいかもしれません。これはエミッターが幾つかのプリムの設定が更新もしくは他のビューアに送信するときに''リセット''するのが原因でバグが発生しているようです。結果的に、{{LSLG|timer/ja|timer}}を使うか、著しい{{LSLG|llSleep/ja|遅延}}と一度発生時間を消滅させてパーティクルシステムを消すべきかもしれません。
# PSYS_SRC_OMEGAで定義される回転は、[[Viewer coordinate frames#Region|リージョン]]座標システムに相対的で、プリムの[[Viewer coordinate frames#Local|ローカル]]座標システムとは相対的ではありません。
# パーティクルは、PSYS_SRC_TARGET_KEYルールとPSYS_PART_TARGET_POS_MASKフラグで設定されている、指定された人型アバタに向かって動いていて、終点はアバターの矩形の幾何学中心、あいにくにも、アバタの股間部に直撃しているように表示されるでしょう。対象のアバタのほかの箇所を終点にしたい場合は、代わりに終点にしたい場所にした対象プリムを設置すべきで、PSYS_SRC_TARGET_KEYルールの値にそのプリムのキーを使用します。
# Second Life viewerは余りにも小さくみえる距離にあるオブジェクトは淘汰するように最適化されています。もしエミッターがとても小さいなら、距離のことがもとで最適化され、パーティクルシステムとそのエミッター間で表示されないでしょう。
|examples=[[Example Particle Script/ja]]
この例は光っている赤い球の効果を作成します。
<lsl>
        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>
          ] );
</lsl>
|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_PART_TARGET_POS_MASKフラグかthe PSYS_PART_FOLLOW_SRC_MASKフラグの、PSYS_SRC_ACCELによってのみ影響され得ます。そのようになるので、旋回渦エフェクト(オブジェクトが発している方向にビューアを一度向けた、消滅しはじめ、またはアバターがsim/gridから去ったときのようなもの)を作る良い方法はありません。
|cat3
|constants={{{!}} {{prettytable}}
|cat4
{{!}}{{Hl2}}{{!}}
|cat5
{{!}}{{Hl2}}{{!}} ルール / 定型値
|cat6
{{!}}{{Hl2}}{{!}} 型
|location
{{!}}{{Hl2}}{{!}} 説明
{{!}}{{Hl2}}{{!}} 値
{{!}}- style="background-color:#ccffcc;"
{{!}} colspan="5" align="left"{{!}}'''システムの動作'''
{{!}}-
{{!}}colspan="2"{{!}}PSYS_PART_FLAGS{{!}}{{!}}{{LSLG|integer/ja|integer}}{{!}}{{!}}様々なフラグがパーティクルシステムの動作を操作します。値は小数点の数値あるいは{{LSLG|hexadecimal|16進法}}、あるいは同時に一つ以上の、以下のフラグ定型(<nowiki>|</nowiki>演算子を用る)で指定されるかもしれません。{{!}}{{!}}align="center"{{!}}0
{{!}}- style="background-color:#e0e0e0;"
{{!}}rowspan="14" style="background-color:#c0c0c0;" align="center" valign="center"{{!}}'''値'''{{!}}{{!}}colspan="2"{{!}}PSYS_PART_BOUNCE_MASK{{!}}{{!}}設定時、指定のパーティクルがエミッターのZの高さでの[[Viewer coordinate frames#Region|リージョン]]面で跳ね返るでしょう。"跳ね返る"上で、各パーティクルは重心とアングルが逆向きになります。これは面より下に落下するパーティクルに限定の動きです。 {{!}}{{!}}align="center"{{!}}{{LSL_Hex|0x004|4}}
{{!}}- style="background-color:#e0e0e0;"
{{!}} colspan="2"{{!}}PSYS_PART_EMISSIVE_MASK{{!}}{{!}}設定時、パーティクルは完全に明るい状態で、グローバルライティング(太陽光)に左右されません。 そのほかの場合では、パーティクルは標準のグローバルライティングを加えている状態で発光されるでしょう。部分的な光は、パーティクルを非放射状に照らします。{{!}}{{!}}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{{!}}{{!}}設定時、パーティクルの動きは{{LSLG|llWind/ja|風}}に影響されます。 パーティクル上で、補助的な効力として作用されます。{{!}}{{!}}align="center"{{!}}{{LSL_Hex|0x008|8}}
 
{{!}}- style="background-color:#e0e0e0;"
{{!}} colspan="2"{{!}}<s>PSYS_PART_BEAM_MASK</s>{{!}}{{!}}(''未実装'') 隠されていますが、リストにあります。{{!}}{{!}}align="center"{{!}}{{LSL_Hex|0x200|}}
 
{{!}}- style="background-color:#e0e0e0;"
{{!}} colspan="2"{{!}}<s>PSYS_PART_DEAD_MASK</s>{{!}}{{!}}パーティクルを除去し、多くのほかのPSYS_PART_*_MASKとは両立しません。{{!}}{{!}}align="center"{{!}}{{LSL_Hex|0x80000000|}}
 
{{!}}- style="background-color:#e0e0e0;"
{{!}} colspan="2"{{!}}<s>PSYS_PART_RANDOM_ACCEL_MASK</s>{{!}}{{!}}(''未実装'') パーティクルにランダムな加速率を適用するために用いられると推測されます。{{!}}{{!}}align="center"{{!}} -
{{!}}- style="background-color:#e0e0e0;"
{{!}} colspan="2"{{!}}<s>PSYS_PART_RANDOM_VEL_MASK</s>{{!}}{{!}}(''未実装') パーティクルの分散上でランダムな重点を指定することに用いられると推測されます。{{!}}{{!}}align="center"{{!}} -
{{!}}- style="background-color:#e0e0e0;"
{{!}} colspan="2"{{!}}<s>PSYS_PART_TRAIL_MASK</s>{{!}}{{!}}(''未実装'') 一気に多くのパーティクルを分散させる源に''痕跡''を付与するために用いられると推測されます。{{!}}{{!}}align="center"{{!}} -
{{!}}- style="background-color:#ccffcc;"
{{!}} colspan="5" align="left"{{!}}'''システムの表現'''
{{!}}-
{{!}} colspan="2"{{!}}PSYS_SRC_PATTERN{{!}}{{!}}{{LSLG|integer/ja|integer}}{{!}}{{!}}基本的な分散パターンを指定します。{{!}}{{!}}align="center"{{!}}9
{{!}}- style="background-color:#e0e0e0;"
{{!}}rowspan="5" style="background-color:#c0c0c0;" align="center" valign="center"{{!}}'''値'''{{!}}{{!}} colspan="2"{{!}}PSYS_SRC_PATTERN_ANGLE{{!}}{{!}}SYS_SRC_ANGLE_BEGINとPSYS_SRC_ANGLE_ENDによって定義される2次元循環部に存在するパーティクルです。 パーティクル面の方向は、エミッターの[[Viewer coordinate frames#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によって定義される3次元球状部に存在するパーティクルです。{{!}}{{!}}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によって定義される3次元球状部に存在するパーティクルですが、ANGLE_CON パターンと対義です。(すなわち、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{{!}}{{!}}放出動作規則に一致している全方向に放散して存在するパーティクルです。{{!}}{{!}}align="center"{{!}}{{LSL_Hex|0x02|2}}
{{!}}-
{{!}}colspan="2"{{!}}PSYS_SRC_BURST_RADIUS{{!}}{{!}}{{LSLG|float/ja|float}}{{!}}{{!}}パーティクルが作られるであろうエミッターからの距離を指定します。このルールはPSYS_PART_FOLLOW_SRC_MASKフラグの設定時は無効です。 http://forums.secondlife.com/showthread.php?t=226722 のテストでは、最大値は50.00を指し示します。{{!}}{{!}}align="center"{{!}}16
{{!}}-
{{!}}colspan="2"{{!}}PSYS_SRC_ANGLE_BEGIN{{!}}{{!}}{{LSLG|float/ja|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つの値の小さいほうを取得するように内部で再実行されることに注意しましょう。{{!}}{{!}}align="center"{{!}}22
{{!}}-
{{!}}colspan="2"{{!}}PSYS_SRC_ANGLE_END{{!}}{{!}}{{LSLG|float/ja|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
{{!}}-
{{!}}colspan="2"{{!}}<del>PSYS_SRC_INNERANGLE</del>{{!}}{{!}}{{LSLG|float/ja|float}}{{!}}{{!}}'''廃止: 代わりにPSYS_SRC_ANGLE_BEGINを使用します。''' 代替するルールとよくにた動きは、中心よりもかなりエミッター面寄り部分の端にはいきません。{{!}}{{!}}align="center"{{!}}10
{{!}}-
{{!}}colspan="2"{{!}}<del>PSYS_SRC_OUTERANGLE</del>{{!}}{{!}}{{LSLG|float/ja|float}}{{!}}{{!}}'''廃止: 代わりにPSYS_SRC_ANGLE_ENDを使用します。''' 代替するルールとよくにた動きは、中心部よりもかなりエミッター面寄りな部分にはいきません。{{!}}{{!}}align="center"{{!}}11
{{!}}-
{{!}}colspan="2"{{!}}PSYS_SRC_TARGET_KEY{{!}}{{!}}{{LSLG|key/ja|key}}{{!}}{{!}}パーティクルがコースと動きを変えるであろう方向の対象のオブジェクト、プリム、もしくはエージェントのキーを指定します。有効時間の終了時は、対象の幾何学的中心へと最終的に試みます。PSYS_PART_TARGET_POS_MASKの設定が必要です。[[#Caveats|caveat 4]]{{!}}{{!}}align="center"{{!}}20
{{!}}- style="background-color:#ccffcc;"
{{!}}colspan="5" align="left"{{!}}'''パーティクルの見栄え'''
{{!}}-
{{!}}colspan="2"{{!}}PSYS_PART_START_COLOR{{!}}{{!}}{{LSLG|vector/ja|vector}}{{!}}{{!}}パーティクル発散開始時の{{LSLGC|Color/ja|色}}を指定する{{LSLG|unit vector|一個のvector}}です。{{!}}{{!}}align="center"{{!}}1
{{!}}-
{{!}}colspan="2"{{!}}PSYS_PART_END_COLOR{{!}}{{!}}{{LSLG|vector/ja|vector}}{{!}}{{!}}パーティクルが有効時間の間に変換する{{LSLGC|Color/ja|色}}を指定する{{LSLG|unit vector|一個のvector}}です。PSYS_PART_INTERP_COLOR_MASKマスクを設定している場合のみつかえます。{{!}}{{!}}align="center"{{!}}3
{{!}}-
{{!}}colspan="2"{{!}}PSYS_PART_START_ALPHA{{!}}{{!}}{{LSLG|float/ja|float}}{{!}}{{!}}パーティクル発散開始時の{{LSLGC|Alpha/ja|アルファ}}を指定します。有効な値は0.0~1.0の範囲です。高い数値ほどさらに不透明になり、小さい数値ほどさらに透明になります。{{!}}{{!}}align="center"{{!}}2
{{!}}-
{{!}}colspan="2"{{!}}PSYS_PART_END_ALPHA{{!}}{{!}}{{LSLG|float/ja|float}}{{!}}{{!}}パーティクルが有効時間の間に変換する{{LSLGC|Alpha/ja|アルファ}}を指定します。PSYS_PART_INTERP_COLOR_MASKフラグを設定している場合のみ使えます。有効な値はPSYS_PART_START_ALPHAと同じです。([[#Caveats|caveat 1]]){{!}}{{!}}align="center"{{!}}4
{{!}}-
{{!}}colspan="2"{{!}}PSYS_PART_START_SCALE{{!}}{{!}}{{LSLG|vector/ja|vector}}{{!}}{{!}}パーティクル発散開始時の形状やサイズを指定します。各方向で有効な値は0.04 (0.03125)~4.0mです。パーティクルは基本的に2Dスプライトなので、vectorのZ構成は無効であり、0.0で設定すべきです。{{!}}{{!}}align="center"{{!}}5
{{!}}-
{{!}}colspan="2"{{!}}PSYS_PART_END_SCALE{{!}}{{!}}{{LSLG|vector/ja|vector}}{{!}}{{!}}パーティクルが有効時間の間に変換する形状とサイズを指定します。PSYS_PART_INTERP_SCALE_MASKフラグを設定している場合のみ使えます。有効な値はPSYS_PART_START_SCALEと同じです。{{!}}{{!}}align="center"{{!}}6
{{!}}-
{{!}}colspan="2"{{!}}PSYS_SRC_TEXTURE{{!}}{{!}}{{LSLG|string/ja|string}}{{!}}{{!}}各パーティクルに用いる、プリム内のテクスチャ名を指定します。代わりに付与するキーとしてテクスチャのUUIDを指定することも出来るでしょう。{{!}}{{!}}align="center"{{!}}12
{{!}}- style="background-color:#ccffcc;"
{{!}}colspan="5" align="left"{{!}}'''パーティクルの落下'''
{{!}}-
{{!}}colspan="2"{{!}}PSYS_SRC_MAX_AGE{{!}}{{!}}{{LSLG|float/ja|float}}{{!}}{{!}}(パーティクルシステムがすでに設定されている場合)エミッターが視界に入り始めるように指示、あるいは(すでに視界にある場合)この関数が実行開始する秒単位の間隔を指定します。終了直後、それ以降パーティクルが分散されないと、上記の指定は除去されます。0はパーティクルシステムを無期限で継続します。([[#Caveats|caveat 2]]){{!}}{{!}}align="center"{{!}}19
{{!}}-
{{!}}colspan="2"{{!}}PSYS_PART_MAX_AGE{{!}}{{!}}{{LSLG|float/ja|float}}{{!}}{{!}}秒単位で各パーティクル発散有効時間を指定します。最大30.0秒です。この時間の間、パーティクルは他の部分で指定されたパラメータにあわせて表示され、見かけを変えて、動いて、そして非表示になるでしょう。{{!}}{{!}}align="center"{{!}}7
{{!}}-
{{!}}colspan="2"{{!}}PSYS_SRC_BURST_RATE{{!}}{{!}}{{LSLG|float/ja|float}}{{!}}{{!}}放出されているパーティクルが発散する時間間隔を秒単位で指定します。0.0の値はビューアが可能な限りの速さでパーティクルが放散を起こすように指定します。{{!}}{{!}}align="center"{{!}}13
{{!}}-
{{!}}colspan="2"{{!}}PSYS_SRC_BURST_PART_COUNT{{!}}{{!}}{{LSLG|integer/ja|integer}}{{!}}{{!}}各"発散"で放出されるパーティクルの数を指定します。{{!}}{{!}}align="center"{{!}}15
{{!}}- style="background-color:#ccffcc;"
{{!}}colspan="5" align="left"{{!}}'''パーティクルの動き'''
{{!}}-
{{!}}colspan="2"{{!}}PSYS_SRC_ACCEL{{!}}{{!}}{{LSLG|vector/ja|vector}}{{!}}{{!}}放散された各パーティクルに当てはめられる方向加速度のvectorを、メートル毎秒で指定します。有効な値は、[[Viewer coordinate frames#Region|リージョン]]構成上の各方角で0.0~100.0です。{{!}}{{!}}align="center"{{!}}8
{{!}}-
{{!}}colspan="2"{{!}}PSYS_SRC_OMEGA{{!}}{{!}}{{LSLG|vector/ja|vector}}{{!}}{{!}}各軸に沿って秒毎ラジアンでのエミッターの回転を指定します。これはプリムの有効なZ軸からエミッターの面を引き離し、表現する方向で目立たせます。プリムの回転({{LSLG|llTargetOmega/ja|llTargetOmega}}参照)はエミッター回転上では働きません。([[#Caveats|caveat 3]]){{!}}{{!}}align="center"{{!}}21
{{!}}-
{{!}}colspan="2"{{!}}PSYS_SRC_BURST_SPEED_MIN{{!}}{{!}}{{LSLG|float/ja|float}}{{!}}{{!}}メートル毎秒で各パーティクル発散時に選択される発散速度の、ランダムな範囲の最小値を指定します。 このパラメータの値とPSYS_SRC_BURST_SPEED_MAXは、この2つの値で小さいほうを取得するように内部で再実行されることに注意しましょう。{{!}}{{!}}align="center"{{!}}17
{{!}}-
{{!}}colspan="2"{{!}}PSYS_SRC_BURST_SPEED_MAX{{!}}{{!}}{{LSLG|float/ja|float}}{{!}}{{!}}メートル毎秒で各パーティクル発散時に選択される発射速度の、ランダムな範囲の最大値を指定します。このバラメータの値とPSYS_SRC_BURST_SPEED_MINは、この2つの値で大きいほうを取得するように内部で再実行されることに注意しましょう。{{!}}{{!}}align="center"{{!}}18
{{!}}}
|cat1=Effects
|cat2=Light
|cat3=Particles
|cat4=Prim
}}
}}

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の関連した項目が参考になるかもしれません。