パーティクル・システム
パーティクル・システム(英: particle system)はコンピュータグラフィック技術のひとつで、従来型のレンダリング技術では再現が難しい、ある種の曖昧さを持った事物をシミュレートするために使われる。一般にパーティクル・システムを使って模写される事物の例としては、炎、爆発、煙、流水、火花、落葉、雲、霧、雪、埃、流星、毛髪、毛皮、草地、あるいは光跡や呪文の視覚効果などが挙げられる。
殆どの場合、パーティクル・システムは三次元描画システムに実装されるが、ある種の環境では二次元パーティクル・システムも使われる。
典型的な実装
一般的に、三次元空間におけるパーティクル・システムの位置と動作はエミッター(英: emitter、放出器)と呼ばれるものによって制御される。エミッターはパーティクルの発生源として働き、三次元空間におけるエミッターの位置は、パーティクルがどこで発生しどこへ向かってゆくかを決定する。立方体や平面といった通常の立体メッシュオブジェクトをエミッターとして使うことができる。 エミッターには、パーティクルの一連の動作パラメタが設定される。設定できるパラメタの例としては、
- 発生頻度 - 単位時間あたり何個のパーティクルを生成するか
- パーティクルの初速ベクトル - 生成時の放出方向
- パーティクルの寿命 - 各パーティクルが表示されてから消滅するまでの時間間隔
- パーティクルの色、その他いろいろ
がある。これらのパラメタの全てもしくは殆どが「曖昧さ」を持つことが一般的である。すなわち、厳密な数値ではなく、中央値とその両辺の乱数幅を制作者は指定する。(例えばパーティクルの寿命を50±20フレーム内という具合に設定する。)メッシュオブジェクトをエミッターとして使用する場合、初速ベクトルはしばしばオブジェクトの各面の法線に設定される。この場合、パーティクルは各面から直接吹き出されるように見える。
アニメーションの各フレームで実行される、典型的なパーティクル・システムの更新ループは2段階に分けられる。「パラメタ更新/シミュレート」ステージと「レンダリング」ステージである。
シミュレーション・ステージ
シミュレーション・ステージの間、生成すべき新しいパーティクルの数が発生頻度と更新間隔に基づいて計算され、エミッターの位置と指定された発生領域に応じて、各々のパーティクルは立体空間内の特定の位置に発生する。各々のパーティクルのパラメタ(例えば速度や色など)はエミッターのパラメタに応じて初期化される。更新が起こるたび、発生済みのパーティクルはその寿命が過ぎていないかチェックされ、過ぎていたら場面から除去される。そうでないならばパーティクルの位置とその属性はある種の物理シミュレーションに従って更新される。ここでの物理シミュレーションとは、単純な平行移動の場合もあれば、(重力、摩擦、風などの)外力を考慮に入れた、物理的に正確な軌道計算のような複雑な場合もある。パーティクルが跳ね返ったり、環境内の障害物と反応しあったりするよう、パーティクルと特定の3Dオブジェクト間のある種の衝突検知は場面内でよく行なわれる。パーティクル同士の衝突は稀にしか扱われない。それは高負荷であり、殆どの場面で特に有用ではないからだ。
レンダリング・ステージ
データ更新の後、各パーティクルはテクスチャマッピングされ常に画面に正対する四角形のスプライトとして描画される。しかし、必ずしもそうである必要はない。つまり、解像度が低かったり処理能力の劣った環境では、パーティクルは単一ピクセルの点として描画されることもある。非リアルタイムのレンダリングでは、パーティクルをメタボールで描画することもできる。メタボールを使ったパーティクルから計算された等値面は、非常にリアルな液体を表現する。突き詰めれば、3Dメッシュオブジェクトもパーティクルの代用になりうる。すなわち何百万というパーティクルの位置に合わせて雪片の3Dメッシュオブジェクトを複製し回転させて吹雪を表現することもできる。
雪片と毛髪
パーティクル・システムには動的なものと静的なものがある。すなわち各パーティクルを、その寿命にあたる区間について、時間に沿って順に表示するか、全てを同時に表示するかの違いである。両者の区別は、雪片のような表示と、毛髪のような表示という違いとして表れる。
「パーティクル・システム」という言葉そのものは、アニメーションという側面のみを想起させがちである。すなわち、小さな粒子が動く現象(具体的にはスパーク、雨、火など)を表現するため一般に使われる。そうした実装において、アニメーションの各フレームは、各パーティクルの寿命における特定の位置が表現されており、各パーティクルは空間内のある一点に留まっている。
しかし、各パーティクルの全表示期間分を同時に描画したならば、それは「静的」パーティクルになる。すなわち点状の粒子ではなく、パーティクルがひと通り描く軌跡を表現した、糸状のものになる。これらの糸状表現は、毛髪、毛皮、草地、その他同様の物体をシミュレートするために使える。この糸は動的パーティクルが従うのと同じ速度ベクトル、力場、出現頻度、偏位変数で制御できる。加えて、描画される糸の太さは制御可能であり、実装によっては糸の長さに応じて変化させることもできる。パラメタを様々に組み合わせ、軽やかさ、柔らかさ、重苦しさ、硬質さ、その他様々な性質を表現できる。糸の色、長さ、その他の性質に変化をつけるため、エミッター表面に糸の属性データをテクスチャマッピングで貼り付ける手法がある。
アーティスト指向のパーティクル・システム制作ツール
多くの3Dモデリング・レンダリングパッケージソフトで、パーティクル・システムは標準で作成・編集可能である。具体的には Lightwave、 Houdini、Maya、XSI、3D Studio Max、Blender が挙げられる。これらの編集プログラムは、特定の変数や条件を設定するとパーティクル・システムがどのように見えるかを即座に提示する。パーティクル表現を強化するためのプラグインも入手可能である。例えば液体表現用の AfterBurn (en) や RealFlow (en) がある。Combustion (en) のような合成用ソフトウェア、Particle Studio (en) や particleIllusion (en) のようなパーティクルに特化したソフトウェアは、映画やビデオでのパーティクル・システム制作で使われる。
プログラマ指向のパーティクル・システム制作ツール
ゲームエンジン、デジタルコンテンツ制作システム、特殊効果アプリケーションに同梱されているパーティクル・システムのコードは、一から書き起こしたり、ダウンロードできる場合もある。フリーの実装の一つに The Particle Systems API がある。XNA framework 用としては Dynamic Particle System Framework がある。Havok は複数のパーティクル・システム API を提供している。それらの Havok FX API は特にパーティクル・システムの特殊効果に焦点を当てている。Ageia はパーティクル・システムのほか、Unreal Engine 3 のゲームを含む多くのゲームで使われているゲーム物理 API を提供している。2008年2月、Ageia はNVIDIAに買収された。
関連項目
- Second Life、Active Worlds (en) - これらの仮想世界プラットフォームは、いずれもクライアントに標準でパーティクル・システム編集ツールが含まれる。
外部リンク
- David K. McAllister. “The Particle Systems API” (英語). 2010年9月23日閲覧。
- Jeff Lande (1998年7月). “The ocean spray in your face” (PDF) (英語). Game Developer. 2010年9月23日閲覧。
- John Van Der Burg (2000年6月). “Building an Advanced Particle System” (英語). Gamasutra. 2010年9月23日閲覧。
- Jeff Molofee. “Particle Engine Using Triangle Strips” (英語). NeHe Productions. 2010年9月23日閲覧。
- Kent Lai. “Designing an Extensible Particle System using C++ and Templates” (英語). GameDev. 2010年9月23日閲覧。
- “GMParticles” (英語). GMParticles. 2010年9月23日閲覧。 - repository of the 2D particle systems made with Game maker and Particle Designer