ツリー - Wind Zone
テクスチャとビデオ

パーティクルシステム

3Dのゲームでは,ほとんどのキャラクター,小道具や風景などの要素は meshes として表現されます。一方,2Dのゲームはこれらを表現するために sprites が使われます。メッシュとスプライトは,明確に定義された形状を持つ「固形の」オブジェクトを描画するのには理想の方法です。しかし,ゲームでは流体や自然内の無形のものなど,固形ではない存在もあり,メッシュやスプライトを使用して描画するのが難しいこともあります。移動する液体,煙,雲,炎や魔法の呪文などを生じさせるためには, particle systems という異なるグラフィックの方式を使用し,本来あるべき流動性やエネルギーを獲得することができます。

コンセプト

Particles は小さくシンプルな画像,またはメッシュであり,パーティクルシステムによって大量に表示され,移動します。それぞれのパーティクルは液体や無定形な存在のごく一部を表現し,全てのパーティクルの集合したエフェクトが完全な存在としての印象を作り出します。煙雲で例えてみます。それぞれのパーティクルは,もしかするとそれ自体で小さな雲にも見えるような小さな煙のテクスチャを有しています。これら小さな雲の多くがシーンのあるエリアで一緒に配置された時,エフェクト全体は大きくなり,中身が詰まった雲になります。

システムのダイナミクス

それぞれのパーティクルには所定の lifetime(寿命) が一般的には数秒ほど設定されていて,その間に様々な変化をしていきます。パーティクルは生成された時,またはパーティクルシステムによって emitted(放出された) 時,lifetime のカウントを開始します。システムは球,半球,コーン,ボックスやその他任意のメッシュの領域内にあるランダムな位置にパーティクルを放出します。パーティクルは時間切れまで表示され,時間切れの時点でシステムから削除されます。システムの emission rate(放出頻度) は秒間にどれだけのパーティクルが放出されるかということを大まかなに表しています。とはいえ,実際の放出回数は少しだけランダムな差があります。 emission rate を選ぶことと,平均的なパーティクルの lifetime は「安定」状態(つまり,放出とパーティクルの消滅が同時に起こるということです)にある時のパーティクルの数と,その状態に至るまでに要する時間を決定します。

パーティクルのダイナミクス

emission と lifetime の設定はシステム全体の振る舞いに影響を与えますが,パーティクルの1つ1つも時間と共に変更することができます。パーティクルにはそれぞれ velocity ベクトルがあり,それは毎フレームのアップデート毎にパーティクルが動く方向と距離を決定します。 velocity はシステム自体によって適用された forcesgravity か,Terrain の wind zone で風に吹かれた時に変更されます。それぞれのパーティクルの色,大きさ,角度もまた lifetime か current of movement プロパティで変更できます。色はアルファ(透明度)コンポーネントを含んでいるため,パーティクルはそれぞれが単純に突然現れたり消えたりするのではなく,次第に表示したり消したりということができます。

組み合わせて使用するパーティクルのダイナミクスは,多くの種類の非常にリアルな流体エフェクトをシミュレートすることができます。例えば,滝は薄い放出用の形状を使用して水のパーティクルを重力の元,単純に落下させ,そのまま加速させていけばシミュレートできます。火から生じる煙は上昇,拡散し,最終的には散っていくものですので,システムは上向きの force を煙のパーティクルに加え,サイズと透明度を lifetime に従って増やしていくべきでしょう。

Particle System をUnityで使用する

Unity には Particle System がコンポーネントと共に実装されています。ですので,シーンへのシステムの設置は既製のオブジェクトを加える(メニューから GameObject > Create Other > Particle System を選択して下さい),または既存のオブジェクトにコンポーネントを加える(メニューから Component > Effects > Particle System を選択してください)という単純作業で可能です。コンポーネントは本当に複雑なものですので,インスペクターはいくつかの折りたたみ可能なサブセクションに分割されています。それぞれのセクションは関連したプロパティのグループを内包しています。それに加えて,インスペクター上の Open Window ボタンから独立したエディターウィンドウを起動して,同時に一つかそれより多くのシステムを編集することができます。 Particle System コンポーネントのために利用可能な多くのオプションについての詳細はコンポーネントリファレンスページ にてご覧になれます。

Particle System コンポーネントのアタッチされているオブジェクトが選択された時,シーンビューに小さな Particle Effect パネルが表示されます。パネルにはシステムの設定を変更したことによる見た目の変更を可視化するのに便利な簡易コントロール機能が付いています。

Playback Speed はパーティクルシミュレーションのスピードを増減させることができます。したがって,時間が進んでどのように見えるのかを素早く確認できます。_Playback Time_ はシステムが起動してからどのくらい時間が経過したかを示しています。これは Playback Speed に依存したものなので現実の時間よりも早く,または遅く経過するかもしれません。 Playback Time は Playback Time ラベルをクリックしてマウスの左右のボタンでドラッグすることで「こすって」前後にずらすことができます。パネルの上部にあるボタンはシミュレーションの一時停止と再開,または停止と初期化状態へリセットするに使うことができます。

時間経過で変化するプロパティ

パーティクルの数値プロパティの大半や,システム全体さえも時間経過と共に変化していきます。Unity はどのような変化が起こるのかを明確にするいくつかの関数を提供します:-

  • Constant: そのプロパティの値は lifetime の間常に固定されます。
  • Curve: その値は Curve/Graph によって定義されます。
  • Random between two constants: 2つの定数は値の上限と下限を定義します。実際の値は時間経過によってそれらの値の間をランダムに変化していきます。
  • Random between two curves: 2つのカーブは lifetime で指定された時点の値の上限と下限を定義します。現在の値はそれらの値の間をランダムに変化していきます。

Color over lifetime のような色に対するプロパティには2つの分かれたオプションがあります:-

  • Gradient: 色の値はグラデーション(勾配)から取得します。
  • Random between two gradients: 2つのグラデーションは指定された時点の色の値の上限と下限を定義します。値は2つの色のランダムな比重で決定される平均値から使用されます。
ツリー - Wind Zone
テクスチャとビデオ