UE4の勉強記録

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

UE5の勉強 -映像作品としてのLandscapeを作成する-

1. 今週の予定

1.1 今週の予定

以下の内容を勉強します。

<Landscapeの作成>

動画の撮影用の光の設定を調査します。

Niagaraの勉強>

炎の色やサイズは全部MIで管理出来るようにCodeを書き直します。

<Materialの勉強>

Ben Cloward先生のAdvanced Material Seriesの勉強をします。

<Gaeaの勉強>

Earth and Space Sciences XのLecture 11を勉強します。

GaeaのTutorialの作成の続きをやります。

<Houdiniの勉強>

Free Time Coder氏のUnreal PCG Tutorial [1]の続きを勉強します。

<UEFNの勉強>

インベーダーゲームを作成するためにUEFNのTutorialを勉強します。

<DirectX12の勉強>

DirectX 12の魔導書」と「Direct3D 12 ゲームグラフィック実践ガイド」の勉強をやります。

2. Landscapeの作成

2.1 他のTutorialで動画撮影用のUEのEnvironmentの光の設定を確認する

2023-07-16のBlogを見ると4つのTutorialが紹介されています。

その内の一つは今まで勉強したTutorialで残り3つのTutorialはまだ見ていません。その3つのTutorialの光の設定を見てみます。

2.2 Unreal Engine 5 Cinematic Photorealistic Architecture Rendering | Complete Tutorial [2]を勉強する

まずGameからではなくArchitectureを選択しています。

Gameとどう違うんでしょうか?

調べたらこれしか出て来ませんでした。

RedditにあったWhat's the main benefit of using "film/video & live events" over "games" when making a short film?[3]です。

一緒と書いてありました。

Templateが違うけど基本的には一緒だそうです。

ArchitectureからBlankを選択しました。

以下の選択されているAssetを消しています。

うーん。

Post Process Volumeを消している以外は光の設定とは関係ないですね。

Project Settingを開き

Auto Exposureの設定をManualにしています。

Projectに戻りSun Skyを選択し

うん。

Sun Sky?

こんなAssetあったのか。

まあ古いVersionのUE5なのかもしれません。

ここは先に進みます。

Directional Lightを選択します。

あ、Sun SkyってSky Light、Directional Light、そしてSky Atmosphereを一個にしたBPの様です。

Compass Meshも入っていますがこれはなんなのか不明です。

それはともかく、Directional LightのIntensityを5000に変更しました。

結果です。

うーん。

成程。

この辺で調整するのか。

<Auto Exposure>

まずはこの機能から調べます。

公式のSiteのAuto Exposure [4]です。

うん。

これが画面の明るさを自動で調整しているのか?

何と、先週探していたParameterの答えが見つかってしまいました。

早速、自分のProjectで試してみましょう。

ProjectのDescriptionにある

Auto Exposureの値をManualに変更しました。

Directional LightのIntensityを5000luxに変更しました。

結果です。

うーん。

すこし暗すぎでしょうか?

20000に上げました。

お。

一気にRealになりました。

がその結果、ごみ箱や地面が綺麗過ぎるのが目立つようになってしまいました。

他の角度からも見てみます。

かなりRealですが、空が寂しいですね。

先週、追加したPost Process Volumeを切ってみました。

一寸青みがかかっていますね。

Post Process Volumeを戻してTempの値を7500に下げてみます。

良い感じですね。

<Fog>

これは直接は光の調整には関係ないですが、Exponential Height Fogの値も調整していました。

Fog Densityの値を挙げて

Fog Height Falloffの値を下げていました。

更にVolumetric FogをEnableしました。

結果、奥の岩山に微かに霧が掛かるようになりました。

霧を掛けたい時のTechniqueですね。

このTutorialも全部勉強する必要がありますね。

2.3 Unreal Engine 5 for Architecture - 2023 Full Beginner Course [5]を勉強する

なんとこの人の動画、UE5、Architecture、Tutorialで検索した場合、お勧めに出て来るのが最後になってしまいました。

前回検索した時よりも更に人気が落ちていました。

何か理由があるのでしょうか?

取りあえず今回は光の設定に関係している所だけどうやっているのかを調べます。

まずTemplateの選択です。

当然ArchitectureからBlankを選択します。

Lightの設定ですが、特に変わった事はしていませんでした。

ProjectのSettingです。

Software Ray Tracing ModeにDetail Tracingをセットしていました。

これが光の影響に変化を与えるのかは不明です。

Post Process VolumeのLumenの設定もいじっています。

正直、5時間半もあるTutorialの中から自分が欲しい情報だけ抜き出して探すのはかなり難しいです。

一つ言えるのは、このTutorialも勉強する価値があるという事です。

なんと最後にDavinci Resolveを使用していました。

DaVinci resolveが正しいSpellingなんですね。

パラパラしか見れなかったし、光の設定に関してもよく分からなかったんですが、このTutorialかなり良いです。

2.4 Unreal Engine Architectural Workshop [6]を軽く見る

YouTubeのお勧めでは一番最初に出て来ます。

このSeriesの中でLightに関しての動画を見てみる事にします。

2.4.1 「05. Lighting in Unreal Engine Part 01 | Class #1 | Unreal Workshop[7]をみる

この動画は短いので全部見てLightに関係している所をまとめる事にします。

見ました。

結構、勉強になりました。

後、光の設定をする時にDirectional LightのIntensityを調整するのを忘れてしまっていて、そのせいで内容が無駄に複雑になってしまっています。

一応、光に関連する部分だけ以下にまとめておきます。

現時点では以下の様になっています。

Sky LightをStaticに直します。

以下の様になってしまいました。

本来ならここでDirectional LightのIntensityを直すそうなのですが、Tutorialではその事に気づかないでどんどん先に進んでしまっています。

Post Process Volumeの値を調整します。

Infinite Extent (Unbound)をEnableする事でPost Process VolumeのBoundを無くしました。

このPropertyの名前をずっと調べていました。

何で覚えきれなかったんですか。

そしてExposureにある以下のParameterをTweakしています。

この値は確か洞窟を作成した時に使用しました。

ここで間違いに気が付いてDirectional LightのIntensityを直しています。

10を使用しています。

10はかなり小さい値な気がします。

結果です。

真っ暗です。

先程のParameterを以下の様に変更しました。

結果です。

今度は影のQualityを向上します。

ここでDirectional Lightを追加してます。

この時に窓の外が真っ暗になっているんです。

これって今まで使用していたSun Skyを外したって事でしょうか?

もしそうならそれを説明しないとこのTutorialで勉強している人はついていけなくなってしまっているはずです。

後、今気が付きましたがこのTutorial、UE4でやっています。

これは中止にします。

2.5 Landscapeの勉強のまとめ

今週は光の設定を調査するためにUEを使用した建築用の3つのTutorialの光の設定方法についてまとめました。

まずUnreal Engine Architectural Workshop [6]のSeriesに関してはUE4のTutorialなので勉強する必要はないです。

残り2つのTutorialはどれも素晴らしく、光の設定方法に限らず、勉強しないといけない大切な内容が沢山あり全部勉強する必要があると感じました。

その中でもUnreal Engine 5 for Architecture - 2023 Full Beginner Course [5]が一番、内容が充実していました。

Unreal Engine 5 for Architecture - 2023 Full Beginner Course [5]は5時間半もあり、更にYouTubeのお勧めでは一番下になってしまっていましたが、最後の動画の編集にDaVinci Resolveを使用していますし、私にとって最適な教材になりそうです。

来週からこのTutorialを勉強する事にします。

光の調整方法に関しては、

Auto Exposureの設定をManualに変更する事で、洞窟に入った後で真っ暗になり徐々に目が慣れるにつて画面が明るくなってくる効果を停止出来る事が判明しました。

後、Directional LightのIntensityを調整する事で光の強さを管理出来る事が判明しました。

Post Process VolumeのExposure CompensationとMinとMaxの値を調整する事で更に微妙な調整が出来る事が判明しました。

この2つのParameterは2023-05-08のBlogで少しだけ弄っていました。

この時、Tutorialの値と全然違う値を入れないと暗くならないので不思議に思っていたんですが、今考えるとDirectional LightのIntensityの値がTutorialの値と違っていたんでしょうね。

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

3. Niagaraの勉強

3.1 炎の色をMIから調整出来るようにする

現在は以下の色だけがMIから操作出来るようになっています。

これを全ての色がMIから調整出来るように変更します。

結果です。

更にそれぞれのParameterに簡単な解説も追加しました。

3.2 Combat PrototypeのGameのEffectに使用してみる

今年の前半に作成した以下のGameにこのEffectを使用してみましょう。

久しぶりに起動させたら、Textureが中々読み込まれませんでした。

これって製品版はどうなっているんでしょうか?

製品版も同じ仕組みだとGameを買った人は最初のPlayではTextureなしでPlayしないといけなくなるかもしれません。

これって炎上案件でしょう。

それはともかく、Effectを見たら結構複雑で、このEffectを簡単に交換する訳にはいかない事が判明しました。

例えば日のEffectは以下の様になっています。

うーん。

このEffectをアニメ化しますか。

これですね。

開くと3つのEmitter Stackがありました。

NE_Fireballから見ていきます。

何とこのEmitterではRenderer ModuleはMesh Rendererが使用されていました。

Mesh Renderer Moduleの設定を見ます。

SM_Sphereが使用されていました。

SM_Sphereを開くと以下に示した様に

M_Energy_SphereがMaterialとして使用されています。

以下にPreviewのImageを示します。

これがAnimationになって動いています。

かなり複雑なMaterialです。

実装部です。

うーん。

これをアニメ調にするのは結構大変そうです。

次のEmitter Stackです。

これはSprite Renderer Moduleを使用していました。

使用しているMaterialです。

Preview画面です。

これは今まで頑張ってアニメ調にしていたMaterialとほとんど同じです。

実装も確認します。

ほとんど同じです。

これのアニメ調への変更は簡単に出来るでしょう。

最後のEmitter Stackです。

使用しているMaterialです。

Previewの画像です。

実装です。

これも今まで頑張ってアニメ調にしていたMaterialの実装とほぼ同じです。

良し決めました。

これをアニメ調にします。

ただこれをやるのは来週からにします。

今週はここまでです。

3.3 UE5のNiagaraをUEFNで使用出来るようにする

先週UEFNの勉強をしていて以下にまとめたように

UEFNでNiagaraがほとんどそのまま使用出来る事を知りました。

しかもUEFNではDefaultで使用されているNiagaraが12個しかありません。

で、その時に一寸調べたらUE5のNiagaraをUEFNにそのままMigrate出来るって言っているTutorialがありました。

それを今調べ直したら、そのTutorialが見つからないんです。

ので自分で試してみる事にします。

あ、ありました。

公式のSiteでした。Migrating Assets to UEFN[8]で説明しています。

ざっと読みましたがMigrationのやり方は普通のUEと同じです。

ただしContent Folderの位置が違います。

UEFNはPluginの中にContent Folderがあります。

でこのDocumentの謎の部分なんですが、以下に示した様に5.1ではこのような説明があるんですが、

5.2になるとこのDocument自体が無くなっています。

UEFNのDocumentの方に移行したのか、あるいはUEからUEFNにNiagaraを移動する事自体が出来なくなったのか?

これは実際に試してみる必要があります。

以下のNiagaraをUEFNにMigrateしてみます。

以下のUEFNにMigrateしました。

結果です。

普通に出来ていますね。

Level上に配置してみます。

普通に動きました。

中を見ると普通に動いています。

うん。

CGHOW氏のNiagaraをUEFNで動かしてみるのも面白そうです。

4. Materialの勉強

先週勉強したBen Cloward先生のSharp Text Shader - Advanced Materials - Episode 18 [9]を実装します。

4.1 Sharp Text Shader - Advanced Materials - Episode 18 [9]を実装する

<Textureの作成>

Quixel Bridgeから漆喰のTextureをImportします。

以下の2つをDownloadしました。

ところでQuixelの以下の分類がよく分かってないです。

Boardが板で、Logが丸太は知っていますが、他の名称は知りません。

調べます。

<Parquet>

だそうです。

Imageも見てみます。

木材をあるPatternに沿って並べる事を指していますね。

後、発音ですがパアーケィと最後のtは発音しないんですね。

<Plank>

これは木材の事ですね。

BoardやLumberとはどう違うんでしょうか?

BoardはLumberの一種で厚さが2インチ以下で幅が2インチ以上のを言うと書かれています。

先程のPlankの説明にPlankはTimberであると書かれています。

まずTimberとLumbarの違いから調べます。

Timber vs. Lumber: Split The Difference [10]に以下の説明がありました。

要するに木材に加工する前がTimberで加工した後がLumberと言っています。

だとするとWikipediaのPlankの説明がおかしくなります。

色々な説明を読みましたが、大体以下の内容に集約されるようです。

PlankとBoardは同じ。木材を指す。

ただしPlankの方が厚い木材に適用される事もある。

という事は、BoardはLumberの一種ですからLumberとPlankとBoardは一緒という事です。

更にPlankは一種のTimberと言っていますからTimberとLumberとPlankとBoardも一緒という事になります。

でもQuixel BridgeではBoardとPlankは分けていますね。

<Veneer>

最後にVeneerを調べます。

ベニヤ板の事でした。

次は文字のTextureを作成します。

GIMPを開きます。

GIMPを使用するのは久しぶりです。

細心のVersionにUpdateしますか?

と出て来ましたが後にします。

以下のSizeで新しいProjectを作成しました。

以下の様に文字も追加しました。

ここからこの文字にStrokeを追加します。

先週のBlogを見るとPhotoshopではLayerをClickしてEffectを選択するとStrokeが選択出来るようですがGIMPにはその機能は無いみたいです。

GIMP、Text、Strokeで検索したらすぐにやり方が判明しました。

FilterにあるLight and ShadowからDrop Shadow…を選択します。

以下の条件で加工しました。

やり方は分かったのでもう一回作り直しました。

Textの設定です。

Strokeの設定です。

値は単に見た目だけで決定しています。

UEで試してダメだったらもう一回作り直します。

PngでExportしたImageです。

Imageは良いです。

ただBackgroundの黒が透明ではなく黒になっています。

まあいいです。

これはUE側で修正します。

Quixel BridgeからImportしたBase Color用のTextureにも文字を追加しました。

これをExportしました。

<ImportしたTextureの設定の確認>

Maximum Texture Sizeの値は0です。

そしてsRGBはEnableです。

Compression Settingsは

になっています。

全部Tutorialの設定と同じです。

次にTextのTextureの設定を確認します。

Compression SettingsはDefaultになっていたのでGrayscaleに変更しました。

そしてsRGBもDisableします。

Maximum Texture Sizeは0のままでした。

これはGray Scaleで作成すべきでした。

まあ大丈夫でしょう。

<Materialの作成>

Materialを作成します。

結果です。

うん。

まあまあいい感じです。

次のTextureです。

結果です。

これは石みたいです。

うーん。

最初のでやる事にします。

Level上ではこんな感じです。

あんまり文字がなじんでいませんね。

Tutorialでは文字を追加する時に少しだけ透明にしたのかもしれません。

あ、ここからMF_TransformUVsを使用しています。

<MF_TransformUVsの作成>

これの作成方法を確認する必要がありました。

 Moving, Rotating, and Scaling UVs - Shader Graph Basics - Episode 43 [11]の勉強内容が2022-05-30のBlogにまとめられています。

ざっと読んだら何をしているのか大体理解しました。

今から作成しましょう。

まず以下の実装を再現しました。

<<Translationの追加>>

以下の様に実装の最後で追加します。

<<Scalingの追加>>

以下の箇所に追加します。

2022-05-30のBlogを読むと何故この場所に追加しないといけないのかが凄くよく分かります。

<<Inputの変更>>

当然、Material FunctionなのでInputに変更します。

以下のInputを作成しました。

それぞれ所定の位置に配置しました。

ここで時間が無くなってしまったので、残りは来週やる事にします。

5. Gaeaの勉強

5.1 GaeaのTutorialの作成

今週は先週出来なかったBuildの部分のTutorialの作成を行います。

2023-08-14のBlogによると以下の手順でBuildを行う予定とありました。

これを試してみます。

今週はこのTemplateを使用します。

こんなImageです。

実装部です。

すこしだけ実装部も見てみます。

2023-02-01のBlogに以下の手順がまとめられています。

これと比較しながらこの実装を分割していきます。

今回は後ろから見ていきます。

まず最後のWizardノードです。

これはErosionを追加しています。

私のまとめたTerrain作成手順で言うと3の段階です。

その前のNodeです。

Ruggedノードが使用されています。

RuggedノードはLookDev Groupに属するNodeで

のような説明がされていました。

うーん。

LookDevをしてからErosionを追加するのか。

今までGeologyの勉強をして来て、Terrainの形成され方を理解するとこっちの方が正しい気がします。

私の手順もLookDevしてからErosionするようにしますか。

次のNodeです。

Combineノードです。

2つのTerrainをここでCombineしているようです。

Combineノードの設定です。

なんとMethodにSubtractが選択されています。

Combineノードの先は以下のような実装になっていますが、

Voronoiノードの結果です。

Combineノードの結果です。

一緒です。

一寸、このCombineノードで何をやっているのか分かりませんね。

でも大体の手順は分かりました。

  1. Geo-primitiveで地形を作成する
  2. Combineノードで微調整
  3. LookDevで細部の作成
  4. Erosionで時間経過を表現

こんな感じです。

私のTerrain作成の手順も少し手直しします。

まず3と4は交換します。

更に1は「Mountainの作成として」を追加します。結局はMountainを作成しているだけですので。

後、地面の作成を追加しましょう。どこかで地面も作成する必要があります。

  1. 山の作成。Geo-Primitive GroupからMountainノードを選択する。
  2. 噴火や隕石の落下のような大災害が起きた。(SwirlノードやWarpノードを使用してTerrainを半壊させる)
  3. 地面の作成。Geo-Primitive Groupから地面用のNodeを選択する
  4. 山と地面をCombineノードを使用して混合する
  5. Edgeを調整する
  6. LookDevを使用して表面を調整する
  7. Erosionを追加する
  8. 川や湖などの追加(以下はOption)
  9. 雪の追加

はい。

それではBuildの方をやっていきます。

その前にHeight MapとMaskを作成します。

以下の様に作成しました。

これはColoringでした。

そうだ。

GaeaでUE用のHeight Mapを作成する手順はTerrainを作成するだけではありませんでした。

その後でColoringとBuildingがあります。更に雪や川や湖の追加もありました。

これもまとめる必要がありました。

  1. Terrainの作成
  2. 雪、水の追加(Option)
  3. Coloringの作成(Maskも作成する)
  4. Buildの作成

です。

で今回はこのBuildの作成のTutorialを作成します。

前に簡単にまとめた手順に従ってやってみます。

5.1.1 ExportするHeight MapとMaskを計算しているNodeを選択する

これは既にしています。

以下の3つの結果をImageとしてExportします。

Buildにも以下の様にこの3つのTextureが記録されています。

5.1.2 寸法の調整

2023-08-14のBlogには「実際のTerrainの高さを調べます。(980m)」と書いてあります。

実際はここでTerrainの高さ以外のサイズも調整してしまうので寸法の調整と命名し直しました。

はい。

ここで問題発生です。

Resolutionの設定が2049のままで

Scaleの設定を1024にしたら

Real Scaleの値が0.5m/pxになってしまいました。

これはBuildの設定を先にやる必要があります。

5.1.3 Buildの設定を行う

まずExportするImageのTypeをPngに変更します。

Height MapだけはRawでも良かったはずですが、初心者に余計な知識を与えても混乱するだけです。

Pngには16Bitと8Bitがあります。

前はどっちを選択したのか覚えていません。

今回は16Bitにしておきます。

Grey Scaleの選択とかもありませんね。

次にResolutionの値を1009にします。

これがGaeaの無料版で作成出来てかつUEで使用出来る最大のSizeです。

次はRangeの値をNormalizedにします。

こうする事でHeight Mapで一番高い所が1、一番低い所が0になるはずです。

ただこれを確認した事は無いです。

あれ、sRGBについての記録が無いですね。

白黒なのでsRGBの補正は要らないはずです。

一寸確認します。

2023-08-06のBlogに以下の様に書かれていました。

2023-08-06のBlogはKlaus氏の How To Create An Open World Snow Landscape | Unreal Engine 5 Tutorial [12]を元に作成されています。

のでこのやり方であっているはずです。

うーん。

Height MapやMaskは白黒なんでsRGBが効いたらおかしくなる気がします。

Color Spaceの解説を見たら以下の様に書かれていました。

はい。

Gray ScaleのImageにはこのParameterは適用されないそうです。

ならばsRGBのままでもOKですね。

納得しました。

それよりも以下の事が述べてありました。

はい。

直します。

Baked Cacheについても以下のような説明をしていました。

うーん。

Project内では2kで計算しているので、Strictを使用した方が良い結果が出るみたいですね。

Strictに直しました。

5.1.4 寸法の調整を今度こそ行う

Scaleの値を1024に変更しました。

1m/pxになりました。

今度は高さを調整します。

まず今の高さを知る必要があります。

以下の実装で高さを図ります。

この実装の詳しい設定は2023-08-06のBlogにまとめられています。

何と、0mでも

何も表示されません。

これは以下の実装で何かをやっている感じがしますね。

今回はHeightを測定するのは諦めます。

Heightの設定を516に変更します。

最後にExportするFolderを指定します。

Buildを押して終わりです。

以下のFileが作成されました。

5.1.5 UEでLandscapeを作成する

UE5.2を開きます。

取りあえずこれでUEのLandscapeが出来る事さえ確認出来ればいいのでさっと作ってしまいます。

以下の様なLandscapeになりました。

あれ、端っこが切れています。

1009でExportしたのに1024の設定にしたからでしょうか?

Maskだけにしてみました。

これはずれていません。

という事はNoise様にExportしたTextureのImageがずれています。

TexCoord[0]に掛けている値を0.001から0.00099に変更してみました。

今度はぴったし合いました。

Level内を歩いてみます。

やっぱしカクカクしている箇所は沢山あって手直しは絶対必要です。

今週はここまでにします。

一応、Buildの部分のTutorialの確認は出来ました。

まとめるのは来週以降ですね。

6. Houdiniの勉強

今週もHoudiniの勉強はお休みしてFree Time Coder氏のUnreal PCG Tutorial [1]を勉強します。

6.1 Unreal 5.2 Preview PCG Tutorial - Part 7 - Custom Nodes [13]を勉強する

今週はUnreal 5.2 Preview PCG Tutorial - Part 7 - Custom Nodes[13]を勉強します。

このTutorialではCustomノードを作成するためのBlueprintの作成方法を勉強するそうです。

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

<Intro>

特になし。

以下のPCGを既に作成していました。

<Blueprint>

PCG内でNodeとして使用出来るBlueprintを作成しています。

BPを開いて

PCG Blueprint Elementを選択します。

名前はOur Nodeとします。

<Boiler Plate>

Our Nodeを開きます。

Execute With Contextを追加します。

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

この時点でOur NodeはPCG内でNodeとして使用出来るようになっています。

この後、NodeにInputを追加する方法を説明しています。

これは前に既にやったのでSkipします。

<Get Input>

Our Node内の実装をやっていきます。

Get Inputノードを追加します。

更にGetノードを追加します。

<Break Data>

次にGetノードで得た内容をBreakします。

Break PCG Tagged Dataノードを追加します。

更にCast to PCG Spatial Dataノードを追加します。

その後でTo Point Data With Contextノードを繋ぎます。

Tutorialでは「このNodeが何故必要なのか分からない。」と言っていました。

<Loop On Points>

今度はLoop On Pointsノードを追加します。

これでそれぞれのPointの位置を移動させるのか。

うーん。

納得。

次の手順が分かりません。

Our NodeのExecutionにPoint Loop Bodyを追加します。

<Connects Everything Up>

今まで配置したNodeを繋いていきます。

Cast to PCG Spatial DataノードとLoop On Pointsノードを繋ぎました。

Execute With ContextノードとGet Inputsノードを繋ぎます。

Get InputsノードとCast to PCG Spatial Dataノードを繋ぎます。

Cast to PCG Spatial DataノードのCast FailedのPinはReturn Nodeに繋ぎます。

Execute With ContextノードのIn Contextの結果を

Loop On PointsノードのIn Contextに繋ぎます。

うん。

Execute With ContextノードにIn ContextなんてInputありましたっけ。

一寸確認します。

ありました。

Defaultでしっかりありました。

今度はLoop On Pointsノードの結果のDataを元のTypeに戻すために実装を追加します。

まずMake PCG Tagged Dataノードを追加します。

Make PCG Tagged DataノードにMake Arrayを追加します。

Make Arrayノードの結果にMake PCG Data Collectionノードを追加します。

Make PCG Data CollectionノードをReturn NodeのOutputに繋げます。

うーん。

この変換よく分からないです。

最初の変換を元に戻しただけと言っていますが、よく分かりません。

実装する時にもう一回考える事にします。

最後にLoop On PointsノードをReturn Nodeに繋げます。

ここからLoop On Pointsノード内の実装を作成します。

あ、そういう事なのか。

理解しました。

<Loop On Pointsノード内の実装>

何故かTutorialではこの部分の節は分かれていないで前節のまま進んでいますが、内容は全然違うので節を分けました。

Loop On Pointsノード内の実装を作成します。

Set Members in PCG Pointノードを追加します。

Set Members in PCG PointノードのPropertiesの設定を以下の様にします。

以下の様になりました。

Break PCG Pointノードを追加します。

Bound MinとBound Maxの値を以下の様に変更しました。

そしてDensityの値をZに繋ぎました。

Densityの値は0から1の間です。

これだと差があまりない気がします。

やっぱり1000を掛けていました。

これ実質、For LoopをBPで実装しているだけです。

書き方の例をもう2,3個みたら簡単に理解出来るでしょう。

<Expose as Parameters>

PCGに戻り今実装が完成したOur Nodeを使用します。

結果です。

うーん。

Pointの形状が大きくなって何がかわるんでしょうか?

私はてっきりPointの位置が変化するものと思っていました。

Pointって結局最後はStatic Meshと交換するはずです。

Pointの形状を変化させる意味ってあるんでしょうか?

Our Node内のPoint Loop Bodyの実装に戻ります。

今まで1000を掛けていた部分にVariableノードを追加します。

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

すると以下に示した様にPCG内にMax HeightがParameterとして表示され値をPCG内から操作する事が出来るようになります。

値を2000にした場合です。

<Open Blueprint>

PCG内のOur NodeをDouble Clickすると実装を開ける事を説明していました。

これ自体は大したこと無いですが、これで元々あるNodeの実装を見る事でそのNodeがどうやって作成されたのかをReverse Engineer出来ると語っています。

こっちは凄いです。

<Outro>

特にないです。

以上でした。

6.2 先週の続きについて

先週の最後に

Nanite化した場合とか、どれくらいの木を生成出来るのかとかを来週試す。と書いていました。

すっかり忘れていました。

今、試します。

うん。

先週のPCGを実装したLandscapeが開けません。

なんかUE5.3は色々問題がありますね。

7. UEFNの勉強

今週もPi Equals ThreeのTutorialを勉強します。

7.1 Make a custom UI with a clickable Button - UEFN/Creative2.0 [14]を勉強する

何とNetに繋がらなくなってしまってしまいました。

色々やってみたんですが原因が分かりません。

夜なのでProviderに電話して聞く事も出来ません。

途方に暮れていたら、勝手に繋がるようになりました。

何だったんでしょう?

Pi Equals Threeの2番目のTutorialをやります。

<Note about premade Widgets>

以下の方法でBPを作成しようとすると

以下に示した様にErrorになるそうです。

<Intro>

ButtonとUIを繋げる実装をやるそうです。

<Create Verse Device>

Verse Deviceを使用します。

まずVerseをClickして以下のBoxを開きます。

そしてVerse Explorerを選択します。

すると以下のBoxが開きます。

一番上のVPTをClickして

Add New Verse File To Projectを選択します。

すると以下のBoxが開きます。

Device Nameにcustom_uiと書き込みました。

そして右下のButtonからCreateを選択します。

すると以下の様になるそうです。

そしてCustom_ui verseを開きます。

するとvisual Studio Codeが開くそうです。

うん。

Visual Studio CodeはDownloadしてないです。

ここは、前もって何かしておく必要がありそうです。

この部分は後で調べる事にします。

VS Codeが開いたらVerse Explorerは閉じます。

VerseからBuild Verse Codeを選択します。

そしてContent Browserを見るとCreate Devicesと言う名前のFolderがあります。

その中を見るとcustom_uiが出来ています。

Level上に配置すると以下の様なAssetが表示されます。

<Create Trigger Button>

今度はButtonの方を作成していきます。

何時も使用しているButtonをLevel上に配置します。

これですね。

配置しました。

VS Codeに戻ってきました。

VerseのCodeを見るのは初めてです。

一寸だけ読んでみます。

最初の三行は使用するLibraryの指定のようです。

Creative_deviceのClassを作成しています。

:=の意味が不明ですね。

前の一寸Verseの解説を読んだ時に:=の機能について説明していたはずです。

後で調べる事にします。

そしてClassを使用しています。

VerseはFunction型のProgrammingと言っていますがしっかりClassは存在しています。

解説にはLevel上に配置出来るVerseによって作成された装置と書かれています。

OnBeginです。

この装置が起動したらHello Worldと2+2=2を表示するように実装されています。

< Creating @editable Trigger Button Variable in Verse>

以下のCodeを追加しました。

これだと配置したButtonと繋がってない気がしますが?

更に@editableを追加しました。

あれ。

これからbutton_deviceとLevel上のButtonを繋げると思ったんですが先に進んでいます。

まあ良いです。

UEFNに戻ってVerseにあるBuild Verse Codeを選択します。

そしてCustom_uiを選択します。

Custom_uiを見ると

ButtonUIが表示されています。

ああ。成程。

@editableを追加するとEFFNのPropertiesからParameterが操作出来るようになるのか。

そう言えばUEC++でも同じような機能がありました。

そしてLevel上に配置されているButtonを追加しました。

<Handling Trigger Button Event>

まずPrintの実装を消しました。

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

これは指定したButtonのButtonが推されたらHandleButtonPressを実行します。とう意味でしょう。

Handle Button Pressを作成します。

まずHandle Button PressはFunctionだそうです。

以下の様に宣言します。

Voidを返してParameterはAgentを一個取ると言う意味でしょうか?

VerseによるFunctionの作成方法についても後で調べます。

Tutorialの解説によるとAgentはCharacterやAIを指しているそうです。

更にAgentは単なる名前なので変更しても問題ないそうです。

<Getting Player UI in Verse>

Passされたagent型であるDudeをPlayerにCastしています。

いや。

これはDudeがPlayer型である事を確認しているのか?

よく分かりませんね。

これも後で確認します。

UIを作成するのでその機能を持つLibraryを追加します。

以下に示したCodeでPlayerUIを作成しました。

:=の意味が分からないと断言出来ないですね。

後、地味に分からないのがIF節の最後の:の意味です。

これも後で調べます。

UIを追加します。

このCodeでWidgetを追加出来るみたいです。

ただしまだNew UIを作成していないのでErrorになっています。

<Creating Canvas Widget in Verse>

新しいWidgetを作成するためのFunctionを作成しました。

これはWidgetの作成というよりSlotの作成ですね。

VerseのCodeそのものについてはよく分からない部分がかなりありますが大体は何をやっているのか分かります。

Canvas_slot options>

あと以下のLibraryも追加しています。

<Creating UI Button in Verse>

以下のLibraryを追加します。

Buttonに表示するTextを作成します。

そしてWidgetに表示するButtonを作成します。

この辺はどれくらい一生懸命勉強するかが問われます。

いずれWidgetがUEFNで使える日が来ます。

そうなったらこの辺の知識は使い道が無くなってしまいます。

適当に勉強して済ますのが正解な気がします。

以下に示した様に作成したFunction、Button For CanvasWidgetにセットします。

これでCreate UI()関数が完成したのでHandle Button Press()関数内で使用します。

更に作成したNewUIをPlayerUIに追加します。

<Playtesting First>

実装したVerseのCodeがきちんと動くのかテストします。

まずBuildします。

Fortniteを起動させました。

Buttonを押すとHelloが表示されました。

うーん。

Verseって何かUEC++に似ていますね。

<Different Types of Buttons>

ButtonのTypeについて解説していました。

Buttonは表示されましたがButtonを押す事が出来ません。

<Enable Cursor For Button / Input>

この辺からTutorialの音声が非常に小さくて聞き取れなくなって来ました。

もう少し大きな声で録音して欲しいです。

以下に示したCodeを追加します。

<Creating Button UI Click event>

結果です。

今度はButtonを押せるようになりました。

ただし押しても何も起きません。

Eventが起きるようにCodeを追加します。

<Button UI Callback>

以下のCodeを追加しました。

関数、Handle UI Button Clickを作成します。

見えない。

<Remove Current Canvas on UIButton Click>

Player Canvasを作成します。

あれ?

ここで消すのは今まで作成してあるCanvasのはずです。

何で新しくPlayer Canvasを作成しているんでしょうか?

あ、ここでNew UIをセットするのか。

それなら納得です。

最後に以下の様にCodeを整理しました。

New UIを無くしてPlayer Canvasで統一しています。

こっちの方がスッキリします。

<Final Result>

テストします。

Hello ButtonをClickしたらButtonを消しました。

以上です。

7.2 Make a custom UI with a clickable Button - UEFN/Creative2.0 [13]を勉強した感想

今回、ほとんど初めてVerseの勉強をしました。

感想を言うと、UEC++のC++の部分をJavaScriptに変更したらこんな感じになるのかな。という感じでした。

JavaScriptは一寸だけ勉強したけどあんまり合わないので止めてしまいました。

結構苦手です。

これからVerseを勉強するのにJavaScriptの知識が必要になってくると面倒ですね。

8. DirectX12の勉強

YouTubeの動画の作成が終わっていないので今週はお休みします。

9. まとめと感想

特になしです。

10. 参照(Reference)

[1] FreetimeCoder [FreetimeCoder]. (n.d.). Unreal PCG Tutorial. YouTube. https://www.youtube.com/playlist?list=PLA03OHAaHgYpo0enf8p-2oEpja3grLOKZ

[2] Stan3DArt. (2023, January 15). Unreal Engine 5 Cinematic Photorealistic Architecture Rendering | Complete tutorial [Video]. YouTube. https://www.youtube.com/watch?v=Fh6SxqtsReI

[3] QiPowerIsTheBest. (n.d.). Reddit - Dive into anything. https://www.reddit.com/r/unrealengine/comments/15c1k0q/whats_the_main_benefit_of_using_filmvideo_live/

[4] Auto exposure. (n.d.). https://docs.unrealengine.com/5.0/en-US/auto-exposure-in-unreal-engine/

[5] Gediminas Kirdeikis. (2023, April 30). Unreal Engine 5 for Architecture - 2023 Full Beginner Course [Video]. YouTube. https://www.youtube.com/watch?v=bT8aSTkpkDY

[6] VR Division. (n.d.). Unreal Engine Architectural Workshop. YouTube. https://www.youtube.com/playlist?list=PLUEJPqKDLa6K8Rrho7ZBj4_Fpgl7oChuL

[7] VR Division. (2020, September 14). 05. Lighting in Unreal Engine Part 01 | Class #1 | Unreal Workshop [Video]. YouTube. https://www.youtube.com/watch?v=KuNoxi4NtsI

[8] Migrating assets to UEFN. (n.d.). https://docs.unrealengine.com/5.1/en-US/migrating-assets-from-unreal-engine-to-uefn/

[9] Ben Cloward. (2023, March 9). Sharp Text Shader - Advanced Materials - Episode 18 [Video]. YouTube. https://www.youtube.com/watch?v=Euvy_R03rlg

[10] Kelly, J. (2021). Timber vs. Lumber: Split The Difference. In Dictionary.com. https://www.dictionary.com/e/timber-vs-lumber/

[11] Cloward, B. [Ben Cloward]. (2022, April 21). Moving, Rotating, and Scaling UVs - Shader Graph Basics - Episode 43 [Video]. YouTube. https://www.youtube.com/watch?v=aLCgoI0oYUo

[12] Klaus. (2022, July 6). How To Create An Open World Snow Landscape | Unreal Engine 5 Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=ej2b-zWoYiM

[13]  FreetimeCoder. (2023, March 28). Unreal 5.2 Preview PCG Tutorial - Part 7 - Custom Nodes [Video]. YouTube. https://www.youtube.com/watch?v=OjOxjaDYUQw

[14] Pi Equals Three. (2023, March 30). Make a custom UI with a clickable Button - UEFN/Creative2.0 [Video]. YouTube. https://www.youtube.com/watch?v=vB6vXZNgzkM