2016年12月24日土曜日

誰でもカンタン!パーティクルの作り方

この記事は、「セカンドライフ技術系 Advent Calendar 2016」の記事です。

去年に引き続き、今年も「セカンドライフ技術系 Advent Calendar」に参加させていただきました。

去年は、“これぞ技術系!”という感じのディープな内容をご紹介していたんですけれど、今年はその逆で、

シンプル!
カンタン!
ベンリ!

という内容をご紹介しようと思います^^


みなさんは、パーティクルってご存知ですか?

パーティクルはコンピュータグラフィックスの技法の一つで、たくさんの粒子に意図した動きをさせることで、シンプルな一枚絵のアニメーションでは表現出来ない、複雑な動きをもった表現を行なうことが出来るようにするものです。

パーティクル・システム - Wikipedia

炎や爆発、煙、火花、雲、霧、水の流れなどの、ゲームのエフェクトでよく使われている技法です。

セカンドライフでも、同様の場面で使用されています。

パーティクルで表現された、雲やハートマーク

パーティクルは見た目が派手なことが多いですので、一度は

わたしも作ってみたい!

と思われたことがあるかもしれません。

でも、実際に作ろうとするとそこには、

スクリプト

という大きな大きな壁が立ちはだかります。

LlParticleSystem/ja - Second Life Wiki

そう、セカンドライフのパーティクルは、スクリプトで作る必要があるのです><

スクリプトはちょっと…

という方にとっては、ここで

終了!

となってしまいます。


でも、魅力的な機能であるパーティクルが、スクリプトが出来ないと全く作れないというのは、悲しいですよね。

そういう風に思われた方はビュアーを作られている方の中にもいらっしゃったみたいで、そんな方々が、ビュアーに素敵な機能を用意してくれました。

それが、

パーティクルエディタ

です!


2016 年 12 月 24 日現在、パーティクルエディタは下記のビュアーにあります。

Firestorm では、2012 年 2 月に公開されたバージョン 3.3.0 でパーティクルエディタが導入されました。

firestorm_maintenance_release_3.3.0_change_log [Phoenix Firestorm Project - Wiki]

Firestorm では、実は 4 年以上前からある機能です。

Alchemy にも、2015 年 6 月に公開されたバージョン 3.8.0 で導入されました。
Alchemy Beta 3.8.0.35816 - Alchemy Viewer - Wiki

Alchemy に付属のスクリプトエディタも、機能は Firestorm の物と同等です。

ただ Alchemy の方は、ユーザーインターフェースがキレイに整理されていて洗練されていますので、分かりやすさという意味ではこちらの方がお勧めです^^


パーティクルエディタは、残念ながら公式ビュアーではサポートされていません。

パーティクルエディタを使ってみたいと思われた方は、サードパーティー製ビュアーの Firestrom または Alchemy を使用してみてください。

(Alchemy のパーティクルエディタのソースコードを公式ビュアーに寄贈するという話はありますので、将来的には公式ビュアーでもサポートされる可能性はあります)


今回は、利用者が多い Firestorm のパーティクルエディタの使い方を紹介します^^

particle_editor [Phoenix Firestorm Project - Wiki]

Firestorm のパーティクルエディタは、下記の手順で開くことが出来ます。
  1. プリムを新規作成する。既存のプリムにパーティクルを追加したい場合は、そのプリムを Rez する。
  2. プリムを編集状態にする。
  3. 制作メニューの「オブジェクト」から、「パーティクルを編集」を選択する。

パーティクルエディタでは、パーティクル用に用意された様々なパラメータを変更することで、自分好みのパーティクルを作成することが出来ます。

パーティクルエディタが開くと、プリムからパーティクルが発生します。


これは、パーティクルエディタの設定内容が、リアルタイムに反映している状態です。
この状態でパーティクルエディタの内容を変更すると、その設定がリアルタイムに表示されます。


スクリプトを記述して、スクリプトファイルに保存して…という手順は、一切不用です。

スクリプトを書かなくても、パーティクルが作成出来ちゃいます!

ただしこの状態は、パーティクルエディタが動いているビュアー上だけの疑似的なものです。
他の人からは、そのパーティクルは見ることは出来ません。

実際のインワールドのオブジェクトに反映させるためには、エディタで作成した内容を“スクリプトファイル”の形でプリムの中に入れてあげる必要があります。

パーティクルエディタで作成した内容は、エディタ内の「Inject」ボタンを押すと、編集中のオブジェクトの中にパーティクルの仕組みが記述されたスクリプトファイルの形で直接出力されます。




たったこれだけで、インワールドで動くパーティクルが作成出来ます!

「スクリプトは全く分からない」という方も安心の、カンタン操作です。
これなら、誰でも出来ますよね^^


またパーティクルエディタでは、「Copy」ボタンを押すと、スクリプトファイルに書き出される内容を OS のクリップボードにコピーすることが出来ます。

こちらの方法を使うと、パーティクルエディタで作成した内容を、自分のスクリプトに組み込んで使うということも出来ます。

スクリプトだけでパーティクルを試行錯誤して作るのは大変ですので、スクリプトが分かる方も、パーティクルエディタを活用されると手間が省けていいと思います^^


パーティクルエディタを使った大まかなパーティクルの作り方は、分かりました。
では次に、パーティクルエディタで出来ることを見ていきましょう。

パーティクルは、「エミッター」と呼ばれる“発生源”から発生します。

セカンドライフでのパーティクルのエミッターは、パーティクルのスクリプトが入ったプリムにあります。

エミッターは、スクリプトにあるパーティクルシステムで設定された内容に基づいて、パーティクルを発生させます。

放出されたパーティクルがどんな状態なのか、それがどう変化していくのかを、パーティクルシステムの各パラメータで設定していきます。

セカンドライフでは、パーティクルシステムの設定はスクリプトでのみ行なうことが出来ますが、パーティクルエディタを使うことでその設定を GUI の形式で行なうことが出来ます。

各パラメータは、下記の通りです。


パーティクルの放出パターン(Pattern)

Explode球状
Angle球状、半球状、円錐状、またはリング状
Angle Cone円状、半円状、弧または放射状
Angle Cone Empty(未実装)
Drop初速なし


パーティクルの見た目や動きの設定


Burst Rateパーティクルの放出間隔
Burst Count一回の放出で発生するパーティクルの数
Angle Beginパーティクルが発生しない範囲(開始)
Angle Endパーティクルが発生しない範囲(終了)
Source Max Age放出持続時間
Particle Max Age表示持続時間
Start Glow出現時のグローの値
End Glow消滅時のグローの値
Scale Start出現時のサイズ
Scale End消滅時のサイズ
Target Key移動目標(オブジェクト、プリム、アバター)
Acceleration放出時の加速度
Omegaエミッタの回転速度
Textureテクスチャー
Burst Radiusパーティクルの発生範囲
Burst Speed Min出現時の初速の最小値
Burst Speed Max出現時の初速の最大値
Start Alpha出現時の透明度
End Alpha消滅時の透明度
Start Color出現時の色
End Color消滅する際の色

パーティクルの合成方法(ブレンドモード)


ソース 1
(デフォルトは Blend Src Alpha)
Blend One
Blend Zero
Blend Dest Color
Blend Src Color
Blend 1 - Dest Color
Blend 1 - Sec Color
Blend Src Alpha

ソース 2
(デフォルトは Blend 1 - Src Alpha)
Blend One
Blend Zero
Blend Dest Color
Blend Src Color
Blend 1 - Dest Color
Blend 1 - Sec Color
Blend Src Alpha
Blend 1 - Src Alpha

ブレンドモードは、OpenGLに直接作用します。


パーティクルの振る舞いを設定するフラグ


BounceSIMのZ座標平面で跳ね返る
Emissive明るさ全開
Follow Sourceエミッターに連動して移動する
Follow Velocity放出方向に合わせてパーティクルを回転させる
Interpolate ColorStart ColorからEnd Colorへ変化する
Interpolate ScaleScale StartからScale Endへ変化する
Target Position移動目標となるTarget Keyへ向かうようになる
Target Linear移動目標となるTarget Keyへ直線的に向かうようになる
Wind風の影響を受ける
Ribbonリボンのように繋がった状態のパーティクルを描画します

パーティクルの出力


Copyクリップボードにスクリプトをコピー
Injectスクリプトをプリムに埋め込み(スクリプトファイル作成)


パラメータは、LSL の llParticleSystem で設定出来る内容と同じです。

これらを駆使することで、様々なパーティクルを作ることが出来ます。


炎のようなパーティクルも、たったこれだけの手順で出来ちゃいます。


他のオブジェクトに飛んでいくパーティクルも、簡単に出来ます^^

スクリプトで書かないと実現出来なかった内容が、パーティクルエディタを使うことで、スクリプトを書かないで実現することが出来ます。

いかがですか?

パーティクルエディタ、すごくいいですよね。
パーティクルを作ってみたい方は、ぜひ活用してみてください^^
このエントリーをはてなブックマークに追加

0 件のコメント:

コメントを投稿