UE4の勉強記録

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

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

1. 今週の予定

今週も予定を見直す時間がありませんでした。ぶっつけ本番でやっていきます。

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

  1. 映像作品としてのLevelの作成
  2. AIの勉強
  3. Nvidia Omniverseの勉強
  4. Gaeaの勉強
  5. Houdiniの勉強
  6. UEFNの勉強
  7. DirectX12の勉強

2. 映像作品としてのLevelの作成

2.1 Terrain Remix Brushes - Unreal Engine 5 Tutorial [1]を実装する

先週勉強したTerrain Remix Brushes - Unreal Engine 5 Tutorial [1]が実装出来るかどうか試してみます。

これ専用では無いですが、5.4がReleaseされたので新しいProjectを作成してそこで試す事にします。

<00:00 - 01:00 – Intro>

ここでは特にやる事ないです。

<01:01 - 02:14 - Landscape Setup>

Landscape Patchを追加します。

使うかどうかは分かりませんが、次いでにWater SystemもEnableしておきます。

UEを再起動しました。

Landscape Modeを開きます。

Enable Edit Layerが使用できるようになっているのを確認します。

なっています。

ここで先週のBlogでは

と書いてあります。

しかしこれは無いです。

やっぱり

を買わないと出来ないみたいです。

うーん。

そんなもんか。

ここでEnableしたLandscape Patchってどんな機能なんでしょうか?

それだけ調べる事にします。

Using Landscape Patches with Unreal Engine [2]にLandscape Patch使い方の説明が載っていました。

これを勉強します。

2.2 Using Landscape Patches with Unreal Engine [2]を勉強する

4分の動画なので、最初に全部軽く見ました。

Landscape Patchを使用すると以下に示したように配置したMeshとLandscapeの隙間を

Landscapeを盛り上げる事でMeshとLandscapeの隙間をなくします。

これがLandscape Patchの機能だそうです。

以下にやり方を示します。

まずLandscape PatchをEnableします。

再起動した後にCubeを追加しました。

Cubeを選択してAddを押し、Landscape Circle Height Patchを追加します。

追加したLandscape Circle Height Patchを選択し

以下に示したLandscapeにこのLandscapeをセットします。

更にLandscapeを選択して以下のEnable Edit LayersがOnになっている事を確認します。

Landscape PatchのPivot Pointを移動させると

以下のように

Cubeの一部をLandscape下に埋める事も可能になります。

ちなみにLandscapeの盛り上がりの形状は以下のRadiusとFalloffで管理します。

家や建物のMeshをLandscape上に建てる時に得に役に立つと言っていました。

今度はTexturePatchの場合です。

こっちは先程のPatchが単純な円形の盛り上がりでMeshとLandscapeを繋げるのと違い、NoiseをTextureとして受け取り、その情報を利用してそれなりに複雑な形状で盛り上がってMeshとLandscapeを繋げます。

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

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

この辺は自分でいじって確認します。

最終的には以下のようになりました。

以上です。

こんだけか。

先程作成したProjectで試してみます。

2.3 Using Landscape Patches with Unreal Engine [2]を実装する

まずLandscapeを作成します。

前にGaeaで作成したTerrainを使用して作成しました。

以下のCubeに対してLandscape Patchを使用してみます。

Landscape Circle Patchを追加します。

以下のParameterを調整します。

結果です。

おお、Landscapeが盛り上がってCubeを部分的に覆い隠しています。

今度はLandscape Texture Patchを試してみます。

以下のように表示が変わりました。

あ、Landscapeをセットするのを忘れていました。

が、Defaultでセットされていました。

Source ModeにTexture Assetをセットします。

Height Texture AssetにNoiseをセットします。

取りあえず適当なNoiseを選択して追加しました。

結果です。

うーん。

Noiseは見られません。

以下に示したHeight Encoding Settingsの値をいじると

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

おお、凸凹しています。

ただしPatchが効いている箇所と効いていない箇所の境界があからさま過ぎます。

更に調整します。

Patchが効いている箇所と効いていない箇所の境界は、

ほとんど区別付かなくなりました。

成程ね。こういう機能だったのか。

2.4 Terrain Remix Brushes - Unreal Engine 5 Tutorial [1]の機能についての考察

Landscape Patchの機能が判明したので、Terrain Remix BrushesがどんなToolだったのかも大体推測する事が出来るはずです。

やってみます。

以下の地形はMeshのようですね。

これをLandscape上に配置して

先程のLandscape PatchでLandscapeに追加しているようです。

LandscapeのMaterialが地形のMeshにも適応されていますね。

これはVirtual TextureでLandscapeのMaterialをMeshのMaterialにPassしているのかもしれません。

地形に応じてMaterialのLayerが変化する理由がわかりません。

Auto Material(World Aligned Blendノード)でも使用してSlopeの角度でどのLayerを使用するとか決めているのかもしれません。

更に岩も追加しています。

これはPCGで作成したようです。

うん。

大体理解しました。

Gaeaを使用したら自作出来そうですね。

2.5 無料のPluginでLandscapeの色を一瞬で塗る

なんとHow to Make Landscape FAST using Gaea 2.0 and Unreal Engine 5 [3]で無料でLandscapeの色を一瞬で塗ってくれる

Pluginが紹介されていました。

このTutorialは今週のGaeaのところで勉強する事にします。

2.6 Plateに自作したMaterialを使用する

以下に示したPlate部分のMaterialを改良します。

Asphalt関連のMaterialをMega ScanからDownloadしました。

まずはDefaultでついているMIを試してみます。

これはSizeの変更は必要がありますね。

色も明るすぎます。

後、Imperfectionの追加も必要です。

前と大体同じ感想です。

これは論外です。

道路のMaterialでは無いですね。

お、これは結構良い感じです。

Materialの名前を残しておきます。

次のMaterialです。

これも良い感じです。が前のMaterialよりは一寸おとりますね。

これは一寸白過ぎますか。

ここまで見て分かりました。

遠くから見た場合に必要なMaterialの要素は、Macroの汚れを示すNoiseやCrackです。

ま、それは兎も角として今回はPwnisher氏のMaterialを元に改変したMaterialを使用してこの道路のMaterialを作成する事です。

それをやりましょう。

作成したMaterialはこれだったけ?

このMaterialからInstを作成して

以下の場所に

以下のMaterialをセットしようとしたんですが、

出来ません。

何で?

UEを再起動して試します。

やっぱり出来ません。

TextureにVTって書いてあるんですけどこれが理由でしょうか?

Material内では普通に使用出来ますね。

Materialを複製してそこでTextureを交換しました。

このMaterialからInstanceを生成して

それを道路にSetしました。

この時点でかなり良い感じです。

Plane2の方から調整していきます。

Plane3の方です。

結果です。

www.youtube.com

Planeが道路から浮いているのがまるわかりです。

これは来週調整する事にします。

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

3. AIの勉強

今週もJeremy Howard氏のTutorialを勉強していきます。

3.1 Lesson 2: Practical Deep Learning for Coders 2022 [1]を勉強する

<plot_top_losses explanation>

Interpからplot_top_losses()関数を使用しています。

以下の結果が返って来ました。

Lossが最も高いImageを返すみたいですね。

Lossについての細かい定義なんかも説明していましたが、腑に落ちる説明では無かったです。

<ImageClassifierCleaner demonstration>

今度はImageClassifierCleaner()関数を使用しています。

この関数は間違ってLabelされたImageを綺麗にするそうです。

どうやってするんでしょうか?

以下に例を示しています。

この例ではTeddy BearのTrain用のDataを選択しています。

するとそれに使用するImageが表示されました。

DataをKeepするかどうかをここで選択出来ます。

でもこれ全部のDataをCheckする必要がありますね。

以下のように間違ったImageを消します。

これが終わったら

以下の実装で

Deleteに設定したImageを消し、Catという名前のFolderにそのDataを保存します。

<CPU RAM vs GPU RAM (VRAM)>

今度はMemoryの話です。

GPUのMemoryは4GBしかないから以下の箇所でClose and Haltを頻繁にしろ。と言っています。

これをするとMemoryをFree upする

って言っていますが具体的にどういう意味なんでしょう?

Memoryって解放するって意味位しか思いつかないですが、どうなんでしょう?

何と、CPUはRAMが一杯になったらHard Diskを代わりに使用しますが、GPUはRAMが一杯になったらそれで終わりって言っています。

これそうなの?

始めて聞きました。

<Putting your model into production>

で、このDataをCleanする技術をどうやってModelに取り込むかの説明になります。

で以下のHuggingFace Spacesの紹介が始まります。

この部分の説明は教科書には載ってないそうです。

このBlogを読んで勉強して下さい。と言っています。

検索したらすぐに見つかりました。

https://www.tanishq.ai/blog/posts/2021-11-16-gradio-huggingface.html

これは後で読む事にします。

何とこのBlogを書いたDr. Tanishq Abrahamは以下の番組で天才少年として紹介された事があるそうです。

しかもこの動画が作成された2022年の時点で18歳だそうです。

18歳でDoctorか。

羨ましいです。

Hugging FaceのHomepageに移動します。

うーん。

ここから何を説明するんでしょうか?

取りあえず説明をまとめていきます。

Create New Spaceを押します。

以下のPageに飛ぶので

空欄を埋めます。

ちなみにこのSiteはFreeで使用出来るようです。

Space SDKはGradioを選択しました。

Publicを選択したら全世界に公開されます。

このTutorialでは生徒はPublicにしろ。って言っていますが、かなりの暴論でしょう。

公開したDataが間違いだらけだったらその生徒を雇ってくれる企業は無くなる訳で、かなりRiskが高い話になります。

<Git & Github desktop>

今度は作成したPageの使用方法の説明です。

まずGitがあります。

ここで非常に簡単なGitの使用方法が説明されています。

まずGitHub Desktopを利用した使用方法です。

これです。

私はCommand Promptが嫌いなので使用するならこっちです。

<For Windows users>

でやっぱりTerminalで使用する方法の説明が始まりました。

まずWindowsを使用しているUserのために

以下のTerminalが紹介されていました。

まずこのTerminalをInstallしてここから命令しろ。って事のようです。

Ubuntuでやるから以下のCommandをTypeしろ。って言っています。

このCommand Prompt大好き人間のこの辺の感覚が嫌いなんです。

何でWindows OSを使用しているのにLinuxを走らせる必要があるんでしょうか?

無いでしょう。

Windows OSにだってこれらの事が出来るCommandが用意されているはずです。

そもそもGitHubMicrosoft社のものですし。

まあ良いです。

続きを見ます。

PowerShellをAdministratorとして開きます。

先程のCommandをPasteして実行します。

うーん。

これって先程DownloadしたWindows Terminalでやるんじゃないの?

なんか疑問が一杯で出来ます。

5分位経つとInstallが終わるので、

以下のようにExitをTypeしてPowerShellを閉じます。

これでTerminalが使用出来るようになったそうです。

以下のCodeをCopyして

Terminalを開き、Pasteします。

そして実行します。

そしてcd minimalを打つと以下の様になります。

これってMinimalというFolderに移動しろって意味でしたっけ。

多分、そうでしょう。

そしてそこに先程のGitのCodeがDownloadされているんでしょう。

今の状態ではこのFolderはEmptyらしいです。

そこで以下のCodeを打ちます。

いや、その前に以下のCodeを打ち込んでいました。

すると以下のようにVisual Studio Codeが開きます。

しかもこのFolderが開いています。

ここからApp.pyを選択します。

先程CopyしたCodeがそのまま載っていますね。

一寸は違うか。

Tutorialはこのままで先に進んでいます。

今度はGradioに移動します。

以下のIconをClickしました。

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

ここでMessageにTypeしてCheckをClickすると

TypeしたMessageがHugging Face Spaceに送られるそうです。

これはMessageだけじゃなくて書いたCodeとかも全部送られるのでしょうか?

まあ、この辺は後で、Hugging Face Space かGitのTutorialで確認します。

Hugging FaceのHomepageに戻りました。

作成した自分のPageです。

何と、Homepageが完成しています。

うええ。

凄い。

こんな事が無料で可能なの?

びっくり。

しかも先程のApp.pyで書いたCodeの内容が実装されていました。

凄すぎ。

色々凄いんですが、まずこれが無料ってところが凄いです。

一つ勉強になったので、今週の Lesson 2: Practical Deep Learning for Coders 2022 [1]の勉強はここまでとします。

3.2 色々調べます

今週は色々、知らない事が出て来たので、その辺を簡単に調査する事にします。

調査する内容は、

などです。

<Hugging Face Space>

Copilotに質問しました。

ふーん。

かなりの高評価なHomepageのようです。

以下の特長があるそうです。

今回はこの中のSpaceを使用しているようです。

Homepageも見てみます。

先程Copilotに表示された以下のImageは

Hugging FaceのIconだったのか。

一体何なのかと思いました。

今週のTrendが紹介されていました。

Spaceだけじゃなくて、ModelとかDatasetとかの話題もあるのか。

結構面白そうなSiteです。

後はMachine LearningについてとかOpen Sourceについてとかの説明がありました。

この辺は後で見る事にします。

Windows Terminal>

今度はWindows Terminalについて調べます。

まずはCopilot先生に質問しました。

Copilot先生の回答です。

うーん。

この説明だけではUbuntuとの関係がよく分からないです。

何でWindows Terminalを使用するのにUbuntuをInstallする必要があるのかが知りたいんです。

ここでWindows Subsystem for Linuxと言っているのがそれなんでしょうか?

更に以下の説明がありました。

それぞれ興味深い内容です。

しかしUbuntuをInstallする必要が有るかどうかについてはよく分かりません。

更に以下の説明で終わっています。

Microsoft StoreからInstallする必要があるのはあってるみたいですね。

Windows Terminalを使用するのにUbuntuをInstallする必要があるのか>

これについてCopilotに質問してみます。

以下の質問で聞いてみました。

回答です。

はい。

理解しました。

Windows TerminalをLinuxのSubsystemとして使用する場合は、UbuntuをInstallしてやるのがもっとも一般的なやり方という事です。

しかもやり方の説明もありました。

このCommandってTutorialのやつと同じでしょうか?

TutorialのCommandです。

一緒ですね。

このUbuntuをInstallするFolderはどこなの?

どこからでも適切な場所にInstallしてくれるの?

色々疑問が湧きます。

これらは後でもっと調べる事にします。

後、Copilot先生の回答だと、Command PromptからでもUbuntuはInstall出来るって言っていました。

更に以下の事も説明していました。

WSLをInstallした後で、Windows TerminalからLinuxを使用する選択をする必要があるそうです。

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

最後に以下のように言っていました。

質問したらもっと具体的な方法の説明をしてくれそうです。

今回はここまでにしますが、必要に応じて質問する事にします。

Visual Studio Codeの以下のiconの機能について>

これってGitHubのVersionを管理するためのIconでしょう。

一応調べる事にします。

このIconの名前はSource Controlというそうです。

Copilot先生に質問しました。

Codeの変化をTrackしたり管理したりするToolって言っています。

つまりGitです。

具体的な機能の紹介でVersion Controlが出て来ました。

はい。

もう十分です。

こんなものか。

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

4. Nvidia Omniverseの勉強

もうOmniverse Createの勉強は十分なので、当初の目的であるIsaac SimのTutorialを勉強します。

2024-06-17のBlogではIsaac SimのTutorialを調べていました。

沢山のTutorialが紹介されていましたが、特に以下の

Skyentific氏のFrom Reality to Simulation with Isaac Sim (+ RTX3080Ti raffle) [4]のTutorialを進めていました。

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

4.1 From Reality to Simulation with Isaac Sim (+ RTX3080Ti raffle) [4]を勉強する

<Intro>

RobotとAIの簡単な関係が説明されていました。

<Requirement>

まず以下のHomepageでIsaac Simについての勉強をして下さい。と言っています。

これ読まないといけないの?

Isaac Simを動かすのにLocalかCloudを選択する必要があります。

どちらの場合もGPUが必要になります。

Isaac Simを動かすために必要な性能です。

このTutorialは2022年のものなので後で、NvidiaのHomepageで確認します。

少なくとも今の時点でWindows10しか動かないって事は無いでしょう。

<GTC Conference>

GTC Conferenceについての解説です。

GTCはGPU Technology Conferenceの略で、GPUに特化した学会だそうです。

無料で登録出来てGPUに関しての色々な分野、例えばAIとかRoboticとか、の情報が得られるそうです。

ここはSkipします。

この人は自分でIsaac Sim専用のPCを組み立てていました。

そのPCにUbuntuをInstallしています。

うーん。

この辺は真似出来ないですね。

今あるPCでやる事出来ないのでしょうか?

<Installing Isaac Sim>

これでIsaac SimをInstallするのかと思ったらNvidiaのDriverをInstallしていました。

2024-06-17のBlogの時点ではOmniverseがどうなってるのか全く理解してなかったので、この辺の説明は要らない事も分からなかったので、なんか凄い事してると思っていました。

今あるPCで試す分にはこの辺の説明は要らないです。

Omniverse LauncherをInstallしています。

このPageに行けばIsaac SimのInstall方法が分るのか。

CacheをInstallしていますね。

Cache、Installしたかな?

これは後で確認します。

Omniverse LauncherをInstallして開きました。

Launcherの見た目は今とそんなに変わりないですね。

Nucleusに行ってServerを作成しています。

Localhostで起動させていますね。

Localhostの画面です。

NVIDIAに鍵のIconが表示されています。

これも一緒だわ。

そしてIsaac Simをinstallします。

Libraryに移動するとIsaac SimがInstallされています。

Isaac Simを起動させると以下の画面が表示されるそうです。

Isaac simを選択してStartを押します。

以下に示したWindowが開きました。

Windowの構成はCreateとほとんど同じですね。

<Using Isaac Sim>

Isaac SimはGUIからでもPythonからでも扱う事ができるそうです。

何で便利なGUIがあるのにPythonなんか使うの?

しかしこのTutorialはそうは思わなかったみたいで、この後長々とIsaac SimをPythonで動かす方法について解説しています。

そしてそれが終わったら突然以下のような

車輪が2つあって中央にCameraが乗っているRobotが生成されていました。

ああ、これの作り方が知りたいんです。

これはこのTutorialを勉強しただけではIssac Simを使用出来るようにはなりません。

以下のButtonを押してSimulationを開始しました。

更に以下のJet Botも試していました。

ひょっとするとこれらはDefaultであるRobot達なのかもしれません。

<Isaac Gym>

Isaac Gymについての解説をしています。

こっちは強化学習に使用するものだと言っていました。

これ正しいんでしょうか。

もうIsaac Gymの機能は全部Simで行うように変更されたってどっかで聞きました。

この辺の情報は後で調べる事にします。

なんかTrainingしています。

これIsaac Simで動かしていますね。

その辺の関係がよく分かりません。

<Isaac Sim>

今度は以下のRobotをIsaac Sim内で生成するそうです。

このRobotを3D化するのは凄い大変そうだけど、どうするのかと思ったら

以下のように既に出来ていました。

そうか。

今は設計の段階で3D CADを使用するからRobotの3D化は最初から出来ているのか。しかもOmniverseだからこの3D CADのDataもUSD Fileに変換してIsaac Simに入れる事が出来るのか。

Tutorialの説明ではUSD Fileに変換するのは大変なので代わりにURDF Fileに変換するそうです。

そしてIsaac Simの中でURDF FileからUSD Fileに変換するそうです。

ではURDF Fileに変換します。

まずSimulationではこのような沢山のPartsは要らないので統合します。

動くJointだけ分離し、残りは統合しました。

うーん。

この辺の簡略化には職人技が必要になりそうです。

更にTutorialではResolutionを減らしたと言っていますが、これはPolygon数を減らしたんだと思います。

<UDF File>

今は以下に示したStlというFormat形式でSaveされています。

以下のYouTube ChannelでURDFについて説明しているそうです。

それよりYouTubeの国名がCHになっています。

CHはSwitzerland(スイス)だそうです。

うーん。

スイス人だったのか。でも英語上手いです。

Robotは以下の項目で定義されています。

まずLinkです。

これは先程のJoint毎に分割されたPartsの塊の事でしょう。

そしてVisual、Collision、そしてinertialの3つに分割されています。

VisualとCollisionはもろに3D Graphicsの内容なので無問題で理解出来ますが、最後にInertialはこれは機械工学の範囲でしょう。

Massはともかくとして、OriginとInertiaはどうやって定義するのか皆目見当つきません。

今度はJointを定義していました。

Parent LinkとChild Linkは先程指定したLinkの事でしょう。

Originは軸がある点なのでしょう。

そして次のAxisで軸の方向を指定しているはずです。

最後のLimitは可動範囲のような制限を指定していそうです。

Velocityは最高速度で動いた場合の速度でしょうか。

最後のEffortは何でしょうね?

以下のように指定していました。

どうもこれ全部自分でやったみたいです。

うげ。

これは片手間にやるのは大変です。

後、重要な情報としてIsaac Simの単位はmだそうです。

以下のPageにURDFのImportのやり方が説明されているそうです。

これに従ってやっています。

以下の場所からURDFをImportします。

以下の設定はそのままだそうです。

Input Fileを指定します。

作成したURDF Fileを指定します。

おお、Import出来ました。

今度はImportしたFileが正確に動くのかを確認するためにArticulation Inspectorを選択します。

以下に示したWindowが開きました。

Simulationを起動させ

その後でSelect ArticulationにRobotをセットしました。

以下の箇所からJointを動かします。

凄い。

Jointの値を変更すると

RobotのJointが動きます。

色をつけたり、Path Tracingで試したりとか色々しています。

流石にPath TracingはGPUの無駄遣いでしょう。

<Digital Twin>

ここでInertialのParameterは適当に入れたと言っていました。

Roboticの専門家がInertialのParameterを正しく入れるはかなり無理があるって言ってるって事は、無理って事じゃない。

と言うか、その部分の説明がIsaac Simには無いって説明していますね。

これで終わっています。

結構勉強になりました。

4.2 From Reality to Simulation with Isaac Sim (+ RTX3080Ti raffle) [4]を勉強した感想

Isaac SimへRobotをImportするところまでは大体理解出来ました。

その後のSimulationの仕方はまだ不明です。

後の細かいやり方はHomepageを見るか、他のTutorialで勉強する必要があります。

今週のOmniverseの勉強はこれで終わりです。

5. Gaeaの勉強

5.1 How to Make Landscape FAST using Gaea 2.0 and Unreal Engine 5 [3]を勉強する

全部をまとめるのではなくPluginの使用方法や、Gaea2.0で私が知らない使用方法を紹介したりした場合は、以下に記録するようにします。

<00:00 Intro>

以下のLandscapeをGaea2.0と

MW Landscape Auto Materialを使用して作成するそうです。

<00:08 Create and Island in Gaea 2.0>

直ぐに本題に入りました。

結構良いTutorialかもしれません。

まず以下のWebsiteに移動します。

以下のようなPageです。

Optionの設定を変更します。

Canvas Sizeを1009x1009に変更します。

次にHeightmapを開きます。

以下のようなWindowが開きました。

ここでは結局High Islandを選択しています。

Renderingの設定にBest Performanceがセットされている事を確認します。

Styleに移動し

Style PresetにMonochromeを選択します。

これはHeightmapを作成するのが目的だからです。

今度はLayerに移動し

Heightmapだけが選択されている事を確認します。

この画面を見るとVignetteも選択されているように見えるんですが、どうなんでしょう?

そしてExportを押します。

以下のWindowが開くそうです。

PNGをClickします。

これで作成したHeightmapをGaeaで使用するのか。

なんか、最初から重要な情報を得る事が出来ました。

Gaea2.0を開きます。

Fileノードを配置しました。

ここに先程作成したHeightmapをセットします。

結果です。

これを直します。

まずProjectを開きBuild Settingsを選択します。

Terrainを選択しWidthとHeightの値を指定し直します。

なんと、TutorialはこのDefaultの値のまま、先に進んでしまいました。

Blurノードを追加しました。

Radiusの値を下げています。

結果です。

更にPerlinノードを追加して

以下のようにしました。

凄いトゲトゲしています。

更にHeightノードをMaskとして追加しています。

結果です。

うーん。

これだったら島全体にかけた方が良い気がします。

更に以下の2つのAfter Effectを追加し

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

結果です。

そしてFractal Terraceノードを追加しました。

結果です。

そしてErosionノードを追加しました。

結果です。

Seaノードを追加しました。

結果です。

これで完成だそうです。

Unrealノードを最後についかしてExportします。

Target Sizeを1009x1009に変更します。

Buildを開きます。

Buildを押します。

Yesを押します。

Open Folder after Build FinishesにCheckを入れます。

これでHight Mapが生成されるそうです。

うーん。

このやり方でやったら出来なかったんですけど。

後で、もう一回確認します。

<10:32 Import Island in Unreal Engine 5>

MW Landscape Auto MaterialをDownloadします。

UEを開きPluginの白いボタンを起動させ以下のWindowを開きます。

Import HeightmapをClickしてHeightmapをセットします。

その後で以下のMaterialをLandscape Materialにセットします。

TutorialではDuplicateしたのをSetしろ。と言っていました。

そしてCreate LandscapeをClickします。

結果です。

<12:00 Landscape Material Setup>

セットしたMaterial Instanceの値をいじります。

まずはSnowのMW_SnowWorldPositionです。

山頂にだけ雪が発生するようにしました。

今度はGrassの値を変更しました。

結果です。

更にDirtも追加しました。

結果です。

これでLandscapeのMaterialの設定は終わりです。

うわー。

滅茶苦茶簡単です。

Water Systemを追加します。

Water Body Oceanを追加しました。

結果です。

Affect LandscapeのCheckを外します。

結果です。

<16:15 PCG showcase>

Material Instanceについている以下のParameterの解説です。

MW_DebugBakeにCheckを入れると

以下のように

それぞれのLayerを色で表示します。

更に別なTutorialであるUE 5.4 | PCG Biome Core Plugin Tutorial []で勉強したPluginの機能を使用したら

以下に示した様にPCGで生成した木を追加する事も出来ます。

これはGrassのLayerに追加しているのでしょうか?

ここから先はこの別なTutorialの内容の補足になっているのでSkipします。

<19:30 Outro>

特に無です。

5.2 How to Make Landscape FAST using Gaea 2.0 and Unreal Engine 5 [3]を勉強した感想

以下のPluginを使用したらMaskを作成しなくても

Photo-Realisticな島の作成が出来る事は確認出来ました。

更に以下のSiteで大まかなHeightmapを作成する事が出来る事も判明しました。

結構色々な情報を得る事が出来ます。

このYouTube Channel登録しておく事にします。

実際に試すのは来週やります。

6. Houdiniの勉強

6.1 先週の復習

先週のBlogを読み直すと、Convertlineノードについて勉強していました。

途中で、Groupの作成方法を調べたくなってGroupノードについての勉強を始めています。

更にAttribwrangleノードを使用してGroupを作成する方法についても勉強しました。

最後に

と書いて終わっていました。

うーん。

もうConvertlineノードの勉強はお腹いっぱいです。

今週は次のFor Each Primitiveノードの勉強をします。

6.2 For Each Primitiveノードを勉強する

まずDocumentを読んでみます。

あれ?

何でBlock Begin Geometry Nodeの紹介が出て来てるの?

Parameterの解説を見てみます。

まずはMethodです。

Extract Piece or Pointについての解説です。

ここで言うPieceがPrimitiveになるはずです。

しかしどこでそれを指定しているんでしょうか?

次のParameterであるBlock Pathです。

Blockの最後のNode名を指定しているだけですね。

Foreach_endノードについても調べます。

ここでPiece Elementの値にPrimitivesがSetされていました。

最初から見ていきます。

Iteration Methodです。

Iteration Methodの値の解説です。

By Piecesしか載ってなかった。

まあ内容的には同じでしょう。

次のParameterです。

まずGather Methodが何を指定しているのかが不明です。

Documentの説明によると

Loopの結果に対して何をするのかを指定するそうです。

この値にセットした場合は、Loopに流れたそれぞれのPieceを全部Mergeするそうです。

Piece Elements

の説明がありました。

うーん。

Piecewise Modeって何の事でしょう。

Documentの解説、ところどころで、存在してないParameterとかが解説されています。

昔のNodeの解説のままなのかもしれません。

あんまり気にしないで先に進みます。

この2つのParameterはForeach_Begin1ノードを指しています。

特に重要でもないのでこれはSkipします。

その後のParameterも重要なのは無いですね。

これで終わりでした。

一応、Copilotでも調べておきます。

これだけでした。

6.2 For Each Primitiveノードの別な使い方を考える

同じ形状のものが何個も繰り返して存在する事で生成されるものを考えます。

古代Greekの柱なんかそんな感じです。

こういうのです。

後は大きな屋敷の障子が並んでいるのとかどうでしょうか?

こういうやつです。

あ、障子は一枚でも四角が沢山並んでいますね。

後は電柱とかか。

でもこれは繰り返している要素をつくるのが大変そうです。

あ、でも

電柱Nodeを作成して、それをForeach PrimitiveかForeach Pointから呼び出せば良いのか。

だったら床面積だけ指定して

その上に家を生成してもいいかもしれません。

結構使い道はありそうです。

6.3 For Each Primitiveノードを使用して円柱が並んでいるGeometryを生成してみる

電柱や柱までの精度のものは作成できませんが、円柱が並んでいる位の元は作成出来そうです。

やってみます。

以下の方法を考えました。

まずLineノードでPointを作成します。

そのPointを利用してForeach Pointを使用してそれぞれのPointを中心としてCircleを生成します。

そのCircleをPolyExtrudeノードを使用して円柱にします。

これで円柱が並んでいるGeometryが生成出来るはずです。

なんとCircleノードはInputが無いです。

速攻で計画倒れになってしまいました。

代わりに以下のような四角形で代用しました。

やり方を以下にまとめます。

まずGridノードを配置します。

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

次にGroupノードを使用して

Group、Test1を作成します。

以下の4つのPrimitiveだけTest1に追加しました。

これをAttribwrangleノードを使用してProgrammingから指定使用としたんですが、出来ませんでした。

@primnumでPrimitiveのNumberを得て、そのNumberが2で割れたらGroupに追加するCodeを以下のように書いたのですが、

希望した通りの結果になりませんでした。

どうも@primnumはIntegerを保持していないみたいです。

今回はこの問題の原因は解決しませんでした。

これはもう少し勉強してからもう一回試す事にします。

今回は手動で以下のPrimitiveをGroup、Test1に追加しました。

あとはForeach PrimitiveでそれぞれのPrimitiveをLoopし

Test1に属しているPrimitiveだったらPolyextrudeノードでExtrudeしました。

終結果です。

6.4 For Each Primitiveノードを使用して自分でGeometryを生成した感想

思っているのの10倍位出来なかった。

まずPointから円を作成する方法が分らないです。

そしてPrimitiveを指定するCodeの書き方も不明です。

でも、これから勉強しなければならない箇所が判明したとも言えます。

慌てずにコツコツやっていきます。

<追記>

HoudiniのCodeだけ専門に勉強するのに丁度いいTutorial seriesを見つけました。

VEX Isn't Scary - Part 1: Basics [7]です。

これで基礎を勉強します。

更に以下のTutorialもありました。

[VEX for Algorithmic Design] E01 _ Attribute Basics [8]です。

両方のTutorialを軽く見ましたが、こっちの方が本格的です。

ただどちらのTutorialもそれだけ見れば基礎を覚えるには十分とは言い難いと感じました。

両方のTutorialを勉強する必要がある感じがしました。

知っている部分や、勉強する必要のない部分はSkipして両方のTutorialを勉強する事にします。

この動画を見たら以下のように

望んだPrimitiveをExtrudeする実装が作れるようになりました。

色々知らなかった事がありましたが、最も結果に影響与えた一点だけ記録しておきます。

attribwrangleノードは以下のRun Overの設定で

全てのPrimitiveに対してRun Overします。

で、このNodeをForeach Primitiveの中で使用した場合はどうなるのかはまだ不明です。

来週、これらのTutorialで勉強した内容を整理してまとめ直します。

7. UEFNの勉強

UEFNの勉強をしても中々、独自のMapを作成して公開出来る所まで行きません。

ここはUEFNの勉強は一端中止して以下のEmberGen Simulationsの勉強に変えた方が良い気がして来ました。

これはたまたま見たYouTubeの動画で紹介されていたんですが、凄いPhoto-realistic なEffectです。

以下のYouTube Channelで紹介されていました。

https://www.youtube.com/@JasonKey3D/videos

以下の動画がありました。

どれもPhoto-realistic感が凄いです。

今週はUEFNの勉強はお休みしてEmberGen Simulationsについて勉強します。

7.1 EmberGen Simulationについて調査する

EmberGen Simulationsについて前に勉強した記憶があります。

Blogを調べます。

2023-02-06のBlogにEmberGen Simulationsについての記述が書いてありました。

あれ?

無料のSoftじゃなかったの?

無料で配布されたAssetの事だと思っていました。

うーん。

調べたらFluid Ninjaと言うAssetと勘違いしていました。

2022-08-01のBlogから勉強しています。

関係ないけど、このBlogにまとめられていたRPG Gameをどこまで作成したのかのまとめを見るのが悲しいです。

このGameはとうとう完成しなかったです。

個人で作成するには壮大過ぎる内容でした。

https://www.youtube.com/playlist?list=PLRwdP2lOr4A5EUvTG23M9qKJhG9D4eXqo

にTutorialがありました。

うーん。

無料でないなら取りあえずEmberGenの勉強は中止やな。

7.2 HoudiniのVFXについて調査する

HoudiniのVFXはどうなんでしょう?

こっちも調査してみます。

以下のTutorialを見つけました。

https://www.youtube.com/playlist?list=PLhyeWJ40aDkXtkcuhTkCBzcWZ8NBZKOu6

VFXだけのTutorialではないですが、それなりに勉強にはなりそうです。

Houdini is HIP - Part 1: What is VFX? [5]を軽く見ました。

完全に全くの初心者、それも3DGCを全く知らない人向けの内容でした。

しかしかなりProfessionalにまとめられていて復習には持ってこいの内容かもしれません。

それにPart 6から後はVFXについてFocusした内容になっています。

うん。

こっちを勉強しよう。

7.3 Houdini is HIP - Part 1: What is VFX? [5]を勉強する

このTutorial SeriesではPops、Vellum、Pyro、そしてFlipについて勉強するっていっています。

Pyroは火ですが、その他は何をやるのか全く見当つきません。

これは勉強しないとだめでしょう。

まずCGIの定義から説明しています。

この辺の知っている内容はSkipします。

と思ったら結構、分かり易く説明していたのでこのTutorialの定義を以下にまとめます。

まずCGIですが、100%Computerで生成したImageです。

この反対に100%、本物の風景や人物、建物で撮影したImageをLive Actionと言います。

では本物の風景などを撮影した映像にCGIを追加した場合(その追加した部分を指して?)VFXとなります。

次にVFXのPipelineの解説をしています。

まず実際の映像を撮影します。

撮影する時には以下の要素を考慮する必要があります。

  • Framerate
  • Light Position
  • Desk Position and Dimension
  • Focal Length
  • Camera Position
  • Light Temperature

おお、結構理解出来る要素があります。

次のStepです。

これは3D Gaussian Splattingの場合は考慮しないですみそうです。

しかしCamera Trackingを使用する場合は、この部分はしっかり勉強しないといけませんね。

一応、話を聞いておきます。

実際のCameraの動きとVirtualのCameraの動きを一致させる必要があるそうです。

今回の例ではCameraはまったく動かさないので、考慮する必要はないそうです。

次のStepです。

VFXで使用する3D Modelを作成します。

そうなのか。

これはBlenderで作成するしかないですね。

Tutorialでは以下のような3D Modelを追加していました。

次のStepです。

作成したModelにTextureを追加します。

うん。

これももう常識です。

しかしPhoto-RealisticなTextureを追加するにはどうしたらいいのかが分かりません。

以下のようにTextureを追加しました。

これはTextureを追加したというよりもMaterialを追加したというべきでしょうね。

TutorialでもTextureと言ってからMaterialと言い直していました。

Substance PainterかMariを使用すると良いと言っています。

Mariは初めて聞くSoftwareです。

調べます。

これか、Freeの条件を見てみます。

30日間だけ使用出来るとありました。

まあ使わないですね。

次のStepです。

Lightingか。

Tutorialでは現実のLightの位置を確認していました。

それだけで3D ModelのLightingが同じになるとは思えませんがどうなんでしょう。

現実のLightがある場所と同じ場所にLightを配置し、更にAmbient Lightも追加したそうです。

うーん。

結構、分からないですね。

凄いかも。

次のStepです。

うーん。

もう既にRenderingしてるじゃん。

3D Graphic内に作成したModelをVirtualなCameraで撮影して2DのImageに変換する事をRenderingと言う。

と言っていました。

はい。

これはその通りです。

このRenderingの例としてArnoldと言うRendering Engineが紹介されていました。

初めて聞く名前です。

Copilotに聞いていました。

Autodeskか。

どうせ無料じゃないでしょう。

以下の特長があるそうです。

Monte Carlo Ray Tracingって初めて聞くけど、これ結構効率良さそうです。

次のStepです。

うん。

これは初めて聞く内容です。

何してるんでしょうか?

VFXとLive Actionの映像を合成する事を指すみたいです。

えー。

両方2Dの状態で合成しているの。

これはUE内に3D Gaussian Splattingで風景や建物を再生して撮影するのとは全然違うやり方ですね。

びっくりです。

更にここではGlowなどのPost Processingの追加を行う事も含まれるそうです。

以下のSoftが使用されるそうです。

Davinci Resolveが紹介されていました。

ほう。

その結果が以下の画像だそうです。

凄い。

けど

少し暗すぎな気もします。

今回の例ではVFXとしてObjectを追加しましたが、Simulationを追加する事も可能です。

ここでHoudiniの出番だそうです。

この後HoudiniのProceduralismについての解説がありました。

このTutorialの説明ではProceduralismとは、Ruleを決めてそのRuleに基づいてModelを生成する手法の事だそうです。

まあ、Procedureの元々の意味は料理などの一連の流れを箇条書きにまとめたものを指すので、Ruleを決めてそのRuleに基づいて生成する事と言う説明はそれなりには納得です。

以上でした。

次のTutorialではHoudiniのInstallを説明するそうです。

7.4 Houdini is HIP - Part 1: What is VFX? [5]を勉強した感想

結構、内容がしっかりまとまっていて分かり易かったです。

次のHoudiniのInstallの話はあんまり勉強する必要はなさそうです。

後、業界基準のSoftが沢山紹介されていましたが、そこで使用されている技術の高さはともかくとしてSoftの性能としてはUE5の方が上な感じがしますね。

Houdiniも使用されている技術を全部勉強したらUE5内にある機能を使用するだけで全部、再現出来そうな気がします。

後、来週からUEFNの勉強はお休みしてこのTutorialを代わりに勉強する事にします。

8. DirectX12の勉強

8.1 Lötwig Fusel氏のD3D12 Beginners Tutorial [D3D12Ez]を勉強する

今週は先週勉強したResizing the SwapChain | D3D12 Beginners Tutorial [D3D12Ez] [6]を実装します。

8.1.1 Resizing the SwapChain | D3D12 Beginners Tutorial [D3D12Ez] [6]を実装する

まずSwap ChainのSizeがTutorialを同じ事を確認します。

同じでした。

Scalingの値もTutorialと同じ値になっています。

先週のBlogでは

と書いてありますが、

これだと以下の理由が説明出来ません。

いや、出来るのか。

Windowが小さくなっても1920pxと1080pxは変化しないから文字が小さく表示されるようになるのか。

Nvidia Nsight Graphicsの部分はどうしましょう。

Nvidia Nsight Graphicsを調べてみます。

それで簡単に出来そうだったらやるし、出来無そうだったらやらない事にします。

うーん。

独立したToolなのか。

今回はPassします。

実装の方をやっていきます。

まずResizeBuffers()関数をWindows.cppのOnWindowMessage()関数内に以下のように実装します。

これで解説と思いきや、このような実装はしないそうです。

代わりにWindows.hに以下のVariableを作成し

以下のように実装します。

そしてWindow.h内にShouldResize()関数を作成します。

そしてResize()関数を作成します。

Window.h Fileで宣言して、以下のようにWindow.cpp内で実装します。

GetClientRect()関数を使用して今のWindowのSizeを取得します。

今のWindowのWidthとHeightを計算しました。

このWidthとHeightは関数の外で宣言して、Window.cpp内で自由に使用出来るようにします。

以下のようにWindow.h内でm_witdhとm_height変数を作成しました。

この変数と入れ替えます。

そしてここでResizeBuffers()関数を追加します。

先週、勉強した内容はここまででした。

8.2 「DirectX 12の魔導書」を勉強する

先週、勉強した「5.4 Texture Dataの作成」を実装します。

8.2.1 「5.4 Texture Dataの作成」を実装する

ProgrammingでTexture Dataを生成します。

まずTextureを生成するためのStructを作成します。

このStructを256x256持つVector、texturedataを作成します。

以上です。

9. まとめと感想

なし。

10. 参照(Reference)

[1] Jakob Menz. (2024, July 22). Terrain Remix Brushes - Unreal Engine 5 tutorial [Video]. YouTube. https://www.youtube.com/watch?v=9hyiyRZpId0

[2] Volkiller Games. (2022, October 15). Using Landscape Patches with Unreal Engine [Video]. YouTube. https://www.youtube.com/watch?v=KCcuixUgoK0

[3] Maris Freimanis. (2024, September 3). How to Make Landscape FAST using Gaea 2.0  and Unreal Engine 5 [Video]. YouTube. https://www.youtube.com/watch?v=d7CPxyaQ3uE

[4] Maris Freimanis. (2024, April 30). UE 5.4 | PCG Biome Core Plugin Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=3yhhDPpEzYI

[5] Nine Between. (2023, February 2). Houdini is HIP - Part 1: What is VFX? [Video]. YouTube. https://www.youtube.com/watch?v=J96j3k3rPUU

[6] Lötwig Fusel. (2023, June 21). Resizing the SwapChain | D3D12 Beginners Tutorial [D3D12EZ] [Video]. YouTube. https://www.youtube.com/watch?v=QOT_OzPJl6c

[7] Nine Between. (2021, February 4). VEX isn’t scary - Part 1: Basics [Video]. YouTube. https://www.youtube.com/watch?v=k4q1UQp4x6U

[8] Junichiro Horikawa. (2020, September 11). [VEX for Algorithmic Design] E01 _ Attribute Basics [Video]. YouTube. https://www.youtube.com/watch?v=V5i6KM_-8X0