<前文>
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]のビデオをみたらほこりは透明じゃなかったです。
ので、この問題は解決です。
2.2 足元にEffectが自然に発生するようになっている。その理由が分からない。
普通に考えれば、Notifiesの1にSocketを指定する箇所があってそこで右足底を指定しているはずです。
Notifiesの1じゃなくて、Niagara SystemのFX_FootstepDustPoofにSocket Nameの項目がありました。
でも何も指定されていません。
ひっとして何も指定していないからRootの箇所に発生しているだけなのかもしれません。
試しに、
を作成して
と指定してみたら、
頭からほこりが発生しました。
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>>
まず最初のSystemについての解説で、Emitterを一個ではなく沢山保持出来ると書かれていますね。Niagara Quick Start [4]では一個のEmitterしか保持していませんが沢山のEmitterを保持する必要がある時とはどんな場合なんでしょう。
その直ぐ後で、花火のeffectを作成した時に、いくつかの爆発が欲しかったとすると、それらの爆発の一個、一個をEmitterで作成出来るとありました。
Niagara Quick Start [4]で使用したProject内のNiagara systemを開いてGraph上で右クリックするとAdd Emitterが表示されますが追加出来るEmitterは存在しませんね。
Timelineパネルにも新しく追加したEmitterは表示されるそうです。
やっぱり一回でも実際に使用すると理解が段違いで高まりますね。ここに書かれている事自体は全て理解出来ます。
<<Emitters>>
EmitterはModuleのための入れ物です。と書かれていますが、実際はParticle Spawn、Particle UpdateなどがModuleで、それらのModuleはEmitter UpdateなどのGroupに入っています。
そのGroupを保持しているのがEmitterなのでEmitterはGroupための入れ物というのが正しいです。
後、EmitterはRe-useableと書かれています。
恐らくSystemに更にEmitterを追加する時に前に作成したemitterが追加出来るのでしょう。やり方はまだ分かりませんが。
<<Modules>>
ModuleはCascadeにおけるBehaviorと同じですと書かれていました。
Cascadeもほとんど勉強した事ないのでCascade’s behaviorsの名前は初めて聞きました。覚えておきます。
Moduleには以下の機能があると述べています。
- 共通データとのやり取りが出来る
- 振る舞いのカプセル化
- 別なModuleとStackする
- 関数が書ける
最初の共通データとのやり取りが可能とは、Niagara Quick Start [4]の例で言えば、Material で設定したDynamic Parameterの値を
Module Dynamic Material Parameterで決定する事を指してると思われます。
そう言えばこの設定もどうやって作ったのかうろ覚えです。Niagara Quick Start [4]を復習する時にもっと詳しく見る事にします。
関数を作成する方法や、振る舞いをカプセル化する方法はまだ分かりませんね。別なModuleとStackするのは当然ですね。
当然、Moduleで一番興味があるのはここですね。
一見するとHLSLを使用して作成している事からMaterial の事を指しているように思えますが、どうなんでしょうか?
MaterialではないですがHLSLをBPで組み立ててModuleを自作出来るのならとても興味深いです。しかしそれは先週議論した、錬金術師系戦士、つまり物理現象を数値解析で解くようなProgrammerかつデザイナーであるタイプの人達が必要になってくるのではないでしょうか?
Niagaraにおいて私が最も注目している所です。
うおおお。
やっぱりHLSLをBPで組み立ててModuleを自作出来るみたいです。
更に詳しい部分はDocumentの以下の部分でやるそうです。
流石にこれ全部読む訳には行きませんね。いや読む分には全然問題ないんですが、実体験の伴わない読書は本当の理解は出来ませんので読んでも無駄になってしまいます。
他に情報はないのかと調べて見たら、
HLSL in UE4 Niagara & Material Custom node | Unreal Engine Niagara HLSL [5]でMaterial内でCustom HLSLを使用していました。
この赤い四角で囲った部分がCustom HLSLだそうです。
このCustom HLSLはそのままHLSLが書けるそうです。
うーん。
何か想像したのと違う。まず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なんです。
一応読んでおいた方が良いのかな。
<<Houdini>>
Houdiniって何だよ。って先週はスルーしてしまったんですが、今週は少しだけ調べました。
Houdini to Niagara | Overview [6]に簡単な説明が紹介されていました。
色々な事が紹介されていましたが、その中で重要なのは以下の様なMeshを破壊するアニメーションが作成出来る事ですね。
後は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だそうです。
ただし、
だそうです。
実際の作成は以下の様になるそうです。
うーん。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が入っていますね。
Niagara Quick Start [4]とは違い、Emitterから作成します。
Templateを選択します。
Emptyを選択します。
Emptyと言う事は全部自分で設定するって事でしょうか?
名前を付けます。名前の付け方は「NE_+何でもいい」だそうなので、NE_Introと名付けました。
Groupの事をCategoryと呼んでいますね。このTutorialでは。
最初のGroupであるEmitter SettingのmoduleであるEmitter Propertiesです。
ここで重要なのはScalabilityだそうですが今回は、使用しないそうです。
更にCPUベースかGPUベースで計算するのかもここで決定します。
Events and Event Handlers Overview [7]ではGPUではEventは使用出来ないと言っていましたがここの事でしょうね。
GPUを選択した場合はFixed Boundsをチェックする必要があるそうです。
この辺の細かい、しかし実装するのに重要な説明は、実装する時にかなり役に立ちそうです。理解出来るのなら、このTutorialシリーズはかなり良いかもしれません。
それでは何かをEmit出来るようにします。
何かをEmitするために、一番最初に設定しなければならないGroupは、Renderingだそうです。
ただしSprite Renderer moduleが既に実装されているので今回は何もする必要はないそうです。
次は、EmitterをSpawnする必要があります。
ありますがこのGroupは常に何もする必要がないそうです。
次にEmitter Updateです。
ここで色々やる必要があります。
Spawn Rateを追加します。
Spawn Rateを1にセットします。
一秒間に一回Spawnするという意味だそうです。
実際、今まで何も無かったPreviewに白い丸が現れました。
今度はSpawn Brust Instantaneous moduleを追加します。
このmoduleは幾つのParticleをSpawnするかという事と、そのParticleを何時Spawnするかの2つを決定するためのものだそうです。
ここからSpawn Brust Instantaneous moduleの値の設定方法の説明をするのかと思いきや、突然Emitter Stateについての説明を始めました。
TutorialだとLoop Durationに値を入れるとTime Lineの緑色のバーの長さが入れた値通りに変化するんですが、
私のProjectでは緑色のバーの長さは変わりません。
Loop Delayにチェックを入れたら
緑色のバーの長さが、Loop Durationに値と同じになりました。
しかしTutorialではLoop Delayにチェックは入っていません。
うーん。分かりません。どっかで間違えているんでしょうか?
今度はParticle SpawnとParticle Updateについてです。
この二つもGroupなんでしょうか?
それぞれModuleを保持出来るみたいなのでGroupみたいですが、Emitter Updateとの関係が分かりません。Emitter Updateの下に存在するGroupなのか、それとも全く独立しているのかが不明です。
Particle SpawnのInitial Particle moduleについての解説です。
Lifetimeがありますが、
このInitial Particle moduleのlife timeはEmitter stateのLoop Durationとは違うそうです。
Initial Particle moduleのlife timeはそのParticleがどれくらい生きるかを示します。一方、Emitter stateのLoop DurationはEmitterがどれくらい生きるのかを示すそうです。
このEmitterとParticleの関係性が、今一分かりませんね。
この辺を理解するのは後の課題ですね。
Particle SpawnにAdd Velocityを追加しました。更にParticle UpdateにもAdd Velocityを追加しました。
Particle SpawnにAdd Velocityの値は以下の様にセットしました。
Particle UpdateにもAdd Velocityの値は以下の様にセットしました。
結果、以下の様にParticleがx軸方向に移動するようになりました。
Time lineのUIの操作方法についての解説です。
実は私、Niagaraに限らずTime lineの操作方法があまり分かっておらず、いつも適当にいじって何とかやっていました。いい機会なのでTime lineの操作方法についても勉強してしまいます。
右クリックで全体の移動が出来ます。
右クリックしたまま右に移動させました。
Ctrlボタンを押しながら、Midボタンを回すと
全体のサイズを拡大縮小出来ます。
以上でした。
今度は作成したEmitterをLevel上で使用するためにNiagara systemを作成します。
Niagara systemを選択します。
Empty systemを選択します。
名前は「NS_何か」で決めるのが通常らしいので、NS_Introとします。
開いたら、先週見た謎の奴が有りました。
これが何なのか説明も聞けそうです。
思わず「なにー!」ってつぶやいてしまいました。
Niagara systemに先程作成したEmitterを追加します。
Tutorialの追加の仕方が超カッコイイです。
Emitterのアイコンを掴んでNiagara systemのTime lineに落として追加しました。
この後TutorialではSystem内のEmitterが実際は継承されていてEmitter内のModuleを消したりする事が出来ない事などを説明していますが、今回はその辺の事はスキップします。
Emitterを追加したNiagara systemをLevel内に配置します。
以上です。
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]によると
と書かれています。
先週この情報に基づいてStatic lightingをMoveableに変更したり、Landscapeに使用している草木のMeshにLOD1を追加したりしました。
しかしこの警告は一向に消えませんでした。
今週はもっと簡単な条件を作成してこの警告の原因を解明しようと思います。
以下に示したように最低限のLightしか存在しないmapを作成しました。
LandscapeにはLandscape4に使用しているMaterial InstanceのLandscape4_instを使用しています。
この状態でBuild light onlyをすると以下の警告が出ます。
この中の光に関係するactorでMobilityを変えられるのは、
- Directional light
- Sky light
だけです。
これらのMobilityを
に変えてBuild light onlyにすると
同じ警告が表示されます。
どうやらlightのMobilityを変化させてもこの警告は無くならないようです。
となるとFoliageに使用している草木用のstatic mesh全てを調べる必要がありますね。
Material のLandscape4の
を見ると以下の二つのLandscape Grass Typeが使用されています。
Landscape4_Foliageから見ますと、
4種類の草木用のStatic meshを使用しています。
試しにこの三番の木を外してみます。
3番を無くしたLandscape4_Foliageを作成しました。
このLandscape4_FoliageをGrassのLandscapeに使用します。
全部Compileし直すみたいで時間がかかります。
出来ました。
木が消えています。
Build light onlyをします。
あれ。警告が出て来ません。
ひょっとしてこの木が問題だったんでしょうか?
先程、消した木を戻します。
この機にLOD1を追加すれば良いんでしょうか?
調べたんですが、LOD1が元々備わっていないと追加出来ないみたいです。
あれ?
警告が消えています。
Build light onlyをもう一回して確認します。
警告が出て来ません。
?
調べたら先程の木のLOD SettingsのNumber of LODsの数字が1に変わっていました。
以下に元々の値を示します。Number of LODsの値は2です。
ひょっとして、この数字が2になっていたからこのStatic meshはLODが2個あるはずと勘違いされて警告が発せられていたんでしょうか?
分かりませんが、Landscape4で試してみます。
Landscape4で木の設定を上記と同じにしてbuild light only をします。
凄い時間がかかりました。
以下の警告が表示されましたが前の警告は表示されませんでした。
以下に示したLightmass Importance Volumeを追加すればいいんでしょうか?
まあ。この警告は後で対応します。
Ch4_3 で試してみます。
Foliageに使用している木のLOD SettingsのNumber of LODsの数字を1に変えました。
これでBuild light onlyをします。
以下の結果になりました。
Building 12の警告は昔からありました。
Landscape_0 instead mesh…という警告は完全に無くなりましたね。
これが正しい解決方法なのかは分からないですが、兎に角、警告は消えました。
一応、Ch4_3 のLandscape4でもbuild light only をやってみます。
別なProjectで試した時と全く同じ結果でした。
Landscape_0 instead mesh…という警告を取り除くという目的は、一応は達成出来ました。
しかしNumber of LODsとは何なんでしょうか?
分からない時はカーソルを乗せるです。
と言う事は、LOD1を作成しないように設定した訳ですね。
カメラから、あまり遠くの木を生成する事はないのでこれでも良い気がします。
今回はここまでとして、Lightmass Importance Volumeについての警告は来週解決します。
4. Effect(魔法陣)をWarp Gateに追加する。
以下のActorにEffectで魔法陣を追加しようと思っています。
Ch4_3 は4.24で作成しているのでCascade Particle Systemを使用します。
Magic Aura Effect - Particle System - [UE4 Tutorial] [10] を使用してそのまま作成するつもりでしたが、Niagaraは基礎をしっかり勉強したので一応何をやっているのか理解出来ました。
やっぱりCascade でも一応基礎は勉強すべきかもしれませんね。
先週、見つけた公式のDocumentであるCascade Particle System [11]ですが
こちらのDocumentのうち一つ二つを先に読んでみる事にします。
4.1 Key Particle Conceptsを勉強する
Cascade Particle System [11]の中から全体像を把握するための最適なDocumentを選択するとしたらKey Particle Concepts [12] ですかね。
まずこれを読んでみます。
まあ当然ですがDocumentもちょっと古いです。それはしょうがないですね。
<A Modular Approach to Particle Effects>
CascadeはModule 方式でParticle Systemを作成しているそうです。
Module 方式とは、私が理解した範囲では、一つのModuleが、一つの振る舞いとその振る舞いを決定する最低限のPropertyを担当します。そして必要に応じてModuleを足していく方式の様です。
<<Default Modules>>
ただし以下に示したModuleはDefaultで入っています。
以下のような説明がありました。
- 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の内、幾つかを以下に示します。
Cameraなんて、Particleにカメラをつける事が出来るのかと驚いてたら、解説にParticleのカメラに対しての動作を決めるModule達をまとめているCategoryだそうです。
<<Initial vs. Over Life>>
読んで字のごとしでした。
<<Module Time Calculation>>
時間の経過に基づいて変化するModuleは、絶対時間で管理されるタイプと相対時間で管理されるタイプがあるそうです。
<<Emitters, Particle Systems, and Emitter Actors>>
それぞれの名称が何を指しているのかを説明しています。
Emitterは以下のヤツです。
沢山のModuleを管理しています。
Particle systemはそのEmitterを編集出来るアセットですね。以下に実際のParticle systemを示しました。
最後のEmitter Actorsが何を指しているのか今一分かりません。作成したParticle systemを付加するActorの事を指しているのでしょうか?
<Particle Calculation>
計算の順番についてです。
以下に示した様に実際のParticle systemではEmitterも一個ではなく沢山あります。
この中でEmitterは左から右へ計算し、Moduleは上から下に計算するそうです。
非常に分かり易いです。
<Emitter Types>
Emitterにも色々なタイプがあるそうです。先程の例ではMesh Data タイプのEmitterが使用されていました。
このタイプの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は自分で作成しました。
そしたらdownload出来ます。と
DesignからMaterialを作成します。
以下の様な実装をします。
Duplicateします。
Blast用に改変します。
赤で囲った部分をTexture Sampleに掛けます。
するとBlastのリングが回転し始めました。
RotatorというNodeを使用するとこういう事が出来るんですね。覚えておきます。
See full documentationをクリックすると公式のDocumentのRotator [13]のサイトに飛びました。
詳しく勉強するのは後にします。
Particle Systemを作成します。名前はAura_Circleです。
あれ、今気が付きましたが名前、魔法陣じゃなかったです。
というか魔法陣の英語名知らないです。
一応、調べておきますか。
何と、Wikipediaの魔法陣のページによると、魔法陣は水木しげる先生の創作らしいです。本当は魔法円と言うらしいです。英語名はMagic circle。そのままですね。
それよりも、何でしょうか?実際の魔術って?
やばいページを開いてしまったようです。見なかった事にして先に進みましょう。
Aura_Circleを開きます。
先程、Key Particle Concepts [12]で勉強した内容が表示されています。
多少でも仕組みが分かってくるとEditorを見るだけでも楽しいです。
Particle EmitterのModule であるRequiredのMaterialを先程作成したDesign_Matに変更しました。
Reviewの発生し上昇しているparticleがDesign_Matに変更しました。
このMaterialは動かないのでInitial Velocity Moduleを削除します。
以下のようになりました。
これって動いていないだけで大量に発生はしているんでしょうね。
Initial Size moduleのDistributionをDistribution Vector Constantに変更してConstantの値を400, 400 400にセットしました。
Distributionについて調べてみます。
もうどこを見ればこのModuleについての解説が書かれているか分かっています。
Size Modules [14] です。
はい。ありました。
うーん。これしか説明していませんね。これぐらいなら大体想像していた通りです。
Distributionの意味が知りたいんです。
[UE4] WTF is.. Cascade's Initial size Module [15] で少しだけ説明されていました。
では、生成されるParticleのサイズは一定です。
では生成されるParticleのサイズは指定した範囲でバラバラになります。
おお、分かり易い。
と思ったら「Curveは使わないから説明しない。」で終わってしまいました。
ここまで来てちょっと思い出してきたんですが、ひょっとすると、このMagic circle、昔作成した事があったかもしれません。
Blogを見返しましたが該当する記事は見つかりませんが。
まあ良いです。このまま続行します。
頼みの綱の「分からない時はカーソルを合わせる。」も役に立ちません。
何なんですか?
Distribution Vector Constant Curveの説明がDistribution Vector Constant Curveって。こんなの初めて見ました。
Googleで検索してたら出て来ました。
公式のDocumentのDistributions [16 ]で説明されていました。
Distributionsって、先程Key Particle Concepts [12]で勉強した所じゃないですか!
Distributionsってこの部分のデータを扱う機能を指していたんですね。やっと分かりました。
因みに、Distribution Vector Constant Curveの機能は、時間によってParticleのサイズを変化させると説明されていました。
もう完璧に歯車が噛み合いました。Cascade Particle Systemの骨格が頭に入りました。
先に進みます。
こんどはSpawn moduleのDistributionです。
公式のDocumentのDistributions [16 ]によればDistribution Float Constantは一つの値をずっと使用する時に選択するDistributionだそうです。
今回は0を選択しましたが、これって最初の一回だけ生成すると言う意味なんでしょうか?それとも全く生成しないと言う事でしょうか?
Spawn moduleのBurstのBurst Listの+をクリックして要素を一個作成します。
Countを1にセットします。
そしたらまたDesignのイメージが表示されました。今度は一秒毎ぐらいに点滅しています。
Burstって何なんだよ。
…勿論調べます。
はい、ありました。公式DocumentのDefault Required and Spawn Modules [17] です。
と説明されていました。
と言う事は、Burst ListのCountを1にしたのは、一回のEmitで一個のParticleを放出しろと言う意味だったんですね。
しかしこの説明だとSpawnとBurstの違いが分かりません。
そっちをもう少し調べてみます。
分かりませんでした。
全然、検索に引っかかりません。この公式のDocument以上の内容はネット上には存在していないのかもしれませんね。
ただカンですが、SpawnとBurstは時間の管理の仕方が違うのかもしれません。Key Particle Concepts [12]のModule Time Calculationで勉強した絶対時間と相対時間に関係している気がしています。この辺が理解出来た後でここは勉強し直す事にします。
今度はLifetime Moduleです。
Lifetimeを以下の様にセットしました。
0にすると永遠に持続するそうです。
Lifetime Moduleについても調べておきます。
はい。公式のDocumentも直ぐに見つかりました。Lifetime Modules [18] です。
ところで、The initial lifetime of a particleのInitialってどういう事なんでしょう?
A particleを人間に例えるならば、赤ちゃんが生まれた時に持っている寿命って事でしょうか?となると人生の途中で殺されたりする事とかは、ここでは設定されていないって事でしょうか?そしてそれは別なModuleが管理したりしているんでしょうか?
initial一個でとても怖い意味を暗示していますね。
0にすると永遠に持続する事に関しては説明されていませんね。
何かEffectが、ぼやっとするからそれを直しますと言っています。
Required moduleのEmitter Loopsを1にセットしました。
Emitter Loopsにカーソルを乗せたらEmitter Loopsの機能について説明されました。
更にUse Local Spaceにチェックを入れました。
以下の様に説明されています。
Use Local Spaceにチェックを入れるとImageのラグなしで移動出来ると説明しています。が、自分で動かした限りでは変わりませんね。
今度は、このParticleを地面に固定します。
Orientation Category のLock Axis Moduleを追加します。
Z軸に固定します。
View portの映像が以下の様になりました。
今度はColor Over Life Moduleです。
ここでもConstantを選択しています。Life Time の色を決定するなら変化した方が綺麗だと思います。ので後でこのDistributionは変える事にします。
今度はこのParticleに回転を追加します。
そのためにはRotation Rate CategoryからInitial Rotation Rate Moduleを追加します。
Distributionを固定値にセットして値は0.2にしました。
Distributionを固定値にセットしましたが今回のケースは納得ですね。魔法陣の回転速度が変化する必要はないでしょうから。
ここまでで魔法陣の作成は終わりです。
この後はこの魔法陣にEffectを追加します。
新たなEmitterを追加しました。
Required ModuleのMaterialにBlast_Matをセットしました。
大体理解出来たので、こっちは結果だけ記録するようにします。
正直これで十分です。
自分で作成した魔法陣のデザインに変更しました。
これを追加します。
以下の様になりました。
結構負担が大きいかもしれません。計算のコストも後で検討します。
5. Landscape4にもっとモンスターを配置する。
どうやって配置するモンスターの数と位置を決定しようかと思っていたのですが、分かりました。まずは静的にモンスターを配置して試します。
Monsterの縄張りを以下の様に決めました。
最初の縄張り内にモンスターを配置します。
ここは、テレポートしたての冒険者が準備が整う前に殺そうとするモンスター達のたまり場です。
以下のようにモンスターを配置してみました。
試しにモンスターを倒してみたら、静的に配置したため、戦闘が終わっても倒したモンスターが復活してもう一回襲って来ました。
やっぱり動的にモンスターを配置する必要があります。
5.1 動的なモンスターの生成方法の復習
Map1のBPを見ると以下の部分でモンスターを動的に生成しています。
これみるとかなり簡単そうですね。
5.2 Landscape4内で動的なモンスターを生成する。
Landscape4に生成するモンスターを管理するためのarrayを作成します。
静的に配置しているモンスターの中で赤で囲ったモンスターをこのArrayに追加します。
Landscape4のBPにモンスター発生のためのコードを実装します。
Spawned Monster()関数の中身です。
Map1のMonster生成の部分では以下の赤い四角で囲った部分が何をやっているのか不明です。
多分、必要ないです。のでLandscape4のモンスター作成の実装ではこの部分は削りました。
テストします。
またこれが表示されています。
取りあえず無視しておきます。
バグを一個見つけました。武器屋で武器を買った後にPause画面から戻るとカーソルが消えています。
これも後で直します。
Landscape4にワープします。
普通にモンスターが生成されて直ぐに戦闘になりました。
倒した後で、戦闘画面からLandscape4に戻ってもモンスターが消えていません。その部分を直します。
倒したモンスターを消去する関数はRPGGameModeにあるRemove Defeated Monsterです。
実装を見てみます。
ここが原因ですね。
倒したモンスターを消去する時、Map1 用のMonster Spawn Dataしかチェックしていません。
直します。
RPGGameModeのRemove Defeated Monster関数を改良してRemove Defeated Monster from Map1とRemove Defeated Monster from Landscape4を作成しました。
テストします。
モンスターを倒した後、Landscape4に戻って来ました。
倒したモンスターは消えています。
成功です。
5.3 Landscape4内の他のモンスターも動的に生成する。
Monster Spawn Data_Landscape4に他のモンスターのデータを追加します。
これで十分なはずです。
テストします。
全部のモンスターを倒してみました。倒した後は消滅しました。
モンスター達も適度にばらけて居てずっと戦闘と言うわけでもなく、かといって緊張感がないわけでもありません。
かなりバランスはイイと思います。
残りのモンスターの配置は後で考えます。
6. Landscape4からMap1に戻るためのWarp Gateを作成する。
W_WarpGateウィジェットのワープ先のLevelを決める変数を作成します。
次にWarpGateKeeperBP内にワープ先のLevel名を保持する変数を作成します。この変数はInstance毎に値が変えられるようにします。
更にThirdPersonCharacter内にもワープ先の名前を保持する変数を作成します。
WarpGateKeeperBP内でPlayer が操作するキャラがボックス内に侵入した時に、WarpGateKeeperBPのWarp To変数に保持している値を、ThirdPersonCharacterのWarp Gate Nameにパスします。
ThirdPersonCharacter内でW_WarpGateウィジェットを作成する時に、Warp Gate Nameの値をW_WarpGateウィジェットのWarp Gate Nameにパスします。
その結果、ワープする先はWarpGateKeeperBPのそれぞれのInstanceで決めたLevelになるはずです。
テストします。
Landscape4に配置したWarpGateKeeperBPです。
Warp toの値をMap1に変更します。
Landscape4のVillage Nameも考えないといけませんね。
こっちはMap1のWarpGateKeeperBPです。
勿論、Map1のWarp toの値はLandscape4にセットします。
テストします。
Map1からLandscape4にワープします。
出来ました。
今度はLandscape4からMap1へワープします。
セリフが一緒です。これは後で直します。
Map1に戻って来ました。
出来ましたね。
ワープに関しては、今週はここまでにしておきます。
7. 地図のワープ機能とLandscape4をどうやって絡めていくのかを検討する。
ずっと前に作成した地図からワープ出来る機能があります。
それとは別に町から外の世界へワープ出来る機能も作成しました。
はい。もうアイデアがあります。地図は町から町へワープ出来ますが、一端外の世界へ出たら使用できません。
- Warp Gate:町から外の世界、外の世界から町
- 地図:町から町
これで使い分けます。
8. まとめと感想
今週は、以下の事を行いました。
- Niagaraの勉強の続き
- Landscape_0 instead mesh…と警告される事の検証
- Cascade Particle Systemの勉強
- Warp GateにEffect(魔法陣)を追加する
- Landscape4にもっとモンスターを配置する
- Landscape4からMap1に戻るためのWarp Gateを作成する
- 地図のワープ機能とLandscape4をどうやって絡めていくのかを検討する
Niagaraとcascadeの勉強は楽しかっただけでなくかなり全体像が掴めるようになりました。多分来週も勉強します。Landscape…の警告は消す事が出来ましたがもう少しLODについての勉強が必要な事を知りました。
来週の予定は
- Niagaraとcascadeの勉強
- モンスターをもっと配置する
- 武器屋のバグの直し
- ワープゲートのセリフの直し
- 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