掲載日時: 2007-10-25 08:00

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

前回から「パーティクル(粒子)」の解説も中級編に入り、単に放射させる以上の指定について学習している。今回は、中級編2ということで、パーティクルの出現範囲の指定やテクスチャでの代用など、さらに詳しくパーティクルについて学習しよう。

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

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

(前回よりつづく)

ケリーと浜辺を歩いて一時間が経った。
西に傾いた陽の光は、頬月色から更に深い夜の色に変貌を遂げつつあった。
いや、それは俺の気のせいかも知れない。
SLにも時間の経過はあるのだろうか?まさか、そこまでリアルに近づけられるはずが無い。
しかし、波音が美しい音楽のように押しては返し、俺の身体をサラサラと通りぬける。
この感傷にも似た懐かしい感情は、仮想とは思えない俺の中のリアルだ。
そんなことを考えながら、俺はケリーの次の言葉を待ち、そして次の瞬間突如打ちのめされた。

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

前回の復習

 前回から「パーティクル(粒子)」の解説も中級編に入り、「1. System Behavior」に関する項目を見ながら、オブジェクトに対してバウンドさせたり、後をついて行かせたりと、単に放射させる以上の指定を学習した。今回は、中級編2ということで、「2. System Presentation」以降について見て行こう。それにしても、パーティクルはおもしろい。

パーティクル〜中級〜その2

 それでは今回もLSL Portalにある「llParticleSystem( )」の定義を参考にして、ひとつひとつを見ていこう。LSL Portalでは説明がすべて英語だが、日本語版LSL Wikiには日本語訳もある。ただし、この日本語訳は最新情報ではないため、必ず、LSL Portalで確認してほしい。

2. System Presentation

System Presentation
ルール 値(Values)/データ 説明
2. System Presentation
PSYS_SRC_PATTERN(integer) PSYS_SRC_PATTERN_ANGLE パーティクルの出現範囲を角度指定する
※出現範囲はYZ平面上
※PSYS_SRC_ANGLE_BEGIN(float)とPSYS_SRC_ANGLE_END(float)で角度を指定する
PSYS_SRC_PATTERN_ANGLE_CONE パーティクルの出現範囲を角度指定する
※出現範囲は3次元で円錐状
※PSYS_SRC_ANGLE_BEGIN(float)とPSYS_SRC_ANGLE_END(float)で角度を指定する
PSYS_SRC_PATTERN_DROP 水滴のようにパーティクルが固まって出現し、拡散しない
※PSYS_SRC_ACCELなどで方向付けが必要
PSYS_SRC_ANGLE_BEGIN(float) 0.0 PSYS_SRC_PATTERN_ANGLEやPSYS_SRC_PATTERN_ANGLE_CONEなどでパーティクルの出現範囲をラジアンで角度指定する。
PSYS_SRC_ANGLE_END(float) 0.0
PSYS_SRC_TARGET_KEY(key) llGetOwner( ) PSYS_PART_TARGET_LINEAR_MASKやPSYS_PART_TARGET_POS_MASがONの場合、ここでkey指定したターゲットに向かってパーティクルが飛ぶ
PSYS_SRC_PATTERN_ANGLE_CONE_EMPTYは、作動せず。

PSYS_SRC_PATTERN_ANGLE

 パーティクルの出現範囲をラジアンの角度で指定する。この場合、YZ平面上にパーティクルは出現する。

 ここでは、出現範囲の「PSYS_SRC_ANGLE_BEGIN」(始まりの角度:始点角度)と「PSYS_SRC_ANGLE_END」(終わりの角度:終点角度)が「float」形式で指定される。

 角度は、90度や180度のような通常の「度数」表示ではなく、「ラジアン」表示で指定する。しかし、ラジアンって何だろう?という読者も多いと思うので、少し解説しよう。

 そもそも、度数で角度を表し、360度が円の1周を表す、というのは単に誰かが決めただけだ。それと同様に、ラジアンとは「半径1の円弧の長さ」をもとにした単位だ。

 半径1の円周は、直径×3.14…となるので、2πとなる。これをもとに、360度=2π、180度=π、90度=π/2、60度=π/3、30度=π/6、…、1度=π/180と角度とラジアンは対応している。

 そして、LSLでは、3.14…を表す定数として、「PI」が存在する(第23回参照)。そのため、例えば、45度なら、π/4なので、「PI/4」と表現すればよい。

 このようにラジアンを使って示されるパーティクルの出現範囲だが、YZ平面を下図のように見た場合、まず、Z軸を中心として左側に向かって取られた始点角度と終点角度により指定される。そして、この範囲に対してZ軸を中心とした右対称位置にある範囲が加わる。

PSYS_SRC_PATTERN_ANGLE 1

 例えば、始点角度「PI/2(90度)」および終点角度「PI(180度)」の場合を下図に示す。パーティクルの出現範囲は、まず、Z軸を中心として左側に向かって取られた始点角度と終点角度により指定される範囲Aが該当する。そして、この範囲Aに対してZ軸を中心とした右対称位置にある範囲Bが加わる。つまり、始点角度「PI/2(90度)」および終点角度「PI(180度)」を指定した場合、範囲Aと範囲Bからそれぞれパーティクルが出現する。

PSYS_SRC_PATTERN_ANGLE 2

 この例を、「PSYS_SRC_ANGLE_BEGIN(float)」と「PSYS_SRC_ANGLE_END(float)」の関係を大まかにまとめた下図の表で見た場合、背景が黄色くなっているところが該当する。

PSYS_SRC_PATTERN_ANGLE

PSYS_SRC_PATTERN_ANGLE_CONE

 これは、先ほどの「PSYS_SRC_PATTERN_ANGLE」を3次元化したものだ。先ほどの表と見比べてみてほしい。

PSYS_SRC_PATTERN_ANGLE_CONE

PSYS_SRC_PATTERN_DROP

 「PSYS_SRC_PATTERN_DROP」を指定することで、下図左の「PSYS_SRC_PATTERN_EXPLODE」のように拡散せず、下図右のように水滴のようなパーティクルとなる。この場合、「5. Particle Motion」の「PSYS_SRC_ACCEL」などで方向付け(第28回参照)をしてやらないと、パーティクルはオブジェクトの中心で止まったままとなる。

PSYS_SRC_PATTERN_DROP

PSYS_SRC_TARGET_KEY(key)

 これは、前回の「PSYS_PART_TARGET_LINEAR_MASK」と「PSYS_PART_TARGET_POS_MASK」の説明で紹介した。前回では、ターゲットを自分に設定したが、他のオブジェクトを指定もできる。

3. Particle Appearance

Particle Appearance
ルール 値(Values)/データ 説明
3. Particle Appearance
PSYS_PART_START_ALPHA(float) 0.0 発生時のパーティクルの透明度
※0.0(透明)〜1.00(不透明)
PSYS_PART_END_ALPHA(float) 0.0 消滅時のパーティクルの透明度
※0.0(透明)〜1.00(不透明)
※PSYS_PART_INTERP_COLOR_MASKが有効な時のみ有効になる
PSYS_SRC_TEXTURE(string) "Particle Arrow" パーティクルとして使うテクスチャのファイル名、あるいはkeyを指定
※テクスチャはパーティクルスクリプトと同じオブジェクトのコンテンツとして入れておく

PSYS_PART_START_ALPHA(float)
PSYS_PART_ END_ALPHA(float)

 パーティクルの発生時と消滅時の透明度を指定する。0.0なら透明で、大きくなるに従い透明度が下がり、1.0なら不透明となる。ただし、この指定が有効になるのは、「PSYS_PART_INTERP_COLOR_MASK」が有効な時のみだ。

 下図中央はこのルールはOFFにしている。それに対して、下図左は発生時を不透明、消滅時を透明に設定している。消滅時にはパーティクルが薄くなっているのがわかる。逆に、下図右は発生時を透明、消滅時を不透明に設定している。ただし、この場合、発生時の透明なパーティクルはオブジェクト内部にあって見えない。さらに、発生時はパーティクルが密集しているために、透明にしたことが分かりづらくなっている。

PSYS_PART_START_ALPHA(float)とPSYS_PART_ END_ALPHA(float)

PSYS_SRC_TEXTURE(string)

 このルールで、テクスチャをストリング(文字列)形式で指定すると、そのテクスチャでパーティクルを代用できる。例えば、通常は下図左のように表示されるパーティクルに、下図中央のようなテクスチャを指定すると、下図右のように表示される(このテクスチャは「持ち物」フォルダの「Library」-「Textures」-「Waterfalls」-「Particle System」の中に入っている「ParticleArrow」)。この時、テクスチャは、パーティクルスクリプトと同じように、オブジェクトにコンテンツとして入れておく必要がある。

PSYS_SRC_TEXTURE(string)
     

 スクリプト中では、下図のようにテクスチャの名前を“ ”で囲む。

テクスチャの指定1

 または、下図のようにテクスチャのkeyデータを指定することもできる。

テクスチャの指定2

 ここで、「PSYS_PART_START_ALPHA(float)」と「PSYS_PART_ END_ALPHA(float)」という2つのルールで紹介した透明度を、テクスチャを使って検証してみよう。

 まず、これらのルールをOFFにしているのが、下図中央だ(発生時のテクスチャパーティクルがわかりやすいようにオブジェクトを小さくしてある)。テクスチャがくっきりとしている。そして、下図左は、発生時が不透明、消滅時が透明な状態だ。だんだんとテクスチャが薄くなっている。さらに、下図右は、発生時も消滅時も0.1の状態だ。初めから終りまでテクスチャが薄くなっている。

テクスチャを使っての検証

4. Particle Flow

 「Particle Flow」については、第28回の初級編で解説済みなので、そちらを見てもらいたい。

5. Particle Motion

Particle Motion
ルール 値(Values)/データ 説明
5. Particle Motion
PSYS_SRC_OMEGA(vector) <0,0,0> パーティクルが、指定した軸を中心に渦巻き状に出現する

PSYS_SRC_OMEGA(vector)

 下図の左から中央へ、そして右と移るにしたがって、パーティクルが逆時計回りに回転しているのがわかる。値はベクター形式で指定するが、数値が高くなると、回転が速くなる。

PSYS_SRC_OMEGA(vector)

 さて、今回までパーティクルの複雑な挙動を図入りで解説した。これで、あとは、応用だけになる。次回はいよいよ、バイクに組み込まれたパーティクルの解説に入ろう。それでは、次回もお楽しみに。

大槻透世二氏
大槻透世二サイバーアドベンチャー(株)
代表取締役社長/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.