ひとことで
粒子の年齢(生まれてから消えるまでの経過割合 、0〜1)を横軸にしたカーブで、大きさ・色・不透明度などを決める仕組みです。1 つの放出設定から、「白く小さく生まれ、膨らみながら赤く冷え、しぼんで消える炎」のような一生の変化を作れます。Unity の Size/Color over Lifetime、Unreal Niagara の Scale Color / Scale Sprite Size がこれにあたります。
ゲームでの使いどころ
- 炎:白〜黄で生まれ、オレンジ、赤、暗い煙へ。大きさは膨らんでからしぼむ。
- 煙:時間とともに大きく広がり、薄くなって消える。
- 魔法の粒・火の粉:明滅(高周波の不透明度カーブ)しながら色相が変わる。
- ヒット・着弾エフェクト:一瞬で大きくなってすぐ消える、というメリハリを付ける。
しくみ
粒子は生成時に寿命 を持ち、毎フレーム年齢が増えていきます。 を、それぞれのカーブ(関数やグラデーション)に入力します。
年齢で正規化しているので、粒子ごとに寿命が違っても(ばらつきを持たせても)、全員が同じ一生の形をたどります。
不透明度カーブは特に重要です。生まれた瞬間に不透明度 1 で現れると「ポン」と出現して見え、寿命で突然消えると「プツッ」と消えて見えます。最初の 5〜10% でフェードイン、最後の 30〜50% でフェードアウトするのが基本形です。
実装のポイント
- カーブをテクスチャに焼く:GPU パーティクルでは、カーブやグラデーションを 1×256 の小さなテクスチャに焼き込み、 で参照すると高速です(複数のカーブをチャンネルに詰めることもできます)。
- 加算合成なら色 = 明るさ:炎のような加算合成では、色を暗くすることがそのまま「消える」ことになるので、不透明度より色のカーブが効きます。
- 速度カーブ:大きさや色だけでなく、速度や回転、ノイズの強さも年齢カーブで制御すると、表現の幅がさらに広がります。
つまずきやすい点
- 加算合成の白飛び:大きな加算粒子が重なると、中心が真っ白に飛びます。粒子の数・大きさ・明るさのバランスを取り、トーンマッピングやブルームを前提に調整します(デモの開発中も、最初は画面全体が白飛びしました)。
- カーブの作りすぎ:各パラメータに凝ったカーブを付けても、実際の見た目の差はわずかなことがあります。まず不透明度と大きさ、次に色の順で効果を確かめます。
- 寿命のばらつきとの関係:寿命が短い粒子ほどカーブの変化が速く進みます。明滅のような周期的なカーブは、年齢ではなく実時間で作るほうが安定します。
デモで試すこと
- 「寿命カーブを使う」をオフにすると、一定の大きさと色の点が噴き出すだけの平板な噴水になります。オンにしたときとの差がこの手法の価値です。
- 右下のグラフは、年齢 に対する大きさ(黄)と不透明度(水色)のカーブ、その下は色のグラデーションです。
- 「カーブの組み合わせ」を炎・魔法の粒・煙と切り替えると、同じ放出の仕組みでもカーブだけでまったく別のエフェクトになります。