掲載日時: 2007-09-27 08:00

Second Life 新世界的ものづくりのススメ--その27:パーティクル1

今回から、「パーティクル」(粒子)を使うためのスクリプトを解説する。パーティクルは、火や水しぶき、花火や噴水などを表現するため、Second Life内で多用されている。

著者 : 大槻透世二(サイバーアドベンチャー)

URL : https://japan.zdnet.com/article/20356547/

(前回よりつづく)

「ディズニーランドか……」

さくらとの約束の日を数日後に控え、俺は複雑な気持ちだった。
二人きりの初デート……とまでは言いがたいマーケティングの勉強。
そのさくらの意図をどう捉えていいのか、俺には図りかねたのだ。
「ま、なるようになるか」
俺は淡い期待をなるべく持たないように、自分に言い聞かせパソコンに向き直った。
昼休みを終え、気だるげな午後の時間帯。
営業が出払い少し閑散とした社内で、俺に気を配るものは誰もいない。
俺はその隙間にすべり混むようにSLにインをする。
さくらとのデート(勉強?)まで数日ある。
それまでちょっと予習といくか。

……続きは、ブログ『「Second Love Story」〜あの頃の僕たちに〜』へ。

前回の復習

 前回はテクスチャアニメーションの応用として、「速度に応じたタイヤの回転」を可能にするスクリプトを習った。そして、その過程で、「イベント」や「代入演算子」も習得した。

 下図は、第20回で紹介したバイクだが、前回で1のテクスチャアニメーションが終了したとこになる。今回からは、2のパーティクルにいよいよ挑戦だ。これは面白くなりそうだ。

1. テクスチャアニメーション。2. パーティクル。3. エンジン。 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( )」

 「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( )」部分だけを見ると、次のようになる。

「llParticleSystem( )」部

 これをルールとデータに対応させると下の表のようになる。

ルールデータ
1. System BehaviorPSYS_PART_FLAGSPSYS_PART_EMISSIVE_MASK
2. System PresentationPSYS_SRC_PATTERNPSYS_SRC_PATTERN_EXPLODE
3. Particle AppearancePSYS_PART_START_COLOR<0,1,0>

 これらにより、パーティクルの振る舞いとしては放射が、放射パターンとしては全方向が指定されている。また、見た目として「<0,1,0>」が指定されているが、「」()という形式のデータにおいて、Greenの値だけが「1」となっていることを意味する。その結果、緑のパーティクルが出ている。白いパーティクルを出したければ、「<1,1,1>」とすればよい。

1. System Behavior

 「System Behavior」に関するルールと、そのルールで指定可能なデータは、LSL Portalでは下図のようになっている。今回のスクリプトでは赤枠部分にあるルール「PSYS_PART_FLAGS」とそのデータ「PSYS_PART_EMISSIVE_MASK」が適用されている。

「System Behavior」

 ルールで指定可能なデータだが、上図のように灰色部分「Values」(値)に記載されている。今回のスクリプトで使われている以外のデータも各ルールで有効にすると、パーティクルの色や大きさなどを変化させることができる。

2. System Presentation

 「System Presentation」に関するルールとそのデータは、LSL Portalでは次のようになっており、今回のスクリプトでは赤枠部分が適用されている。

「System Presentation」

 パーティクルを全方向に飛ばす「PSYS_SRC_PATTERN_EXPLODE」の代わりに、他のデータを選ぶと特定方向に飛ばすようできる。

3. Particle Appearance

 「Particle Appearance」に関するルールとそのデータは、LSL Portalでは次のようになっており、今回のスクリプトでは赤枠部分が適用されている。

「Particle Appearance」

 基本的なスクリプトでは、ここまでに出てきた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

 まず、「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を有効にし、値を指定する

PSYS_PART_EMISSIVE_MASK

 この値を設定した場合は図左のようになり、設定しない場合は図右のようになる。

PSYS_PART_EMISSIVE_MASK

PSYS_PART_INTERP_COLOR_MASK

 この値を設定した場合は図左のようになり、設定しない場合は図右のようになる。

PSYS_PART_INTERP_COLOR_MASK

PSYS_PART_INTERP_SCALE_MASK

 この値を設定した場合は図左のようになり、設定しない場合は図右のようになる。

PSYS_PART_INTERP_SCALE_MASK
 

 この続きは次回にしよう。それぞれのルールを図とともに覚えていくと、いろんな表現ができるようになる。それでは、次回もお楽しみに

大槻透世二氏
大槻透世二サイバーアドベンチャー(株)
代表取締役社長/CEO

デジタルハリウッド大学院
次世代インターフェース研究室 研究員
Second Life研究室 研究員/プロデューサー
Linden社推薦 Second Lifeセミナー講師

東北大学心理学専攻卒業。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.