![]() |
Second Life 新世界的ものづくりのススメ--その27:パーティクル1 |
(前回よりつづく)
「ディズニーランドか……」
さくらとの約束の日を数日後に控え、俺は複雑な気持ちだった。
二人きりの初デート……とまでは言いがたいマーケティングの勉強。
そのさくらの意図をどう捉えていいのか、俺には図りかねたのだ。
「ま、なるようになるか」
俺は淡い期待をなるべく持たないように、自分に言い聞かせパソコンに向き直った。
昼休みを終え、気だるげな午後の時間帯。
営業が出払い少し閑散とした社内で、俺に気を配るものは誰もいない。
俺はその隙間にすべり混むようにSLにインをする。
さくらとのデート(勉強?)まで数日ある。
それまでちょっと予習といくか。
……続きは、ブログ『「Second Love Story」〜あの頃の僕たちに〜』へ。
前回はテクスチャアニメーションの応用として、「速度に応じたタイヤの回転」を可能にするスクリプトを習った。そして、その過程で、「イベント」や「代入演算子」も習得した。
下図は、第20回で紹介したバイクだが、前回で1のテクスチャアニメーションが終了したとこになる。今回からは、2のパーティクルにいよいよ挑戦だ。これは面白くなりそうだ。
1. テクスチャアニメーション。2. パーティクル。3. エンジン。
まず、「パーティクル」(粒子)どんなものか実例を見ていこう。下図がパーティクルの例である。暖炉の火(左上:Sundance Channel 51,168,73)、水しぶき(右上:Svarga 39,206,43)、噴水(左下:Svarga 211,125,34)、空から降る星(右下:avexisland 69,125,99)などがある。ただし、これらは図を見るだけでなく、是非、SIM(島)に行って直接見て欲しい。また、この他にも、さまざまなところでパーティクルは使用されている。
まず、一番基本的なパーティクルスクリプトのソースコード全体を見てみよう。
ここで中心となる関数は「llParticleSystem( )」であり、パーティクル全体について司るパーティクルシステムを定義する。このスクリプトをオブジェクトに入れて実行させると、右図のようにオブジェクトから緑色のパーティクルが放射される。
それでは、いつものように、LSP Portalで「llParticleSystem( )」の定義を参照してみよう。下図のようになっている。
「llParticleSystem( )」のデータ型は「list」(リスト)形式で、「[rule1, data1,rule2, data2... rulen, datan]」のように、「ルール」と「データ」が対応する。これらは、スクリプト中で改行することにより、次のように記述できる。
[
rule1, data1,
rule2, data2,
…
rulen, datan
]
LSL Portalでの「llParticleSystem( )」の説明はすべて英語だが、日本語版LSL Wikiでは日本語訳も用意されている。しかし、この日本語訳は最新ではないため、必ず、LSL Portalで確認してほしい。
LSL Portalでの説明を見ると、パーティクルシステムは以下の5つの機能に分けられている。
| 機能 | 指定する内容 |
|---|---|
| 1. System Behavior | 振る舞い(基本設定部分) |
| 2. System Presentation | 放射パターン(全方向、特定方向など) |
| 3. Particle Appearance | 見た目(色、透明度、大きさなど) |
| 4. Particle Flow | フロー(寿命など) |
| 5. Particle Motion | 動き(向き、スピードなど) |
それぞれにおいて、多くの組み込み定数がパーティクルシステム内で用意されている。そのすべてを紹介するのは難しいので、代表的なものから順次紹介していこう。
まずは、先ほどの一番基本的なスクリプトから見てみよう。このスクリプトでは、最初に「default { }」が実行され、次に「state_entry( )」にある「llParticleSystem( )」が実行される。この時、リスト型式のデータである「[ ]」内にある組み込み定数がそれぞれ実行される。
「llParticleSystem( )」部分だけを見ると、次のようになる。
これをルールとデータに対応させると下の表のようになる。
| ルール | データ | |
|---|---|---|
| 1. System Behavior | PSYS_PART_FLAGS | PSYS_PART_EMISSIVE_MASK |
| 2. System Presentation | PSYS_SRC_PATTERN | PSYS_SRC_PATTERN_EXPLODE |
| 3. Particle Appearance | PSYS_PART_START_COLOR | <0,1,0> |
これらにより、パーティクルの振る舞いとしては放射が、放射パターンとしては全方向が指定されている。また、見た目として「<0,1,0>」が指定されているが、「
「System Behavior」に関するルールと、そのルールで指定可能なデータは、LSL Portalでは下図のようになっている。今回のスクリプトでは赤枠部分にあるルール「PSYS_PART_FLAGS」とそのデータ「PSYS_PART_EMISSIVE_MASK」が適用されている。
ルールで指定可能なデータだが、上図のように灰色部分「Values」(値)に記載されている。今回のスクリプトで使われている以外のデータも各ルールで有効にすると、パーティクルの色や大きさなどを変化させることができる。
「System Presentation」に関するルールとそのデータは、LSL Portalでは次のようになっており、今回のスクリプトでは赤枠部分が適用されている。
パーティクルを全方向に飛ばす「PSYS_SRC_PATTERN_EXPLODE」の代わりに、他のデータを選ぶと特定方向に飛ばすようできる。
「Particle Appearance」に関するルールとそのデータは、LSL Portalでは次のようになっており、今回のスクリプトでは赤枠部分が適用されている。
基本的なスクリプトでは、ここまでに出てきた3ルールをリスト型式で記述すれば、パーティクルが使えるようになる。次に、さらに多くのルールを使った場合はどうなるのかを見てみよう。
次に、組み込み定数をいろいろと使って、パーティクルシステムを活用してみよう。以下のようなソースコードを考えてみる。内容を順番に見ていこう。
「llParticleSystem( )」の内容をルールごとにまとめると次のようになる。
注意:「// - - - - -」は、人間が読むためのコメントであり、コンピュータには無視される。
| ルール | 値(Values)/データ |
|---|---|
| 1. System Behavior | |
| PSYS_PART_FLAGS(integer) | PSYS_PART_EMISSIVE_MASK |
| PSYS_PART_WIND_MASK | |
| PSYS_PART_INTERP_COLOR_MASK ※INTERP:interpolation(補間)の略 |
|
| PSYS_PART_INTERP_SCALE_MASK | |
| 2. System Presentation | |
| PSYS_SRC_PATTERN(integer) | PSYS_SRC_PATTERN_EXPLODE |
| PSYS_SRC_BURST_RADIUS(float) | 0.2 |
| 3. Particle Appearance | |
| PSYS_PART_START_COLOR(vector) | <0,25,0> |
| PSYS_PART_END_COLOR(vector) | <0,75,0> |
| PSYS_PART_START_SCALE(vector) | <0.5, 0.5, 0.5> |
| PSYS_PART_END_SCALE(vector) | <0.1, 0.1, 0.1> |
| 4. Particle Flow | |
| PSYS_SRC_MAX_AGE(float) | 0.0 |
| PSYS_PART_MAX_AGE(float) | 3.0 |
| PSYS_SRC_BURST_RATE(float) | 0.1 |
| PSYS_SRC_BURST_PART_COUNT(integer) | 10 |
| 5. Particle Motion | |
| PSYS_SRC_ACCEL(vector) | <0,0,1> |
| PSYS_SRC_BURST_SPEED_MIN(float) | 0.1 |
| PSYS_SRC_BURST_SPEED_MAX(float) | 0.2 |
まず、「1. System Behavior」から見てみよう。各ルールの値とその説明は次のようになる。
| ルール | 値(Values)/データ | 説明 |
|---|---|---|
| 1. System Behavior | ||
| PSYS_PART_FLAGS (integer) | PSYS_PART_EMISSIVE_MASK | 輝きを放つ(=夜に光る) |
| PSYS_PART_WIND_MASK | 風の影響を受ける | |
| PSYS_PART_INTERP_COLOR_MASK ※INTERP:interpolation(補間)の略 | パーティクル発生後(初め)と消失前(最後)で色あるいは透明度を変え、その間の色あるいは透明度を補間したい場合に有効にする。→PSYS_PART_END_COLORとPSYS_PART_END_ALPHAを有効にし、値を指定する | |
| PSYS_PART_INTERP_SCALE_MASK | パーティクル発生後(初め)と消失前(最後)で大きさを変え、その間を補間したい場合に有効にする。→PSYS_PART_END_SCALEを有効にし、値を指定する | |
この値を設定した場合は図左のようになり、設定しない場合は図右のようになる。
この値を設定した場合は図左のようになり、設定しない場合は図右のようになる。
この値を設定した場合は図左のようになり、設定しない場合は図右のようになる。
この続きは次回にしよう。それぞれのルールを図とともに覚えていくと、いろんな表現ができるようになる。それでは、次回もお楽しみに
東北大学心理学専攻卒業。1年間のLA留学を経て、ソリッドレイ研究所でバーチャルリアリティのシステムインテグレーション、立体映像システム構築、HMDシステム構築などを経験。IT系コンサルティング会社を経て、デジタルハリウッド大学大学院コンテンツマネジメント修士課程修了(MCA)。その後、Linden Lab本社にてSecond Lifeカリキュラムのトレーニングを受ける。現在デジタルハリウッドにて「Second Life」セミナーを開催。また、バーチャルリアリティ、メタバース関連のシステム開発/プロデュースを行うサイバーアドベンチャー(株)を設立し、そのCEO職に就いている。
ZDNET Japanは、Ziff Davisからのライセンスに基づき株式会社4Xが運営しています。
ZDNET Japan is operated by 4X Corp under license from Ziff Davis.
Copyright © 2026 4X Corp, Inc. All rights reserved. No reproduction or republication without written permission.