UE4の勉強記録

UE4の勉強の記録です。個人用です。

「Unreal Engine 4.xを使用してRPGを作成する」の足りない部分を作成する  Effectの勉強など Part 2

f:id:kazuhironagai77:20210502231033p:plain

<前文>

To Tableの意味について

Tableって恐らく中学1年生の最初に習う単語だと思うんですが、皆さんは本当の意味を知ってますか?

最近Redditで中国のウイグル人の問題についての議論をしているスレを読んでたら、イギリスの新聞がこの問題についてTo Tableしたと記事にしたら、アメリカ人が怒った事が紹介されていました。

どういう事が良く分からなかったんで良く読んでみたら、アメリカ英語だとTo Tableって面倒な議題を後回しにするという意味なんだそうです。つまりこの中国のウイグル人の問題は色々面倒くさい事があるので後回しにすると言う意味になります。それでアメリカ人はイギリスがこの問題を無視して中国と仲良くやってくつもりかと怒ったんです。まあ、アメリカ政府が怒ったのかどうかは知りませんが、この記事を読んだアメリカ人で怒った人がいたのは確かだそうです。

しかしイギリス英語だとTo Tableって面倒な問題を決着つけるまでとことん議論する事らしいんです。だからこの記事はイギリスは中国に対して徹底的にウイグル人の問題についてやってるぞと言う意思表示だったんです。

つまり、イギリスもアメリカも中国のウイグル人の問題についてとことんやってやるぞ。と意気込んでいたのにTo Tableの意味がイギリス英語とアメリカ英語で180度違っていたので、中国と戦う前に味方同士で喧嘩になってしまったと言う話だったんです。

ちなみに、カナダでは両方の意味でとれるので会議などのビジネスでは使用しない人が多いそうです。南アフリカとオーストラリアではイギリス英語と同じだそうです。

この話を読んで私は、英語は世界共通の言語であると思われていますが、正しく通じる範囲は結構少ないのかもしれないと思いました。

Mazie Hirono上院議員とアジア人差別

アメリカのニュース番組を見てたら、近所のスーパーにでもいそうなおばちゃんが出ていてました。

そしたらそのおばちゃん、実は議員で、何かの法案を提出したらしいんですが、凄い量の批判のコメントと低評価なんです。一体何が起きたのかとコメント欄を読んだんですが、その時はもう夜も遅かったので、今一内容を把握出来ない内に寝てしまいました。何か差別的なニュアンスのコメントのような気もしたんですが、どんな法案を提出したのかも分からないんじゃ何も言えないです。

次の日になって気になって調べて見たら全容が分かったんですが、そのおばちゃんはMazie Hirono上院議員と言う方で、アメリカにおけるアジア系の差別に対しての抗議を示すために、全く実行力はないんですが、ある法案を提出したそうなんです。それを上院で可決する事でアメリカの上院もアジア人差別に対して抗議している事を示そう。と言う意図だったようです。

その法案はたった一人の反対を除いて圧倒的な支持で可決されたそうです。その後で、たった一人否決した上院議員は左派のメディアから白人至上主義者である事が判明したとボロクソに叩かれていました。

それ見てやっぱりあのボロクソなコメントと低評価の嵐は、白人至上主義者からの攻撃だったのかと分かり恐ろしくなりました。

それでは今週の勉強を始めます。

<本文>

1.今週の予定

以下の事を行います。

  • Map1でBuildするとLandscape_0 instead mesh…と警告される事の検証の続き
  • Niagaraの勉強の続き
  • Effect(魔法陣)をWarpGateに追加する。
  • Landscape4にもっとモンスターを配置する。
  • Landscape4からMap1に戻るためのWarpGateを作成する。
  • 地図のワープ機能とLandscape4をどうやって絡めていくのかを検討する。

2. Niagaraの勉強の続き

先週、Niagaraの勉強を始めてしました。勉強は公式のdocumentであるNiagara Visual Effects [1]にあるNiagara Overview [2]、Niagara Key Concepts [3]で全体像を勉強してNiagara Quick Start [4]で実際にNiagaraを使用してEffectを作成しました。

Niagara Quick Start [4]では以下の二つの疑問が残りました。

  • Effectのほこりに透明感が全くない。
  • 足元にEffectが自然に発生するようになっている。その理由が分からない。

更にVisual Effectって本当に物理現象を数値解析で解くようなProgrammerでなくても作成出来るの?という疑問も残っています。

2.1 Effectのほこりに透明感が全くない

Niagara Quick Start [4]のビデオをみたらほこりは透明じゃなかったです。

f:id:kazuhironagai77:20210502231446p:plain

ので、この問題は解決です。

2.2 足元にEffectが自然に発生するようになっている。その理由が分からない。

普通に考えれば、Notifiesの1にSocketを指定する箇所があってそこで右足底を指定しているはずです。

f:id:kazuhironagai77:20210502231514p:plain

Notifiesの1じゃなくて、Niagara SystemのFX_FootstepDustPoofにSocket Nameの項目がありました。

f:id:kazuhironagai77:20210502231529p:plain

f:id:kazuhironagai77:20210502231535p:plain

でも何も指定されていません。

ひっとして何も指定していないからRootの箇所に発生しているだけなのかもしれません。

f:id:kazuhironagai77:20210502231555p:plain

試しに、

f:id:kazuhironagai77:20210502231610p:plain

f:id:kazuhironagai77:20210502231618p:plain

を作成して

f:id:kazuhironagai77:20210502231641p:plain

と指定してみたら、

f:id:kazuhironagai77:20210502231656p:plain

頭からほこりが発生しました。

2.3 Niagara Overview [2]Niagara Key Concepts [3]をもう一回読み直す。

何か勉強しなくてはいけない事があったような気がしますが、忘れてしまったのでもう一回、Niagara Overview [2]、Niagara Key Concepts [3]を読み直す事にします。一応Niagara Quick Start [4]で一回ですがNiagaraを実際に使用したので先週とは違った観点や更に深い理解が出来ると思います。

Niagara Overview [2]から読んでいきます。

<Core Niagara Components

<<Systems>>

f:id:kazuhironagai77:20210502231834p:plain

まず最初のSystemについての解説で、Emitterを一個ではなく沢山保持出来ると書かれていますね。Niagara Quick Start [4]では一個のEmitterしか保持していませんが沢山のEmitterを保持する必要がある時とはどんな場合なんでしょう。

その直ぐ後で、花火のeffectを作成した時に、いくつかの爆発が欲しかったとすると、それらの爆発の一個、一個をEmitterで作成出来るとありました。

Niagara Quick Start [4]で使用したProject内のNiagara systemを開いてGraph上で右クリックするとAdd Emitterが表示されますが追加出来るEmitterは存在しませんね。

f:id:kazuhironagai77:20210502231925p:plain

Timelineパネルにも新しく追加したEmitterは表示されるそうです。

f:id:kazuhironagai77:20210502231945p:plain

やっぱり一回でも実際に使用すると理解が段違いで高まりますね。ここに書かれている事自体は全て理解出来ます。

<<Emitters>>

EmitterはModuleのための入れ物です。と書かれていますが、実際はParticle Spawn、Particle UpdateなどがModuleで、それらのModuleはEmitter UpdateなどのGroupに入っています。

そのGroupを保持しているのがEmitterなのでEmitterはGroupための入れ物というのが正しいです。

f:id:kazuhironagai77:20210502232140p:plain

後、EmitterはRe-useableと書かれています。

f:id:kazuhironagai77:20210502232200p:plain

恐らくSystemに更にEmitterを追加する時に前に作成したemitterが追加出来るのでしょう。やり方はまだ分かりませんが。

<<Modules>>

ModuleはCascadeにおけるBehaviorと同じですと書かれていました。

f:id:kazuhironagai77:20210502232228p:plain

Cascadeもほとんど勉強した事ないのでCascade’s behaviorsの名前は初めて聞きました。覚えておきます。

Moduleには以下の機能があると述べています。

  • 共通データとのやり取りが出来る
  • 振る舞いのカプセル化
  • 別なModuleStackする
  • 関数が書ける

最初の共通データとのやり取りが可能とは、Niagara Quick Start [4]の例で言えば、Material で設定したDynamic Parameterの値を

f:id:kazuhironagai77:20210502232344p:plain

Module Dynamic Material Parameterで決定する事を指してると思われます。

f:id:kazuhironagai77:20210502232502p:plain

そう言えばこの設定もどうやって作ったのかうろ覚えです。Niagara Quick Start [4]を復習する時にもっと詳しく見る事にします。

関数を作成する方法や、振る舞いをカプセル化する方法はまだ分かりませんね。別なModuleとStackするのは当然ですね。

当然、Moduleで一番興味があるのはここですね。

f:id:kazuhironagai77:20210502232527p:plain

一見するとHLSLを使用して作成している事からMaterial の事を指しているように思えますが、どうなんでしょうか?

MaterialではないですがHLSLをBPで組み立ててModuleを自作出来るのならとても興味深いです。しかしそれは先週議論した、錬金術師系戦士、つまり物理現象を数値解析で解くようなProgrammerかつデザイナーであるタイプの人達が必要になってくるのではないでしょうか?

Niagaraにおいて私が最も注目している所です。

f:id:kazuhironagai77:20210502232640p:plain

うおおお。

やっぱりHLSLをBPで組み立ててModuleを自作出来るみたいです。

更に詳しい部分はDocumentの以下の部分でやるそうです。

f:id:kazuhironagai77:20210502232701p:plain

流石にこれ全部読む訳には行きませんね。いや読む分には全然問題ないんですが、実体験の伴わない読書は本当の理解は出来ませんので読んでも無駄になってしまいます。

他に情報はないのかと調べて見たら、

HLSL in UE4 Niagara & Material Custom node | Unreal Engine Niagara HLSL [5]でMaterial内でCustom HLSLを使用していました。

f:id:kazuhironagai77:20210502232739p:plain

この赤い四角で囲った部分がCustom HLSLだそうです。

このCustom HLSLはそのままHLSLが書けるそうです。

f:id:kazuhironagai77:20210502232807p:plain

うーん。

何か想像したのと違う。まずMaterialですし、Custom HLSLはそのままHLSLのコード書いています。

でもMaterialはmaterialでModuleとは違うと思うんですが。どうなんでしょう?

<<Parameters and Parameter Types>>

Parameterに関しては今は特に興味がないのでパスします。

Niagara Stack Model and Stack Groups

ここも特に先週から特に学んだ事はないですね。

ここから先は特に書く事がないので以下の2つ以外はパスします。

Niagara Paradigms

<<Events>>

先週勉強しなかった初心者向けのNiagaraのDocumentがEventなんです。

f:id:kazuhironagai77:20210502232855p:plain

一応読んでおいた方が良いのかな。

<<Houdini>>

Houdiniって何だよ。って先週はスルーしてしまったんですが、今週は少しだけ調べました。

Houdini to Niagara | Overview [6]に簡単な説明が紹介されていました。

色々な事が紹介されていましたが、その中で重要なのは以下の様なMeshを破壊するアニメーションが作成出来る事ですね。

f:id:kazuhironagai77:20210502233349p:plain

後はHoudiniを使用したいときに勉強する事にします。

後良く分からないですが、Houdiniは無料なんでしょうか?

Houdiniで作成したデータをUE4にImportするためのplug-inは無料みたいですがHoudiniそのものの商用利用は有料みたいです。

Niagara Key Concepts [3]も読み直しましたが、こっちは特に先週から理解が変わった個所とか無かったので省略します。

2.4 Events and Event Handlers Overview [7] を読む

先週勉強しなかったEvents and Event Handlers Overview [7] を一応読んどく事にしました。

一つのSystem内で2つ以上のEmitterを使用した時、それぞれのEmitter同士の連絡を取り合うのがEventとEvent handlerだそうです。

ただし、

f:id:kazuhironagai77:20210502233426p:plain

だそうです。

実際の作成は以下の様になるそうです。

f:id:kazuhironagai77:20210502233446p:plain

うーん。Emitter同士の連絡がCPUベースのSimulationでしか出来ないと言う事は、実際のNiagaraの運用では、System一個に付きEmitter一個みたいですね。

なるほど。

ここまで分かればNiagaraの最初の勉強としては十分です。

2.5 UE4 - Introduction To Niagara [8]を試してみる

本当は2.4で終にしてよかったんですがせっかくここまで理解出来たので、先週、理解出来ないから途中で見るのを止めたUE4 - Introduction To Niagara [8]を勉強してみます。

かなりNiagaraに関する基礎知識がついたので、今度は理解出来ると思います。

別にこのTutorialに関係している訳ではありませんが、このTutorが使用しているUE4には、Houdini Niagara Pluginが入っていますね。

f:id:kazuhironagai77:20210502233515p:plain

Niagara Quick Start [4]とは違い、Emitterから作成します。

f:id:kazuhironagai77:20210502233622p:plain

Templateを選択します。

f:id:kazuhironagai77:20210502233641p:plain

Emptyを選択します。

Emptyと言う事は全部自分で設定するって事でしょうか?

f:id:kazuhironagai77:20210502233734p:plain

名前を付けます。名前の付け方は「NE_+何でもいい」だそうなので、NE_Introと名付けました。

f:id:kazuhironagai77:20210502233751p:plain

Groupの事をCategoryと呼んでいますね。このTutorialでは。

f:id:kazuhironagai77:20210502233805p:plain

最初のGroupであるEmitter SettingのmoduleであるEmitter Propertiesです。

ここで重要なのはScalabilityだそうですが今回は、使用しないそうです。

f:id:kazuhironagai77:20210502233827p:plain

更にCPUベースかGPUベースで計算するのかもここで決定します。

f:id:kazuhironagai77:20210502233841p:plain

Events and Event Handlers Overview [7]ではGPUではEventは使用出来ないと言っていましたがここの事でしょうね。

GPUを選択した場合はFixed Boundsをチェックする必要があるそうです。

f:id:kazuhironagai77:20210502233857p:plain

この辺の細かい、しかし実装するのに重要な説明は、実装する時にかなり役に立ちそうです。理解出来るのなら、このTutorialシリーズはかなり良いかもしれません。

それでは何かをEmit出来るようにします。

何かをEmitするために、一番最初に設定しなければならないGroupは、Renderingだそうです。

f:id:kazuhironagai77:20210502233925p:plain

ただしSprite Renderer moduleが既に実装されているので今回は何もする必要はないそうです。

次は、EmitterをSpawnする必要があります。

f:id:kazuhironagai77:20210502234115p:plain

ありますがこのGroupは常に何もする必要がないそうです。

次にEmitter Updateです。

f:id:kazuhironagai77:20210502234148p:plain

ここで色々やる必要があります。

Spawn Rateを追加します。

f:id:kazuhironagai77:20210502234222p:plain

Spawn Rateを1にセットします。

f:id:kazuhironagai77:20210502234238p:plain

一秒間に一回Spawnするという意味だそうです。

実際、今まで何も無かったPreviewに白い丸が現れました。

f:id:kazuhironagai77:20210502234254p:plain

今度はSpawn Brust Instantaneous moduleを追加します。

f:id:kazuhironagai77:20210502234322p:plain

このmoduleは幾つのParticleをSpawnするかという事と、そのParticleを何時Spawnするかの2つを決定するためのものだそうです。

ここからSpawn Brust Instantaneous moduleの値の設定方法の説明をするのかと思いきや、突然Emitter Stateについての説明を始めました。

f:id:kazuhironagai77:20210502234411p:plain

f:id:kazuhironagai77:20210502234418p:plain

TutorialだとLoop Durationに値を入れるとTime Lineの緑色のバーの長さが入れた値通りに変化するんですが、

f:id:kazuhironagai77:20210502234449p:plain

私のProjectでは緑色のバーの長さは変わりません。

f:id:kazuhironagai77:20210502234505p:plain

Loop Delayにチェックを入れたら

f:id:kazuhironagai77:20210502234521p:plain

緑色のバーの長さが、Loop Durationに値と同じになりました。

f:id:kazuhironagai77:20210502234537p:plain

しかしTutorialではLoop Delayにチェックは入っていません。

f:id:kazuhironagai77:20210502234614p:plain

うーん。分かりません。どっかで間違えているんでしょうか?

今度はParticle SpawnとParticle Updateについてです。

f:id:kazuhironagai77:20210502234634p:plain

f:id:kazuhironagai77:20210502234643p:plain

この二つもGroupなんでしょうか?

それぞれModuleを保持出来るみたいなのでGroupみたいですが、Emitter Updateとの関係が分かりません。Emitter Updateの下に存在するGroupなのか、それとも全く独立しているのかが不明です。

Particle SpawnのInitial Particle moduleについての解説です。

f:id:kazuhironagai77:20210502234704p:plain

Lifetimeがありますが、

f:id:kazuhironagai77:20210502234725p:plain

このInitial Particle moduleのlife timeはEmitter stateのLoop Durationとは違うそうです。

f:id:kazuhironagai77:20210502234757p:plain

Initial Particle moduleのlife timeはそのParticleがどれくらい生きるかを示します。一方、Emitter stateのLoop DurationはEmitterがどれくらい生きるのかを示すそうです。

このEmitterとParticleの関係性が、今一分かりませんね。

この辺を理解するのは後の課題ですね。

Particle SpawnにAdd Velocityを追加しました。更にParticle UpdateにもAdd Velocityを追加しました。

f:id:kazuhironagai77:20210502234833p:plain

Particle SpawnにAdd Velocityの値は以下の様にセットしました。

f:id:kazuhironagai77:20210502234849p:plain

Particle UpdateにもAdd Velocityの値は以下の様にセットしました。

f:id:kazuhironagai77:20210502234906p:plain

結果、以下の様にParticleがx軸方向に移動するようになりました。

f:id:kazuhironagai77:20210502234948p:plain

Time lineのUIの操作方法についての解説です。

実は私、Niagaraに限らずTime lineの操作方法があまり分かっておらず、いつも適当にいじって何とかやっていました。いい機会なのでTime lineの操作方法についても勉強してしまいます。

右クリックで全体の移動が出来ます。

f:id:kazuhironagai77:20210502234929p:plain

右クリックしたまま右に移動させました。

f:id:kazuhironagai77:20210502235016p:plain

Ctrlボタンを押しながら、Midボタンを回すと

f:id:kazuhironagai77:20210502235045p:plain

全体のサイズを拡大縮小出来ます。

以上でした。

今度は作成したEmitterをLevel上で使用するためにNiagara systemを作成します。

Niagara systemを選択します。

f:id:kazuhironagai77:20210502235133p:plain

Empty systemを選択します。

f:id:kazuhironagai77:20210502235151p:plain

名前は「NS_何か」で決めるのが通常らしいので、NS_Introとします。

f:id:kazuhironagai77:20210502235415p:plain

開いたら、先週見た謎の奴が有りました。

f:id:kazuhironagai77:20210502235444p:plain

これが何なのか説明も聞けそうです。

f:id:kazuhironagai77:20210502235501p:plain

思わず「なにー!」ってつぶやいてしまいました。

Niagara systemに先程作成したEmitterを追加します。

Tutorialの追加の仕方が超カッコイイです。

Emitterのアイコンを掴んでNiagara systemのTime lineに落として追加しました。

f:id:kazuhironagai77:20210502235515p:plain

この後TutorialではSystem内のEmitterが実際は継承されていてEmitter内のModuleを消したりする事が出来ない事などを説明していますが、今回はその辺の事はスキップします。

Emitterを追加したNiagara systemをLevel内に配置します。

f:id:kazuhironagai77:20210502235532p:plain

以上です。

2.6 Niagara勉強まとめと感想

今回は、先週勉強した内容の復習と新しいTutorialを一個やりました。

段々Niagara systemの内容が理解で着て来ました。かなり分かり易い作りになっています。これならほとんどの事は、デザイナーでも単独で出来そうですね。ただし、簡単な事しか出来ない訳でもなくCustom HLSLを使用すればProgrammerしか出来ない高度な技術を使用する事も出来るようです。

4.26でもそうなのかは不明ですが、GPUベースにするとEventを使用したEmitter同士の連絡は出来ないそうです。これはちょっと残念でした。

2週間しか勉強していませんが、正直言ってかなりNiagara system気に入っています。来週も勉強するかもしれません。

3. Map1でBuildするとLandscape_0 instead mesh…と警告される事の検証の続き

UE4 Answer HubのLandscape Error after build in Lighting Results [9]によると

f:id:kazuhironagai77:20210502235619p:plain

と書かれています。

先週この情報に基づいてStatic lightingをMoveableに変更したり、Landscapeに使用している草木のMeshにLOD1を追加したりしました。

しかしこの警告は一向に消えませんでした。

今週はもっと簡単な条件を作成してこの警告の原因を解明しようと思います。

以下に示したように最低限のLightしか存在しないmapを作成しました。

f:id:kazuhironagai77:20210502235655p:plain

f:id:kazuhironagai77:20210502235704p:plain

LandscapeにはLandscape4に使用しているMaterial InstanceのLandscape4_instを使用しています。

f:id:kazuhironagai77:20210502235720p:plain

この状態でBuild light onlyをすると以下の警告が出ます。

f:id:kazuhironagai77:20210502235735p:plain

この中の光に関係するactorでMobilityを変えられるのは、

  • Directional light
  • Sky light

だけです。

これらのMobilityを

f:id:kazuhironagai77:20210502235804p:plain

f:id:kazuhironagai77:20210502235818p:plain

に変えてBuild light onlyにすると

f:id:kazuhironagai77:20210502235947p:plain

同じ警告が表示されます。

どうやらlightのMobilityを変化させてもこの警告は無くならないようです。

となるとFoliageに使用している草木用のstatic mesh全てを調べる必要がありますね。

Material のLandscape4の

f:id:kazuhironagai77:20210503000004p:plain

を見ると以下の二つのLandscape Grass Typeが使用されています。

f:id:kazuhironagai77:20210503000036p:plain

Landscape4_Foliageから見ますと、

f:id:kazuhironagai77:20210503000052p:plain

4種類の草木用のStatic meshを使用しています。

試しにこの三番の木を外してみます。

f:id:kazuhironagai77:20210503000111p:plain

3番を無くしたLandscape4_Foliageを作成しました。

f:id:kazuhironagai77:20210503000127p:plain

このLandscape4_FoliageをGrassのLandscapeに使用します。

全部Compileし直すみたいで時間がかかります。

f:id:kazuhironagai77:20210503000146p:plain

出来ました。

f:id:kazuhironagai77:20210503000208p:plain

木が消えています。

Build light onlyをします。

f:id:kazuhironagai77:20210503000229p:plain

あれ。警告が出て来ません。

ひょっとしてこの木が問題だったんでしょうか?

先程、消した木を戻します。

この機にLOD1を追加すれば良いんでしょうか?

f:id:kazuhironagai77:20210503000254p:plain

調べたんですが、LOD1が元々備わっていないと追加出来ないみたいです。

あれ?

警告が消えています。

Build light onlyをもう一回して確認します。

警告が出て来ません。

調べたら先程の木のLOD SettingsのNumber of LODsの数字が1に変わっていました。

f:id:kazuhironagai77:20210503000333p:plain

以下に元々の値を示します。Number of LODsの値は2です。

f:id:kazuhironagai77:20210503000354p:plain

ひょっとして、この数字が2になっていたからこのStatic meshはLODが2個あるはずと勘違いされて警告が発せられていたんでしょうか?

分かりませんが、Landscape4で試してみます。

Landscape4で木の設定を上記と同じにしてbuild light only をします。

凄い時間がかかりました。

以下の警告が表示されましたが前の警告は表示されませんでした。

f:id:kazuhironagai77:20210503000512p:plain

以下に示したLightmass Importance Volumeを追加すればいいんでしょうか?

f:id:kazuhironagai77:20210503000529p:plain

まあ。この警告は後で対応します。

Ch4_3 で試してみます。

Foliageに使用している木のLOD SettingsのNumber of LODsの数字を1に変えました。

f:id:kazuhironagai77:20210503002019p:plain

これでBuild light onlyをします。

以下の結果になりました。

f:id:kazuhironagai77:20210503002050p:plain

Building 12の警告は昔からありました。

Landscape_0 instead mesh…という警告は完全に無くなりましたね。

これが正しい解決方法なのかは分からないですが、兎に角、警告は消えました。

一応、Ch4_3 のLandscape4でもbuild light only をやってみます。

f:id:kazuhironagai77:20210503002118p:plain

別なProjectで試した時と全く同じ結果でした。

Landscape_0 instead mesh…という警告を取り除くという目的は、一応は達成出来ました。

しかしNumber of LODsとは何なんでしょうか?

分からない時はカーソルを乗せるです。

f:id:kazuhironagai77:20210503002139p:plain

と言う事は、LOD1を作成しないように設定した訳ですね。

カメラから、あまり遠くの木を生成する事はないのでこれでも良い気がします。

今回はここまでとして、Lightmass Importance Volumeについての警告は来週解決します。

4. Effect(魔法陣)をWarp Gateに追加する。

以下のActorにEffectで魔法陣を追加しようと思っています。

f:id:kazuhironagai77:20210503002223p:plain

Ch4_3 は4.24で作成しているのでCascade Particle Systemを使用します。

Magic Aura Effect - Particle System - [UE4 Tutorial] [10] を使用してそのまま作成するつもりでしたが、Niagaraは基礎をしっかり勉強したので一応何をやっているのか理解出来ました。

やっぱりCascade でも一応基礎は勉強すべきかもしれませんね。

先週、見つけた公式のDocumentであるCascade Particle System [11]ですが

f:id:kazuhironagai77:20210503002239p:plain

こちらのDocumentのうち一つ二つを先に読んでみる事にします。

4.1 Key Particle Conceptsを勉強する

Cascade Particle System [11]の中から全体像を把握するための最適なDocumentを選択するとしたらKey Particle Concepts [12] ですかね。

まずこれを読んでみます。

f:id:kazuhironagai77:20210503002303p:plain

まあ当然ですがDocumentもちょっと古いです。それはしょうがないですね。

<A Modular Approach to Particle Effects

CascadeはModule 方式でParticle Systemを作成しているそうです。

Module 方式とは、私が理解した範囲では、一つのModuleが、一つの振る舞いとその振る舞いを決定する最低限のPropertyを担当します。そして必要に応じてModuleを足していく方式の様です。

<<Default Modules>>

ただし以下に示したModuleはDefaultで入っています。

f:id:kazuhironagai77:20210503002332p:plain

以下のような説明がありました。

  • Required:Particle systemを作成するのに絶対必要なParameterを管理するModuleだそうです。気のせいかもしれませんが過去にこのModuleを消して使用した事があったような…
  • Spawn:どのくらいの速度でEmitterからParticleが生成されるのかを管理するModuleだそうです。
  • Lifetime:Particleの寿命を管理するModuleだそうです。
  • Initial Size:Particleが生成された時のサイズを管理するModuleです。
  • Initial Velocity:Particleが生成された時の速度を管理します。
  • Color Over Life:Particleの色の管理を担当します。

やっぱりDocument読んで良かったです。

これだけでもCascadeの全体像をかなり把握出来ました。今まではHow to物のTutorialしか見た事なかったので、理由が分からないまま、単にTutorialをコピーしていました。

もっと速いうちに公式のDocumentを読むべきでした。

ちょっと反省しています。

<<Module Categories>>

それぞれのModule の振る舞いを管理するために同じような振る舞いをするModuleはCategory内でまとめられているそうです。これはNiagaraと同じか似たSystemですね。

Documentに載っていたCategoryの内、幾つかを以下に示します。

f:id:kazuhironagai77:20210503002423p:plain

Cameraなんて、Particleにカメラをつける事が出来るのかと驚いてたら、解説にParticleのカメラに対しての動作を決めるModule達をまとめているCategoryだそうです。

<<Initial vs. Over Life>>

読んで字のごとしでした。

<<Module Time Calculation>>

時間の経過に基づいて変化するModuleは、絶対時間で管理されるタイプと相対時間で管理されるタイプがあるそうです。

<<Emitters, Particle Systems, and Emitter Actors>>

それぞれの名称が何を指しているのかを説明しています。

Emitterは以下のヤツです。

f:id:kazuhironagai77:20210503002505p:plain

沢山のModuleを管理しています。

Particle systemはそのEmitterを編集出来るアセットですね。以下に実際のParticle systemを示しました。

f:id:kazuhironagai77:20210503002521p:plain

f:id:kazuhironagai77:20210503002528p:plain

最後のEmitter Actorsが何を指しているのか今一分かりません。作成したParticle systemを付加するActorの事を指しているのでしょうか?

<Particle Calculation

計算の順番についてです。

以下に示した様に実際のParticle systemではEmitterも一個ではなく沢山あります。

f:id:kazuhironagai77:20210503002559p:plain

この中でEmitterは左から右へ計算し、Moduleは上から下に計算するそうです。

非常に分かり易いです。

<Emitter Types

Emitterにも色々なタイプがあるそうです。先程の例ではMesh Data タイプのEmitterが使用されていました。

f:id:kazuhironagai77:20210503002624p:plain

このタイプのEmitterはParticle の代わりにMeshを放出するそうです。

<Parameters

それぞれのModuleにParameterがあるのに、一体何の話をしているのかと思ったら、BPなどの別な場所とのデータのやり取りをする機能のようです。

細かい内容は実際に使用する時に勉強します。

<Lit Particles

どうやらParticleは光らせる事も出来るみたいです。しかしそれをするためには2つ条件を守らないといけないそうです。

<Levels of Detail (LODs)

なるほど。最初は何でParticle systemにLODが関係しているんだと思いましたが、説明を読んだら納得です。Particle systemは計算コストが非常に高いです。ので遠くにある時は積極的に計算コストを減らすためにLODを活用しましょうと言う事のようです。

この遠くの距離を決定するためのParameterを管理しているのがここのようです。

<Distributions

Particle systemでは、データの塊を独特な方法で取り扱います。その色々な取り扱いのタイプを表すのがDistributionsのようです。

<まとめ>

後半部はいじった事がない部分なので非常に簡単にまとめました。でも全体像はかなり掴めました。

全体像を掴んだ上での感想ですが、これならデザイナーでもある程度地頭が良い人なら使いこなせそうですね。

錬金術師系戦士の出番はないかもしれませんね。残念です。

4.2 Magic Aura Effect - Particle System - [UE4 Tutorial] [10] を利用して魔法陣を作成する。

Magic Aura Effect - Particle System - [UE4 Tutorial] [10]の説明通りに魔法陣を作成します。

Tutorialで使用している魔法陣用のTextureは自分で作成しました。

f:id:kazuhironagai77:20210503002720p:plain

そしたらdownload出来ます。と

f:id:kazuhironagai77:20210503002735p:plain

DesignからMaterialを作成します。

以下の様な実装をします。

f:id:kazuhironagai77:20210503002751p:plain

f:id:kazuhironagai77:20210503002758p:plain

f:id:kazuhironagai77:20210503002805p:plain

Duplicateします。

Blast用に改変します。

f:id:kazuhironagai77:20210503002823p:plain

赤で囲った部分をTexture Sampleに掛けます。

f:id:kazuhironagai77:20210503002837p:plain

するとBlastのリングが回転し始めました。

f:id:kazuhironagai77:20210503002859p:plain

RotatorというNodeを使用するとこういう事が出来るんですね。覚えておきます。

f:id:kazuhironagai77:20210503002917p:plain

See full documentationをクリックすると公式のDocumentのRotator [13]のサイトに飛びました。

f:id:kazuhironagai77:20210503002933p:plain

詳しく勉強するのは後にします。

Particle Systemを作成します。名前はAura_Circleです。

f:id:kazuhironagai77:20210503002950p:plain

あれ、今気が付きましたが名前、魔法陣じゃなかったです。

というか魔法陣の英語名知らないです。

一応、調べておきますか。

何と、Wikipediaの魔法陣のページによると、魔法陣は水木しげる先生の創作らしいです。本当は魔法円と言うらしいです。英語名はMagic circle。そのままですね。

それよりも、何でしょうか?実際の魔術って?

f:id:kazuhironagai77:20210503003014p:plain

やばいページを開いてしまったようです。見なかった事にして先に進みましょう。

Aura_Circleを開きます。

先程、Key Particle Concepts [12]で勉強した内容が表示されています。

f:id:kazuhironagai77:20210503003034p:plain

多少でも仕組みが分かってくるとEditorを見るだけでも楽しいです。

Particle EmitterのModule であるRequiredのMaterialを先程作成したDesign_Matに変更しました。

f:id:kazuhironagai77:20210503003050p:plain

Reviewの発生し上昇しているparticleがDesign_Matに変更しました。

f:id:kazuhironagai77:20210503003104p:plain

このMaterialは動かないのでInitial Velocity Moduleを削除します。

f:id:kazuhironagai77:20210503003121p:plain

以下のようになりました。

f:id:kazuhironagai77:20210503003135p:plain

これって動いていないだけで大量に発生はしているんでしょうね。

Initial Size moduleのDistributionをDistribution Vector Constantに変更してConstantの値を400, 400 400にセットしました。

f:id:kazuhironagai77:20210503003153p:plain

Distributionについて調べてみます。

もうどこを見ればこのModuleについての解説が書かれているか分かっています。

f:id:kazuhironagai77:20210503003211p:plain

Size Modules [14] です。

f:id:kazuhironagai77:20210503003227p:plain

はい。ありました。

f:id:kazuhironagai77:20210503003244p:plain

うーん。これしか説明していませんね。これぐらいなら大体想像していた通りです。

Distributionの意味が知りたいんです。

[UE4] WTF is.. Cascade's Initial size Module [15] で少しだけ説明されていました。

f:id:kazuhironagai77:20210503003300p:plain

f:id:kazuhironagai77:20210503003306p:plain

では、生成されるParticleのサイズは一定です。

f:id:kazuhironagai77:20210503003324p:plain

f:id:kazuhironagai77:20210503003331p:plain

では生成されるParticleのサイズは指定した範囲でバラバラになります。

おお、分かり易い。

と思ったら「Curveは使わないから説明しない。」で終わってしまいました。

f:id:kazuhironagai77:20210503003349p:plain

ここまで来てちょっと思い出してきたんですが、ひょっとすると、このMagic circle、昔作成した事があったかもしれません。

Blogを見返しましたが該当する記事は見つかりませんが。

まあ良いです。このまま続行します。

頼みの綱の「分からない時はカーソルを合わせる。」も役に立ちません。

f:id:kazuhironagai77:20210503003405p:plain

何なんですか?

Distribution Vector Constant Curveの説明がDistribution Vector Constant Curveって。こんなの初めて見ました。

Googleで検索してたら出て来ました。

公式のDocumentのDistributions [16 ]で説明されていました。

f:id:kazuhironagai77:20210503003425p:plain

Distributionsって、先程Key Particle Concepts [12]で勉強した所じゃないですか!

f:id:kazuhironagai77:20210503003445p:plain

Distributionsってこの部分のデータを扱う機能を指していたんですね。やっと分かりました。

因みに、Distribution Vector Constant Curveの機能は、時間によってParticleのサイズを変化させると説明されていました。

f:id:kazuhironagai77:20210503003502p:plain

もう完璧に歯車が噛み合いました。Cascade Particle Systemの骨格が頭に入りました。

先に進みます。

こんどはSpawn moduleのDistributionです。

f:id:kazuhironagai77:20210503003516p:plain

公式のDocumentのDistributions [16 ]によればDistribution Float Constantは一つの値をずっと使用する時に選択するDistributionだそうです。

f:id:kazuhironagai77:20210503003532p:plain

今回は0を選択しましたが、これって最初の一回だけ生成すると言う意味なんでしょうか?それとも全く生成しないと言う事でしょうか?

Spawn moduleのBurstのBurst Listの+をクリックして要素を一個作成します。

f:id:kazuhironagai77:20210503003611p:plain

Countを1にセットします。

そしたらまたDesignのイメージが表示されました。今度は一秒毎ぐらいに点滅しています。

f:id:kazuhironagai77:20210503003627p:plain

Burstって何なんだよ。

…勿論調べます。

f:id:kazuhironagai77:20210503003652p:plain

はい、ありました。公式DocumentのDefault Required and Spawn Modules [17] です。

f:id:kazuhironagai77:20210503003709p:plain

と説明されていました。

と言う事は、Burst ListのCountを1にしたのは、一回のEmitで一個のParticleを放出しろと言う意味だったんですね。

f:id:kazuhironagai77:20210503003726p:plain

しかしこの説明だとSpawnとBurstの違いが分かりません。

そっちをもう少し調べてみます。

分かりませんでした。

全然、検索に引っかかりません。この公式のDocument以上の内容はネット上には存在していないのかもしれませんね。

ただカンですが、SpawnとBurstは時間の管理の仕方が違うのかもしれません。Key Particle Concepts [12]のModule Time Calculationで勉強した絶対時間と相対時間に関係している気がしています。この辺が理解出来た後でここは勉強し直す事にします。

今度はLifetime Moduleです。

Lifetimeを以下の様にセットしました。

f:id:kazuhironagai77:20210503003755p:plain

0にすると永遠に持続するそうです。

Lifetime Moduleについても調べておきます。

f:id:kazuhironagai77:20210503003813p:plain

はい。公式のDocumentも直ぐに見つかりました。Lifetime Modules [18] です。

f:id:kazuhironagai77:20210503003833p:plain

ところで、The initial lifetime of a particleのInitialってどういう事なんでしょう?

A particleを人間に例えるならば、赤ちゃんが生まれた時に持っている寿命って事でしょうか?となると人生の途中で殺されたりする事とかは、ここでは設定されていないって事でしょうか?そしてそれは別なModuleが管理したりしているんでしょうか?

initial一個でとても怖い意味を暗示していますね。

0にすると永遠に持続する事に関しては説明されていませんね。

何かEffectが、ぼやっとするからそれを直しますと言っています。

Required moduleのEmitter Loopsを1にセットしました。

f:id:kazuhironagai77:20210503003848p:plain

Emitter Loopsにカーソルを乗せたらEmitter Loopsの機能について説明されました。

f:id:kazuhironagai77:20210503003903p:plain

更にUse Local Spaceにチェックを入れました。

f:id:kazuhironagai77:20210503003917p:plain

以下の様に説明されています。

f:id:kazuhironagai77:20210503003942p:plain

Use Local Spaceにチェックを入れるとImageのラグなしで移動出来ると説明しています。が、自分で動かした限りでは変わりませんね。

今度は、このParticleを地面に固定します。

Orientation Category のLock Axis Moduleを追加します。

f:id:kazuhironagai77:20210503004001p:plain

Z軸に固定します。

f:id:kazuhironagai77:20210503004016p:plain

View portの映像が以下の様になりました。

f:id:kazuhironagai77:20210503004032p:plain

今度はColor Over Life Moduleです。

f:id:kazuhironagai77:20210503004046p:plain

ここでもConstantを選択しています。Life Time の色を決定するなら変化した方が綺麗だと思います。ので後でこのDistributionは変える事にします。

今度はこのParticleに回転を追加します。

そのためにはRotation Rate CategoryからInitial Rotation Rate Moduleを追加します。

f:id:kazuhironagai77:20210503004102p:plain

Distributionを固定値にセットして値は0.2にしました。

f:id:kazuhironagai77:20210503004119p:plain

Distributionを固定値にセットしましたが今回のケースは納得ですね。魔法陣の回転速度が変化する必要はないでしょうから。

ここまでで魔法陣の作成は終わりです。

この後はこの魔法陣にEffectを追加します。

新たなEmitterを追加しました。

f:id:kazuhironagai77:20210503004136p:plain

Required ModuleのMaterialにBlast_Matをセットしました。

f:id:kazuhironagai77:20210503004152p:plain

大体理解出来たので、こっちは結果だけ記録するようにします。

f:id:kazuhironagai77:20210503004208p:plain

正直これで十分です。

自分で作成した魔法陣のデザインに変更しました。

f:id:kazuhironagai77:20210503004228p:plain

これを追加します。

f:id:kazuhironagai77:20210503004247p:plain

以下の様になりました。

f:id:kazuhironagai77:20210503004304p:plain

結構負担が大きいかもしれません。計算のコストも後で検討します。

5. Landscape4にもっとモンスターを配置する。

どうやって配置するモンスターの数と位置を決定しようかと思っていたのですが、分かりました。まずは静的にモンスターを配置して試します。

Monsterの縄張りを以下の様に決めました。

f:id:kazuhironagai77:20210503004417p:plain

最初の縄張り内にモンスターを配置します。

f:id:kazuhironagai77:20210503004433p:plain

ここは、テレポートしたての冒険者が準備が整う前に殺そうとするモンスター達のたまり場です。

以下のようにモンスターを配置してみました。

f:id:kazuhironagai77:20210503004450p:plain

試しにモンスターを倒してみたら、静的に配置したため、戦闘が終わっても倒したモンスターが復活してもう一回襲って来ました。

やっぱり動的にモンスターを配置する必要があります。

5.1 動的なモンスターの生成方法の復習

Map1のBPを見ると以下の部分でモンスターを動的に生成しています。

f:id:kazuhironagai77:20210503004516p:plain

これみるとかなり簡単そうですね。

5.2 Landscape4内で動的なモンスターを生成する。

Landscape4に生成するモンスターを管理するためのarrayを作成します。

f:id:kazuhironagai77:20210503004539p:plain

静的に配置しているモンスターの中で赤で囲ったモンスターをこのArrayに追加します。

f:id:kazuhironagai77:20210503004557p:plain

f:id:kazuhironagai77:20210503004606p:plain

Landscape4のBPにモンスター発生のためのコードを実装します。

f:id:kazuhironagai77:20210503004623p:plain

Spawned Monster()関数の中身です。

f:id:kazuhironagai77:20210503004640p:plain

Map1のMonster生成の部分では以下の赤い四角で囲った部分が何をやっているのか不明です。

f:id:kazuhironagai77:20210503004655p:plain

多分、必要ないです。のでLandscape4のモンスター作成の実装ではこの部分は削りました。

テストします。

f:id:kazuhironagai77:20210503004711p:plain

またこれが表示されています。

取りあえず無視しておきます。

f:id:kazuhironagai77:20210503004729p:plain

バグを一個見つけました。武器屋で武器を買った後にPause画面から戻るとカーソルが消えています。

これも後で直します。

f:id:kazuhironagai77:20210503004744p:plain

Landscape4にワープします。

普通にモンスターが生成されて直ぐに戦闘になりました。

f:id:kazuhironagai77:20210503004801p:plain

倒した後で、戦闘画面からLandscape4に戻ってもモンスターが消えていません。その部分を直します。

倒したモンスターを消去する関数はRPGGameModeにあるRemove Defeated Monsterです。

f:id:kazuhironagai77:20210503004816p:plain

実装を見てみます。

f:id:kazuhironagai77:20210503004830p:plain

ここが原因ですね。

f:id:kazuhironagai77:20210503004846p:plain

倒したモンスターを消去する時、Map1 用のMonster Spawn Dataしかチェックしていません。

直します。

RPGGameModeのRemove Defeated Monster関数を改良してRemove Defeated Monster from Map1とRemove Defeated Monster from Landscape4を作成しました。

f:id:kazuhironagai77:20210503004906p:plain

テストします。

モンスターを倒した後、Landscape4に戻って来ました。

f:id:kazuhironagai77:20210503004922p:plain

倒したモンスターは消えています。

成功です。

5.3 Landscape4内の他のモンスターも動的に生成する。

Monster Spawn Data_Landscape4に他のモンスターのデータを追加します。

f:id:kazuhironagai77:20210503004946p:plain

f:id:kazuhironagai77:20210503004953p:plain

これで十分なはずです。

テストします。

全部のモンスターを倒してみました。倒した後は消滅しました。

f:id:kazuhironagai77:20210503005015p:plain

モンスター達も適度にばらけて居てずっと戦闘と言うわけでもなく、かといって緊張感がないわけでもありません。

かなりバランスはイイと思います。

残りのモンスターの配置は後で考えます。

6. Landscape4からMap1に戻るためのWarp Gateを作成する。

W_WarpGateウィジェットのワープ先のLevelを決める変数を作成します。

f:id:kazuhironagai77:20210503005052p:plain

f:id:kazuhironagai77:20210503005100p:plain

次にWarpGateKeeperBP内にワープ先のLevel名を保持する変数を作成します。この変数はInstance毎に値が変えられるようにします。

f:id:kazuhironagai77:20210503005117p:plain

更にThirdPersonCharacter内にもワープ先の名前を保持する変数を作成します。

f:id:kazuhironagai77:20210503005133p:plain

WarpGateKeeperBP内でPlayer が操作するキャラがボックス内に侵入した時に、WarpGateKeeperBPのWarp To変数に保持している値を、ThirdPersonCharacterのWarp Gate Nameにパスします。

f:id:kazuhironagai77:20210503005149p:plain

ThirdPersonCharacter内でW_WarpGateウィジェットを作成する時に、Warp Gate Nameの値をW_WarpGateウィジェットWarp Gate Nameにパスします。

f:id:kazuhironagai77:20210503005206p:plain

その結果、ワープする先はWarpGateKeeperBPのそれぞれのInstanceで決めたLevelになるはずです。

f:id:kazuhironagai77:20210503005222p:plain

テストします。

Landscape4に配置したWarpGateKeeperBPです。

f:id:kazuhironagai77:20210503005238p:plain

Warp toの値をMap1に変更します。

f:id:kazuhironagai77:20210503005256p:plain

Landscape4のVillage Nameも考えないといけませんね。

こっちはMap1のWarpGateKeeperBPです。

f:id:kazuhironagai77:20210503005315p:plain

勿論、Map1のWarp toの値はLandscape4にセットします。

f:id:kazuhironagai77:20210503005329p:plain

テストします。

Map1からLandscape4にワープします。

f:id:kazuhironagai77:20210503005347p:plain

出来ました。

f:id:kazuhironagai77:20210503005400p:plain

今度はLandscape4からMap1へワープします。

f:id:kazuhironagai77:20210503005415p:plain

セリフが一緒です。これは後で直します。

Map1に戻って来ました。

f:id:kazuhironagai77:20210503005431p:plain

出来ましたね。

ワープに関しては、今週はここまでにしておきます。

7. 地図のワープ機能とLandscape4をどうやって絡めていくのかを検討する。

ずっと前に作成した地図からワープ出来る機能があります。

f:id:kazuhironagai77:20210503005504p:plain

それとは別に町から外の世界へワープ出来る機能も作成しました。

f:id:kazuhironagai77:20210503005521p:plain

はい。もうアイデアがあります。地図は町から町へワープ出来ますが、一端外の世界へ出たら使用できません。

  • Warp Gate:町から外の世界、外の世界から町
  • 地図:町から町

これで使い分けます。

8. まとめと感想

今週は、以下の事を行いました。

  • Niagaraの勉強の続き
  • Landscape_0 instead mesh…と警告される事の検証
  • Cascade Particle Systemの勉強
  • Warp GateEffect(魔法陣)を追加する
  • Landscape4にもっとモンスターを配置する
  • Landscape4からMap1に戻るためのWarp Gateを作成する
  • 地図のワープ機能とLandscape4をどうやって絡めていくのかを検討する

Niagaracascadeの勉強は楽しかっただけでなくかなり全体像が掴めるようになりました。多分来週も勉強します。Landscape…の警告は消す事が出来ましたがもう少しLODについての勉強が必要な事を知りました。

来週の予定は

  • Niagaracascadeの勉強
  • モンスターをもっと配置する
  • 武器屋のバグの直し
  • ワープゲートのセリフの直し
  • Lightmass Importance Volume…の警告の直し
  • Effectのコストについての勉強
  • 魔法陣の改良

などをやる予定です。

9. 参考文献(Reference

[1] Epic Games. (n.d.-m). Niagara Visual Effects. Unreal Engine Documentation. Retrieved May 2, 2021, from https://docs.unrealengine.com/en-US/RenderingAndGraphics/Niagara/index.html

[2] Epic Games. (n.d.-j). Niagara Overview. Unreal Engine Documentation. Retrieved May 2, 2021, from https://docs.unrealengine.com/en-US/RenderingAndGraphics/Niagara/Overview/index.html

[3] Epic Games. (n.d.-i). Niagara Key Concepts. Unreal Engine Documentation. Retrieved May 2, 2021, from https://docs.unrealengine.com/en-US/RenderingAndGraphics/Niagara/NiagaraKeyConcepts/index.html

[4] Epic Games. (n.d.-k). Niagara Quick Start. Unreal Engine Documentation. Retrieved May 2, 2021, from https://docs.unrealengine.com/en-US/RenderingAndGraphics/Niagara/QuickStart/index.html

[5] CGHOW. (2020, September 1). HLSL in UE4 Niagara & Material Custom node | Unreal Engine Niagara HLSL [Video]. YouTube. https://www.youtube.com/watch?v=SkkZvf3rpwo

[6] Houdini. (2020, November 17). Houdini to Niagara | Overview [Video]. YouTube. https://www.youtube.com/watch?v=jA3uAxT5FhM

[7] Epic Games. (n.d.-e). Events and Event Handlers Overview. Unreal Engine Documentation. Retrieved May 2, 2021, from https://docs.unrealengine.com/en-US/RenderingAndGraphics/Niagara/EventHandlerOverview/index.html

[8] gameDev Outpost. (2020, July 30). UE4 - Introduction To Niagara [Video]. YouTube. https://www.youtube.com/watch?v=VEG-Xp92cBk

[9] Epic Games. (n.d.-g). Landscape Error after build in Lighting Results - UE4 AnswerHub. UE4 ANSWERHUB. Retrieved May 2, 2021, from https://answers.unrealengine.com/questions/343146/landscape-error-after-build-in-lighting-results.html

[10] UnrealCG. (2017, July 19). Magic Aura Effect - Particle System - [UE4 Tutorial] [Video]. YouTube. https://www.youtube.com/watch?v=PEb7ujDkP44&list=PLnfzvYOawOqArAASPfH5rOErJNnLkk7Fw&index=5

[11] Epic Games. (n.d.-a). Cascade Particle Systems. Unreal Engine Documentation. Retrieved May 2, 2021, from https://docs.unrealengine.com/en-US/RenderingAndGraphics/ParticleSystems/index.html

[12] Epic Games. (n.d.-f). Key Particle Concepts. Unreal Engine Documentation. Retrieved May 2, 2021, from https://docs.unrealengine.com/en-US/RenderingAndGraphics/ParticleSystems/Overview/index.html

[13] Epic Games. (n.d.-b). Coordinates Expressions. Unreal Engine Documentation. Retrieved May 2, 2021, from https://docs.unrealengine.com/en-US/RenderingAndGraphics/Materials/ExpressionReference/Coordinates/index.html?utm_source=editor&utm_medium=docs&utm_campaign=rich_tooltips#rotator

[14] Epic Games. (n.d.-j). Size Modules. Unreal Engine Documentation. Retrieved May 2, 2021, from https://docs.unrealengine.com/en-US/RenderingAndGraphics/ParticleSystems/Reference/Modules/Size/index.html

[15] Yoeri -Luos- Vleer. (2016, June 19). [UE4] WTF is.. Cascade’s Initial size Module [Video]. YouTube. https://www.youtube.com/watch?v=4iATVPAWWc0

[16] Epic Games. (n.d.-d). Distributions. Unreal Engine Documentation. Retrieved May 2, 2021, from https://docs.unrealengine.com/en-US/Basics/Distributions/index.html

[17] Epic Games. (n.d.-c). Default Required and Spawn Modules. Unreal Engine Documentation. Retrieved May 2, 2021, from https://docs.unrealengine.com/en-US/RenderingAndGraphics/ParticleSystems/Reference/Modules/Required/index.html

[18] Epic Games. (n.d.-h). Lifetime Modules. Unreal Engine Documentation. Retrieved May 2, 2021, from https://docs.unrealengine.com/en-US/RenderingAndGraphics/ParticleSystems/Reference/Modules/Lifetime/index.html