パーティクルシステム【Unity6】

unity技術

Unity6 URPでの「Particle」の設定方法・項目説明です。

Particleの設置方法

任意のオブジェクトのインスペクター「Add Component」にて「ParticleSystem」を追加します。
移動方向は他オブジェクトと同様に移動ツール回転ツールで行うことができます。

各項目説明

メインモジュール

モジュール意味詳細
Duration放出元の速度の計算方法パーティクルが移動している際の速度を
Rigidbody(物理演算)から取得するか、
Transform(座標移動)から計算するかを選択します。
(Inherit Velocityモジュールなどと連動します)
Loopingループ再生の有無オンにすると、Duration で設定した時間を繰り返して
永続的にパーティクルを放出し続けます。
Prewarm事前ウォームアップ
(前もって作動させておくか)
Looping がオンの時のみ有効。
オンにすると、ゲーム開始(画面に現れた瞬間)に、
すでに1サイクル分再生されたかのような「満ちた状態」から
スタートさせることができます。
(例:最初から煙が立ち上っている状態にしたい時など)
Start Delay放出が始まるまでの遅延時間(秒)システムが有効(Play)になってから、
実際にパーティクルが出始めるまでの待ち時間を設定します。
Start Lifetimeパーティクルが生成されてから
消滅するまでの寿命(秒)
1つの粒子が何秒間存在し続けるかを決定します。
Start Speedパーティクルの初期速度生成された瞬間に、
指定された方向にどれだけの速さで飛び出すかを決定します。
3D Start Size3軸(XYZ)個別での
初期サイズ設定
チェックを入れると、
縦・横・奥行きを別々のサイズで生成できます。
オフの場合は均等な大きさになります。
Start Sizeパーティクルの初期サイズ生成時の大きさの基本値です。
3D
Start Rotation
3軸(XYZ)個別での
初期回転角度設定
チェックを入れると、
3D空間上の各軸に対してランダムや
固定値の回転を初期状態で与えられます。
Start Rotationパーティクルの
初期回転角度(Z軸中心)
生成された瞬間の、2D的な回転角度を指定します。
Flip Rotation回転方向の反転割合(0〜1)1に設定すると、
設定された回転方向とは真逆の方向に回転する
パーティクルが100%の確率で発生します。
ランダム性を出したい時に使います。
Start Colorパーティクルの初期色生成時のカラーを指定します。
右側のグラデーションやランダム設定を使うことで、
生成される粒ごとに色を変えることも可能です。
Gravity Source
(3D Physics)
重力計算の参照元Unity内の物理演算(3D Physics または 2D Physics)の
どちらの重力設定をベースにするかを選択します。
Gravity Modifier重力の影響度(倍率)0は無重力状態。数値を大きくするほど、
Gravity Source で指定された重力に従って
下(または設定された重力方向)へ
引っ張られるようになります。
(例:1にすると現実世界の重力と同等になります)
Simulation
Space
パーティクルの動きの基準座標系Local の場合、パーティクルが生成された後、
親のゲームオブジェクトを動かすと、
すでに飛んでいる粒子も一緒に付いてきます。
World にすると、生成された粒子はその場に残り、
オブジェクトだけが移動します。
(乗り物から出る煙などは通常 World にします)
Simulation
Speed
再生速度の倍率システム全体の時間の進み方を変更します。
2にすると2倍速(スピーディな演出)、
0.5にするとスローモーションになります。
Delta Time時間経過の計算方法Scaled はゲーム内の Time.timeScale
(ポーズやスロー演出)の影響を受けます。
Unscaled にすると、ゲームがポーズ中でも
UIの演出などのように等速で動き続けます。
Scaling Modeトランスフォームの
拡大縮小(Scale)の適用方法
Local は自身のScaleのみ影響、
Hierarchy は親オブジェクト全てのScaleの影響を受けます。
Shape は放出範囲(Shape)の大きさだけをスケールさせ、
粒子自体のサイズは変えない設定です。
Play On Awake自動再生シーン開始時、
またはオブジェクトがアクティブになった瞬間に
自動的にパーティクルを再生します。
Emitter Velocity
Mode
放出元の速度の計算方法パーティクルが移動している際の速度を
Rigidbody(物理演算)から取得するか、
Transform(座標移動)から計算するかを選択します。
(Inherit Velocityモジュールなどと連動します)
Max Particles画面内に同時に存在できる
最大粒子数
生成されるパーティクルの総数がこの値に達すると、
古いパーティクルが消えるか、
新しいパーティクルが生成されなくなります。
パフォーマンス管理に重要です。
Auto Random
Seed
ランダム値の自動生成オンにすると、再生するたびに見た目が
微妙に変わるランダムな挙動になります。
オフにして特定の数値を固定(シード値を固定)すると、
完全に同じ軌道・見た目のパーティクルを再現できます。
(何度再生しても)
Stop Action再生終了時のアクションLooping がオフの時、パーティクルが全て消滅した後に
このゲームオブジェクトをどうするか
(Disableで非アクティブにする、Destroyで削除する、など)
を指定できます。
Culling Mode画面外(カメラ外)での
描画省略処理
カメラに映っていない時に
パーティクルを一時停止(Pause)するか、
そのまま裏で計算し続ける(Always Simulate)かを設定し、
負荷を軽減します。
Ring Buffer
Mode
リングバッファ(循環再利用)Disabled 以外(Until Mitigatedなど)にすると、
Max Particles に達した際、
古いパーティクルを即座に消去して
新しいパーティクルに置き換える、
寿命のない無限ループのような挙動を作ることができます。

サブモジュール

モジュール機能
Emissionパーティクルを「いつ」「どれだけの量」放出するかを設定します。
秒間あたりの放出量や、特定の瞬間に一気に大量に出す「バースト(爆発的な放出)」の設定ができます。
Shapeパーティクルが「どこから(どの形状から)」放出されるかを決めます。
球体(Sphere)、コーン(Cone)、ボックス(Box)、
あるいは3Dモデルのメッシュの表面から放出させるなど、発生源の形を定義します。

Shape内での設定にて、放出範囲なども設定できます。

モジュール機能
Velocity over Lifetime粒子の「寿命が尽きるまでの間の速度と方向の変化」を設定します。
時間の経過とともに特定の方向に加速させたり、減速させたりできます。
Limit Velocity over Lifetime粒子の「速度の上限」を設定します。
空気抵抗(Dampen)のような効果をシミュレートでき、
勢いよく飛び出した粒子を徐々にその場に留まらせるような表現に使います。
Inherit Velocityパーティクルを放出している「親オブジェクトの移動速度」を、
生成される粒子にどれくらい引き継がせる(遺伝させる)かを設定します。
移動する車から出る煙などに影響します。
Lifetime by Emitter Speed放出元(エミッター)が
「移動するスピードに応じて、粒子の寿命を変化させる」設定です。
速く動いている時は寿命を短くする、といった特殊な調整が可能です。
Force over Lifetime粒子の寿命の間に「持続的な力(風や推進力など)」を加え続けます。
Velocity(速度直接指定)とは異なり、物理的な「力」として加速させます。
Color over Lifetime粒子の寿命に応じて「色や透明度(アルファ値)を変化」させます。
煙が徐々に薄くなって消える(透明になる)表現や、
炎が赤から黄色、そして黒い煤に変わるような表現の基本となります。
Color by Speed粒子の「移動速度に応じて色を変化」させます。
例えば、勢いよく飛んでいる時は白く光り、減速すると赤くなる、
といった速度連動のエフェクトが作れます。
Size over Lifetime粒子の寿命に応じて「大きさを変化」させます。
生成時は小さく、徐々に巨大化して消える爆発の炎や、
徐々にしぼんでいく泡などの表現に使います。
Size by Speed粒子の「移動速度に応じて大きさを変化」させます。
スピードが出ている時だけ粒子を大きく(または細長く)したい場合などに有効です。
Rotation over Lifetime粒子の寿命の間、ぐるぐると「回転させ続ける」設定です。
回転速度を指定して、木の葉が舞うような表現や、
煙のテクスチャを回してランダム感を出すのに使います。
Rotation by Speed粒子の「移動速度に応じて回転速度を変化」させます。
External Forces外部の物理コンポーネント(「Wind Zone(風)」など)からの
影響を受けるようにする設定です。
木々を揺らす風で、パーティクルも一緒に流すことができます。
Noise粒子の軌道に「不規則なブレや揺らぎ」を加えます。
数値を調整することで、火の粉がユラユラと不規則に昇っていく様子や、
複雑な電気・雷のようなギザギザした動きを簡単に作れます。
Collisionパーティクルに「衝突判定」を持たせます。
地面や壁に当たって跳ね返る雨、火花、あるいは水しぶきなどを表現できます。
非常に見た目が良くなりますが、負荷が高めです。
Triggers粒子が特定のコライダー(判定ゾーン)に「進入した、または出た」瞬間に、
消滅させたりスクリプトを呼び出したりする設定です。
弾幕ゲームの弾の判定などに使われることがあります。
Sub Emittersパーティクルの「中からさらにパーティクルを生み出す」設定です。
例えば、飛び散った火花が消える瞬間に小さな煙を出す、
ロケット弾が着弾した(消滅した)瞬間に爆発エフェクトを呼び出す、
といった親子連動が可能です。
Texture Sheet Animation1枚の画像にパラパラマンガのように
並べられたアニメーション(スプライトシート)を、粒子の中で再生します。
ただの四角い画像ではなく、
メラメラと燃えるアニメーション付きの炎などを表現できます。
Lights粒子1つ1つに「リアルタイムライト(光源)」を付与します。
光る魔法の粒子が通った周囲の壁を実際に照らすようなリッチな表現ができます。
(※出しすぎると非常に重くなります)
Trails粒子の後ろに「リボン状の軌跡(尾)」を引かせます。
流れ星の光の尾や、弾道のエフェクトなど、
一気に見た目が派手になる強力なモジュールです。
Custom Dataシェーダー(マテリアル)に対して、
パーティクル固有の独自の数値パラメーター(ベクトルや色など)を送り込むための
上級者向け設定です。
Rendererパーティクルを「どのように画面に描画するか」を決める最重要モジュールです。
使用するマテリアル(見た目)、
粒子の形状(Billboard=常にカメラを向く、Mesh=3Dモデルを飛ばすなど)、
描画の重なり順(Sorting)などを設定します。
ここがオフだと画面に何も映りません。

Materialの指定

Renderer内設定で「Material」を指定しないと、ピンク状態のままです。
カラーリングのみの場合と自作素材の指定の両方を選ぶことができます。

色だけ変える場合は「Default-Line」を指定しましょう。

Start Color」で任意の色にすることができます。

自作素材を指定したい場合は、新規マテリアルを作成し、それを指定する形になります。

「Base Map」という画像を設定するマスに、自作した画像をドラッグ&ドロップします。
反射や立体感をだしたいのか、フラットにしたいのかを「Shader」内「Lit」「Unlit」で決めます。

Default-Line」の指定と同じように「Renderer」内の「Material」に、作成したMsterialを指定すれば完了です。

サンプルパラメータ(湯気)

目玉焼きの湯気を演出するために、パラメータをいじりました。
Noise」設定が効いていて、湯気(Particle)を読み込むたびに、ランダム性が生まれるところが気に入っています。

1.メインモジュール

モジュール設定
Duration1(短いスパンでループさせます)
Loopingチェックオン
Start Lifetime1.5 〜 2.5(上に昇ってすぐ消えるように短めに)
Start Speed0.3 〜 0.6(湯気なので、非常にゆっくり上昇させます。速すぎると噴煙になります)
Start Size0.2 〜 0.5(フライパンのサイズに合わせて小さめに)
Start Color 白(#FFFFFF)を選びますが、カラーウィンドウの下部にあるAlpha(透明度)を
「10〜25」程度(ほぼ透明)まで極限に薄くします。

2.サブモジュール

Emission

Rate over Time:20 〜 40
湯気は1つ1つが薄いため、ある程度まとまった数を常に出し続ける必要があります。
薄い粒子をたくさん重ねることで、空気のような質感が生まれます。

Shape

Shape:Circle(円形)または Box(ボックス)
Radius(またはScale):目玉焼きのサイズ(フライパンの底面)に合わせて、少し広がる程度に調整します。
全体からじんわり湧き出るようにします。

Color over Lifetime

グラデーションを設定し、「最後(右端)に向かってアルファ値(透明度)が0になる」 ようにします。
上昇した湯気が、パッと消えるのではなく「空気中にすっと溶け込むように消える」ようにするためです。

Size over Lifetime

グラフの形状を 「右肩上がり(スラッシュ / の形)」 にします。
発生した瞬間は小さく、上昇するにつれて空気と混ざって「ボヤッと大きく広がる」動きを再現するためです。

Noise

Strength:0.05 〜 0.1(ごくわずかに設定)
Frequency:0.5
熱気による空気の対流(ユラユラとした揺らぎ)を表現します。
これがオフだと、ただ真上にまっすぐ昇るだけの不自然な煙になってしまいます。

Rendererの最終調整

Shader:Universal Render Pipeline / Unlit
Surface Type:Transparent
Blending Mode:Alpha
湯気は光る必要がないので、Additive(加算) ではなく Alpha が最適。

Base Map(画像):
パキッとした円ではなく「境界線がぼやけた、消えかかっているような白いモヤの画像」(ソフトパーティクル用テクスチャ)を割り当てます。
Unity標準のデフォルトの「Default-Particle」でも、薄くすれば十分に湯気らしく見せることができます。

コメント