UE4の勉強記録

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

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

1. 今週の予定

1.1 今週の予定

DirectXの勉強>

Olympus Game Engineの作成の続きといつもの3冊の教科書を勉強します。

6月の終わりまでは今までと同じ方法で勉強します。

7月からは「DirectX 12の魔導書」と「Direct3D 12 ゲームグラフィック実践ガイド」のみの勉強に変更します。

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

以下の事をやります。

  • LandscapeをGameとして使用するのではなく撮影場所や神社などのEvent会場として使用したらどうかという構想の検討
  • Virtual Textureを配置している岩に追加
  • 海岸の砂浜に足跡を追加

<Materialの勉強>

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

先週は時間が無くて勉強出来なかったので、先週やろうとした内容をやります。

Niagaraの勉強>

CGHOW氏のTutorialをやります。これも先週は時間が無くて出来なかった内容をやります。

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

PackagingしたGameを誰かにやってもらいます。

<Gaeaの勉強>

今週はGeologyの勉強とYouTube用のTutorialの作成の両方をやります。

<Houdiniの勉強>

Houdiniの勉強は一端お休みしてUE5.2のProcedural Content Generationの勉強をします。

<UEFNの勉強>

先週の実装の続きを行います。

Water Body Oceanを使用するとLandscapeがおかしくなります。

これに対してどう対応するのかについて検証します。

YouTube動画の作成>

なんか動画を撮ります。

Davinci Resolveの勉強は止めます。動画は撮れれば良いのでDavinci Resolveの勉強をすると目的と手段を勘違いしてしまうからです。

2.DirectXの勉強

2.1 Olympus Game Engineの作成

2.1.1 先週の復習

先週はOlympusMonsTutorialsのC++ DirectX 12 Game Engine - [S01E04] - Settings and Loggers [1]の最初の節であるC++ DirectX 12 Game Engine Episode 4 : Settings and Loggersを実装しました。

その中でこのTutorialのSingltonの実装方法について何をやっているのかをやっと理解する事が出来ました。

2.1.2 Print Log Functionを勉強する

次の節であるPrint Log Functionを勉強します。

2023-05-28のBlogのPrint Log Functionに関してまとめた内容を読み直します。

これだけでした。

でもこれだけでも何を説明していたのかかなり思い出せました。

App Data Folder内にLogを作成するんです。

一応、軽くですが全部見直す事にします。

見ました。

結構、細かく説明していて軽く見ただけは何を具体的にやっているのかまでは理解出来ませんでした。

以下に逐一まとめていきます。

まず以下の関数を宣言します。PrintLog()関数です。

ここでParameterにある3つの点について解説しています。

これって後で、Parameterの数を増やせるって意味だと思っていたんですが、あんまり自信が無いです。

調べます。

分かりました。

これはVariadic functionsと言うらしいです。

cppreference.comのVariadic functions [2]の説明です。

まあこれはそうなんですが、実際のSample Codeを見ると本当の意味が分かります。

最初のParameterであるfmtに何個のParameterを追加するのか、とかどんなTypeのParameterをパスするのかの情報を入れておく必要があります。

上記の例だとfmtにdcffという値をPassする事で、後のParameterの数が4つで、それぞれのParameterのTypeがint、char、doubleである事を示しています。

Geek for Geekの例も紹介しておきます。Variadic functions in C [3]です。

こちらはCのSampleですが多分C++も同じでしょう。

こっちはIntにして追加するArgumentの数だけ指定しています。

まあ大体、Variadic functionsの使用方法が理解出来たので続きをやります。

以下の実装をLogger.cppに追加しました。

このCodeはさっき勉強したVariadic functionsの使用方法とほぼ同じです。

Vswprintf_sは初めて見ます。

これを使用出来るようにするためにfstreamを追加しました。

更に以下のCodeを実装しました。

これは全部の実装が完成した後の方が理解しやすいので、先に実装を見ます。

Pch.hに以下のIncludeを追加し、

Application.cppに以下の実装を追加します。

これでTestします。

DLLが最新のじゃないとErrorが出て来ました。

直します。

まず以下のFolderからOlympus.dllをCopyして

Olympus.dllを以下のFolderにPasteします。

もう一回Testします。

今度はPrintLog Functionが動きました。

この結果から推測するとvswprintf_s()関数は

Fmtの値をBufに移しているだけの様です。

これ公式のSiteであるvsprintf_s, _vsprintf_s_l, vswprintf_s, _vswprintf_s_l[4]を見ると

となっていて2番目のParameterがElementのサイズを指定しています。

このSiteは他の色々なPrintf()関数の使用方法も説明されているのでWhat is vswprintf_s() in C? [5]を見ました。

この例だと普通に80がnumber of Elementsとしてパスされています。

Tutorialの場合は、Number of Elementsが無くてFormatそしてArgptrがパスされています。

それ以外は、さっきの解釈であっているみたいです。

Tutorialでは以下の例も試していました。

結果です。

これも引用先にあった例と同じです。

ここからLogger.cppに戻ります。

今度はこのLogの記録をLog fileに残すための実装を追加します。

ここからが今週のTutorialのPointですが、どのFolderにLog Fileを保存するかについての議論です。

ここはTutorialの説明をなるだけ忠実に再現します。

<Solution Directory>

  • ReleaseでBuildしたらSolution Directoryは無くなる

<Build File>

  • Build FileのFolderはC Program FileのReferenceで外から書き込めないようにLockされる可能性がある
  • 複数のUserが一個のPCにAccessした場合、Log fileの記述がこんがらがってしまう可能性がある

このようにどのFolderを使用してもそれなりの問題があります。

ところが、MicrosoftはこのためにLog Fileを取っておくための特別なFileを用意してくれているそうです。

それが

App Data Folder

です。

何!

そういう事だったのか。

前にApp Data Folderを見てAppが勝手にここにFileを作成しているのを発見して、Malwareに感染したのかと焦った事があったんですが、これは普通の事だったんですね。

こんな感じでFileを作成するそうです。

実際のAppData Folderを開くと

以下に示した様に更に3つのFolderがあります。

これらのFolderのどれかは指定していないんですが、これはどうなんでしょうか?

この設定ではBlankProjectのFolderはこれらのFolderの下に自動的に作成されるようにはならん気がします。

最後の0305202194056は日付だそうです。

2021年の三月五日の19時40分56秒だそうです。

このFolderにどうやってLog Fileを作成するのかをやると思ったら、このFolderにあるFileを読み込む実装からやるそうです。

Wfstreamを使用するそうです。

はい。

この辺は単なるFileの読み書きの指定のはずです。

最後まで見て重要だったらParameterの細かい指定も調べる事にします。

まずFile Urlの正しい値をここに書き込む必要があります。

としました。

そしてwstring()の中身に以下の実装を追加しました。

LogDirectory()関数はLogがあるFolderの位置を返す関数です。

LogFile()関数はLog Fileの名前を返す関数だそうです。

勿論、この2つの関数はこれから作成します。

TutorialではLogDirectory()関数の実装は特に重要でないのでいきなり作成してしまいました。

説明は無しです。

Logger.hに以下の実装を追加します。

この後、この実装について詳しい解説をしていました。

一寸もう考える気力が無いです。

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

2.2「DirectX 12の魔導書」の勉強

2.2.1先週の勉強を復習する

先週は何を勉強したのか忘れてしまいました。Blogを読んで思い出します。

思い出しました。

最近は実装ばかりしていてRender Target View、Descriptor、SwapChainそしてCommand Queueなどの関係を忘れてしまったんです。

ので今週はそれらを復習する事に決めたんでした。

2.2.2 Command list, Command Queue, Swap Chain, Render Target, そしてDescriptor Heapの復習

教科書の「3.3 画面色のClear」を見たら

  • Command list,
  • Command Queue,
  • Swap Chain,
  • Render Target,
  • Descriptor Heap

をここで使用するとありました。のでこれらの復習をします。

<Command List>

2023-03-13のBlogを読み返していたら以下の図が出て来ました。

ああ、そうでした。

最初の頃、これを散々勉強したんでした。

描画コマンドを貯めたのがCommand ListでそれをCommand Queueに入れてGPUに送る図です。

<Command Allocatorも>

そして2023-03-20のBlogとその次の2023-03-27のBlogで以下の理解になりました。

Command Listは実際はInterfaceでそのInterfaceから派生したFunctionを指します。そしてそこから作成されたObjectを保持しているMemory領域がCommand Allocatorになります。

実際のCodeで確認します。

Command Allocatorを作成してからCommand Listを作成していました。

教科書も読み直します。

「3.3.2 Command Listの作成とCommand Allocator」を読みました。

大体、今まとめた内容と同じ事が書かれていました。

今読むとCommand AllocatorはCommand Listを作成するために必要なもの位の理解でも十分な気がします。

このCommand Listの中に描画Commandが入るはずなんですが、どんなCommandを今まで入れたのか確認します。

これは先週書いたCodeでは?

先週のBlogを読むとこの部分の実装はCommand Listの内容をBack BuffeであるrtvHに移しているみたいです。

以下の教科書の説明が分かり易いです。

あれ。

とするといつ描画CommandがCommand ListにPassされるんでしょうか?

おお、だんだん内容を思い出してきました。

こんな感じで他の用語も復習します。

<Command Queue>

Command Queueの機能については先程の

で簡単には理解しましたが、一応Blogのまとめも復習します。

2023-03-06のBlogにそれなりの説明がありました。

GPUが実行可能なCommand Bufferを指定する。

と書かれています。

教科書の内容も確認します。

「3.3.3 Command Queue」を読むとCommand Listを実行する。としか書かれていません。

2023-03-06のBlogの言う教科書はどうやら「Direct3D 12 ゲームグラフィック実践ガイド」の事の様です。

確認したら「2. 3. 2 コマンド キューの生成」があり、上記の内容が書かれていました。

実際のCodeも確認します。

ここでCommand Queueを生成しています。

その後はSwap Chainの生成の時に使用されているだけです。

これだとCommand Queueはただ作成しただけですね。今のところは。

もしかしたらこれから何かをするのかもしれません。

<Swap Chain>

これは2023-03-13のBlogに簡単な解説が書かれていました。

そう言えばDouble Bufferingを理解するのも大変でした。

生成するための実装は先程Command Queueで見た

です。

<Render Target>

Render Targetですが、2023-04-24のBlogに以下の説明がありました。

そうでしたっけ?

教科書の「3.3.5 Render Target View」を読んだら確かにそう書かれていました。

Buffer, ViewそしてDescriptorの違いもここで解説されていました。

今の私の理解だとBufferは単なるData、ViewはそのDataの説明、DescriptorはViewやSamplerを指す言葉です。

のでViewはDescriptorですがDescriptorはViewでない可能性もあります。

この理解が正しいかどうかは不明です。

<Descriptor Heap>

これは先に教科書の説明を読んでしまったんですが、Descriptorを貯めておくHeapの事です。

Blogを調べたら2023-05-01のBlogで以下の説明がありました。

Codeを見るとDescriptor Heapは以下の箇所で作成されています。

そして以下の箇所でRender Target Viewと関係しています。

今週の勉強はここまでとします。

来週は今週の復習で得た知識を使用してCodeの全体の流れを確認します。

2.3 「HLSLシェーダーの魔導書」を勉強する

2.3.1 先週の復習

先週は「4.1 Lightingなしの3D Model表示」を実装しました。

そんだけです。

2.3.2 「4.1 Lightingなしの3D Model表示」のStep4を行う

次の節を読もうとしたら「4.1 Lightingなしの3D Model表示」にはStep 4までありました。

先週、「4.1 Lightingなしの3D Model表示」の実装は完全に終わらしたと思っていたんですが、この部分を実装するのを忘れていました。

Step 4の実装を行います。

Step 4はHLSLの実装です。

以下の様にPSMain()のReturn値を変更しました。

テストします。

結果です。

Textureが張り付けられました。

2.3.3 「4.2 Lightの種類」を読む

読みました。

まあ3D GraphicsにおけるLightingの基礎的な内容がまとめられていました。

この中で知らない話題は、C++とHLSLのDataの並べ方の違いの話だけでした。

このC++とHLSLのDataの並べ方の違いはかなり重要です。

この部分は実装する時にしっかり勉強しようと思います。

この教科書はかなり3d Graphicsの初心者向けに書かれていて、あんまり技術的に厳密な話は敢えて避けている印象を受けました。

専門学校の教科書用に作られたらしいのでその辺は仕方ないかもしれません。

一応、Sample Codeは全部公開されているので本格的に勉強したい人はそれを参考にして勉強するという事かもしれません。

DirectX12のような複雑な話題は、最初から全てを理解しようとすると全部分からなくなってしまうので、この教科書の目的が初心者向けだった場合、この切り込み方は正しいとは思います。

でも、DirectX12を勉強しようとする人で3D Graphicsを全く勉強した事ない人っているのかな。とも思います。

来月からこの教科書の勉強は中止する事になると思います。

私にはこのLevelの説明は簡単すぎて、学べる事はほとんどないからです。

2.4「Direct3D 12 ゲームグラフィック実践ガイド」の勉強

2.4.1先週の復習

先週は「2.3.4 Command Listの生成」を実装しました。

ここで、Command ListとかCommand Allocatorとかの用語がごっちゃになってしまったので、いったん整理したいと言って終わっています。

2.4.2 用語の整理

これは「DirectX 12の魔導書」の勉強のところでやりました。

それぞれの用語の意味については完全に思い出しました。

それらの関連性がまだはっきりしない部分がありますがそれは来週以降やる事にします。

もう予定していた勉強時間を大幅に超えてしまったので、今週はここで終わりにします。

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

3.1 先週の復習

先週はWater Body Systemの川を追加しました。

PackagingのTestはしてなかったです。

これ今やってしまいます。

Packagingが出来ました。

Exe.fileを開いて実際にPlayします。

川に到着しました。

普通に生成されていますが、以下の様に川がLandscapeより高い位置に存在している箇所もありました。

これは後でEditorで確認します。

湖に到着しました。

この辺はEditorで見た景色と変わらないです。

Task ManagerからGPUの状態も確認します。

GPUの使用率が18%なのにGPUの温度が71度ってかなり高い気がします。

なんかあんまりGPUの性能が出てない気がします。

18%で71℃にまで上昇するんじゃ100%使用したらPCが燃えてしまうんじゃないでしょうか?

Editorで先程の川の場所を確認しました。

やっぱり川が浮いていました。

これを直します。

以下の様にしました。

はい、これで直せました。

3.2 今週やりたい事

  • LandscapeをGameとして使用するのではなく撮影場所や神社などのEvent会場として使用したらどうかという構想の検討
  • Virtual Textureを配置している岩に追加
  • 海岸の砂浜に足跡を追加

出来るだけやる事にします。

3.3 LandscapeをGameとして使用するのではなく撮影場所や神社などのEvent会場として使用したらどうかという構想の検討

これは2023-06-04のBlogの「3.3 Landscapeをどう利用するのか?」の考察が元になっています。

でLandscapeをGameに使用するのはコスパもタイパも最悪なので、もっとましな使用方法について検討したところ、以下の2つ

  • 撮影場所として使用
  • Metaverseのイベント会場として利用

の2つが案として浮上しました。

今週はこれについて深堀します。

3.3.1 撮影場所としての検討

まずUE内でMovieを撮影する方法をしりません。何となくLevel Sequenceを使用するのは分かりますが、それ以上は全く知らないです。

調べます。

Tutorialが大量に出て来ました。

こういう中でどのTutorialを選択するのが正解なのかですが、そのTutorialが作成した映像より良い物は作れないです。

ので自分が作成したい映像を最初に上げているTutorialが良いです。

正し、中には別な手法で作成した映像を載せている悪質なTutorialもあるかもしれません。

一応、注意しながら見る事にします。

このTutorialが良いですね。

映像が綺麗です。

後、完成した映像が一応映画として成り立っています。

とりあえずこれで映像作品の作成方法を勉強してみます。

3.3.2 MetaverseのEvent会場としての検討

もうこれは単純にUEFNでMapを作成してその中にConcert会場を作成したらいいだけと思います。

となるとVerseの勉強が必要になるのか。

VerseのTutorialでも調査します。

きちんとしたProgrammingのTutorialはないです。

以下の公式のTutorialが一番マシかもしれないです。

ぱっと見ましたがこれはProgrammingを知らない人向けの講座ですね。

まあ基礎を勉強する人にはいいかもしれません。

これはUnreal Sensei氏がVerseのTutorialを作成するまで待った方がいいかもしれません。

3.4 Virtual Textureを配置している岩に追加

3.4.1 今までの復習

今週は前回、岩にVirtual Textureを使用したCaseを復習します。

普通にVirtual Textureを使用すると以下の様にVirtual TextureのTextureのサイズとLandscapeのTextureのサイズが同じになりません。

これの直し方が2023-03-20のBlogの「2.LandscapeのみのGameを作成する」にまとめてありました。

因みにこのVirtual Textureの作成方法に関しては2023-03-13のBlogの「2.LandscapeのみのGameを作成する」でまとめてあります。

正しこのやり方で出来るのは以下のようなLandscapeになります。

以下の部分のような岩とLandscapeのつなぎ目は綺麗に表示されません。

この部分を直せるかどうかで値千金の違いが生まれると思っています。

3.4.2 岩とLandscapeのつなぎ目を直す

これ2023-05-28のBlogの「5.Niagaraの勉強」で実装した以下のEffectで

使用した以下の実装方法を上手く組み合わせたら

直せそうな気がします。

これを試してみます。

3.5 海岸の砂浜に足跡を追加

3.5.1 今までの復習

砂浜ではないですが、雪の上に足跡を作成する方法は

で検証していました。

これ勉強したのつい最近と思っていたんですが、何と一年も前の話です。

しかもこれUE4でやっています。UE5ではMaterial内でDisplacementが使用出来なくなってしまったのでここで勉強したやり方はそのままでは使用出来ないです。

一応、どんな事を勉強したのかを簡単にまとめておきます。

2022-05-30のBlog

CodeLikeMe氏のLandscape Deformation in Unreal Engine を勉強していました。

今週は軽く読み直したのであんまりはっきりした事は分からないですが、何とこのTutorial、Virtual Textureを使用して足跡を作成しています。

この週はこのTutorialの勉強をしただけです。

2022-06-05のBlog

Marvel Master氏のUnreal Engine Basic Dynamic Snow Tutorial - with Runtime Virtual Textures - UE4.25を勉強していました。

以下の大迫力のヤツです。

この週も実装はしてなかったです。

2022-06-12のBlog

Marvel Master氏のUnreal Engine Basic Dynamic Snow Tutorial - with Runtime Virtual Textures - UE4.25 を実装しています。

結果です。

<まとめ>

このやり方ではUE5では足跡の実装は出来ないので、別な方法で実装する必要があります。

3.6 Tutorialの調査

色々調べたんですが、Unreal Engine 5 - Footprints In the Sand (Landscape Displacement)しか見つからなかったです。

来週、もう少し調査します。

4.Materialの勉強

先週はMaterialの勉強をする時間が無かったので、先々週勉強したSand Shader - Advanced Materials - Episode 14 [6]を実装します。

4.1 Sand Shader - Advanced Materials - Episode 14 [6]を実装する

このTutorialは砂漠における砂のMaterialの作成方法について解説しています。

ここで凄いのはNormal MapのDetailを使用する事で砂漠の遠くのSpecular Lightが

これから

これに

変化している所だと思います。

この辺の違いをはっきりと確認したいのでしっかり実装していきます。

<Textureの作成>

Quixel BridgeからBright Desert MaterialをImportします。

これをGIMPで使用出来るようにExportする必要がありますが、やり方を忘れてしまいました。

調べます。

これで出来るみたいです。

そしてGIMPでExportしたTextureを開きます。

全部普通に開けました。

まずBase ColorのTextureから変更します。

Desaturationします。

Desaturate...を選択します。

以下の設定が表示されました。

よく分からないのでOKを押します。

出来ました。

今度はこのTextureのLevelを調整します。

TutorialではCurveの真ん中が0.5になるようにセットすると言っていました。

Curveの形状がTutorialと全然違います。

のでCurveの両端を指定してその丁度中間が0.5になるようにしました。

結果です。

これで出来ているのか不明です。

実際に使用したら分かるでしょう。

次にNormal Mapの調整です。

RGBAに分割します。

やり方を忘れてしまいました。

調べます。

2023-01-22のBlogにまとめていました。

Color、ComponentsそしてDecomposeを選択して

以下のBoxを表示し

RGBAを選択してOKを押します。

以下に示した様にRGBAで分割しました。

ここのBlueにはなんのDataも無いのでこのBlueに先程のBase ColorをDesaturationしたImageを入れます。

やり方は2023-01-22のBlogに書いてありました。

結果です。

これをExportします。

適当にExportしたら出来ました。

<Materialの作成>

今度はこれをUE5にImportします。

これも適当にいじったら出来ました。

このTextureを開いて設定を確認します。

SRGBのCheckは外れていました。

Compression SettingsはBC7に変更しました。

Materialを作成します。

名前はM_MySandにしました。

まずNormal Mapを復元します。

いつものやり方です。

TexCorrd[0]ノードを追加しました。

このMaterialを試すLandscapeが無かったです。

Gaeaにあった以下のTemplateを使ってみます。

UE5内にImportしました。

こんな感じです。

取りあえず、Quixel BridgeからDownloadしたBright Desert Materialに付属で付いていたMaterialを使用してみました。

結果です。

はい。

うん。一応砂漠っぽいです。

これに先程作成したMaterialを使用します。

おお、かなり凸凹しています。

今度は色を追加します。

結果です。

うーん。

カメラの近くの砂のSizeが大きすぎる気がします。

Tutorialは特に何もしていなんですが、勝手に以下の値を変更してしまいます。

結果です。

これだと丁度いい感じがします。

今度は遠くがテカテカしているのを直します。

今の状態だとあんまりテカテカしていないのでDirectional Lightの向きを調節しました。

Roughnessの値を1にしました。

結果です。

確かに岩のテカりは無くなりました。

<砂のDetailのNormal Mapを作成する>

まずGIMPで以下のNoiseを作成しました。

何とGIMPには以下に示した箇所にNormal Mapを生成する機能がありました。

これ使用してみます。

結果です。

Tutorialは1024x1024pxに変更していますが、このままExportしてみます。

UEにImportしました。

このTextureの設定をNormal Mapのそれに変更します。

そして以下の実装を追加しました。

TextureのSizeが2048 Pixelです。

Landscapeは495倍しているので約500倍と考えます。

500 x 1cm = 500cm

に2028 Pixelなので

500cm/2028 pixel = 0.24cm/Pixel

になります。

ので砂粒の大きさは2.4mmです。

まあ許容範囲の大きさでしょう。

結果です。

地面にものすごく近づきました。

かなり砂粒感があります。

写真を張り付けた感じはまったくしません。

Specular lightの感じです。

思っているよりテカっています。

Roughnessが一の時です。

これは全然違う。

Powerの値を0.1に変更しました。

結果です。

うーん。

今度は砂のSizeを0.5mmに変更してみました。

結果です。

うーん。

テカり方はあんまり変化しませんね。

今度は逆にPowerの値を0.5に上げてみました。

結果です。

うーん。

これはこれで砂漠の暑さが表現出来てる気がしますね。

この設定だと岩がほとんどテカってないです。

かなり暑い感じがしますね。

最初のTextureのSizeも調節しました。

結果です。

うーん。

Tilingが見られますね。

今回はやりませんが、Macro Varianceを組み合わせる必要がありますね。

他の位置から見たImageです。

テカりが本物の砂漠の暑さを表現しています。

これも砂漠っぽいです。

やっぱり凄いですね。このMaterialは。

5.Niagaraの勉強

先週出来なかったCGHOW氏のWaterfall Scene in UE5.2 Niagara Tutorial [7]を実装します。

5.1 Waterfall Scene in UE5.2 Niagara Tutorial [7]を実装する

まずLevel Designをやります。

うーん。

一応出来ましたがなんか白過ぎます。

Level Sequencerを追加します。

一応CamaraのMotionも追加しました。

Niagaraを作成します。

EmitterのModuleを調整していきます。

まずPropertiesのSim TargetとBoundsの設定を以下の様にします。

Boundの値を以下の様にします。

この後は微調整なので記録には残しませんが以下の様になりました。

今度はCollisionを追加します。

Particle Update SectionにCollision Moduleを追加します。

これで一端Level上に配置して確認します。

こんな感じでした。

Tutorialの言う通り、地面とぶつかってBounceしています。

Particle Update SectionにあるCollision ModuleのRestitutionの値を0にします。

Restitutionは以下の機能があるそうです。

結果です。

確かにCollisionしなくなりましたが、岩や地面にSpriteがくっついています。

のでFrictionの値も0にしました。

結果です。

あんまり変りません。

今度はRender SectionにあるSprite Renderer ModuleのAlignmentの値をVelocity Alignedに変更します。

これは何をやっているのか今一分かってないです。

更に、Particle Spawn SectionにあるInitialize Particle Moduleの以下の値を変更しました。

更にCurl Noise Force Moduleも追加しました。

Curl Noise Force Moduleは以下の値を変更しました。

結果です。

滝に捻じれが追加されました。

本物感がぐっと上がりました。

Level上のNiagara Systemです。

こっちは滝っぽくなくなってしまいました。

Spawn Rate ModuleのSpawn Rateの値を10,000に変更します。

結果です。

谷底から見た場合です。

遠くから見た場合です。

ほぼ滝になりました。

一寸だけ水が飛び出した方が滝らしくなるので

Particle Spawn SectionにAdd Velocity Moduleを追加します。

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

結果です。

もう完全に滝の動きをしています。

Particleが落ちている時は白、止まっている時は青になるようにします。

Particle Update SectionにColor Moduleを追加しました。

Color Moduleの設定は以下の様にしました。

滝をいくつかの場所に配置しました。

System StackのPropertiesにあるWarmup Timeの値を以下の様に変更しました。

以下に示した解説がありましたが

あんまり意味が分かりません。

Nanite Systemがカメラが向いていない時は消えてしまいます。

これを直します。

Niagara Particles Dissapear When NOT in Camera View [8]によると

と書いてありました。

ので以下の様に10倍にしてみました。

結果です。

Niagara Systemが起動するようになりました。

以下のAviでExportしたのをGifで撮影したのを示します。

最後が切れてしまっています。

更に言うと全体で4秒しかないです。

Level Sequenceの使用方法を勉強する必要があります。

<Mistの生成>

これは来週やります。

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

今週はLaptopを持って知人にこのGameをPlayしてもらいました。

Laptopを起動したらMicrosoftのPasswordを変更してくれ。って出て来て思わず変更しちゃったんですが、一寸軽率だったかもしれません。

  • Playするに当たってGameの遊び方は説明しない。正しPCの操作で躓いた時は、積極的に介入する。

を守ってGameをPlayしてもらいました。

その結果を以下にまとめます。

6.1 GameをPlayしてもらった結果

まず最初の画面ですが、

なんの問題も無くStart Buttonを押しました。

日本人は英語が分からないので英語で書かずにカタカナを使用すべきという教訓が、まことしとやかにインディーゲーム界で流行っていますが、どうなんでしょうか?

次の画面です。

これも開始を迷わずに押してくれました。

次の画面です。

先攻後攻を決めるためにどちらかのCardを選択します。

これも全く迷わずにCardを選択出来ました。

次の画面です。

これは出来なかったです。

知人はDrag & Dropは知っていたんですが、そのやり方は知りませんでした。

更にこれはUE側のBugですが、一回Drag & Dropを失敗するとこのWidgetが止まって動かなくなります。

その場合は「決定、又はやり直し」Buttonを押すと最初からやり直せるんですが、それも説明する必要がありました。

で、

やっぱりこのWidgetは作成し直す必要がある。と確認出来た。と思ったら、

何と、知人から

「このDrag&Dropは非常に面白い。最初はやり方が分からなかったから戸惑ったけど、理解したら簡単だった。しかも操作してとても楽しい。」

とのコメントを頂きました。

うーん。

そうか。

操作の説明が難しいからと言ってそのSystemを採用しないのも駄目みたいです。

これはYouTubeで操作方法についての解説動画を作るべきですね。

次の画面です。

はい。って言って本当に待機していました。

次の画面です。

ここは沢山のCommentを貰いました。

まず「UIでCharacterの顔が見えない。」です。

これは後で、Gameに勝つためには、UIに表示される情報が重要だと理解したら、「あ、だからなのか。」と勝手に納得していました。

でもこれはためになりました。

Userはその時にある情報で何が正しいのかを判断するんです。その時の情報が全てなんです。

だからUserが持っている情報を把握する事とその情報に基づいてどんな判断をするのかを正確に予測するは凄い大切な事になります。

この観点が抜けている事に初めて気が付きました。

次のCommentですが、召喚したMonsterが勝手に攻撃を始めている事に衝撃を受けていました。

勝手に動いてるよ。

と犯罪でも目撃したかのように報告して来ました。

それで、私がそれであっていると説明したら、黙りましたが困惑しているようでした。

次に進むためにはComment欄にある「読みました」Buttonを押す必要があります。

何時まで経ってもそのButtonを押さないので、これは理解出来てないな。と思って

「「読みました」Buttonを押したら次のCommentが表示されるよ。」

とAdviceしたら、

「まだ文章を読んでる途中。」

と怒られてしまいました。

以下のたった三行の文章ですが、

知人はその言葉の本当に意味する所を、一生懸命考えていました。

言われてみれば、初めてこのGameをPlayする人には、右翼とか左翼とか対戦相手とかが何を指しているのか全く分からないです。

で、時間も無いのでその辺の内容を私が口頭で説明してしまいました。

そしたら成程って納得しました。

次の画面です。

ここでは使用する魔法を選択します。

ここで知人はどれを選択すれば良いのか分からないでいました。

以下の部分が魔法を選択するためのButtonに見えなかったみたいです。

これらが、魔法である事とそれぞれの魔法の特質について口頭で説明しました。

更に交換の魔法の効果を説明するために、

後、これはGameをしながら自分で発見する事だけど、断ってそれぞれのMonsterがジャンケンの特性を持っている事も解説しました。

その説明を聞いたら、知人は

「結構、面白いかも」

とポロっと言っていました。

それ聞いたとき、思わずガッツポーズをしてしまいました。

この後の選択は、

  1. 魔法を選ぶ、
  2. Monsterが勝手に攻撃する。
  3. 先攻後攻を選択する

のLoopに入るので、問題なく選択する事が出来るようになりました。

知人は私の説明でジャンケンの特性を理解したので、ジャンケンに負けているMonsterの配置を交換の魔法を使用して変更しました。その結果、最初の戦闘に勝つ事が出来ました。

以下にPlay後の知人の感想をまとめます。

  • 面白かった。
  • 戦闘中に考える時間を確保出来る。
  • 反射神経に影響されないでGameが出来るので普段Gameをしない層にも優しい。

これらはTurn制を採用したから得られた成果です。

今、UE5でGameを作成している99%の人は、Action制を採用していますが、Turn制の方が万人受けすると信じてTurn制を採用した選択を評価してもらえた感じです。

まあ評価してくれたのはまだ一人だけですけど。

後、人間って本音が顔に出るのは隠せないですね。

本当に面白そうにしている顔を見て、こっちのやる気もSwitchが入りました。

私はGameにはもう未来が無いと散々このBlogに書いていましたが、そうでもないかもしれません。

まだGameにも希望があるかもしれません。

6.2 今のNet時代にGameを売るためのある秘策

<何故Gameを作るべきではないのかについての説明>

このBlogで何回も書いていますが、Game実況系の(特に英語圏の)Influencerは新しいGameが販売されるたびにボロクソに批判します。

これはYouTubeなどで再生数を稼ぐためにもっとも効率的な手段で、きちんとDataに出ています。

のでこれからも新作Gameが販売されるたびに誹謗中傷が無くなる事は無いでしょう。

この誹謗中傷を聞いたらUserはどんなに面白いGameであっても買う気は無くなってしまいます。

この誹謗中傷の嵐を止めるためには、膨大な広告料を払ってGame実況系のInfluencerに公平な批評をしてもらう必要があります。

公平な批評をしてもらうのに金を払う必要が有る訳です。

そんなの個人や少人数で作成しているGameには無理です。

大体、Gameは娯楽なんです。

作るために金を払う必要があるのは当然ですが、遊んでもらうのに金を払っていたら本末転倒で、儲けが出る訳ありません。

Gameで遊んでいる人に金を払わないとGameを買ってもらえない状態は異常なんです。

だからIndie Game産業は近い将来に無くなると思っています。

そして尖ったGameを作るIndie Game産業が無くなれば、利益が確保できるシリーズ物しか作成しない大手のGameしか残らなくなるでしょう。

最終的には、それらのシリーズ物も次第に利益が確保出来なくなってGame産業自体が衰退していくと推測しています。

これは任天堂のような例外もありますが、任天堂でもこのTrendにはいつか屈服する日が来ると思っています。

今回、ゼルダの新作の発表で、任天堂は違法なCopyをEmulatorでPlayしているInfluencer達を徹底的に取り締まりました。

こんなに激しい攻撃を日本企業がしてくると思ってなかった英語圏のInfluencer達は、反撃の準備を整える間も無く、敗北を喫しました。

しかし次からは対策して来ます。

どんな攻撃をしてくるのかは分かりませんが、単なる日本企業である任天堂が世界中と戦争しても勝てる軍事力を持ったアメリカの世論を味方につけた英語圏のInfluencer達を、今回の様に力でねじ伏せるのをずっと続けるのは無理があります。

いずれ敗北します。

のでUE5のUserに警告しますが、UE5を使用してGameを作成するための勉強をするのは下の下です。

一番、将来性があるのがMetaverseだと思っています。

これは旧Facebookの失敗から既に将来性が無いと思われていますが、実際は宝の山です。

かなりの確率で当たる小さな金脈と多少の労力や資金が必要になるが、とんでもなく大きく当たる大きな金脈の両方があります。

次に可能性があるのはCG映像関連です。

これはInfluencer達を見れば分かりますが、今のネット社会では動画を作れるのは強者に成れるんです。

Blogで沢山の言葉で説明しても世の大半の人は理解出来ません。

大半の人が理解出来る言葉の量は三行までです。

四行以上で説明しなければ理解出来ない複雑?な事象は、極一部の人だけにしかその真意は伝わらず、誤解、曲解されたまま世の中に受け入れられてしまいます。

ところが映像で説明すると、そんな人たちでも複雑な事象が理解出来るんです。

そしてUEなら世界最高LevelのCG映像を簡単に作成出来ます。

UEを学習するUser達はまずこの2つで利益を出す方法を考えるべきでGameを作成するのは最低の手段だと理解すべきです。

これが私のGameに対する現在のStanceで、この考え方がほぼ正しいと思っているのは変わりません。

<Gameを売るためのある秘策>

変わりませんが、今回の知人の本当に楽しそうな顔を見てGameにもまだ希望があるかもしれないとも思いました。

それで考えました。

以下のやり方ならもしかしたらGame系のInfluencerを味方につけられるかもしれないです。

まず1000円のGameがあるとします。

値段はどうでもいいんですが、計算しやすいように1000円としました。

3割はショバ代で取られるので利益は700円です。

これをInfluencerに宣伝してもらうんです。

どうやって。

まず1000円のGameを850円で買えるようにします。15%のDiscountです。○○さんの紹介からこのGameを買った人は定価の15%引きです。とやります。

これは消費者にとっては得ですので、文句が出るはずはありません。

次にInfluencerには紹介料として一個のGameが売れる度に15%の利益つまり150円が入るようにします。

つまりその人の紹介でGameが1000本売れたら150,000円入ります。

ショバ代で3割取られて700円、更に値引きしたのとInfluencerに払うお金で300円取られます。残りの400円がGame制作者の利益になります。

それでも1000本売れたら40万円の利益になります。

Serverとかを使用しない独立したIndie Gameだったらこれでも黒字になる気がします。

何よりもGame系のInfluencer達のネギャキャンを避けれるのが強みです。

しかもこの方法はInfluencer達にもかなりの益があります。

勿論、直接利益があるのは当然ですがGame系のInfluencerとしての人生を終了しなければならない炎上を避ける事が出来るんです。

Influencerがお金を貰ったGameだけを公平に批評していると、そのInfluencerに対して誹謗中傷がしやすくなります。

これはInfluencerにとってはCareerの終わりに繋がる非常に危険な掛けになってしまっています。

しかし現状避ける方法が無いのと利益が凄いのでInfluencerは気が付いてないふりしてます。しかし潜在的には非常に危険な状態です。

これを避ける事が出来るんです。

この方式だったらつまらないGameは宣伝する必要がないんです。どうせ宣伝しても売れないから儲けに繋がらないんです。

面白いけどあまり売れていないGameこそこの方式で宣伝する価値があります。

そしてそういうGameを紹介したらその動画の視聴者から

「あのGame系Influencerはマイナーだけど面白いGameを良く知っている。」

とInfluencerとしての評価を挙げる事が出来るんです。

金が貰えてInfluencerとしての評価が上がる。

と言うInfluencerにとっても非常に有難い状態になります。

勿論、Gameの購入者にも得があります。

Game系のInfluencerから購入する事で、定価より安く購入出来るからです。

7.Gaeaの勉強

今週もまたGeologyの勉強とYouTubeの動画の作成を行います。

7.1 Geologyの勉強

今週はGeology 6 (Origins of Lava and Magma)[9]を勉強します。

7.1.1 Geology 6 (Origins of Lava and Magma)[9]を勉強する

このLectureはMagmaがどこから来ているのかについてのLectureだそうです。

そんなの地球の中心だろ。何を勉強する必要があるのかと思ったら、

この話題は非常に議論されていて

未だにこれだと言う結論は出てないそうです。

それを聞いて一寸興味が出て来ました。

今週もそれぞれの節に分けてその内容をまとめます。

<Origin of Magma>

以下の内容が説明されていました。

  • まずMagmaは固体の岩から生成されると考えられています。
  • 岩が(部分的に)溶ける場所はCrustとMantle上層です。
  • Pressureの役割について
    • Pressureが上がると岩の融点も上がる
    • のでPressureが下がったところで岩が溶けていると考えられる

なんとMantleは固体だそうです。しかも緑と黒色でOrangeになるのはMagmaやLavaになった後だけだそうです。

<Decompression Melting>

先程の内容を図で解説しています。

Lectureでは以下の図を使用してDecomposition MeltingによってRockがMagmaに溶解する仕組みを解説しています。

化学とComputer ScienceのDouble Majorだった私にはこの系統の図はもう何回も見て来たので、簡単に理解出来ます。

が初めて見る人には結構難しいかもしれません。

要は温度は変わらずに深さだけが変化します。深さが変化したら当然Pressureも変化します。

ので温度が変わらないで深度が浅くなった時に、Pressureが下がり結果として岩が溶解します。

これって熱力学でいう等温かつ定積な変化ってやつでしょう。等温で圧力が変化しています。

次のSlideでHeat Transfer Meltingが紹介されていました。

これは定圧かつ定積な変化になるのか。

<Volatile>

この次のSlideが面白かったです。

Volatileとは水の事だそうです。

水がMantleに混じると以下の図の赤線で示した部分がMelting Curveに変化するそうです。

成程、水が一種の触媒になるのか。

次のSlideです。

ここでは色々なMineralがMagmaから生成される温度を示しています。

先週勉強したGranite、Rhyolite、Diorite、Andesite、そしてBasaltなどの岩の名称もこの中にあります。

もうこれらの岩の名称を忘れてしまいました。

ここで重要なのは、同じVolcanoから噴出したのに含まれる構造物が全く違うRockが生成される理由だそうです。

うーん。

今までの説明だと温度が違うから?

説明聞いたらその通りでした。

次のSlideです。

次に温度が下がっていくにしたがってそれぞれの構造物が結晶化していく様を表しています。

<Magmatic Differentiation>

これは先程の説明にあったMagmaの温度が下がって構造物が次々に結晶化していくPatternです。

<Assimilation>

Magmaに周りの岩の破片が入り込んで溶解する事でMagmaの構造物が変化します。

<Magma Mixing>

2つの構造物が違うMagmaが混合する事で別な構造を含むMagmaが生成されます。

<Evolution of Magmas>

ここは2枚のSlideで解説していました。

一枚目のSlideの内容は、Rockは化合物なので溶解する温度に幅があり、氷が水に溶けるようにはRockはMagmaにならないという話以外は、TemperatureとPressureのGraphと同じ内容でした。

2枚目のSlideは前に示したBowen’s Reaction SeriesのSlideとほぼ同じ内容でした。

<Intrusive Igneous Activity Most Magma is empla...>

Magmaが地中で固まって個体化したのを、Plutonと呼ぶそうです。

Plutonには以下の特徴があるそうです。

  • 形状
    • Sheetのよう
    • 巨大
  • 周りの岩に対しての方向
    • Discordant: 逆らう
    • Concordant: 同じ

以下にPlutonの例を示します。

  • Dike
  • Sill
  • Laccolith

SillはSheetのようでConcordantと言う特徴があるそうです。

LaccolithはSillに似ていますが、LensかMushroomのような形状をしているそうです。

<A Sill in Sinbad Country Utah>

SillのImageです。

<Plutonic Igneous Activity>

Plutonの活動はBatholithを見て推測します。

Batholithとは以下に示した図の山の部分を指します。

大体山脈の山頂になっています。

<Mineral Resource and Igneous Processes>

特になし

<Volcanoes and Plate Tectonics>

特になし

7.1.2 Geology 6 (Origins of Lava and Magma)[9]を勉強した感想

今回の講義は、先週勉強した色々なIgneous RockがどうやってMagmaから生成されるのかについて勉強しました。

Pointは地下に行くほどPressureが上がるので温度が高くなっても岩は中々解けない事です。

これによって固形物になる構造物に差が生じたり、周りの岩の影響でMagmaの構成が変化したりします。

7.2 GaeaのTutorialの作成

今週は先週、思いついたColoringのTutorialの作成の続きを行います。

7.2.1 Colorの追加

ここでは今まで作成したTerrainに色をつける方法について学習します。

と言っても作成したTerrainは無いのでTemplateにある以下のTerrainを使用します。

Terrainに色を追加するためには以下のColor GroupにあるNodeとData GroupにあるNodeを使用します。

色を塗る方法を理解すると言うのは、これらのGroupにあるNodeの使用方法を理解するのと言うのと同義になります。

それでは、まずもっとも簡単な単色を塗る方法から勉強しましょう。

7.2.2 単色で塗る

まず以下の様に単色でTerrain全体を塗る方法を示します。

これは以下のような実装で簡単に作成出来ます。

Terrainを完成させたNodeの後ろにConstantノードを繋いだだけです。

ConstantノードはColor Groupには無いですが以下の設定で色を指定出来るようになります。

7.2.3 二色で塗る

流石にTerrainを一色で塗るだけでは単純すぎます。

ほとんどのUserはせめて二色で塗りたいと思うはずです。

はい。

では次に二色で塗る方法を解説します。

仮に灰色と茶色の2色を選択したとします。

ここである問題がある事に気が付きます。

どこを灰色で塗ってどこを茶色に塗るかを指定する必要があるんです。

例えば以下のTerrainなら

山の部分を茶色で塗って、地面の部分を灰色で塗りたいと。思ったとします。

そう思った時に、地面の部分や山の部分を指定する方法が必要になってきます。

はい。

それをするのが以下に示したData GroupにあるNodeです。

しかし事はそう簡単ではないです。

実はこのGroupにあるNode達は一寸複雑な方法を用いて使用します。のでさっきのような単純にNodeを繋ぐだけでは使用出来ません。

しかしこのNode群の中で例外が一個あります。

それがSlopeノードです。

これはかなり簡単に扱う事が出来ます。

ので、このノードを使用してどうやって色を塗る箇所を指定するのかを説明します。

まず先程のConstantノードでやったようにSlopeノードをTerrainを作成したNodeの最後に繋いでみます。

すると以下のような結果になります。

大体、真っ白ですが一部が黒くなっています。

今度はSlopeノードのPropertiesを見ます。

MinとMaxとFalloffという3つの値があります。

それぞれの値の単位は°になっています。

これは簡単に説明するとTerrain上の全ての点のTangent を計算してその角度がMinとMaxの間の角度の点は白、それ以外は黒に塗れと言っています。

そしてFalloffはその間の灰色の部分を指定しています。

この例でいうと45°から10°を足した55℃の間は白から黒へと段々に変化しています。

となるとこのParameterをいじる事で山の部分を白く、地面の部分を黒く指定する事が出来るかもしれません。

試しにMinの値を5°にしてMaxの値を90°にしてFalloffの値は0°にします。

地面の部分のTangentの角度は限りなく0°に近いです。大体5°以上が白くなるように指定したら地面は黒くなるでしょう。

逆に山の部分のTangentの角度は5°以上なら問題ないです。ここでは最大値の90°を入れる事にしました。

Falloffは0°にしました。特に理由は無いですが、灰色があると基本を理解するのに邪魔になるかもしれないので白と黒だけにしておきます。

結果です。

見事に山の部分は白、地面の部分は黒に塗り分けられました。

今度はこれに先程の色を指定したいんです。

山である白の部分は茶色で塗って、地面である黒の部分は灰色で塗りたいんです。

でもそのやり方は分かりません。

しかし先程の単色の塗り方で、茶色と灰色のConstantノードの作成方法はわかります。

以下の様にConstantノードだけ繋げてみました。

最初のConstantノードには茶色を指定しています。

こんな感じです。

次のConstantノードの設定です。

結果です。

Slopeノードの白と黒にこれらの色を指定出来れば完成です。

うーん。

どうやったらそれが出来るんでしょうか?

はい。

もう最初から答えを教えます。

Combineノードを使用すれば出来ます。

Combineノードを使用する事でAとBを混合する事が出来るんです。

ではCombineノードの使用方法を説明します。

まず以下に示した様に入力Pinが3つあります。

最初の2つのPinがAとBを入力するPinです。

最後のPinがMaskつまり白黒を指定するPinです。

これで黒の部分にAの色、白の部分にBの色を配置します。

山である白の部分は茶色で塗って、地面である黒の部分は灰色で塗りたいので、以下の様に実装します。

Aには灰色、Bには茶色を指定しMaskには先程のSlopeノードの結果を指定します。

結果です。

これ見て何か色が混じってる気がしませんか。

これはCombineノードの設定がDefaultでは

50%だけ混ぜるようになっているからです。

つまり白い部分にBの色を50%だけBlendしている状態になっています。

これは100%にしましょう。

結果です。

はい。

望み通りに山の部分を茶色で塗って、地面の部分を灰色で塗る事が出来ました。

これが可能になったのは以下の実装のお陰です。

この実装方法こそが、Colorの追加でもっとも基本となる形です。

これを理解しないといつまで経っても自分で好きなように色を塗る事が出来るようになりません。

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

来週はこの実装を使って以下のData GroupのSlope以外のNodeを使用して

色々なMaskを紹介していきます。

8.Houdiniの勉強

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

8.1 Unreal 5.2 Preview PCG Tutorial - Part 3 - Scattering Points [11]を実装する

先週、Unreal 5.2 Preview PCG Tutorial - Part 3 - Scattering Points [11]を勉強したので今週はそれを実装します。

Surface Sampler>

新しいPCGを作成しました。

Surface Samplerノードを追加します。

結果です。

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

結果です。

Transform Pointsノードを追加します。

結果です。

<Grid>

Create Points Gridノードを追加します。

結果ですが何も表示されません。

Tutorialで確認します。

Comment欄にLocalにCheckを入れるとGridが現れた。と書いていました。

入れました。

結果です。

現れました。

Point Scaleを0.5に変更します。

結果です。

Copy Pointsノードを使用して2つのGridを接続します。

何もなくなりました。

Tutorialを見たら以下の設定を追加していました。

でも何も現れません。

これは多分ですが、Copy Pointsノードの方でもLocalを指定する必要があるんだと思います。

しかしその機能はCopy Pointsノードにはないみたいです。

色々調べた結果以下の様になっている事が判明しました。

とんでもない位置に生成されていました。

ひょっとして、

Create Points Gridノードの

LocalをOffにしてみました。

結果です。

あ、出来ました。

うーん。

分かりました。

まずCreate Points Gridノード単体をDebugで表示すると

何も表示されません。

ここでLocalにCheckを入れると

以下の様にGridが表示されるようになります。

しかしこのままCopy Pointノードに以下の様につなげると

以下のようなとんでもない位置にGridを生成します。

これを直すには先程のCreate Points GridノードのLocalのCheckを外す必要があります。

それを外すと以下の様にTutorialと同じ結果になります。

これで「Pointを生成し、そのPointの周りに小さなPointを沢山生成する。」というこのTutorialの目的は達成出来ました。

これ出来なかったら、このTutorialを勉強する意味が無くなってしまいます。

危ない所でした。

続きをやって行きます。

Copy Pointsノードの

Scale Methodの値をExtentsに戻し

Bound Modifierノードを追加します。

更にBound Modifierノードの以下のPropertiesの値を変更します。

結果です。

これPointが少し小さくなっている気がします。

このNodeの機能に関してはまだよく分からないですね。

Pointを散らすそうです。

Transform Pointsノードを追加しました。

以下のParameterを調整しました。

結果です。

確かにPointが散らばっています。

端の方に配置されている小さいPointが四角上に配置されているので、円状に配置されるように変更します。

以下の様にDistanceノードを繋ぎました。

更にDistanceノードの以下のParameterを以下の様に変更しました。

結果です。

Density Filterで端の白いPointを消します。

結果です。

変わってない?

DistanceノードのMaximum Distanceの値を300に変更しました。

結果です。

白い部分が現れました。

これに対してDensity Filterノードを追加します。

今度はPointsが円形に散らばっているようになりました。

<Scale by Density>

まずこのNodeが見つかりません。

Comment欄を読んだら

と書かれていました。

成程。

これはDeprecatedされたNodeを使用するための方法です。

2023-05-22のBlogで使用していました。

同様に使用してBlueprint Element TypeにはScale By Densityを選択しました。

出来ました。

Scale MinとMaxに以下の値をセットしました。

結果です。

おお、Tutorialと同じ結果になっています。

次は以下のTransform Pointsノードの

以下のParameterの値を以下のように変更しました。

結果です。

円が小さくなりました。

先程のOffsetの値を全部0にして大きなPointのDebugも消しました。

ここで中心からある程度の位置にあるPointが消えている事が判明します。

Density Filterノードの以下の設定を以下の様に変更しました。

結果です。

更に先程のTransform PointノードのParameterの値も元に戻します。

結果です。

全部元に戻すと以下の様になりました。

今度はその重なっている小さいPointsを消します。

Differenceノードを使用します。

Differenceには以下のTransform Pointsを使用します。

結果です。

真ん中が開いていて最初に戻った感じです。

ただしTutorialと同じ結果にはなっています。

ここからBound Modifierノードを以下の設定で追加します。

結果です。

おお、出来ました。

Self Pruningノードの使用方法についてはSkipします。

これで完成です。

8.2 Unreal 5.2 Preview PCG Tutorial - Part 3 - Scattering Points [11]を実装した感想

思っていたよりかなり勉強になりました。

途中でTutorial通りに出来なくて、あきらめないといけないのかと思いました。

しかしComment欄に、既にそれらの問題を既に克服した人達が解決方法を示してくれていました。

その結果、最後まで実装する事が出来ました。

最新の技術を勉強する人達は頭が良い人が多い感じがします。

勉強していて楽しかったです。

このTutorialの勉強は今回で終わりにするつもりでしたが、気が変わりました。

やっぱり最後までやる事にします。

9.UEFNの勉強

今週も Unreal Editor for Fortnite Beginner Tutorial - UEFN Starter Course! [10]の実装の続きをやっていきます。

9.1 先週の復習

以下の建物を追加しました。

今週も続きをやっていきます。

9.2 建物を整備する

以下の建物を先週作成しましたが、地面と建物の間に隙間が有るんです。

これが気になってしょうがないんです。

これを直します。

以下のStatic Meshを見つけました。

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

<Trees and Foliage>

今度は木を追加します。

ここまできて3D酔いです。

Foliageが無いのはきつ過ぎます。

以下の様になりました。

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

10.YouTube動画の作成

今週は「6.戦闘システムの続きを作成する」で、

  • 何故Game産業に将来性が無いのか
  • UE5を学習している人はそれに対してどういう対応策を取るべきなのか、
  • そしてもしGame産業に未来があるならどういう条件なのか?

などをまとめました。

この話は結構重要なのでここでMind Mapでまとめる事にします。

Mind Mapでまとめる事で理論的な欠陥や辻褄の合わない点なんかも見つかるかもしれません。

その辺もMind Mapをまとめるに当たって補強していきます。

10.1 Mind Mapの作成

以下の感じでまとめたんですが、

だからどうしたの?

って内容になってしまいました。

単なる私の考え方が伝わった。良かったです。ってだけの内容になっています。

それはそれでいいんですが、YouTubeにまとめるとなるとImpactが足りないです。

もっと英語圏のInfluencer達が任天堂に総攻撃をかける準備をしています。

のような誰でも分かる内容の方がYouTube向けな気がします。

もしくは先週のGas LightingのようなこれからのNet社会をみんなが安全に使用するための指針になる話でも良い気がします。

今週は時間が無いのでこれでまとめますが、もう少し視聴者のためになる話でかつ聞いた後に幸せになれる内容が好ましい気がします。

この辺は完成してから反省します。

10.2 動画の作成

録画をしました。

何と最初の「何故Game産業には未来が無いのか?」についての動画だけで1時間20分もしゃべっていました。

これは編集する必要があります。

一回、全部見直しましたがかなり良いです。

今週はここで時間が無くなってしまいました。

11.まとめと感想

来週も色々やる事があります。

無理はしないで出来る範囲で頑張る予定です。

12.参照(Reference)

[1] OlympusMonsTutorials. (2021, May 9). C++ DirectX 12 Game Engine - [S01E04] - Settings and Loggers [Video]. YouTube. https://www.youtube.com/watch?v=Q7JKBDNIgvI

[2] Variadic functions. cppreference.com. (n.d.). https://en.cppreference.com/w/cpp/utility/variadic

[3] GeeksforGeeks. (2022, October 25). Variadic functions in C. GeeksforGeeks. https://www.geeksforgeeks.org/variadic-functions-in-c/

[4] TylerMSFT. (n.d.). Vsprintf_s, _vsprintf_s_l, vswprintf_s, _vswprintf_s_l. Microsoft Learn. https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/vsprintf-s-vsprintf-s-l-vswprintf-s-vswprintf-s-l?view=msvc-170

[5] What is vswprintf_s() in C?. Educative. (n.d.). https://www.educative.io/answers/what-is-vswprintfs-in-c

[6] Ben Cloward. (2023, February 2). Sand Shader - Advanced Materials - Episode 14 [Video]. YouTube. https://www.youtube.com/watch?v=NDb4WpE5bak

[7] CGHOW. (2023, May 17). Waterfall Scene in UE5.2 Niagara Tutorial | Download Files [Video]. YouTube. https://www.youtube.com/watch?v=IwEmx04MZyM

[8] Niagara Particles Dissapear When NOT in Camera View. (2022, September 30). Epic Developer Community Forums. https://forums.unrealengine.com/t/niagara-particles-dissapear-when-not-in-camera-view/263064/9

[9] Earth and Space Sciences X. (2015, October 30). Geology 6 (Origins of Lava and Magma) [Video]. YouTube. https://www.youtube.com/watch?v=AoXU2sSrK9Q

[10] Fortnite Sensei. (2023, March 31). Unreal Editor for Fortnite Beginner Tutorial - UEFN Starter Course! [Video]. YouTube. https://www.youtube.com/watch?v=0CcoOq963O8