パーティクル・軌跡

寿命カーブ

Size / Color / Alpha over Lifetime

粒子の年齢で大きさ、色、透明度を変える。

7 / 10

インタラクティブデモ

デモを準備しています…

寿命カーブ

ドラッグで視点を回転、Ctrl(⌘)+ スクロールでズーム。タッチ操作は 2 本指です。

ひとことで

粒子の年齢(生まれてから消えるまでの経過割合 t=age/lifet = \text{age} / \text{life}、0〜1)を横軸にしたカーブで、大きさ・色・不透明度などを決める仕組みです。1 つの放出設定から、「白く小さく生まれ、膨らみながら赤く冷え、しぼんで消える炎」のような一生の変化を作れます。Unity の Size/Color over Lifetime、Unreal Niagara の Scale Color / Scale Sprite Size がこれにあたります。

ゲームでの使いどころ

  • 炎:白〜黄で生まれ、オレンジ、赤、暗い煙へ。大きさは膨らんでからしぼむ。
  • 煙:時間とともに大きく広がり、薄くなって消える。
  • 魔法の粒・火の粉:明滅(高周波の不透明度カーブ)しながら色相が変わる。
  • ヒット・着弾エフェクト:一瞬で大きくなってすぐ消える、というメリハリを付ける。

しくみ

粒子は生成時に寿命 LL を持ち、毎フレーム年齢が増えていきます。t=age/Lt = \text{age} / L を、それぞれのカーブ(関数やグラデーション)に入力します。

size(t)=S(t)⋅s0,color(t)=G(t),α(t)=A(t)\text{size}(t) = S(t) \cdot s_0, \qquad \text{color}(t) = G(t), \qquad \alpha(t) = A(t)
  • S,AS, A は 0〜1 の横軸を持つ曲線(ベジェカーブや区分線形、イージング関数)
  • GG は色のグラデーション(色の点を並べ、その間を線形補間)

年齢で正規化しているので、粒子ごとに寿命が違っても(ばらつきを持たせても)、全員が同じ一生の形をたどります。

不透明度カーブは特に重要です。生まれた瞬間に不透明度 1 で現れると「ポン」と出現して見え、寿命で突然消えると「プツッ」と消えて見えます。最初の 5〜10% でフェードイン、最後の 30〜50% でフェードアウトするのが基本形です。

実装のポイント

  • カーブをテクスチャに焼く:GPU パーティクルでは、カーブやグラデーションを 1×256 の小さなテクスチャに焼き込み、tt で参照すると高速です(複数のカーブをチャンネルに詰めることもできます)。
  • 加算合成なら色 = 明るさ:炎のような加算合成では、色を暗くすることがそのまま「消える」ことになるので、不透明度より色のカーブが効きます。
  • 速度カーブ:大きさや色だけでなく、速度や回転、ノイズの強さも年齢カーブで制御すると、表現の幅がさらに広がります。

つまずきやすい点

  • 加算合成の白飛び:大きな加算粒子が重なると、中心が真っ白に飛びます。粒子の数・大きさ・明るさのバランスを取り、トーンマッピングやブルームを前提に調整します(デモの開発中も、最初は画面全体が白飛びしました)。
  • カーブの作りすぎ:各パラメータに凝ったカーブを付けても、実際の見た目の差はわずかなことがあります。まず不透明度と大きさ、次に色の順で効果を確かめます。
  • 寿命のばらつきとの関係:寿命が短い粒子ほどカーブの変化が速く進みます。明滅のような周期的なカーブは、年齢ではなく実時間で作るほうが安定します。

デモで試すこと

  1. 「寿命カーブを使う」をオフにすると、一定の大きさと色の点が噴き出すだけの平板な噴水になります。オンにしたときとの差がこの手法の価値です。
  2. 右下のグラフは、年齢 tt に対する大きさ(黄)と不透明度(水色)のカーブ、その下は色のグラデーションです。
  3. 「カーブの組み合わせ」を炎・魔法の粒・煙と切り替えると、同じ放出の仕組みでもカーブだけでまったく別のエフェクトになります。

参考資料

Unity Particle System Renderer ↗

分野全体の資料で、この項目を直接扱っているとは限りません。