表示テーマ
CPU・GPU Particle
Particle(パーティクル)は小さな画像や形状を大量に動かして演出する機能です。ParticleSystem Componentの中で、発生元・Phase・更新Module・描画・Trailを設定します。1つのComponentが1つのEmitterを持ちます。複数の発生元を作る場合はGameObjectを分け、親子関係でまとめます。
最初の粒子を出す
- GameObjectにParticleSystemを追加します。
- CPUまたはGPUを選びます。
- Emitterの発生間隔、発生数、最大数、初速を設定します。
- 描画形状とMaterial、ベースカラーテクスチャを設定します。
- Phaseの寿命を設定し、「寿命による色」や「大きさ」などのModuleを追加します。
- Inspectorの再生操作またはPlayで確認します。
何も出ない場合は最大数・発生数が0でないか、寿命が短すぎないか、MaterialのAlpha、表示レイヤー、Cameraの向きを確認します。
CPUとGPUの選択
CPUは少数の演出や既存の更新Moduleを扱う場合に使います。GPUは大量の粒子、Mesh/Texture/Camera表面からの発生、Scene Fieldや深度を利用する処理に使います。
選択中の実行先に対応しないModuleは追加候補から除かれます。CPUの設定を保持したままGPUへ切り替えた場合、保持される設定と実行されるModuleを区別してください。現行のModule対応表を確認できます。
EmitterとSource
| 設定 | 用途 |
|---|---|
| 発生間隔・発生数 | いつ・何個発生するか |
| 最大数 | 同時に生存する粒子の上限 |
| 初速・オフセット | 発生した瞬間の速度と位置 |
| Point・Box・Sphere・Ring状など | 解析的な発生形状 |
| GPU Source | Meshの頂点・辺・表面、画像、Cameraの表面を発生位置に使う |
| Mask | Textureや頂点色の指定値で発生位置を選別する |
Random範囲では最小値と最大値を指定します。固定Seedを使う場合は自動Seedを無効にします。粒子数やModule順を変えると、同じSeedでも比較条件が変わります。
GPU設定の制限
| 項目 | 現行の制限 |
|---|---|
| 最大粒子数 | 1〜1,000,000 |
| Phase数 | 最大254 |
| GPU Trailの最大点数 | 1軌跡につき最大1,024 |
| Module状態 | 計算された状態領域が256MBを超える設定は拒否 |
| Camera Surface Source | 表面追従と速度継承は非対応 |
| 等間隔Circle | Normal方向の速度方式を使用 |
上限まで増やせることは、その設定で目標FPSが出ることを意味しません。粒子数、Trail、Module数、衝突と描画を合わせて予算を決めます。
PhaseとModule
Phaseは寿命と、その間に動かすModuleのまとまりです。Phaseの終端で、消滅・次へ進むなどの扱いを選びます。最低1つのPhaseが必要です。
Moduleは一覧の順に更新されます。先に位置を変えるModuleと、後で色を変えるModuleなど、値を書き込む順序が見た目に影響します。各Moduleの先頭にある有効チェックで、一時的に処理を外して比較できます。
Curveを使う設定と、開始値・終了値+Easingを使う設定を区別します。ColorのRGBとAlpha、大きさの各軸は別の成分です。
発光
発光Moduleの「現在の色で発光」を有効にすると、現在の粒子色のRGBを発光色へ使います。専用の開始色・終了色は無効化され、発光強度は別に調整できます。
発光を周囲へにじませるにはHDR Bloomも設定します。発光色を明るくすることと、周囲の物体をLightで照らすことは別です。
Local・Worldと親子関係
GameObjectの親子関係は発生元の配置、シミュレーション空間は発生済み粒子がEmitterへ追従するかを決めます。Phaseの親設定も、この追従と切り離しの扱いを設定するものです。
キャラクターに付けて煙をWorldへ残す場合、Emitter GameObjectはキャラクターの子にし、粒子はWorld空間へ残す構成を検討します。
Trail
Trailは過去の粒子位置を点列として保持します。点寿命、最小間隔、最大点数、Trail数、メモリ予算を調整します。少ししか動かない演出で最小間隔を極端に小さくすると、必要以上の点が増えます。
粒子の死後も軌跡を残す設定と、元粒子も描く設定は別です。Textureは伸張または距離による繰り返しを選びます。幅とAlphaを終端へ向けて落とすと消え際を作れます。
GPU衝突とフィードバック
衝突対象には平面、Heightmap、Scene Collider、CameraのDepthなどがあります。DepthはCameraに見える表面だけなので、画面外の衝突を代用できません。
衝突イベントから別Emitterへ送る、Decalを作る、ParticlePaintReceiverへ色を付ける機能では、容量・確率・寿命を設定します。すべての衝突を無制限にCPUへ取り出す構成にしないでください。
C#で変更する
cs
using NEMEngine;
public sealed class ParticlePreset : MonoBehaviour {
void Start() {
// 現在のParticle設定のSnapshotを取得
var particle = GetComponent<ParticleSystem>();
if (particle == null) return;
var settings = particle.GetSettings();
// 発生数の上限と発光Moduleを調整
settings.emitter.maxParticles = 1000;
var phase = settings.phases.Count > 0 ? settings.phases[0] : settings.AddPhase("発光");
var glow = phase.GetEmissive() ?? phase.AddEmissive();
glow.useParticleColor = true;
glow.startIntensity = 3.0f;
glow.endIntensity = 0.0f;
// 変更した設定を戻してから再生
particle.SetSettings(settings);
particle.Play();
}
}取得した設定はSnapshotです。編集後にSetSettingsで反映します。毎frame設定全体を取得・再反映するより、変更したい時点でまとめて編集してください。