2007年11月17日
パーティクル
クリスマスの季節。雪を降らせます。オブジェクトに仕込んでタッチすれば雪が降り、もう一度タッチすればとまります。
default{
state_entry(){
llParticleSystem([]);
}
touch_start(integer detected){
state start;
}
}
state start{
state_entry(){
llParticleSystem([
PSYS_SRC_PATTERN,PSYS_SRC_PATTERN_EXPLODE
,PSYS_PART_FLAGS,(0
| PSYS_PART_EMISSIVE_MASK
| PSYS_PART_INTERP_SCALE_MASK
)
,PSYS_PART_START_SCALE,<0.15,0.15,0>
,PSYS_PART_END_SCALE,<0.15,0.15,0>
,PSYS_SRC_ACCEL,<0,0,-0.2>
,PSYS_SRC_BURST_PART_COUNT,15
]);
}
touch_start(integer detected){
state default;
}
}
パーティクルは、パラメータをいろいろ変化させることによって、特殊効果を表現することができます。雪や花びらを降らせるだけでなく、噴水や、光の輝き、ゴースト、魔法効果、その他いろいろと創作意欲をかきたててくれます。最もシンプルな形を指定するだけでも動きます。
llParticleSystem([
PSYS_SRC_PATTERN,PSYS_SRC_PATTERN_EXPLODE
]);
llParticleSystem([]) と、パーティクル関数のパラメータをなしにすると、パーティクルは停止します。パラメータはリスト型で、性質とその値でひとつのまとまりとなります。
性質は大きく分けると4種類になります。①表示するテクスチャの名前、②発射の形、③フラグ、④性質
写真は発射の形のひとつ PSYS_SRC_PATTERN_ANGLE を正面から見たものです。
自分で、いろいろと値を変えて試すことが理解するための早道です。以下に性質を全部載せたものをあげておきます。// はコメントアウトで、これよりあとの改行までの文字はプログラムとして認識されません。逆に、これを取ればプログラムとして有効になります。これをオブジェクトに仕込んでいろいろと確かめてみてください。
default{
state_entry(){
llParticleSystem([]);
}
touch_start(integer detected){
state start;
}
}
state start{
state_entry(){
llParticleSystem([
//表示するテクスチャの名前もしくはキー(用意しなくても白い光の粒がデフォルトで入っています)
// PSYS_SRC_TEXTURE,"name",
//形(どれか一つ設定)
PSYS_SRC_PATTERN,
//2次元の扇状。YZ面に出現
//PSYS_SRC_PATTERN_ANGLE
//3次元のコーン(円錐)の内側全体に出現
//PSYS_SRC_PATTERN_ANGLE_CONE
//落下型。PSYS_SRC_ACCEL を指定しないとそこにとどまる
//PSYS_SRC_PATTERN_DROP
//すべての方向に噴射(爆発型)
//PSYS_SRC_PATTERN_EXPLODE
//フラグ(マスク)
// ,PSYS_PART_FLAGS,(0
//オブジェクトのZ=0の高さでバウンドする
// | PSYS_PART_BOUNCE_MASK
//パーティクル自身が光る(オブジェクトの明るさを最大にと同じ)
// | PSYS_PART_EMISSIVE_MASK
//プリムの動きに合わせて噴射の形も平行移動(PSYS_SRC_BURST_RADIUS を無効にする)
// | PSYS_PART_FOLLOW_SRC_MASK
//パーティクルのトップが発射方向に向きを変える(回転、あくまでも平面はこっち向き)
// | PSYS_PART_FOLLOW_VELOCITY_MASK
//色と透明度の変化をスムーズにする
// | PSYS_PART_INTERP_COLOR_MASK
//サイズの変化をスムーズにする
// | PSYS_PART_INTERP_SCALE_MASK
//パーティクルをターゲットへ向けて直線移動(PSYS_SRC_TARGET_KEYでターゲット指定)
// | PSYS_PART_TARGET_LINEAR_MASK
//パーティクルをターゲットへ向けて曲線的移動(ホーミング)(PSYS_SRC_TARGET_KEYでターゲット指定)
// | PSYS_PART_TARGET_POS_MASK
//パーティクルを風になびかせる
// | PSYS_PART_WIND_MASK
// )
//各設定
//パーティクル開始時の透明度、0~1(float)
// ,PSYS_PART_START_ALPHA,
//パーティクル消滅時の透明度、0~1(float)
// ,PSYS_PART_END_ALPHA,
//パーティクル生成時の色、0~1(vector)
// ,PSYS_PART_START_COLOR,
//パーティクル消滅時の色、0~1(vector)
// ,PSYS_PART_END_COLOR,
//パーティクル開始時のサイズ、0.03125~4m、XとYの2次元(vector)Z値は無視される
// ,PSYS_PART_START_SCALE,
//パーティクル消滅時のサイズ、0または、0.03125~4メートル、XとYの2次元(vector)Z値は無視される
// ,PSYS_PART_END_SCALE,
//1つのパーティクルの寿命、30秒まで(float)
// ,PSYS_PART_MAX_AGE,
//視界に入ってからのパーティクルシステムの有効時間(噴射し続ける時間)
// ,PSYS_SRC_MAX_AGE,
//パーティクルの加速度(vector)m/s 擬似的な重力 0 または 0.007815~100
// ,PSYS_SRC_ACCEL,
//パーティクル生成の開始角度(float 度数に変更)アングルの2パターンのみ有効0~180、+と-両方で発生
// ,PSYS_SRC_ANGLE_BEGIN,DEG_TO_RAD*
//パーティクル発生の限界の角度(float 度数に変更)アングルの2パターンのみ有効0~180、+と-両方で発生
// ,PSYS_SRC_ANGLE_END,DEG_TO_RAD*
//1回の噴射あたりのパーティクル生成数(integer)
// ,PSYS_SRC_BURST_PART_COUNT,
//パーティクル生成地点の中心からの距離、メートル(float)PSYS_SRC_PATTERN_DROPには使えない
// ,PSYS_SRC_BURST_RADIUS,
//噴射の間隔、秒(float),0秒で連続
// ,PSYS_SRC_BURST_RATE,
//噴射するときの最小スピード(float)
// ,PSYS_SRC_BURST_SPEED_MIN,
//噴射するときの最大スピード(float)
// ,PSYS_SRC_BURST_SPEED_MAX,
//パーティクルの噴射方向を回転させます。(vector)アングルの2パターンのみ有効
// ,PSYS_SRC_OMEGA,
//追尾するオブジェクトのキー(PSYS_PART_TARGET_POS_MASKが有効の時のみ使用)
// ,PSYS_SRC_TARGET_KEY,
]);
}
touch_start(integer detected){
state default;
}
}
PSYS_SRC_PATTERN_ANGLE 扇状のものを横から見たものです。
,PSYS_SRC_ANGLE_BEGIN,DEG_TO_RAD*0
,PSYS_SRC_ANGLE_END,DEG_TO_RAD*30
0度から30度を指定したので、60度に開いた扇になっています。
これは30度から60度を指定しています。左右に出ているのがわかるでしょうか。
,PSYS_SRC_ANGLE_BEGIN,DEG_TO_RAD*30
,PSYS_SRC_ANGLE_END,DEG_TO_RAD*60
これは、上のものをコーン状(3次元)のものにしたものです。写真では分かりにくいのですが、円錐形に真ん中が空洞になっているのがわかるでしょうか。
PSYS_SRC_PATTERN_ANGLE_CONE
これはその場の位置にとどまる形を指定したものです。PSYS_SRC_ACCEL を指定しないとその場にとどまります。写真は1個だけ発射されたものです。仕込んだオブジェクトを半透明にして分かりやすくしました。中心から発生しているのがわかりますでしょうか。
PSYS_SRC_PATTERN_DROP
これは上のものをそのまま発射し続けたものです。
なお、コーン状の逆パターンもあるのですが、わたしのパソコンでは確認できませんでした。新しいバージョンでは対応しなくなったのか、わたしのものでは確認できないのかどちらかわかりません。
ということで、最後にスクリプトを書くときに参考になるものをあげておきます。
miz さんのスクリプト解説記事。これを読みこなせるならこれだけで十分です。
lslwiki 英語ですが関数の詳しい用法について参考になります。英辞郎等の辞書を参考に調べてみてはいかがでしょうか。
あとは、本になりますが、「リンデンスクリプト入門(インプレスR&D)」や「セカンドライフLSLプログラミング入門(アスキー)」があります。
Posted by ねこねこ at 10:44│Comments(2)
│スクリプト
この記事へのコメント
はじめまして、neconecoさん♪
いや、お会いしたことありますよねー。
覚えてらっしゃらなかったらすいません。
過去記事から全部読ませて頂きましたが、
非常に勉強になることが多く、それも理解しやすいように
丁寧な解説付きで書かれていて、わたしのような物作り
シロートには有難い限りです。
今後もバッチリここをチェックさせて頂きます。(^v^)
いや、お会いしたことありますよねー。
覚えてらっしゃらなかったらすいません。
過去記事から全部読ませて頂きましたが、
非常に勉強になることが多く、それも理解しやすいように
丁寧な解説付きで書かれていて、わたしのような物作り
シロートには有難い限りです。
今後もバッチリここをチェックさせて頂きます。(^v^)
Posted by Hanepin Runo at 2007年11月18日 14:36
Hanepin さんのブログはすっごいパワフルで注目しています。わたしは乗り物関係が好きなので参考にさせていただいております。
ものづくりやスクリプトは全くのシロウトなので、自分で確認できた範囲で書いています。シロウト目線で書くので初心者の方には参考になるかと思います。
こんどロケットに乗せてね^^v
ものづくりやスクリプトは全くのシロウトなので、自分で確認できた範囲で書いています。シロウト目線で書くので初心者の方には参考になるかと思います。
こんどロケットに乗せてね^^v
Posted by ねこねこ at 2007年11月19日 01:01