Unreal Engineのナイアガラパーティクルシステムしかり、Unityのパーティクルシステム然り、パーティクルでは、できることが多すぎて訳が分からなく、勉強するにしても何から始めて良いか分からなくないですか?
そこで今回はそもそもパーティクルとはなんぞやというところから始まり、実際に応用例として爆発を作ってみて、パーティクルシステムの仕組みを理解しようという計画です。
使い道は分かるけど何をしたらそうなるの?
パーティクル解説
パーティクルとは?
パーティクルとはエミッター(パーティクルの発生装置)が発生したツブツブの粒子のことです。ナイアガラパーティクルシステムなどではこのツブツブの粒子に、様々な加工を施して、冒頭のような応用例とされるエフェクトなどを作成します。
パーティクルシステムができること(代表)
できることは大量にありますが代表的なものは図解の6つでしょうか?これらをうまく組み合わせることで目的のエフェクトになるようにパーティクルを加工していきます。
処理の流れ
- 生成
- ライフサイクル
- 挙動
- 形状と軌道
処理の流れは大きく4つのプロセスがあり、生成されてから消えるまでに設定した挙動の振る舞いをしながら、発生と消滅を繰り返したり、あるいは1回限りの生成を行ったりします。
実際のUnrealEngineでの使い方
テンプレートがいっぱい
アンリアルエンジンではいきなりゼロからパーティクルシステムを作るのではなく、ある程度の雛形ができているテンプレートを選択してからエフェクト作成を始めます。基本のプロジェクトであれば図のような13種類のテンプレートから選択してエフェクトを作成することができるようです。
テンプレート解説
- Blowing Particles
- ConfettiBurst
- DirectionalBurst
- DynamicBeam
- Empty
- Fountain
- HangingParticulates
- OmnidirectialBurst
- RecycleParticlesIn
- SimpleSpriteBurst
- SingleLoopingParticle
- StaticBeam
- UpwardMeshBurst
実際にアンリアルエンジンで動かしてみて調査するのが良いですが、かなり時間がかかるので、また別の機会にするとして今回はChatGPTくんの説明を載せておきます。
ChatGPTの解説
### 1. **Blowing Particles**
– **説明**: 空気や風で吹き飛ばされるようなパーティクルを生成します。風の影響を受けた動きが特徴です。
– **用途**: 砂や葉っぱ、煙など、風によって移動するパーティクルの表現に適しています。
### 2. **Confetti Burst**
– **説明**: お祝いの際に使用されるような、紙吹雪が一斉に放出されるエフェクトです。
– **用途**: パーティーやイベント、祝賀シーンでの装飾的な演出に使用されます。
### 3. **Directional Burst**
– **説明**: 一方向に向かって大量のパーティクルを瞬時に放出します。
– **用途**: 爆発、火山の噴火、その他の瞬間的な効果に使用されます。
### 4. **Dynamic Beam**
– **説明**: 動的な光のビームを生成するテンプレートで、照明効果やエネルギーのビームを表現します。
– **用途**: 武器のビームやエネルギーのエフェクトに最適です。
### 5. **Empty**
– **説明**: 何も設定されていない空のテンプレートです。ユーザーが自由にカスタマイズして新しいパーティクルシステムを作成できます。
– **用途**: 基本から新しいエフェクトを作成する際の出発点として使用します。
### 6. **Fountain**
– **説明**: 下から上に向かってパーティクルを放出するテンプレートで、噴水のような動きを再現します。
– **用途**: 噴水や水流のエフェクトに適しています。
### 7. **Hanging Particulates**
– **説明**: 何かに吊るされた状態で静止しているか、ゆっくり動くパーティクルを生成します。
– **用途**: 塵や煙、スモークなどの静的なエフェクトに使用されます。
### 8. **Omnidirectional Burst**
– **説明**: 全方向に向かってパーティクルを同時に放出するテンプレートです。
– **用途**: 爆発や衝撃波のようなエフェクトに使用され、パーティクルが360度に広がる効果を持ちます。
### 9. **Recycle Particles In**
– **説明**: 使用されているパーティクルを再利用する仕組みを提供します。パーティクルが消えた際に、新たに生成されることなく再利用されます。
– **用途**: パフォーマンスを最適化するために、特に多くのパーティクルを必要とするシーンで利用されます。
### 10. **Simple Sprite Burst**
– **説明**: 単純なスプライト(2Dイメージ)を使って、一度に大量に放出するエフェクトです。
– **用途**: 火花や破片のような瞬間的なスプライトエフェクトに使用されます。
### 11. **Single Looping Particle**
– **説明**: 一つのパーティクルがループするエフェクトで、特定の動きやアニメーションを持っています。
– **用途**: シンプルなアニメーションやエフェクトを作成する際に役立ちます。
### 12. **Static Beam**
– **説明**: 静的な光のビームを生成し、動きのないエフェクトを持ちます。
– **用途**: 照明効果やガイドラインとして使用され、動かないエネルギーのビームなどに最適です。
### 13. **Upward Mesh Burst**
– **説明**: メッシュを使用して上向きにパーティクルを放出するテンプレートです。3Dメッシュを利用した立体的なエフェクトを作成します。
– **用途**: 火花や破片を表現する際に、よりリアルなビジュアルを提供します。
システムとエミッター
システムがエフェクト全体のルールや設定を管理し、その情報を元にエミッターが実際にパーティクルを生成します。よくわからないので実際にエフェクトをたくさん作って経験値が身についたらもっと分かりやすい解説を付けたいです。
パーティクルにできること(実際の設定方法)
細かいコマンドを含めるとおそらく1000種類以上ありそうですが、ざっくりと分類分けされているものでも図のようなコマンド(できること)があるようです。このあたりは実際に使っていく中で、1個1個仲良くなっていく必要がありそうです。
応用・爆発を作ってみよう
考え方・作成計画
それでは実際に爆発を例に1個エフェクトを作ってみましょう。
- 爆発の炎の元となるパーティクルがたくさん発生する。
- 炎が球体状に広がることで爆発のように見える
実際の操作
参考にした動画
炎の作成
- エミッターの名前を「 Fire 」に変更
エミッターを選択 → エミッター名をクリックすることでエミッター名を変更出来ます。 - 粒子の数を増やす。
エミッター更新の「 Spawn Burst Instantaneous 」を選択し、詳細パネルから「 Spawn Count 」の数を増やす。 - 粒子を球体状に広げる(速度を球体状につける)
パーティクルスポーンに「 Add Velocity 」を追加
詳細パネルから「 Velocity Mode 」を「 From Point 」に設定
好みに合わせて「 Velocity Speed 」を調整 - さらに爆発っぽくする見えるように速度をランダムにする
「 Velocity Speed 」の下三角アイコンをクリック → 検索にRandomと入れて → 「 Random Range Float 」を追加
MinimumとMaximumの値を調整 - さらに爆発のようにするにはパーティクルの寿命を短くして、瞬間的な飛散にする
エミッターの「 Initial Particle 」 → 詳細パネル Lifetime Mode をRandomにしてMin=0.3、Max=0.6に設定 - 爆発の炎1個1個の大きさは、エミッターの「 Initial Particle 」 → 詳細パネル 「 Sprite Attributes 」の「 Sprite Size Mode 」、「 Uniform Sprite Size 」から変更できる
ランダムにすることもできる - 色も同様に、「 Initial Particle 」 → 詳細パネルから設定できる場所がある
爆発なので今回は赤色にした - 爆発で飛散すると共に炎を小さくする
パーティクル更新 → 「 Scale Sprite Size 」を追加 → 詳細パネルからスケールサイズの変化の具合のグラフを右肩下がりに変更する - パーティクルを炎の形にする
炎のテクスチャが必要だったので今回は諦めましたが、マテリアルを作成して、エミッターのRender → 詳細パネル → 「 Sprite Rendering 」 → 「 Material 」に別途作成した炎の形状などのマテリアルを入れることによって、パーティクルの形や質感を変えることができます。
煙の作成
- Fireエミッターを「 Control+D 」で複製
- 名前をSmokeに変更
- 細かい部分をFireと微妙に変更
(疲れてきたので動画を見てください。超手抜き)
出来上がった爆発
出来上がった爆発は爆発した範囲が直径2mくらいと非常に小さい爆発ができました。今回はロボットゲームで使用する爆発を作りたかったので、ロボットが爆発するなら直径10mくらいは欲しいところです。
改良
- 「 Uniform Sprite Size 」= 5000
- 「 Velocity Speed 」= 20000〜30000
に変更することで爆発が大きく直径10mくらいになりました。
感想
爆発ができたとはいえ、ただ単なる炎のような色をした球体が、球体状に広がっているだけで、とてもリアルな爆発はできませんでした。とはいえ基本的なパーティクルの操作方法や考え方は少し身についたような気がするので、これから例題を色々作っていく中で経験値を貯めて、よりリアルだったり自分の理想とするエフェクトを作れるようになっていきたいです。
コメント