UE4の勉強記録

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

UE5の勉強 -LandscapeのみのGameを作成する-

1. 今週の予定

今週もいつも通り以下の作業を行っていきます。

<LandscapeのみのGameを作成する>

今週は岩とか草とか木とかをFoliageで配置します。

Landscapeの境界線が消えないのは凄いストレスですが、まだ直し方が分からないのでそのままにして次をやります。

<Materialの勉強>

Ben Cloward先生のAdvanced MaterialのTutorialをやります。

Niagaraの勉強>

CGHOW氏のTutorialをやります。

<戦闘システムの続きを作成する>

Start Menuの作成をします。

<Gaeaの勉強>

Colorについてまとめ直します。

そして全体のまとめを行います。

<Houdiniの勉強>

Castle Wall Tool [1]の勉強をします。

<UEFNの勉強>

2023-04-10のBlogの勉強の続きをやります。

YouTube動画の作成>

Mind Map Appを使用して話す内容を整理します。

DirectXの勉強>

 C++ DirectX 12 Game Engine - [S01E03] - Creating A Game Engine [2]のFinishing Touchesを実装します。

2. LandscapeのみのGameを作成する

2.1 先週の復習

もう本当にすがすがしいくらい先週の勉強の内容を忘れています。

まず先週、何を勉強したのかを復習します。

復習しました。

先週はLayerのMaterialを変更しました。

更に、Landscape Visibility Maskノードを使用して洞窟を作成しました。

2.2 木をFoliageを使用して配置する

今週は木を配置します。前のLandscapeでどうやって木を配置したのかを確認します。

2023-03-06のBlogにどうやって木をFoliageとしてLandscapeに配置したのかがか書いてあります。

これを参考にして木を配置してみます。

取りあえず一本だけ木を配置してみました。

当然、Naniteにしています。

Shader Complexityです。

うーん。

やっぱりかなり重いんですね。

Collisionも調べます。

普通に衝突しますね。

出たし木の形状とはかなりかけ離れた箇所に衝突しています。

この木のStatic Meshを開いてCollisionの形状を確認します。

Simple Collisionです。

成程、木の形状とはかなり違いますね。

Complex Collisionです。

こっちはかなり木の形状に正確です。

ただかなり計算Costは増えそうです。

うーん。

Simple Collisionで良いです。

ではFoliageを使用してこの木を配置してみます。

Foliageの設定です。

Radiusは使用した事がないですが、多分単位はcmでしょう。最低5mは開けたいので500にしました。

Scalingです。

0.5倍から1倍にしました。

UniformなんでXYZで同じ値になるはずです。

Z Offsetです。

-50から-20 cmの間で指定しました。

2023-03-06のBlogにOffsetの値を0のままにしておくと

地面から木の根元が浮いてしまう。と書いていました。

のでこの値にしました。

木は常に上に向かって生えるのでAlign To Normalは外します。

Inclusion Landscape LayersにBeachを指定しました。

今のBeachはCliffのMaterialが使用されていて、木が生えるのに適切なLayerになっています。

Cull Distanceです。

Shader Complexityを見ると木はかなり負担を強いているようなので10m以上離れた場合は消えるように指定しました。

これは後で変更するかもしれません。

Collision PresetはBlock Allを指定しました。

これでCharacterは木と衝突するはずです。

Paintします。

うーん。

出来ない。

調べたらLayerの名前はBeachじゃなくてSandでした。

直しました。

Paintします。

影だけ生成されています。

近づきます。

なんだこれ?

木がピンボケしています。

色々試したんですがピンボケは直りません。

多分、このAssetがまだUE5.2に対応していないからでしょう。

UE5.1で試してみます。

うーん。

でもUE5.1だとWater SystemのRiverが製品化した時に表示出来ない問題があったんです。

うーん。

木の種類を変えたせいか、一端Projectを再起動させたせいか、分かりませんがピンボケしなくなりました。

Play中の画面です。

明るすぎます。

が気に関してはこれで十分です。

島中に植林してみました。

本当に島中に木が生えているのか確認するために島を一周してみました。

先週作成した洞窟の入り口が目印になりました。

まず、ピンボケした木は一本も無かったです。

ただし曲がって生えている木が結構ありました。

何で曲がって生えているんでしょうか?

後、以下に示した様にLandscapeはかなり凸凹でした。

LandscapeのSmoothを使用して凸凹を直す必要があります。

Cullingを使用して遠くの木が消えるようにしましたが、

どれだけ計算Costを下げる役に立っているのか不明です。

Shader Complexityは低くなっています。

Landscapeの境界は以下に示した様にくっきり分かれています。

しかしこの境界を跨ぐ特に、FPSが急激に落ちる事はなかったです。

島全体に植えた木の数が430しかないので、まだ問題になる数では無いのかもしれません。

離れ小島は相変わらず以下の様に平になっています。

Landscapeを使用して無理やり高低差を作成しようとしましたが、Landscapeは全く変化しませんでした。

Unreal Engine 5 Create Ocean Islands for 3D Game Environments [3]に

LayerをWaterの上に持ってくれば、Water Body Islandで作成した島もLandscapeで加工する事が出来ると言っていました。

試しにLayerをWaterの上に持ってきたら

島そのものが消えてしまいました。

このTutorial通りにやるにしてももう少し勉強が必要です。

木が曲がって生えている理由が分かりました。

埋まっています。

木を消して、海岸の凸凹を直します。

ここまで海岸の凹凸を直しました。

印にSphereを置いておきます。

2.3 Unreal Engine 5: Water System in UE5 Tutorial [4]で再確認をする

Water LayerとLandscapeの関係やWater Body Islandを使用した場合、Landscapeの高低差が消えてしまう件についてKlaus氏がそのTutorialで何も説明していないのはオカシイです。

これは私が聞き逃している可能性が大です。

もう一回、Klaus氏のWater SystemのTutorialであるUnreal Engine 5: Water System in UE5 Tutorial [4]を確認する必要が有ります。

確認しました。

Water Layerが上に位置していて

Islandは平なままでした。

うーん。

物は試しです。

Layerの順番を逆にしてみます。

しました。

結果です。

水が盛り上がっています。

現在のWater Body OcceanのLocationは以下の様になっています。

すこしだけZの値を下げてみます。

結果です。

ギザギザ感は無くなりません。

海岸線を見ていきます。

洞窟の入り口が空中に浮いてしまっています。

肝心の島ですが海に沈んだままです。

Locationの値をいじってみます。

何をやっても島が出て来る事はありませんでした。

元に戻しました。

洞窟の入り口です。

開けた穴と一致しています。

海岸線もなだらかになっています。

島です。

平なままです。

2.4 海岸線の凸凹を直す

今週はこれをやる事にします。

海岸線を一周しました。

こういう作業のやり方を理解しました。

YouTubeのRadio形式で聞いているだけで理解出来るやつを選んでそれを聞きながら作業すればいいんです。

一時間以上単調な作業を繰り返しましたが、全く苦になりませんでした。

ここからが問題です。

まずSaveをしました。

Saveをした事でLandscapeが変化したとかはなさそうです

GameをPlayして実際に凹凸が直っているのか確認します。

Sea LayerとSand Layerの境界を実際にPlayerに走らせて凸凹がどうなっているのかを確認します。

早速、直ってない箇所を見つけました。

直します。

直しました。

そうだ良い事を思いつきました。

この海岸線の凸凹の直しているさまを録画してYouTubeのBackgroundに使用しましょう。

終わりました。

かなり直す場所がありました。

一時間20分の録画になりました。

問題が一個あってLandscapeを直しながら聞いていたYouTubeの音声が一緒に入っています。

まあ、消す方法は幾らでもあるでしょう。

2.5 もう一度木をFoliageを使用して植える

これでLandscapeの高さが一定になったはずなので、木を植えたら地面にもぐったり、変化角度で生えたりする事が無くなるはずです。

試します。

取りあえず数本植えてみました。

ピンボケになる事もないです。

それぞれの木を見てみました。

遠くから見ると曲がって生えている気がしますが、それは元々この木が曲がっていたからでした。

全部真っすぐ伸びていました。

後、砂に埋まってしまう事もなかったです。

今度は大丈夫でしょう。

568本の木を植えました。

こんな感じです。

Naniteです。

Complex Shaderです。

やっぱり木はShader的には重いです。

前に穴を開けた場所です。

うーん。木が追加されたのでリアルさが増しました。

Packagingも試してみます。

普通に木が生えています。

VRAMが既に限界に達していますが、GPUの使用率は23%です。

RTX3060のVRAMが12GBの方を買った方がお得だった気がして来ました。

Sea layerとSand Layerの繋ぎもSmoothになりました。

唯一の心配はGPUの使用率が1%なのに温度が70度を超えている事です。

何で?

何とPackagingしたExe.Fileを閉じたらUE5のEditorの方がCrashしました。

うーん。

重すぎるのかもしれません。

後、Foliageの木の設定の以下の部分を直します。

2.6 Water System OcceanにFoamを追加する

NumenBrothers氏のLet's Build the RPG! - 55 – Unreal Engine 5 Water Ocean and Island Tutorial [5]にWater System OcceanにFoamを追加する方法が説明されていそうです。

ここです。

もうこのTutorialを勉強する時間はありません。

この部分だけ見て来週勉強する事にします。

凄い!

Foamが何もない状態から以下のような泡を追加しています。

このやり方はそのまま勉強させてもらいます。

来週やります。

3. Materialの勉強

今週はBen Cloward先生のAdvanced Materialを勉強します。

3.1 Brushed Metal Shader - Advanced Materials - Episode 11 [6]を勉強する

まず軽く全部見ます。

以下に示した様に金属の表面を金たわし何かで擦ると

細い傷が同じ方向に大量に出来ます。

その結果、特殊なSpecular Lightが生成されます。

普通のSpecular Lightは丸い円形に光りますが、この場合は細長い長方形に光ります。

これをAnisotropicと呼びます。

Anisotropicの意味はNot Uniformつまり、Strech Outされているだそうです。

Anisotropicの別な例だそうです。

なんだこれ?

と思ったらChristmasの飾りだそうです。

これはSpecular LightがStrechされていますが、Ring状です。これでもAnisotropicと言うんでしょうか?

今度の例はフライパンの底だそうです。

そういえばフライパンの底ってこんな感じでした。

ここでも円の中心に伸びているようなSpecular Lightが形成されています。

最後の例として以下に示した夕日だそうです。

確かにこれをSpecular Lightが伸ばされています。

海の表面の波が金属の表面の傷と同じ働きをしているんでしょうか。

今週は、この作成方法を学習します。

で、今週は残念な事にUnityで解説しています。

Unityの部分はSkipしてUnrealの説明だけ見る事にします。

まず以下の実装を作成します。

結果から見ます。

いやナニコレ?

もう出来ています。

ここで使用しているTextureは

ここからDownload出来るみたいですし。

一応説明を聞いてみます。

Unreal EngineのMaterialはAnisotropyが最初から用意されているので

ここに値をPassするだけで

Anisotropyが作成出来るそうです。

うーん。

簡単!

でもこれ知らなかったです。

因みにAnisotropyの値を0にすると以下の様にAnisotropyが無くなるそうです。

これがTextureのImageだそうです。

以下の実装で

実際にSpecular Lightが引き延ばされているのを示しています。

Anisotropyの値を0.8に変更しました。

先程のChristmasの装飾品のようなAnisotropicが形成されました。

これってひょっとしてAnisotropicの値がPositiveだと丸いStrechになってNegativeだと長方形のStrechになるんでしょうか?

今度はAnisotropicの値を-0.8にしました。

やっぱり今度はSpecular Lightが長方形に伸びています。

最後にMain NodeのTangentの使用方法を説明するそうです。

Tangentは表面がFollowingする方向を示すそうです。

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

うーん。

値のRangeはNormalと同じみたいですね。

結果です。

成程。

Anisotropicを生成するための傷の形状を指定しています。

当然Roughnessの値と一致しないので

Roughnessの値を外します。

結果です。

これTangentとRoughnessに共通するMapがあったらもっと綺麗な結果になりますね。

AnisotropyとTangentはMainノードの要素ですが今まで使用方法を知りませんでした。

そう言う訳で今回のTutorialはとても勉強になりました。

3.2 Brushed Metal Shader - Advanced Materials - Episode 11 [6]を実装する

それでは実査に実装してみます。

まずTextureをDownloadします。

あれ?

これはTextureは自分で作成する必要がありそうです。

作りました。

流石にTangentに使用出来そうなTextureは見つかりません。

これで代用してみます。

以下の実装を作成しました。

結果です。

おお。Anisotropicが出ています。

AnisotropyをOffにしました。

結果です。

うーん。

普通にAnisotropic有ります。

Anisotropyに-0.8を追加しました。

結果です。

あ、Specular Lightが細長くなりました。

今度はAnisotropicの値をPositiveにしてみます。

まずPreviewのModelをSphereに変更します。

こんな結果です。

AnisotropicによってSpecular Lightが伸びています。

今度はAnisotropyの値をPositiveにします。

結果です。

Specular Lightが円状に伸ばされています。

今度はTangentを試して見ます。

Tangent用のTextureが無いのでNormal用のTextureを試しに使用してみます。

RoughnessはConstantに変更しました。

結果です。

おお。

Anisotropicが出ています。

3.3 Substance Designerを一寸だけ見てみる

Tangentに使用出来そうなTextureをNetで探していたらSubstance Designerを使用して作成したみたいな話がありました。

そもそもSubstance Designerって何を作成するのかよく知りません。

一寸だけここで勉強する事にします。

買いませんが。

Substance 3D Designer First Steps: 01 - Overview & Basics [7]を見ます。

ここで知りたいのが、Normal MapとかRoughness用のTextureをどうやって生成しているのかとかです。

ここでは以下のImageをNodeを組み合わせて作成していました。

Nodeの組み合わせ方が大体理解しました。

このImageを作成出来る事とNormal MapやRoughness用のTextureの作成が出来る事と今一結びつきません。

次のTutorialを見ます。

Substance 3D Designer First Steps: 02 - Core Techniques [8]を見ます。

ここでは以下のImageをNodeの組み合わせのみを用いて作成していました。

これは毛筆で書いたようなEffectを作成する時のMaterialとして使用出来そうです。

これは布の質感を出すためのTextureとして使用出来そうです。

うーん。

凄い!

完成したTextureを使用して以下に示した靴に使用するMaterialを作成したようです。

Substance Designerが何をしているのか大体、理解しました。

かなり興味が出て来ました。

勉強したくなって来ました。

はい。

Adobeはいつもこれ。

定期的な収入を確立していないStart Upしたての会社や個人にとっては年$600の出費は途轍もなく大きいです。

このSoftしか使用しない場合は、まあ可能かもしれません。

しかし数あるSoftの内の一つで、最高に使用したとしても一週間に一回が限界な場合、こんなお金は払えません。

はっきり言って無理です。

自分たちだけ成功していれば、Userが成功しようが失敗しようがどうでもいい。

UEとは大違いです。

UEはUserが成功しないと自分たちも成功しないBusiness Modelです。

つまりUserがお金を稼げるようになったらその収入からお金を払ってもらいます。

逆に言うとUserが成功しやすいようにお金がないUserからはお金を取る事はしません。

AdobeはUserがどうなってもどうでも良いので、こういうBusiness Modelをずっと続けている訳です。

もうSubstance Designerに興味が無くなりました。

今週のMaterialの勉強は以上です。

4.Niagaraの勉強

今週は何を勉強するのか決めていません。CGHOW氏のTutorialどれかを勉強します。

4.1 Decal Renderer in Unreal Engine 5.2 Niagara Tutorial [9]を勉強する

どれでも良いんですが、以下のTutorialがDecal Renderについて解説しています。

Decal自体ほとんど勉強した事がないので、ちょうどいい機会です。

軽く全部見ます。

見ました。

特に特殊なMeshやTextureを使用してもいないです。

Decal Renderer Moduleはまだ作成途中って感じで他のRendererでは当たり前に使用出来る機能が使用出来なかったりしていました。

それをどうやって使用出来るようにしたのかがこのTutorialの肝でもあるんですが、まあ後のVersionになったらその機能使用出来るようになりそうです。

以下にTutorialの手順をまとめます。

<Intro>

特にないです。

<Decal Renderer>

このTutorialでは最初からLevelにRockが配置されていました。

Niagara Systemを作成します。名前はNS_Decalです。

当然Fountain Templateを追加して作成しました。

要らないModuleを消します。

これはいつもやっているやつです。

ここからParticleを一個だけ生成して、それが永続するための実装をします。

Emitter Update SectionにあるSpawn Rate Moduleを消して、Spawn Burst Instantaneous Moduleを追加します。

当然、Spawn Countは1です。

Emitter Update SectionにあるEmitter State Moduleを選択し

Loop BehaviorをOnceにします。

Particle Update SectionにあるParticle State Moduleの

Kill Particles When Lifetime…のCheckを外します。

以下の様に一個のParticleが永遠に表示されるようになりました。

これもいつもCGHOW氏のTutorialで勉強する人には目をつぶっても出来る位の内容ですが、結構初めてCGHOW氏のTutorialを勉強する人には難しかったりします。

EmitterのProperties Moduleを選択して

Local SpaceにCheckを入れます。

このTutorialでは作成したNiagara Systemを実際にLevel上に配置して確認するので、Local Spaceの方がやりやすいです。

結果です。

一個のSpriteが生成されるとずっとそこに残っています。

ここでRender SectionにあるSprite Moduleを消してDecal Renderer Moduleを追加します。

<Decal Material>

今度はこのEffectで使用するDecal Materialを作成します。

まずMaterialを通常通りに作成します。名前はM_decalとしています。

正直、Decalはほとんど作成した事無いです。

これがほとんど初めての勉強になります。

Decalの場合は、Particle Colorノードの代わりにDecal Colorノードを使用しないといけないそうです。

MainノードのMaterial DomainにDeferred Decalをセットし、Blend ModeにTranslucentをセットします。

更にMain NodeのEmissive ColorとOpacityに以下の実装を追加します。

PreviewのImageです。

なんかSpriteと同じじゃないかと思ったら、Level上に配置したら以下の様になっていました。

ほー。

確かにDecalになっています。

はい。ここでNiagara Systemに戻ります。

Render SectionのDecal Renderer Moduleの

Materialに先程作成したMaterialであるm_decalをセットします。

結果です。

Previewの結果ですが何も表示されていません。

Level上でも確認しますが、

Level上でも何も生成されていません。

その理由ですが、Render SectionにあるDecal Renderer Moduleの

BindingsにあるDecal Size Bindingに[PARTILCE]Decal Sizeがセットされていて

Decalの大きさが、

Particle Spawn SectionにあるInitialize Particle Moduleの

ParticleのSizeに影響されないんです。

ここは言っている内容は理解出来ますが、ParticleのサイズがSpriteのサイズに影響されないのは当たり前で、

正確に言うと、Initialize Particle Module にはDecalのサイズを決定するAttributeがまだ作成されていない。だと思います。

で、DecalのSizeを調節するために、

Particle Spawn SectionにSet Parameter Moduleを追加します。

そしてSet Parameter Moduleを選択したら、[PARTICLES] Decal Sizeをセットします。

[PARTICLES] Decal SizeにFloatをセットして値を500にしました。

因みに[PARTICLES] Decal Sizeをセットした時点で、Set Parameter Moduleの名前はSet:[PARTILCES]Decal Sizeに変更されています。

結果です。

Niagara SystemからDecalが見えるようになりました。

今度はDecalの色を変更します。

Decal Colorノードを使用しているので、以下の方法で色を変更出来るそうです。

Particle Spawn SectionにあるInitialize Particle Moduleを選択します。

Colorをセットします。

結果です。

赤くなっています。

これはSpriteやRibbonなら普通のやり方です。

これの意味する事は、Decal Renderer Moduleが未完成だという事でしょう。

<Dynamic Parameter>

ここで他のRenderer Moduleには有るけどDecal Renderer Moduleにはない機能について解説しています。

それはDynamic Parameterの機能だそうです。

以下の様にMaterial内でDynamic Parameterノードを使用すると

本来ならNiagara SystemからDynamic Parameterの値を指定出来ます。

しかし以下に示しますが、Decal Renderer Moduleを使用した場合は出来ません。

まずNiagara Systemに戻ります。

EmitterのParticle Update SectionにDynamic Material Parameters Moduleを追加します。

するとDynamic Material Parameters ModuleのAttributeに、以下に示したように、先程Material内でDynamic Parameterノードで指定したRadiusが表示されています。

しかしこの値をTweakしてもDecalの形状は全く変化しません。

以下にその理由をまとめます。

まずSprite Renderer Moduleの

AttributeのBindingを見ると

以下のようにDynamic Material Bindingに[PARTILCES]Dynamic Material Parameterがセットされています。

これがあるお陰でDynamic Material Parameter Moduleの値がRendererにパスされます。

ところがDecal Rendererの場合は、以下のParameterしかBindしていません。

のでいくらDynamic Material Parameter Moduleで値をTweakしても何の影響も出ない訳です。

Dynamic ParameterをMaterialとNiagara Systemの両方から外して、以下の方法で対応します。

単なるParameterを使用します。

そしてNiagara SystemのDecal Renderer Moduleにある

Material ParametersのScalar Parametersに先程作成したRadius(s)を追加します。

これでMaterialのRadiusの値をNSから指定する事が出来ます。

Radiusの値を0.2に変更しました。

Decalの円のサイズが小さくなりました。

<Attribute Binding>

別なやり方として以下の方法が紹介されていました。

今度はDecal Renderer ModuleのAttribute BindingsにRadius(s)を追加します。

ここでNiagara Valueに新しく作成したParameterをセットします。

このParameterの値を変更する事でMaterialのRadius(s)の値を変更する事が出来ます。

正しここのセット出来るParameterはName Spaceが[EMITTER]だけだそうです。[PARTICLE]はセットする事が出来ません。

のでEmitter Update Sectionで

Name Spaceが[EMITTER]のParameterを作成します。

値は0.5にします。

そして[EMITTER]Radiusを先程のNiagara Valueにセットします。

[EMITTER]Radiusの値を変更する事でLevel上のDecalのサイズが変化しました。

更に以下の様に実装する事でDecalのサイズを時間によって変化させる事も可能です。

このやり方には問題があります。

それはParticle毎にサイズを変える事が出来ない事です。

EmitterでSizeを指定しているのでそれぞれのParticleでサイズを変える事は出来ません。

例えば以下の条件に変更したとします。

Emitter Update SectionにあるSpawn Burst Instantaneous Moduleの

Spawn Countの値を10に変更して

Particle Spawn SectionにあるShape Location ModuleをEnableし

Shape Primitiveの値をBox/Planeに変更し

Box Sizeを400にします。

Emitter Update SectionにあるSet Parameter Moduleの

[EMITTER]radiusの値を0.2に変更します。

結果です。

はい。全部のDecalのSizeが同じになっています。

当然ですが、Emitter Update SectionにあるSet Parameter Moduleの[EMITTER]radiusの値を以下の様に変更しても

それぞれのParticleの大きさが変化する事はありません。

これは当たり前すぎてなんでCGHOW氏がここで敢えて説明するのか不明です。

Emitter Update Sectionが何をしているのか理解していない人がCGHOW氏のTutorialを見ても何も理解出来ないと思います。

<Randomization>

でCGHOW氏が考える最良の解決策を以下に示します。

まずMaterialに戻り、Emissive Colorに接続していたDecal ColorのRGBを外します。

そして代わりにConstantのColorをEmissive Colorに使用します。

これでDecal ColorのRGBの値を別な事に使用出来るようになりました。

例えば以下の様に組む事でDecal ColorのRの値をRadial Gradient ExponentialノードのRadius(s)の値に変更する事が出来ます。

Particle Update SectionにScale Color Moduleを追加して

Attributeの値を以下の様に変更する事で

Particleの色ではなくサイズを変更する事が可能になります。

結果です。

うーん。

こんな手間は正直いらない。

こういうHacking的な手法によってEffectを完成させたとしても製品化した時に予期しないBugが発生したりしないか心配です。

UE5のVersionが上がってDecal Rendererが普通に使用出来るようになるまで待つ方が得策だと思います。

<Animating>

Materialの実装を以下の様に変更します。

ぱっと見、ほとんど別のMaterialの実装です。

Niagara Systemに戻ります。

Emitter Update SectionにあるSet Parameter Moduleを消します。

もう使用していませんから消しても問題ないですね。

Particle Update SectionにあるScale Color Moduleの値を

以下の様に変更しました。

このModule自体がもういらない気がしますがどうなんでしょうか?

次にParticle Spawn SectionにあるInitialize Particle Moduleの

Colorの設定を以下の様にします。

ここでAlpha値について解説しています。

Alpha値が1の時は、以下の様に完全に消えます。

Alpha値が0の時は、以下に示した様に全部現れます。

これもMaterialの実装から考えればその通りです。

Alphaの値を以下の様に変更しました。

これでDecalが時間によって消えたり現れたりするはずです。

なりませんでした。

Emitter Update SectionにあるEmitter State Moduleの

設定を以下の様に変更します。

Emitter Update SectionにあるSpawn Burst Instantaneous Moduleを消してSpawn Rate Moduleを追加します。

値は5にします。

Particle Update SectionにあるParticle State Moduleを選択し

Kill Particles When Lifetime…をEnableします。

結果です。

うーん。

これ絶対に2つの全く違うEffectの作り方を繋げて無理やり一つのTutorialにしています。

前半部分とこの後半のEffectの実装になんの論理的なつながりもないです。

第一このEffectを作成するのが目的なら、それぞれのDecalのSizeを変更する必要はまったくありません。

ただこのEffect自体は綺麗です。

今度はこのDecalを回転させます。

まずRender SectionにあるDecal Renderer Moduleを選択して

Bindingを確認します。

Decal Orientation Bindingには[PARTICLE]Decal Orientationがセットされています。

ので

Particle Spawn SectionにあるSet Parameter Moduleで

[PARTICLE]Decal Orientationをセットします。

これでDecalを回転させることが出来ます。

別解としては

Particle Spawn SectionにInitial Decal Orientation Moduleをセットして

Rotationの値を以下の様に変更します。

結果です。

うーん。

あんまり差が無い気がします。

今度は色を青に変更します。

Particle Spawn SectionにあるInitialize Particle Moduleを選択して

Colorの値を変更します。

結果です。

こんなの要らんでしょう。

なんで青に変える必要があるのかの意味も分からんし、青に変えるための方法も初心者以外なら自明のやり方です。

よくみるとこのTextureは垂直方向に引っ張られて貼られています。

このImageからはあまり分かりませんがVirtual Textureを張り付けた時を思い出せば、当然そうなってるはずです。

この直し方をここで説明するそうです。

えー。マジですか?

こっちは滅茶苦茶価値がある内容です。

このへんがCGHOW氏のTutorialがよく分からない所で、突然初心者以外自明な内容を細かく説明したと思ったら、上級者でも直し方の分からない箇所を直す方法を説明したりします。

まずMaterialを開きます。

NoiseのUVsに以下の実装を追加します。

Absノードの前が切れていますが以下の様になっています。

でこの実装の理屈については全く説明が無かったです。

結果です。

直ってないです。

Tilingのサイズを変えてCubeで確認しています。

うーん。

Cubeでは綺麗に表示されています。

という事はこの実装でTextureは垂直方向に引っ張られるBugを直せるという事です。

この実装は後で検証します。

今度はParticle Spawn SectionにあるSet Parameter Moduleを使用して

それぞれのDecalの大きさを調整します。

以下の様に設定を変更しました。

最初からここでDecalの大きさを調整しておけば、あんなに面倒な方法を開発する必要はなかったのに、と一寸思いました。

まあ勉強にはなりましたが。

さらにVelocity Moduleを追加しました。

Velocity Moduleの設定です。

結果です。

動きが追加されました。

ここからは単なる微調整です。

Materialに以下の実装を追加しました。

ごっちゃになっていて何を実装したのか不明です。

結果です。

この後も微調整しているのなら、手順をここにまとめる必要はないので、最後まで見て確認します。

この後は色んなTextureを使用してDecalの模様の変化を確認しているだけでした。

のでこれで終わりにします。

5.戦闘システムの続きを作成する

またここで病院に行く用事が出来てしまって、今週は戦闘システムの続きは一寸しか出来ません。

5.1 先週の復習

先週は去年のMain Menuの作成の反省をしていました。

そんだけです。

5.2 Start Menuの作成

今週はStart 画面を作成します。

取りあえずStart Button だけあるStart Menuを作成します。

依然、以下のStart Menu画面を作成しましたが、

Design的に気に入らないので、これは使用しません。

まずEmptyのLevelを作成します。

ここにWidgetを追加してCombat Levelを開くButtonを追加します。

何故かCanvas PanelがDefaultでセットされていませんでした。

Buttonを追加します。

Buttonの実装です。

このへんの実装はUEの勉強を始めて一日目で覚えるような内容ですが、この辺の実装方法を完全に忘れていました。

更にStare Menu MapのLevel BPに以下の実装を追加します。

これで完成です。

テストします。

むぐぐ。

以下のWidgetも同時に作成されています。

Game Mode Baseを見たらEvent BeginPlayでしっかりこのWidgetを作成していました。

どうやって直そうか考えていたら以下のCodeが、

うーん。

これをそのまま利用させてもらいます。

以下の様に変更しました。

Level名がCombatLevelの時のみW_Start Widgetを作成したりします。

それ以外のLevelではGame Mode Baseは何もしません。

Testします。

Start画面です。

先程開いていたW_Start Widgetは開いていません。

Start Buttonを押したら普通にGameが開始しました。

このままGameをPlayしてみます。

特に問題ないですね。

わざと負けてみます。

これも問題ないです。

出来ています。

今度はPackagingを試します。

設定が少しだけ変わります。

Start Up Mapの設定は当然、これに代わります。

読み込むMapにもStart Up Menuを追加しました。

これでPackagingします。

出来ました。

早速Exe.fileを起動させます。

Start Buttonを押します。

結構GPUに負担が掛かっているみたいです。

なんと今回は最後まで勝てました。

最後のMapも普通に表示されました。

Game終了後のGPU使用率です。

うーん。

普通に戻っていますね。

そういえばPackagingした後のサイズはどうなってるかも確認します。

これらを全部含めて

です。

うーん。

大きいのか小さいのかよく分かりません。

今週はこれ以上、戦闘システムの開発に費やす時間はないのでここまでとします。

6. Gaeaの勉強

今週はColor作成方法の復習がBuild方法の復習を使用と思っていたんですが、これらは既に一回以上は勉強しています。

それよりもGeologyについて学習して、学習内容をまとめる方が大切なのではないかと急に思って来ました。

Geologyを勉強する事で、GaeaがPhoto-RealisticなLandscapeを作成するに当たって如何に優れたSoftwareであるかも確認出来るはずです。

ので今週は急遽内容を変更してGeologyについて勉強する事にします。

6.1 GeologyのTechnical Termのまとめ

まずGaeaのNodeにはGeologyのTechnical Termが沢山使用されています。

それをここにまとめます。

まず今までのBlogにGaeaで使用するほとんどすべてのNodeについて一回以上はまとめています。その中でGeologyに関連するNodeを以下にまとめます。

2022-04-11のblog

この週からGaeaの勉強を始めています。

なんとGaeaの勉強を始めて約1年が経っていました。

勉強の成果をまとめるには丁度いい時期かもしれません。

当然ですがここではGeologyに関連したNodeは何も使用していません。

2022-04-18のBlog

ここではGaeaが他のLandscape DCC Toolと比較してどこが優れているのかについて述べています。

更に公式のTutorialで勉強を始めています。

はっきり言って公式のTutorialは古いし質もそんなに良くないです。しかも初心者に優しくないです。

ここでGeologyに関連した

  • Erosionノード
  • Terraceノード

の2つが使用されていました。

2022-05-30のBlog

ここでは以下のGeologyに関連したNodeが使用されていました。

  • Foldノード
  • Shearノード

Shearについては以下の検索で調査しています。

この辺からGaeaにはGeologyに関連したTechnical Termが使用されていて、それらのTechnical Termを理解するにはGeologyを勉強する必要がある事を理解し始めます。

2022-06-12のBlog

以下のGeology関連のNodeが使用されていました。

  • Voronoi ノード

2022-08-08のBlog

以下のGeology関連のNodeが使用されていました。

  • Apex ノード
  • Fractal Terracesノード
  • Shearノード
  • Canyonizerノード

Canyonizerノードは造語かもしれませんが、一応載せておきます。

2022-08-14のBlog

以下のGeology関連のNodeやNode内のParameterが使用されていました。

  • Thermal Shader ノード
  • Fractal Terracesノード
  • Sediments
  • Settle-Thaw

2022-08-22のBlog

以下のGeology関連のNodeやNode内のParameterが使用されていました。

  • Thawing
  • Settling

2022-11-28のBlog

以下のGeology関連のNodeやNode内のParameterが使用されていました。

  • Apertureノード

2023-02-06のBlog

この辺からそれぞれのGroupに属するNodeの機能について調査しています。

以下のGeology関連のNodeやNode内のParameterが使用されていました。

  • Anastomosisノード
  • Foldノード
  • Outcropsノード
  • Shearノード
  • Sedimentノード

以下のNodeはもしかしたらGeology関連かもしれません。

  • Ruggedノード
  • Shatterノード
  • Stackノード(Strataが使用されている)

以上です。

2023-02-13のBlog

以下のGeology関連のNodeやNode内のParameterが使用されていました。

  • Alluviumノード
  • Depositsノード
  • Fluvialノード
  • Sedimentノード
  • Stratifyノード

以下のNodeはもしかしたらGeology関連かもしれません。

  • Breakerノード
  • Convectorノード
  • Thermalノード(TalusとDebris)
  • Crumbleノード
  • Hydroノード
  • HydroFixノード

この辺から少しずつですがGeologyの知識がついてきました。

2023-02-19のBlog

ここでは初めてNational Geographicsの情報が紹介されています。

この記事ではErosionについて解説しています。

ここで初めてGeologyが地形の時間経過による変化を研究する学問である事を知りました。

要は、アメリカにはどんでもない形状の地形があちこちに存在するんです。

それを見て普通の人なら、過去に宇宙人がやって来てこれを作成したんだ。とか考える訳です。

それに対して自然の力がこういう風に働くと、一見すると宇宙人が作成したとしか思えない地形が形成されるという事を時系列を用いて解き明かす学問だったんです。

以下のGeology関連のNodeやNode内のParameterが使用されていました。

  • Alluviumノード
  • Thermalノード
  • Depositsノード
  • Sedimentノード

以下のNodeはもしかしたらGeology関連かもしれません。

  • Hydroノード

2023-02-26のBlog

以下のGeology関連のNodeが使用されていました。

  • Faultノード
  • Foldノード
  • Shearノード
  • Rangeノード

Faultに関してはこのBlogで調査して「GeologyのTechnical Termであった。」と結論付けていました。

ここではFoldingがGeology的にどんな現象なのかについての解明していました。

何とRangeがしっかりしたGeologyのTechnical Termでした。

こんな解説していました。

この辺になるとGeologyにおける適切な説明文をGoogleから探せるようになっています。

ただここで発見した内容を忘れてしまっています。

RangeがGeologyのTermだって事は全く覚えていなかったです。

<Geology Technical Termまとめ>

以上でした。

ここにGaeaで使用したNodeやParameterでGeologyのTechnical Termでもあるものをまとめます。

  • Alluvium ノード
  • Anastomosisノード
  • Apertureノード
  • Apex ノード
  • Breakerノード
  • Convectorノード
  • Crumbleノード
  • Deposits ノード
  • Faultノード
  • Fluvialノード
  • Foldノード
  • Fractal Terracesノード
  • HydroFixノード
  • Hydroノード
  • Outcropsノード
  • Rangeノード
  • Ruggedノード
  • Sediment ノード
  • Settle-Thaw
  • Settling
  • Shatterノード
  • Shearノード
  • Stackノード(Strataが使用されている)
  • Stratifyノード
  • Thawing
  • Thermal Shader ノード
  • Thermalノード(TalusとDebris)
  • Voronoi ノード

ぱっと見しただけでもこれ本当にGeologyのTechnical Termなのかなと一寸怪しいのが入っています。

まあそれはしょうがないです。

一応整理は終わりました。

6.2 どうGeologyを勉強するのか

うーん。

どっかのGeologyの教科書がこれらについて全部簡単に説明してくれたら分かり易いんですが。

まずGeologyのTutorialについて調査します。

最初のHawaii大学のGeologyは長すぎます。1時間のLectureが23個もあります。

ただHawaii大学の講義と言うのが魅力的です。

うーん。一寸だけ見てみます。

Geology 1 (The Science of Geology)[9]を見ます。

いきなり最初のLectureで以下の説明をしていました。

オラー。

さっき私が言った通りの事がHistorical Geologyの所に書かれていました。

Development through timeですよ!

最初の10分だけ見ました。

長すぎます。

Geologyの歴史から語っています。

ぱっと見た感じではGaeaの機能を理解するためにはGeologyの全部を勉強する必要は無くて、この講義の一部だけを勉強すれば良さそうではあります。

ただし誰かが犠牲になって全部の講義を見てその中でGaeaの作成に必要な箇所をまとめる必要があります。

多分、そのまとめは全部で一時間以内に収まるはずです。

当然、そんな事をやってくれる人はいませんので、私がやる必要があります。

一応、最後まで見ました。

今回の話は特にGaeaのNodeに関連した内容は無かったですが、以下の地球は4つSphereで出来ていると言う話はびっくりしました。

英語で大気の事をAtmosphereと呼びますが、これSphereがSpellに入っています。つまり大気球って意味だったんです。そして地球は更に3つの球で構成されていて、それは

でした。

これ、いかなる漫画でもまだこの分類方法は使用されていません。

こういうのが英語で学問を勉強すると面白い所です。

今までのErosionの勉強で風や水や生命体によって大地が削られてErosionが形成される。との説明がありましたが、まさに4つの球の干渉によってTerrainが形成される様を表していました。

Geologyの起源として以下の解説がありました。

ここで紹介されているCatastrophismとはとんでもない変化が突然現れて、地球が誕生したという宗教家が良く信じている地球誕生の説だそうです。

こういう劇的な変化が突然現れて地球が誕生したのではなく、徐々に長い年月を掛けて地球が誕生したと考えるのがUniformitarianismだそうです。UniformitarianismはGeologyの誕生につながったそうです。

ふーん。

GaeaのTerrainの作成手順で、私は以下の手順に基づいてNodeを組むと良いと考えていますが、

この手順の三番目がまさにCatastrophismで、現在のScienceとしてのGeologyとは真逆の考え方なのは驚きでしかないです。

最近、付き添いでちょくちょく病院に出かける必要があるので、そこでこのGeologyを見る事にします。

そしてその中でGaeaのTerrainの生成に関連する箇所を抜き出してまとめます。

7. Houdiniの勉強

今週から新しいTutorialであるCastle Wall Tool [1]を勉強します。

7.1 Unreal Sensei氏のWhy Unreal Engine 5.2 is a BIG Deal [10]を見る

この動画は休憩時間に見ていたんですが、何とUE5.2でHoudiniを使用しないでも直接ProceduralなStatic Meshの生成が出来るようになった。と説明していました。

この事は知っていたんですが、この動画を見るまでこんなに凄い内容だったとは気が付きませんでした。

そもそもHoudiniを勉強し始めた理由が、建物を一個一個作成するのは大変過ぎるのでProceduralな方法で一気呵成に町を作成してしまいたい。という考えからです。

のでこのUE5.2のProceduralにStatic Meshを生成する機能は途轍もなく気になります。

それでここにその部分の内容をまとめる事にしました。

<Procedural Content Generation>

一般的なProcedural Content Generationについて簡単な説明をしています。

Procedural Content Generationは複雑な形状のModelやEnvironmentを瞬時に生成出来る事を例を示して説明しています。

Procedural Content Generation を使用したSoftwareの例としてSubstance DesignerやBlenderのGeometry Nodeが例として紹介されていました。

Substance Designerか。

まあ良いです。

そしてHoudiniです。

Houdiniを使用すると以下に示した様に一瞬で都市を作成する事も可能です。

しかし、Houdiniを使いこなすには大変な学習Costを費やす必要があります。

分かっています。

だから今更ながらHoudiniの勉強を始めた訳です。

はい。

ところが、UE5.2に新しく追加された機能であるProcedural Content Generation、通称PCGを使用すればUEから直接同じ事をするのが可能になるそうです。

え。

Houdiniの勉強はもうしなくても良いの?

PCGを使用したStatic Meshの配置の例を示しています。

これがUnreal Sensei氏が実際に行っている例なのかそれともEpic Games社が提供している映像なのかは不明です。

InputノードのLandscapeにSurface Samplerノードを繋いでいます

すると以下のような灰色のSquareがLevel上に現れます。

今度はDensity Filterを追加します。

Lower Boundの値を上げると

黒に近い灰色のSquareが消えてSquareの数も少なくなりました。

生成する木にRotationを追加するためにTransform Pointsノードを追加します。

Transform Pointsノードの以下のParameterを調整しました。

Absolute RotationをEnableする事で木が常に上向きになるそうです。

この意味はよく分かりません。

次にStatic Mesh Spawnerノードを追加しました。

そしてそのParameterのStatic Meshに木をセットすると

以下の様に木が一面に現れました。

おお、これは簡単です。

Level全体にこの木を生成したい場合は、

以下のSurface Samplerノードの

UnboundedにCheckを入れます。

結果です。

凄い。

けどこれを処理するためには、PCの性能も高い必要がありそうです。

次の例では砂漠にOasisを作成しています。

Oasisの発音がオアシスではなく、Ow-Aisisって聞こえます。

Youglishって確認したらみんなOw-Aisisって言っていました。

Level上からDetailの値を変更する事でOasisの形状を変更出来る事を示しています。

更にSpineを使用してOasisの形状を変更したりもしていました。

今度は以下のBPを使用して

Oasisの真ん中に道を作成しています。

うーん。

凄い!

更に以下の例も紹介していました。

池のまわりだけOasisの木が生えています。

凄い!

7.2 Procedural Content Generationを勉強する

これはもう今週は予定を変更してProcedural Content Generation、通称PCGを勉強する事にします。

調べたら結構Tutorialがありました。

うーん。

短いしJSFLMZ氏のTutorialでもやろうかなと思ったら、以下のFree Time Coder氏のUnreal PCG Tutorial [11]を強力に推している人がいました。

Free Time Coder氏は始めて聞く名前です。

確かに良さそうです。

これの最初のTutorialを見る事にします。

7.3 Jungle Tools - Procedural Content Generation (PCG, Unreal 5.2 Preview) [12]を見る

まず全部を軽く見ます。

これはPreviewでした。

次のUnreal 5.2 Preview PCG Tutorial - Part 1 – Basics [13]を見る事にします。

まず軽く全部見ます。

見ました。

見た感想としてはかなり分かり易いです。

なんかUnreal Sensei氏もこのTutorialでProcedural Content Generatorを勉強した感じがします。

ここで使用しているMapやStatic MeshがさっきのUnreal Sensei氏のOasisで使用していたMap やStatic Meshとクリソツです。

勉強する事にしました。

以下に内容をまとめます。

<Intro>

特にないです。

<PCG Basics>

いきなりPCG Graphを作成していました。

先程、別なTutorialを一寸だけ見ていたんですが、そっちではPluginからPCGが使用出来るようにしていたんですが。

このTutorialはその説明はないですね。

PCG Graphを開くと以下の様になっていました。

<Input and Output>

InputノードとOutputノードについて解説していました。

Outputノードは別のNodeと繋ぐときに使用するそうです。

Inputノードは以下の様になっています。

ここでやる実装はHoudiniのPoint Cloudsとほぼ同じだそうです。

Surface Sampler>

Surface Samplerノードを繋いでいます。

これはUnreal Sensei氏の動画でも出てきたNodeです。

そしてPCG GraphをLevel上に配置します。

何も起きません。

以下のGenerateを押します。

変化ないです。

ここから凄い事します。

まずSurface Samplerノードを選択して

Dを押すそうです。

するとDebug Informationが表示されるようになるそうです。

その結果以下に示した様に

Surface Samplerが表示されます。

<Points>

表示されたPointsについて解説しています。

更にInputノードのLandscape HeightをLandscapeの代わりに使用した場合についても解説しています。

この辺の実装に関係ない話は全部端折っていきます。

<Un Unbounded>

Surface SamplerノードのUnboundedを使用すると

UEがすぐにCrashするので危険と言っていました。

やっぱりそうですよね。

<Point Transform>

次にTransform Pointsノードを使用しています。

このNodeのRotation Maxを使用して

Pointを回転させました。

<Inspect Node>

Nodeの検査方法についてです。

Transform Pointsノードを選択してIを押すそうです。

あれ、いつの間にかこのNodeにDを押した時につく印もついています。

うーん。

多分、どこかでDも押したんでしょう。

そして以下の設定を

PCG_Basic…に変更します。

そしたら以下のDataが表示されました。

それだけでした。

<Randomize Node>

Transform Pointsノードの以下のParameterの値を変更しました。

結果です。

Cubeの位置が変わっているのか?

変わっていますね。

<Landscape Project>

これらのPointは最終的に木や岩に変更されるので、バラバラになったPointをLandscapeの表面につなげる必要があります。

そのためには以下のProject Points On Landscapeノードを使用するそうです。

Project Points On LandscapeノードのLandscapeには

InputノードのLandscapeを繋ぎます。

結果です。

おお、地面にくっついています。

しかしよく見ると回転も無くなっています。

なのでTutorialによると、以下に示した様にもう一回Transform Pointsノードを追加して

回転を追加するそうです。

結果です。

おお、確かに回転しています。

Scaleの値も変更しました。

この辺は単なる微調整なので、自分で実装する時は適当に調整します。

<Density Filter>

Density Filterノードを追加しました。

Lower BoundとUpper Boundについて解説しています。

解説を聞きましたが、私が推測していた通りでした。

<Density Noise>

今度はDensity Noiseノードを追加しました。

Density Filterノードで以下の様になっていたPointが

以下の様になりました。

Densityの値がもう一回割り振られてたという事ですね。

<Spawn Mesh>

はい。やっとStatic Meshを追加するNodeです。

Static Mesh Spawnerノードという名前です。

MeshにTreeを追加しました。

結果です。

おお、やっと木が生えました。

よく見ると木がLandscapeのNormalに沿って生えています。

これを直します。

Transform Pointsノードを選択して

Absolute RotationをEnableします。

すると

木が真っすぐになりました。

うーん。

AbsoluteをEnableしたって事はWorld Spaceの座標に合わせたと思ったんですが、そうなると何で木がLandscapeのNormalに逆らって上を向くのか分かりません。

ここは後で考える事にします。

<Mesh Funnel>

更に別のStatic meshを追加する事も出来るそうです。

結果です。

Weightの値を5に変更すると

5:1の割合で生成されるようになります。

最後に以下の実装を作成して

Densityの値によって生える木の種類を変えていました。

以上です。

今週はここで時間が無くなってしまったので、実装は来週やります。

8. YouTube動画の作成

今週はやりやすいようにUEFNよりこっちを先にやる事にします。

今週やる事は、

  • Landscapeで撮影した作業動画の音声を消す
  • Mind Mapの無料Appを探してそれで話す内容を整理する

の2点です。

8.1 Unityが終わりを迎えつつある点について

緊急で以下のNewsが入ったのでこちらを先に書きました。

Unityの新しいCEOは、何かあると従業員をLay Offをしていますが、さすがにUnityの基幹に関わる部分を作成しているEngineerまでLay Offしているとは思いませんでした。

Redditを読んでいたら、Data Oriented ProgrammingとPerformance Optimizationの有識者でDOTS Projectの根幹を支えている一人であるMike Acton氏を首にしていました。

流石にそれは嘘だろうと思ったんですが、Mike Acton氏のTweetを見たら本当でした。

いやこれはそう遠くない日にUnityが動かなくなるでしょうね。

UEが非上場である事を考えるとこういう事態が起きる事は考えられません。UEを選択して本当に良かったです。

Tim Sweeney氏がVerseの発表中に、Fortniteの世界的な成功はVerseを開発するに当たって世界中の専門家の参加を可能にした。と言っていたのと対照的です。

それよりも私が懸念しているのは、Unityが前に合併した会社がMalwareを既存のSoftに仕込む事を生業としていた事です。

いずれUnityをInstallした人のPCやUnityで作成したGameをInstallした人のPCはMalwareで汚染されまくる事になるでしょうね。

これこそが、今のUnityのCEOが目的としている事で、こういうMalwareをGameに仕込む事が出来れば、それこそGame自体を無料で配っても採算が取れる訳です。

そういう意味では今のUnityのCEOはやり手です。

最近、Game産業って元々こういうヤクザな産業だったのかな。とも思って来ました。

中学生の時に近所のGame Centerで不良たちがカツアゲしているので近づかないように。と言う話を聞いたことを思い出しました。

私はGameそのものに対して全く興味が無かったので、そういう所に行くことは全くなかったです。

でもGame好きだった友達は、中学を卒業すると反社の世界に就職するような人達と殴り合いの喧嘩を平気でしていました。

Game産業ってそういうヤクザな世界なのかもしれません。

話は変わりますが、Unityの人達に言いたいのは、UEに移るなら今が絶好の機会だという事です。

UEFNがReleaseされてVerseを勉強しないといけないのは昔からUEをいじっている我々も同じです。

結局、今はUEFNに関して言えば、みんな初心者なんです。

UEに今、参入してVerseを覚えてしまえば、すぐに先生になれるわけですから。

8.2 Landscapeで撮影した作業動画の音声を消す

Davinci Resolveで必ず音を消せるはずです。

調べます。

Altを押しながらVideoをPoolからTimelineにDragするとVideoだけがDragされるそうです。

試します。

出来ました。

因みにShiftを押しながらVideoをPoolからTimelineにDragするとAudioだけがDragされるそうです。

これも出来ました。

AudioやVideoのみを逆にDragしてPoolに戻すとAudioやVideoだけのDataが生成されます。

更に作業以外が写っている箇所をCutしました。

今度は倍速再生する方法を調べます。

TimelineのVideoを選択して右Clickして以下のBoxを表示します。

Change Clip Speedを選択します。

以下のBoxが表示されるのでSpeedの値を変更します。

これで再生されるSpeedが変更されるそうです。

現状、3つのVideoになっています。

これらのVideoを一つずつSpeedの調整をするのは面倒なので一つのVideoにMergeしたいです。

やり方を調べます。

分かりました。Davinci ResolveではFuseと呼んでいました。

まずFuseしたいVideo Clipを全部選択します。

まだVideo Clipを右Clickして以下のBoxを表示します。

今度は上から二番目のNew Fusion Clip...を選択します。

一個のVideo Clipになりました。

Video ClipのSpeedも300倍にしました。

音声も追加します。

うーん。

すこしだけ長さが足りません。

すこしだけVideo Clipを長くしようとしたら、出来ません。

やり方を調べます。

分かりました。

今度は、いつものBoxからChange Clip Durationを選択するそうです。

Audioの長さは26分49秒ですが、それより少しだけ長くして27分に指定します。

変わりません。

原因が分かりました。

27分に変更するためには、00:00:27:00と打ち込む必要がありました。

なんで最初に00:26:33:00となっていたのか不明ですが、これだと26時間33分を指定した事になってしまいます。

出来ました。

これで再生してみます。

あ、Audioが間違ったのを使用していました。

16秒しかなかったです。

いや、なんか色々おかしくなっています。

一寸直します。

うーん。

CutしたVideo ClipをDurationで伸ばすとCutした部分が新たに挿入されてしまいます。

これどうやって編集するんでしょうか?

色々調べたんですが、よく分かりません。

3時間ぐらいかかりましたが原因が分かりました。

Fuseするとこうなります。

以下に示した様にCutしたあとVideo Clipをそのままの状態にしておけば、Clipのサイズを変更する事も出来るし、サイズを変更しても切った箇所がもう一度現れる事も無くなります。

Fuseって機能はもっと勉強しないといけないものだったみたいです。

時間が無くなってしまったので、ここまです。

以下の事は出来るようになりました。

  • 録画した時の余計な音声は消す。
  • 録画に入っている余計な部分を消す

8.3 Mind Map作成用のAppを探す

まず教育系のYouTuberがよく使っているのはMind Meisterだと判明しました。

こういうやつです。

3つまでは無料だそうです。

これを勉強してみます。

公式の本格的なTutorialは無料版をお試しで使用する人のためのTutorialじゃないですね。

Mindmeister Step-by-Step Beginners Guide 2023 [14]が全くの初心者が無料版で試してみる時の参考になりそうです。

これで勉強します。

8.4 Mindmeister Step-by-Step Beginners Guide 2023 [14]を勉強する

軽く全部見ました。

知りたかったのは無料版でMapを3つ作成したら終わりなのかどうかです。

Tutorialの最後のところで解説していましたが、

My Mapから消せるみたいです。

という事は無料版でもかなりの事が出来そうです。

取りあえず試してみます。

こんな感じで作成してみました。

消してみます。

見事に消えました。

これなら無料版でも十分です。

Mindmeister Step-by-Step Beginners Guide 2023 [14]の内容をいかにまとめます。

<What is Mindmeister?>

これはもう理解したのでSkipします。

<How to create a free account>

これも既に出来たのでSkipします。

<How to create a mind map>

以下のMind Mapを作成していました。

この程度のMind Mapの作成方法は理解しているのでここもSkipします。

<How to change themes>

ここは以下に示したTool Barの使用方法についての解説です。

まず一番下のIconですが以下のようなThemeを選択出来るそうです。

これは分類方法が違うんでしょうか?

確認します。

色がとNodeの形状が違うだけでした。

以下に示したBlackboardが一番きれいでした。

<How to change layout of a mind map>

次のIconはLayoutを変更するそうです。

これはMind Mapしか使用しないのでSkipします。

<How to add icons to a topic>

まずNodeの右上…を選択します。

すると今まで使用出来なかった以下のIconが使用出来るようになります。

ここで真ん中のIconを選択します。

すると以下のBoxが表示されるので

ここからIconを選択してClickします。

すると以下に示した様にIconがNodeに追加されます。

試してみます。

出来ました。

選択したIconが追加されています。

以下のIconを選択する事でNodeに追加したIconの位置を指定出来るそうです。

左に変更しました。

おお。

これは良い機能です。

CursorをIconに合わせるとかぎかっこが表示されます。

これをDragする事でIconのサイズを調整出来るそうです。

やったら出来ましたが、Defaultのサイズが分からなくなってしまいました。

右上のIconでNode内のIconの色を変更出来るそうです。

最後に追加したIconの消し方です。

Boxの一番下にある削除を押すと消えます。

こういうのは機能を全部覚えようとしても無駄で、一番きれいな使用をしている人のMind Mapをそっくりに真似るための方法を覚えるのが現実的です。

ので残りは軽く見て、絶対に書き残す必要があるところだけ、記録します。

<How to add emojis to a topic>

なし

<How to change the style>

なし

<How to add a new connection>

なし

<How to add a comment to a topic>

なし

<How to add a note to a topic>

なし

<How to add a link to a topic>

無料版はLinkは付けることは出来てもPDFなどをUploadする事は出来ないそうです。

Linkだけでも十分です。

試してみます。

Linkを追加しました。

LinkのIconをClickすると以下のBoxが表示されます。

WikiのPageが開きました。

これなら間違えてCarl Tuckersonと呼ぶ事もないです。

Sourceの提示が重要になる場面はそれなりに多そうです。

この機能は重要です。

<Assign>

なし

<More ways to access options>

なし

<How to move a topic>

なし

<How to detach & reattach a topic>

なし

<How to delete a topic>

なし

<More options>

なし

<How to use search>

なし

<Where to find your account settings>

なし

<How to share your map>

なし。

そもそも誰ともShareしません。

<How to jump to a different map>

なし

<How to view previous versions>

なし

<How to export map>

無料版はDocument形式しかExport出来ないそうです。

それで解説は終わってしまいました。

Document形式がどんなものか確認します。

これは訳分からんですね。

使えるものでは無いです。

<Outline mode>

なし

<BONUS TIP>

なし

<Zoom & center>

左下にあるTool Barの赤で囲ったIconの機能についてです。

Mind Mapの中心に画面を揃えるそうです。

<Focus mode>

これは滅茶苦茶役に立ちます。

Nodeの無い箇所で右Clickすると以下のBoxが表示されます。

ここでFocus Modeを選択します。

すると以下に示した様に

Mind Map以外の表示が消えます。

録画する時は絶対にこのModeでする事にします。

<Back to home page>

なし。

前に見た時にやり方を覚えてしまいました。

流石にこれくらいなら、推測だけでもどこのIconをClickすれば出来るのかすぐに分かります。

その辺の操作性の簡単さはGaeaとかと比較すると自転車と自動車位の差があります。

<Where to find deleted maps>

これは無料版はないそうです。

<Viewing & sorting options>
なし。

8.5 Mindmeister Step-by-Step Beginners Guide 2023 [14]を勉強した感想

ここで学んだ機能の中で、私に必要なのか以下の2つだけです。

  • Linkの追加の方法
  • Focus Modeへの変更方法

勿論、作成した後のMind Mapを消す方法とかも重要ですが、これらの事は一回聞けばすぐに使用出来るようになるので、特に記録に残す事はしません。

来週はMind Mapを使用してYouTube用の話題か、GaeaのTutorialをまとめてみます。

そのMind Mapを元に講義をします。そしてその内容を録画します。

8.6 録画した映像の一部を消す方法

Mind Mapを使用しながら録画するとなると、Browser全体が画面に映る事になります。

Browserの一部はYouTubeに上げる動画に表示されると困る訳で、その一部を消す事は出来ないのか調べました。

以外に簡単な方法で消す事が出来るの事が判明したのでそれを示します。

先程のDavinci Resolveの映像ですが、以下に示したパソコンの下に表示されているTool Barを消したいとします。

まずその部分が写っているClipを選択します。

Inspectorを開きます。

Croppingを開きます。

今回は画像の下の部分を消したいのでCrop Bottomの値を変更します。

Crop Bottomの値を35にしました。

すると以下に示した様に

画像の底の部分が消えました。

8.7 Change Clip DurationとChange Clip Speedの結果が全く違う件について

Crop Bottomを調整していて気が付いたんですが、3倍速にしてはPlayerの動きが遅いんです。

更に動画の最後で、洞窟の入り口に戻って来てもいません。

90分の動画が30分に短縮されたんじゃなくて、90分の内の最初の30分だけが表示されていました。

???です。

調査します。

分かりました。

動画の再生速度を変更するのはChange Clip Speedでした。これは再生時間を変更します。300%に指定すれば三倍の速度で再生します。

Change Clip Durationはどうやら、指定した時間だけ再生するだけで、再生速度はそのままのようです。

あ、だから90分の動画を100分に伸ばす事が出来なかったんです。

うーん。

Davinci Resolveはもっと勉強する必要がありますね。

こういうのは時間を掛けて勉強する必要があります。

焦って沢山勉強しても何も身に付きません。

ゆっくり勉強する必要があります。

9. UEFNの勉強

2023-04-10のBlog Unreal Editor for Fortnite Beginner Tutorial - UEFN Starter Course! [15]を途中まで勉強しています。

今週はその残りを勉強します。

9.1  Unreal Editor for Fortnite Beginner Tutorial - UEFN Starter Course! [15]を勉強する

<Creating an Island>

ここからTutorialは後半編に入ります。前半では島はTemplateにあるものを使用しましたが、ここでは0から作成します。

新しいProjectをBlank Templateを使用して作成します。

以下の様になっています。

この時点でDefaultのLightingがセットされています。

それが嫌なので外します。

DefaultのLightingを外すと真っ黒になってしまうので、Point Lightを前もってLevel上に配置しておきます。

そしてWorld SettingにあるDisable All Time Of Day management...をEnableします。

結果です。

真っ黒になりました。先程配置したPoint LightだけがLevelを照らしています。

やっぱりDefaultのLightingの方が良いので元に戻します。

Landscapeを作成します。

Zoom Outしました。

Landscape modeに変更しました。

以下の設定でLandscapeを作成しています。

これ見るとUE5と全く同じですね。

World Partition Gridもあります。という事はWorld Partitionを使用した巨大なMapの作成も可能なんでしょうか?

Landscapeに新たなSectionを追加する方法を説明しています。

Manageを選択してAddを使用します。

以下の様に新たなSectionが追加されます。

更にScriptで以下のような造形を作成しています。

ここは基本過ぎるのでやり方についてはまとめません。

Auto Material(World Aligned Blendノード)を使用していますね。

GaeaでSlopeのMaskを作成したらAuto Material(World Aligned Blendノード)の機能をあえて使用する必要はないです。

しかし上記の様にLandscapeの形状をUE内で変更した場合は、Auto Material(World Aligned Blendノード)で指定した方がLandscapeの変化に対してすぐに対応出来きます。

<Adding Water>

Occeanを追加します。

All->Fortnite->Environment->WaterからOcceanを選択します。

Level上に配置します。

これはUE5のWater Systemと同じです。

OcceanのParameterにあるAffects LandscapeをOffにします。

これが

こうなりました。

え。

こんな機能があるの?

UE5のWater Systemにも同じParameterがあるか確認します。

ありました。

このCheckを今外すのは怖すぎます。

Water System Occeanを追加した事で生じたLandscapeの歪みを1時間半も掛けて直したばっかりです。

来週検討する事にします。

今度はPaint Modeです。

Sand Layerを選択して海底の部分をSand Layerで塗っています。

OcceanはHを押して一時的に消しています。

Selection Modeに戻り、Ctrl+Hを押してOcceanを表示すると、以下のような島が出来ました。

凄い事を一つ知りました。

以下のOcceanのPinを選択します。

Scale upします。

なんと島が丸くなりました。

うーん。

いつ見てもUnreal Sensei氏のTutorialは勉強になります。

今度はRiverを追加します。

OcceanのBPが有った場所からRiverのBPを選択します。

Level上に配置します。

川の流れに沿って向きを変えます。

地形が一瞬で変化しました。

ProceduralなLevel Designが主流になったらこういう風にLandscapeの形状が一瞬で変化するのが当たり前になるんでしょうか?

そうなるといくらLandscape DCC ToolでPhoto-RealisticなHeight Mapを作成しても意味ないですね。

Landscapeが自動で変化するのが嫌な人はOcceanで使用したAffects LandscapeがRiverにもあるので、これをOffにします。

すると以下に示した様にLandscapeが元の状態に戻ります。

この場合は自分でLandscapeを削る必要があります。

川の底のLayerを変更します。

この川はあんまりRealじゃないです。

<Performance Settings>

Cameraがどれ位近づくと草が生えるのかの設定を変更します。

以下に示した様にSettingsからEngine Scalability Settingsを選択してQualityのBoxを開きます。

EpicからCinematicを選択します。

この辺の設定はあんまりよく理解していませんが、Cinematicに変えたらもっと遠くまで草が生成される事になるはずです。

<Prefabs and Grouping>

岩や木などのPropを配置します。

Foliageも使用するみたいです。

Prefabsにある

Pirate Innを選択し

Level上に配置します。

うーん。

これはらくちんです。

この建物に使用されているそれぞれのPartsだけ別に使用したい時は、

そのPartsを選択して右Clickして以下のBoxを表示させて

Browse to Assetを選択します。

FortniteのAssetはGrid Systemに戻づいて作成されているので、

Grid設定にしておけば

以下の様にProp同士が自動的にぴったし合うような配置が出来るそうです。

凄い。

TutorialではGridのサイズを64に変更してものすごいSpeedで壁を作成しました。

作成した壁を全部一緒に移動したい時はCtrl + GでGroup化します。

一体化しているので一緒に動かせます。

400MBがこのProjectの最大のSizeだそうです。

のでFabから

Photo-RealisticなAssetをImportして使用したりすると、Sizeが大きくなりすぎてしまうので、FortniteのAssetのみで作成した方が良いそうです。

<Adding Assets>

Assetの追加する原則は、大きいものから追加して、徐々に小さいものに移行するそうです。

以下のAssetを

川のそばに追加しました。

ここからUnreal Sensei氏のLevel Design講座が始まります。

最初に以下の様に使用出来そうなAssetを全部Level上に配置しておきます。

ここに滝を作成するそうです。

以下のAssetを使用します。

ふえー。

滝のAssetだけで以下の種類があります。

凄すぎる。

これはLandscapeを作成するのはUEFN内でする方が充実したものが作れそうです。

凄!

Water Fall用の岩と滝の周りの水蒸気を示すParticleを追加しました。

おお。こういう所に使用するVFXは本当に役に立っていますね。

VFXがあるお陰で滝が滝らしくなっています。

Unreal Sensei氏はParticle Effectと読んでいますがNiagaraなんでしょうか?

この滝の後ろにRiverをもう一個追加するのはCumbersomeです。

ので以下の方法で残りを作成するそうです。

Cube Water 4x4x1を

Level上に配置します。

サイズと向きを調整します。

Sculptingをして周りを川に近づけます。

先程Level上に配置したRockを並べています。

これらの岩はVirtual Textureを使用しているのか、使用しているMaterialの実装なのかは分かりませんが、必ず上向きにコケが生えるようになっています。

あっという間に以下のようなLevelを作成してしまいました。

うーん。凄いです。

今度はLog Cabinを追加します。

PrefabsにあるAssetです。

配置した後で、Landscapeの形状を調整し更にRockも配置しています。

<Trees and Foliage>

木を追加します。

全部手動で配置しています。

Foliage ModeはまだUEFNにはないそうです。

Time of Dayの値を変更して夕焼け時のImageを確認しています。

<Devices>

VerseのTutorialもこれから作成するそうです。

それまで待ってからVerseの勉強するのも有りな気がします。

Unreal Sensei氏のProdigy性は圧巻の一言です。

凡人は変に自分で頑張るより、彼に任せて彼から教わった方が早く深く理解出来る気がします。

ここからはGameを作成するそうです。

Launch SessionをClickします。

Fortniteが始まりました。

この辺は本当によく分かりません。

やっぱりFortniteを少しはPlayする必要があります。

水の中でSpawnしてしまったそうです。

以下に示した様にPlayer SpawnがDefaultの位置のままでした。

FloorやPlayer Spawnerを全部消します。そしてPlayer Spawnerを以下の様にSetします。

Fortniteに戻ります。

Double SpaceでFly Modeになるそうです。

空飛んでいます。

右Clickして以下のようなMenu画面に入り

Start Gameを押します。

今度はPlayer Spawnerを配置した場所から始まりました。

これからDeviceを配置します。

DeviceってAssetの事だと思ったら、Game中にPlayerと干渉出来るAssetの事を言っていました。

以下のDeviceを追加します。

このDeviceのItem Listに以下の銃をセットします。

これだけではまだPlayerが銃を得る事は出来ないそうです。

このDeviceでは誰がItemを手に入れる事が出来るのかを更に指定する必要あるそうです。

指定しました。

最初のPlayer Spawnerは分かりますが、その次のOn Player Spawnedは何を指定しているんでしょうか?

Player SpawnerからSpawnしたPlayerを指定しているんでしょうか?

Fortniteを起動してテストします。

何と、Playerは最初から銃を持っています。

このDeviceってそういう機能だったの?

私はてっきりPlayerがこのDeviceの場所に来たら銃が手に入るのだと思っていました。

今度は以下のButtonです。

このButtonを押したらGameが終了するようにするそうです。

そのために新たに以下のEnd Game DeviceをLevel上に追加しました。

このDeviceの機能はActivateしたらGameが終了するそうです。

この2つを繋げればButtonを押したらGameが終了するようになるわけです。

こんなのProgrammingで実装しろと思いますが、Verseは別な機会に教えるそうです。

End Game DeviceのActivateに先程のButtonをセットします。

ButtonがInteractしたらEnd Game DeviceがActivateします。

Game内からTestしています。

Buttonを押しました。

Edit Sessionに飛びました。Gameは終了したみたいです。

<Island Settings>

更にEnd Game DeviceのWinning Teamの設定にActivating Teamをセットします。

Fortnite内でExcape Menuに入ると以下のMy Islandがあります。

My Islandに入ると以下のようなTool Barがあり、

Islandの生成に必要な設定をここでする事が出来ます。

これと同じ機能がUEFNにもあるそうです。

それがIsland Settingだそうです。

TutorialではここからGame内の時間をセットしていました。

次はProjectの大きさについてです。

ProjectをFortniteにDeployしたのでProjectのSizeが表示されるようになりました。

たった1%です。

Clickすると内訳が表示されました。

更に今度はEnemyを追加しますが、その前にPlayerが見当違いの方向に進まないようにBlocking Volumeを配置します。

更にButtonをLog Cabin内の部屋に追加します。

<Enemies>

ではEnemyを配置します。

Guard SpawnerをLevel上に配置します。

Unreal Sensei氏はここで、Creativeを使った事がある人はみんな知っているように、と言っています。

あー。

これだったらFortniteが流行った時に一寸でもPlayしとけばよかった。そうすればCreativeが来た時もすぐに知る事が出来たのに。一寸後悔しています。

以下の様に配置しています。

Defaultの設定ではGuardは攻撃しません。

更に何人もSpawnします。

Guard Spawnerの設定を変更します。

Guard Team Indexの値を2に変更します。

これはGuardのTeamをPlayerとは別にするためです。

次にGuardは一度に4人Spawnして、それ以上はSpawnしない設定にします。

以下に示した様にSpawn Countの値を4にして

Allow Infinite SpawnのCheckを外します。

更にTotal Spawn Limitの値は4にします。

これだけじゃなくて更にSpawn Timerの値も0にします。

これらの設定は一見は難しくて統一性が無いように見えますが原理的にはNiagaraのParticleのSpawnの管理方法と同じはずです。

後でゆっくり理解する事にします。

Testしています。

4人のGuardが同時に生成されました。

しかも攻撃してきます。

Guardの見た目を変更しました。

Spawn Countは2に変更しました。

AccuracyはHighに変更です。

Spawn Radiusの値も変更しました。

これはGuardがSpawnする範囲を指定しています。

Guardの周りに表示されていたBlueの円が大きくなっています。

これはGuardがSpawnする範囲を示していたようです。

Guardが岩の間にSpawnしないようにSpawn Through WallsのCheckを外します。

Testしています。

Garudが一体しか生成されない箇所が一つと

滝の上流側の川を撃ったら、破壊されてしまいました。

うーん。

なんかBugも実際のGame感があります。

川のAssetを選択してCan be DamageのCheckを外します。

他の破壊されたくないAssetも同様の設定を行います。

Log CabinのPartsのCan be DamagedのCheckを外しました。

このGuard Spawnerは川の下にGuardを生成していたと思われるので

SpawnのSizeを小さくしました。

更に敵を倒しやすくするためにGranadeを追加しています。

この辺の設定は自分で作成する時に勉強する事にします。

この後テストして終わっています。

<Ending>

まとめです。

9.2  Unreal Editor for Fortnite Beginner Tutorial - UEFN Starter Course! [15]を勉強した感想

思っていたのより10倍位勉強になりました。

UEFNはすぐにGameとして成立しますね。

後、Water Systemが既に実用化されています。

FortniteをPlayしないとよく理解出来ない部分がある事も分かりました。

10. DirectXの勉強

とうとうDirectXを勉強する時間が無くなってしまいました。これは来週の始めにやる事にします。

11. まとめと感想

時間が無いので今週もまとめは無しです。

12. 参照(Reference)

[1] Castle Wall Tool. (n.d.). https://www.youtube.com/playlist?list=PLNbgmFvU__fiPhyUWHHzZ2Nv5ieM_bOdB

[2] OlympusMonsTutorials. (2021, March 17). C++ DirectX 12 Game Engine - [S01E03] - Creating A Game Engine [Video]. YouTube. https://www.youtube.com/watch?v=YgZSSE3qZqA

[3] 3DTudor. (2022, April 21). Unreal Engine 5 Create Ocean Islands for 3D Game Environments [Video]. YouTube. https://www.youtube.com/watch?v=lGYRjBSIB-o

[4] Klaus. (2022a, May 14). Unreal Engine 5: Water System in UE5 Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=MpCQc4sDMjw

[5] NumenBrothers. (2023a, February 11). Let’s Build the RPG! - 55 – Unreal Engine 5 Water Ocean and Island Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=RVgxi-PN8c8

[6] Ben Cloward. (2022, December 15). Brushed Metal Shader - Advanced Materials - Episode 11 [Video]. YouTube. https://www.youtube.com/watch?v=POwYQtq-1jU

[7] Adobe Substance 3D. (2021, June 23). Substance 3D Designer First Steps: 01 - Overview & Basics [Video]. YouTube. https://www.youtube.com/watch?v=VyFgpitTsYg

[8] Adobe Substance 3D. (2021, June 23). Substance 3D Designer First Steps: 02 - Core Techniques [Video]. YouTube. https://www.youtube.com/watch?v=LJFgZvNGN9U

[9] Earth and Space Sciences X. (2015, October 30). Geology 1 (The Science of Geology) [Video]. YouTube. https://www.youtube.com/watch?v=fgnvKVzZZes

[10] Unreal Sensei. (2023, May 11). Why Unreal Engine 5.2 is a BIG Deal [Video]. YouTube. https://www.youtube.com/watch?v=6DIEZhk_ES8

[11] Unreal PCG Tutorial. (n.d.). https://www.youtube.com/playlist?list=PLA03OHAaHgYpo0enf8p-2oEpja3grLOKZ

[12] FreetimeCoder. (2023, March 26). Jungle Tools - Procedural Content Generation (PCG, Unreal 5.2 Preview) [Video]. YouTube. https://www.youtube.com/watch?v=BqPhdQOweqU

[13] FreetimeCoder. (2023, March 27). Unreal 5.2 Preview PCG Tutorial - Part 1 - Basics [Video]. YouTube. https://www.youtube.com/watch?v=byouBYMuYPw

[14] Sharon’s Tutorials. (2022, May 1). Mindmeister Step-by-Step Beginners Guide 2023 [Video]. YouTube. https://www.youtube.com/watch?v=6yISyepFqyA

[15] Fortnite Sensei. (2023, March 31). Unreal Editor for Fortnite Beginner Tutorial - UEFN Starter Course! [Video]. YouTube. https://www.youtube.com/watch?v=0CcoOq963O8