パーティクル入門 (10) スターターコンテンツのパーティクル システム

ビデオの内容紹介 
エンジン付属のスターターコンテンツに含まれているパーティクル システムについて、その重要ポイントを説明しています。実習要素はあまりありませんが、始めたばかりの人には有益な情報が含まれていると思われるので、舞台装置などは一緒に作っていきたいと思います。

原題 Introduction Particles -10 – Starter Content Particle Systems

[1] 準備
パーティクル システムを展示するための簡単な舞台を作ります。まず、Blank のプロジェクトを作成します。Starter Content は必ず含めるようにします。
10-1
ちなみに、Starter Content フォルダ内の Particles フォルダを開くと、全部で 6 個のパーティクル システムが入っています (バージョンは、4.8)。
10-2
椅子などは不要なので、削除します。
10-3
10-4
BSP を開き、Box をビューポートにドラッグアンドドロップします。
10-5
Box のサイズを変えて、土台的なものを作ります。
10-6
不要なものは非表示にしました。(任意)
10-7
さらに Box をドラッグアンドドロップして、部屋状のものを作ります。
10-8
これから、部屋状の Box に空洞を作ります。まず、部屋 Box を 複製します。そのためには、Shift+Alt を押しながらドラッグします。複製ができたら End キーで土台に接地するようにします。
10-9
複製 Box のサイズを部屋 Box よりも小さくしてから、Subtractive (引き算的) を選択し、部屋 Box に入れます。(空洞ができない場合は、どこまで押しこむか微調整します。)
10-10
フロアにマテリアルを貼っつけます。Ctrl キーを押しながらクリックすると、複数のフロアを選択できます。同じマテリアルを一様に (ずれがなく) 貼り付けるので、Geometry セクションの Alignment (整列) で Align Surface Planar (サーフェスをそろえて平面にする) を選択します。マテリアルをドラッグアンドドロップしてから、45度回転させて面白みを出します。
10-11
壁についても同様の作業をします。壁の 1 面を選択してから、Select (選択) で Select All Adjacent Wall Surfaces (すべての隣接する壁面を選択する) を選び、マテリアルをドラッグアンドドロップします。
10-12
天井についてもマテリアルを貼り付けます。
10-13
ビルドしてライティングを計算します。
10-14
真っ暗になりますが、かまいません。
10-15

[2] スパーク
舞台が整ったので、さっそく、P_Sparks (パーティクル システムのスパーク) をドラッグアンドドロップします。(StarterContent フォルダ内の Particles フォルダに入っています。)
10-16
復習になりますが、このパーティクル システムには 3 つのエミッタがあり、それぞれが異なるパーティクルの放出を担当しています。
10-17
小さな S マークのボタンをクリックすると、それぞれのパーティクルを単独で表示することができます。
10-18
10-19
10-20

[3] アンビエント ダスト
次は、P_Ambient_Dust です。空中に浮遊するホコリ的なものを表現するパーティクル システムです。
10-22
同じ種類のエミッタが 4 つありますが、これはそれぞれ異なる動作のパーティクルを出すためにあります。
10-23
ちなみに、Spawn Rate (放出数/秒) は 50 とかなり高いです。
10-24
またパーティクルが出現する最初の位置 (Initial Location モジュール) は、非常に広くとっています。
10-25

[4] 火
次は、P_Fire です。
10-27
炎 (Flame) は 2 つのエミッタで制御しているのが分かります。
10-28
スモークをプレビューで表示するには、背景を少し白っぽくする方が見やすくなります。Background Color を使います。
10-26
Orbit (軌道) を使わなければ、パーティクルは Initial Velocity (初速) によって上方に飛んでいきます。
10-29
Orbit を有効にすると、一種の軌道を描くようにパーティクルが動き回ります。(Initial Velocity は有効なので、やがて上方に移動しますが。)
10-30
Distortion (歪み) エミッタは、現実世界でも見られる炎による歪みを表現します。陽炎のようにゆらゆらする、あれです。Distortion だけを表示すると歪みが表現されているのが分かります。
10-30-2
10-31
オフにすると。
10-32
10-33
ところで、この Distortion エミッタで使われているマテリアルは、カスケード側から制御することができるようになっています。Required (必須) モジュールを選択してから Material をダブルクリックして、マテリアルを見てみましょう。
10-34
10-35
ズームしてみると、Dynamic Parameter (動的なパラメータ) ノードというものがあります。
10-36
この Param1 が Refraction (屈折) を制御しているのが分かります。この Param1 という出力を試しに Fraction Index (歪み指数) という名前に変更してみます。
10-37
カスケードに戻り、Dynamic モジュールをリフレッシュ (更新) します。すると、Param1 という Param Name だったのが、Fraction Index に変わることが分かります。
10-38
10-39
つまり、マテリアルとカスケードの連携が取れていることが分かります。ここで、グラフを表示してみます。まず、不要なグラフを削除してから (Remove Curve [カーブを削除する] を使う)、
10-40
Dyanamic のグラフ アイコンをクリックし、Fraction Index の横の□だけを有効にします。All を使ってグラフ全体を表示するようにします。
10-41
このグラフを変更することによって、Fraction Index の値を経時的に (パーティクルの生きている間の時間経過にともなって) 変更できます (つまり動的に変化させることができるわけです)。その変更された値はマテリアルに渡されるので、結果的にマテリアル (見栄え) を変更することができます。

なお、このようなパラメータを動的に変化させるためのモジュールを利用するためには、Prameter → Dynamic を選択します。
10-41-2

ここで火を壁に押し付けてみます。別段変わり映えがしません。正常に表示されます。
10-42
しかし、これはマテリアル内の Depth Fade (カメラ深度でフェードする) というノードのおかげです。マテリアルを開いてみます。
10-43
10-44
Opacity と Depth Fade の接続を切ってみます。
10-45
すると、火のエフェクトが突然壁にさえぎられることによって、エッジが出現してしまいます。
10-46
この Depth Fade は、カメラからの距離に応じて Opacity (不透明) の値を低くします。つまりフェードアウトするようにします。ちなみに、次のように Fade Distance Default (フェードアウトする距離のデフォルト値) を 0.0 にすると、カメラからの距離が 0 までのところに渡って Opacity がフェードアウトされることになるので、
10-47
結局フェードアウトされないということなので、結果は次のようになります。
10-48
やはりエッジが生じてしまいます。

[5] 爆発
次は、P_Explosion (爆発) です。
10-49
P_Explosion をダブルクリックしてカスケードを開きます。P_Explosion はビューポートに配置した瞬間に一度だけ爆発します。
10-50
ここで、Fireball (火の玉) エミッタの Spawn (発生) モジュールについて見てみます。すると、Spawn Rate が 0 になっていることが分かります。
10-51
それは、下の Burst (爆発) セクションを使っているためです。そのためには、Process Burst List (Burst リストを処理する) にチェックを入れています。Count が 6 になっているので、Fireball が 6 個が表示されることになります。
10-52
Spawn Rate は 0 になっているので、それ以降は出現しません。

ブループリントで制御することも可能です。先の P_Explosion を削除してから、Blueprint フォルダの Blueprint_Effect_Explosion をダブルクリックしてみます。
10-53
Event Graph を使って、ゲーム開始から 3 秒後に爆発するようにセットしてみます。
10-54
ブループリントは次のようになります。
10-55
この意味は、Event BeginPlay (ゲームが始まったらイベント) によって、ゲームが開始されると、その実行ピン (白い△) につながっているノードが実行されます。この場合、Delay (遅れ) 関数です。Duration (時間) が 3 になっているので、3 秒間次に接続されているノードの実行が遅れます (待機します)。つまり Activate (アクティブにする) 関数がゲーム開始から 3 秒後に実行されることになります。Activate によって、ExplosionAudio と P Explosion がアクティブになります。すなわち、爆発して音が出ることになります。

このブループリントをビューポートに配置してみます。
10-57
置かれた直後に爆発してから、更に 3 秒後にもう一度爆発します。
10-58
これは Auto Activate (自動アクティブ化) にチェックが入っているためです。
10-59
10-60
これらのチェックを外すと、1 回だけゲーム開始から 3 秒後に爆発するようになります。

[6]蒸気
最後は、P_Steam_Lit です。
10-61
名前に Lit が付いているように、このパーティクル (のマテリアル) は、ライティングされるように設定されています。
10-61-2
そこで、ポイントライトを設置して、このスチームに光を当ててみます。
10-62
Intensity (強度) と Attenuation Radius (減衰半径) を適当に調整します。Attenuation Radius (減衰半径) は、光が徐々に弱くなる範囲を設定します。また Light Color で色をたとえば青などに設定します。赤色のライトも同様にして作ります。
10-63
スチームに光が反映しているのが分かります。緑にして更に確かめます。
10-64
ライティング モジュールは Volumetric Directional Light (ボリュメトリック指向性ライティング) に設定されています。
10-65

ここで、スチームのマテリアルについて見ていきます。
10-66
Particle SubUV というノードがあります。これは、1 枚の画像の下に (=sub =中に) 複数の画像 (Sub images) が入っている場合、
10-67
10-68
それらの複数の画像をパーティクル上でブレンドさせることができるようします。その時、カスケードからブレンドの様態を制御することができます。
10-69
カスケードの Required (必須) モジュールの Sub UV セクションで、Interpolation Method (補間方式) が Linear Blend (直線的なブレンド) にセットされています。Sub Images Horizontal (サブ画像の水平方向の数) と Sub Images Vertical (サブ画像の垂直方向の数) はそれぞれ 8 にセットされています。つまり、8 × 8 で合計 64 個のサブイメージがあることになります。

カスケードの Subimages Index (サブイメージのインデックス) モジュールでは、時間とサブイメージの番号 (インデックス) を結びつけることができます。つまり、いつどのサブイメージをパーティクルで使うかを決めることができます。
10-70
点 0 の In Val は 0.125 という時間を表します。つまりパーティクルが発生して少し経ってからです。その時、Out Val が 0 になっています。つまり、0 番のサブイメージを使うことが指定されています (サブイメージの番号は 0 から始まり、63 で終わります。全部で 64 個です)。点 1 は 0.8 です。パーティクルが消滅するちょっと前です。その時に 63 番目のサブイメージつまり最後のサブイメージが使われるようにしています。[なお、In Val や Out Val が何であるのかは、パーティクル入門 (8) リボン エミッタを作るを参考にしてください。]

点 0 と 点 1 の In Val がそれぞれ 0 と 1 になっていないのは、63 番目のサブイメージと 0 番目のサブイメージの補間を実行する時間を確保するためです。

長くなりました。今回は以上です。お疲れ様でした。








About なつのや

アンリアル・エンジン 4 を基礎から勉強するためのサイト「UE4 の学び部屋」を開いています。どうぞよろしくお願いいたします。
UE4チュートリアル, パーティクル

コメントを残す

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>