Version: 2017.3
シンプルな爆発
パーティクルシステム - 頂点ストリームと標準シェーダーサポート

車両から出る排気煙

車や他の多くの車両は燃料を動力へと変換するために排気煙を出します。パーティクルシステムを使って車両に排気煙を追加することで、仕上げをより良くすることができます。

パーティクルシステムにより生成された排気煙
パーティクルシステムにより生成された排気煙

粒子のタイムライン

排気煙はパイプから高速で吹き出しますが、大気に触れると減速します。減速すると撒き散りながら徐々に薄くなり、すぐに空気と混ざり合い消散してしまいます。排気ガスは温度が高いので、周辺の冷たい空気と触れることで少し上昇します。

排気煙のパーティクルは、最初はパイプの大きさより小さくないといけませんが、短時間でかなり大きく膨れ上がります。部分的に透明な状態で発生し、空気と混ざることで完全に透明になります。力学の点では、パーティクルは高速で発生後、急激に減速しながら少しだけ上昇します。

実装

Shape モジュール内で、Cone シェイプを選択し Angle プロパティーを0に設定します。 この場合の“cone”とは、シリンダー状のパイプになります。パイプの Radius は車両の大きさ次第ですが、radius Gismos とシーンビュー内の車両モデルを重ね合わせて設定するのが一般的です(例として、車モデルの排気パイプや後部の排気口のサイズと重ね合わせることができます)。radius はパーティクルサイズや放出率などの多くのプロパティー設定と関係しています。今回の例では、Unity の基本的なサイズ設定である、1ユニットを1メートルと仮定します。つまり radius が0.05であれば5cm になります。

スモークパーティクルに最適なグラフィックは Standard Assets 内の Smoke4 マテリアルになります。インストールしていない場合は、メニューから Assets > Import Package > Particles を選択してください。それからパーティクルシステムの Renderer モジュールで、 Material プロパティーを Smoke4 に設定してください。

寿命の初期値は5秒で車の排気煙には長すぎますので、パーティクルシステムモジュールを開いて Start Lifetime を2.5秒に設定してください。また同じモジュール内の、Simulation SpaceWorld に、そして Gravity Modifier を小さな負の値(−0.1など)へ設定します。Simulation SpaceWorld に設定することで、車両が動いても煙の発生源を車両に固定させたままにすることができます。負の gravity エフェクト値は、スモークパーティクルが暖かいガスで構成されているかのように上昇させます。さらに良くするため、Start Rotation 横の矢印をクリックしてメニューを開き、Random Between Two Constants オプションを選択してください。2つの値を0と360に設定すると、スモークパーティクルは放出時にランダムで回転した状態になります。パーティクルが規則正しく並んでいる場合、煙のようなランダムで形のないエフェクトとしてはとても違和感があります。

この段階から、スモークパーティクルはリアルに見え始め、デフォルトの放出率がエンジンの“ポッポッ”と煙を吹き出すような演出をします。しかし、まだ煙は外側に膨らみながら消散していません。Color Over Lifetime モジュールを開いてグラデーションバーの右上をクリックします(ここで色の透明度の“アルファ”値を操作します)。アルファ値を 0 に設定すると、スモークパーティクルがシーン内でフェードアウトするように見えるはずです。煙の汚れ具合に合わせて、グラデーションバーの開始時のアルファ値も下げてください。濃く黒い煙は、汚い非効率的な燃焼に見えます。

煙は薄くなるにつれて、広がるべきです。Size Over Lifetime モジュールでこのエフェクトを簡単に作成できます。モジュールを開きカーブを選択します。左端のカーブハンドルをスライドして、開始時のパーティクルのサイズを小さくします。煙の正確なサイズは排気パイプの大きさによりますが、煙の大きさをパイプよりわずかに大きくすることで、より自然に見えます(パーティクルをパイプと同じサイズにして開始するのは、ガスがパイプの形状に保持されていたことを表します。)シーンビューでパーティクルシステムのシミュレーションを使用し、煙がどのように見えるのかを確かめてください。また、煙が十分な距離を移動して消えない場合は、パーティクルシステムモジュールの Start Size を増加させてください。

最後に、煙は薄くなるにつれて減速しなければなりません。一番簡単な方法は Force Over Lifetime モジュールを使うことです。モジュールを開き Space オプションを Local に設定してフォースの Z コンポーネントを負の値にし、パーティクルがフォースによって押し戻されているように示してください。(このシステムはオブジェクトのローカルスペースで正 Z 軸にパーティクルを放出します)。もし他のパラメーターが正しく設定されていれば、システムの値はおよそ−0.75が適しています。

使用方法

排気パーティクルシステムをメイン車両の子オブジェクトとして配置できます。シンプルなゲームでは Play On AwakeLooping のプロパティーのみをオンにしてシステムに実行させることができます。また、動きに合わせた放出率の変化をつけることでリアルに見え(例えば、エンジンが動くほど、多くの煙を排出します)さらにスモークパーティクルが車両の動きに合わせて散らばるのを防ぐ事ができます。高速で動く車両の放出率が低すぎると“フワッ”とした煙になり、リアルに見えません。

放出率はスクリプトから簡単に変更することができます。エンジンの回転数か車両のスピードを表す変数がスクリプト内にあれば、その数値を定数と掛け合わせ、結果をパーティクルシステムの放出率のプロパティーに代入します。

    // C#

        using UnityEngine;
        using System.Collections;

        public class PartScriptTestCS : MonoBehaviour {

            public float engineRevs;
            public float exhaustRate;

            ParticleSystem exhaust;


            void Start () {
                exhaust = GetComponent<ParticleSystem>();
            }
    

            void Update () {
                exhaust.emissionRate = engineRevs * exhaustRate;
            }

        }



        // JS

        var engineRevs: float;
        var exhaustRate: float;

        var exhaust: ParticleSystem;


        function Start() {
            exhaust = GetComponent.<ParticleSystem>();
        }


        function Update () {
            exhaust.emissionRate = engineRevs * exhaustRate;
        }

さらなるアイデア

基本的なスキームによってリアルで印象的な排気煙を作成しました。パラメーターを変化させることで、エンジンの“特徴”も変化します。手入れ不足の非効率的なエンジンは不完全な形で燃料を燃焼しようとし、結果として長く空気中に残る濃くて黒い煙を生成します。これは古い農業用トラクターには最適ですがハイパフォーマンスなスポーツカーには向きません。きれいなエンジンは、パーティクルの lifetime , opacity , size increase に小さな値を使用します。汚れたエンジンには、それらの値を増加して Emission モジュールの Bursts プロパティーを使用しエンジンが唸る印象を与えてください。

シンプルな爆発
パーティクルシステム - 頂点ストリームと標準シェーダーサポート