UE4の勉強記録

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

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

1.今週の予定

先週のBlogを読み直して今週の予定を建てます。

1.1映像作品としてのLandscapeの作成

以下の内容について検証します。

<UE内で3D Gaussian Splattingを用いたFilmの作成>

先週は3D Gaussian Splattingで作成したUEの3D空間内にQuinnを展開しました。

QuinnをThird Person Characterとして操作したので画面に迫力が無くなってしまいました。

今週は、FilmのTemplateを使用してLevel Sequenceを用いてQuinnを動かしてみます。

<Hardware Ray TracingのFar Fieldの検証>

先週は使えそうなMapを見つけて

Hardware Ray TracingをEnableしようとしたら

出来なかったところで終わりました。

新しいProjectを作成してもう一回試してみます。

<Luma AIを試す>

先々週撮影した花は風になびいていたので、綺麗に3D化しませんでした。

ので今回は風で動かないモノを撮影します。

更にこの場所で撮影すると必ず地面がぼやけます。

今回は思いっきり遠距離から撮影して、それでも地面がぼやけるのか確認します。

<PwnisherのTutorialを調査する>

今までGediminas Kirdeikis氏のUnreal Engine 5 for Architecture - 2023 Full Beginner Course [1]を中心に勉強して来ましたが、このTutorialは長すぎる割に結果に即効性がありません。

他のTutorialも一寸だけ確認する事にします。

や他の映像系のUE5のTutorialの内容を確認します。

1.2 AIの勉強

Jeremy Howard氏の Practical Deep Learning for Coders: Lesson 1 [2]を勉強しました。

ここでどうもDeep Learningを勉強するにはPyTorchを使用する必要がある事が分かりました。

今週はこのPyTorchについて調べる事にします。

その後で、Jeremy Howard氏のTutorial の続きを勉強します。

1.3 Materialの勉強

Ben Cloward先生の Introduction To Vertex Shaders - Advanced Materials - Episode 32 [3]を実装します。

その後で、Pwnisher氏のUnreal Engine Materials in 6 Levels of Complexity [4]を勉強する事にします。

これMaterialの基礎を理解するのに必要な最低限の内容が簡潔にまとめられていてかなり凄いTutorialになっています。

1.4 Gaeaの勉強

今週は別な作業をやる事にします。

1.5 UE5.4の新しい機能について

 Unreal Engine 5.4: Create STUNNING Product Commercials with Motion Design [5]の実装をするに当たって以下の問題がありました。

  • Static MeshのSoda CanがNull ActorにAttach出来なくなってしまった。
  • MaterialからEmittしている色の光が強すぎて、Rectangle Lightの光がよく見えなくなった。
  • 生成したImageを60fpsでVideoに変換する方法が分らない(Davinci Resolve)

これらについてどうやって解決していくのかを検証します。

1.6 Houdiniの勉強

先週、 Houdini 19 - Wall Tool 12 [6]の実装は終わったんですが、Tutorialでは全てのParameterをParameter Windowに追加する事はしませんでした。

更に追加したそれぞれのParameterのTestもしていません。

先週のBlogにも以下のように書いてあります。

今週はそれをやります。

1.7 UEFNの勉強

 Custom Fortnite Character P. 1 : Import CUSTOM Model - UEFN / Creative 2.0 Tutorial [7]を実装します。

こんなの5分で終わってしまいますが、今週の予定が既に凄い量になっているので、ここは軽くしておきます。

1.8 DirectX12の勉強

Lötwig Fusel氏のDirectX12のTutorialではCreating a Window | D3D12 Beginners Tutorial [D3D12Ez][8]を勉強します。

DirectX 12の魔導書」は「4.11 三角形ポリゴンを四角形にしてみる」を勉強します。

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

2.1 UE内で3D Gaussian Splattingを用いたFilmの作成

Bicycleの3D Gaussian Splattingを配置したLevelを開きます。

取りあえずLevel Sequenceを配置して

Cameraを配置しました。

更にCameraをLevel Sequence内に追加して

Cameraの配置をKey Frameに追加しました。

以下のIconを押して

Renderingします。

以下のようなImageが生成されました。

Davinci Resolveを使用して、これらのImageをVideoに編集します。

やり方は先週のBlogで調べたやり方をそのまま繰り返しました。

Gifに変換した映像を以下に示します。

凄い。

実際のCameraでは出来ない速い動きを示しています。

これだけでも価値がありますね。

今度はCharacterを配置して自転車の周りで動かしてみます。

Level Sequenceの終わりがとんでもなく長くなってしまいました。

直し方が分かりません。

調べます。

Copilotに質問しました。

この通りにやったんですが上手く行きません。

しかしこれをやっていたら以下の赤いBarがPlayの最後を示している事が判明しました。

この赤いBarを弄ってPlayの最後を300 Frameに揃えました。

300までのFrameを作成して欲しいのに156までしかImageを作成してくれません。

CameraのCutを強引に300Frameまで伸ばしてみました。

今度は300枚のImageを生成しました。

結果をGifに変換しました。

容量が大きすぎるのでSizeを半分にして、圧縮しましたので画像は汚いです。

本来の映像は物凄い綺麗です。

以下にその一枚を示します。

Dragonの影がオカシイです。

後、土煙のEffectの追加も必要です。

まだまだやるべき事は沢山あります。

しかし今の時点ではこれで十分です。

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

2.2 Hardware Ray TracingのFar Fieldの検証

こっちを先にセットする必要がありました。

これをEnableした後なら、

こっちのSetも出来るようになります。

これで先週ImportしたMapの結果を見てみます。

以下の警告が表示されています。

これは取りあえず無視して画像の変化を見ます。

地面の反射は綺麗になっている気がします。

もう一回、Fra Fieldについて勉強します。

公式SiteのLumen Technical Details [9]を読み直します。

このMapでも200mはないですね。

これは今の時点では試しようが無いです。

こんな機能もある事は覚えておきます。

2.3 Luma AIを試す

今週は時間が無くて外で撮影出来ませんでした。

2.4 PwnisherのTutorialを調査する

UE5を使用した映像作品の作成方法を勉強していますがUnreal Engine 5 for Architecture - 2023 Full Beginner Course [1]は長すぎます。

他のTutorialで勉強した方が効率が良い気がして来ました。

Pwnisher氏のTutorial、Unreal Engine Materials in 6 Levels of Complexity [4]がYouTubeのお勧めに出て来ました。

軽く見ただけですが、簡潔にまとまっていてとても見やすかったです。

これ前も調べた気がします。

Blogを調査して確認します。

見つかりませんね。

もしかしたらpwnisher氏のSpellを間違えたのかもしれません。

2024-03-31のBlogにPwnisher氏についてまとめた記事がありました。

やっぱりSpellを間違えていました。

後、この人です。

この人のTutorialの勉強をやった方が良い気がしています。

こっちももう一回検証しましょう。

3.AIの勉強

3.1 PyTorchについての調査

PyTorchがPythonを使用するためのPlatformなのは分かりますが、もっと情報が欲しいです。

調べる事にします。

Copilotで質問しました。

Frameworkなのか

更に以下の回答がありました。

最後の部分を読むと、PyTorchをInstallするにはLocalな方法とNetにあるPlatformを使用する2つの方法があるそうです。

このTutorialで先週勉強したKaggleというのもその内の一つのようですね。

これもCopilotに質問してみましょう。

まずAnacondaが紹介されました。

Cloud Serviceを使用する場合は以下の3つが紹介されていました。

Kaggleは紹介されてないですね。

Kaggleはどれくらい良いのか聞いてみます。

おお。結構良い評価です。

Kaggle全体の評価です。

どっちかって言うとData Scientist用に開発されたPlatformのようですね。

うん。

でもAIの勉強にも使用できる訳ですね。

KaggleはFreeなの?

ここ重要です。これは後でもう一回確認します。

そうだ。

今のPCはRTX3070Tiを積んでるだ。

Localで勉強する事も考慮すべきです。

成程ね。

全部書いたCodeの内容は公開されてしまうのか。

勉強するには良いですが、独自の開発をするには向かないですね。

最後にKaggleはFreeなのか聞いてみます。

おお、全部Freeだそうです。

これは勉強するだけなら使っても良いかもしれません。

Kaggleの使い方を説明したTutorialを探してみます。

腐るほどありました。

電話番号を登録する必要が有る所が心配です。日本の携帯電話の登録方法は国番号+電話番号なんでしょうか?

この辺は実際に登録する時に調べる事にします。

後、勉強するのはAI関連だけで十分ですので、Data Science全般のTutorialは無視して進める事にします。

PyTorchのTutorialも検索してみましょう。

こっちも沢山のTutorialがありました。

KaggleのTutorialと違ってこっちはDeep Learning、Machine LearningをPyTorchを使用して勉強するとはっきり書かれています。

それぞれのTutorialでどんなEnvironmentで設定しているのかだけ確認します。

Patrick Loeber氏のPyTorch Tutorial 01 – Installation [10]です。

Condaを使用していました。

Condaを使用してPyTourchを動かすそうです。

これはLocalでPyToruchを動かすのに必要な何かなんでしょうか?

Copilotに質問してみます。

まずCondaはPackage ManagerかつEnvironment Management Systemだそうです。

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

通常CondaはAnacondaを通して使用するみたいです。

のでInstallするのはAnacondaになるみたいですね。

ここでもAnacondaをInstallするみたいな事を言っています。

後、Sandboxで実験出来るそうです。

最後にCondaはPyTorchをLocalで走らせるのか、質問しました。

その通りと言っています。

Copilotの回答を見る限りでは、Condaはかなりお勧めのようです。

Codemy.com氏のIntro To Deep Learning With PyTorch - Deep Learning with Pytorch 1[11]です。

GoogleのColabを使用するそうです。

前にCopilotに質問した時に出て来たGCPというのがGoogle Colab Platformとかかもしれません。

これも質問してみましょう。

Installが必要ないのは良いですね。

後、GoogleのServiceなのでAccountを別に作成する必要が無いのも良いです。

TPUが使用できるのは興味深いです。

環境設定はこのCodeを一行書けば良いのか。

こっちの方が良いかもしれませんね。

でもGoogleとしてはTensorFlowをPyTorchより進めているのか。

うーん。

成程。

やっぱりTPUを無料で試せるのは強いですね。

最大で一回の使用時間が12時間の制限があるのか。

こんなのは問題になるんでしょうか?

企業のProjectの場合は問題がある場合もありそうですね。

AssemblyAI氏のPyTorch Crash Course - Getting Started with Deep Learning [12]です。

これはLocalのやり方とCloud Serverを使用するやり方の両方が解説されていました。

ただしLocalのやり方はPyTorchのHomepageに行ってここでDownloadしてね。で終わっていました。

Cloud Serverを使用するやり方はGoogleのColabを使用していました。これが最も簡単だと言っていました。

2つのTutorialでGoogleのColabを使用しています。Colabは良いServiceのようです。

freeCodeCamp.org のPyTorch for Deep Learning & Machine Learning – Full Course [13]です。

これ何が凄いって、一本の動画で25時間もあります。

Seriesにして40本ぐらいの動画にして載せるべきでしょう。

それはともかくとしてこのTutorialもGoogleのColabを使用していました。

sentdex 氏のIntroduction - Deep Learning and Neural Networks with Python and Pytorch p.1[14]です。

どれでも良いですが、以下のCloud ServerがSponsorだそうです。

のでこのCloud Serverを進めていました。

Aladdin Persson氏のPytorch Tutorial - Setting up a Deep Learning Environment (Anaconda & PyCharm) [15]です。

ここではAnacondaとPyCharmを使用したLocalなPyTorchの設定方法をかなり詳しく解説していました。

Localで設定するならこのTutorialはかなりお勧めかもしれません。

こんだけ調べたらまあ、大体の傾向は掴めましたね。

PyTorchを使用するにあたってLocalの場合は、Condaを使用してCloud Serverを使用する場合はGoogle Colabを使用するのが一般的のようです。

Kaggleは誰も使用してないですね。

Jeremy HowardのWikiのPageを見たら

Jermy Howard氏はKaggleのPresident兼Chief Scientistと書かれていました。

それでKaggleを押していたのか。

うーん。

成程ね。

大体情報が手に入りましたは。

3.2 PyTorchについての調査をした感想

一番簡単にPyTorchを使用してDeep Learningを勉強する方法はGoogle Colabを利用する事です。

正しLocalで使用したい場合はCondaを使用してやるのが一般的です。

どちらもKaggleは使用していません。

更に言うと、Kaggleで書いたCodeは全部公開されてしまいます。

自分の学習した内容は全部、他の人の学習用のDataとして使用されてしまう訳です。

これを大金を払って勉強しにくる学生に強制的に使用させるのはかなりあくどい気がしますね。

一寸、Jeremy Howard氏のImageが変わりました。

自分の成功より他人の成功を喜ぶ自己犠牲の精神に溢れる教育熱心な大学教授から、大金を掴んで楽に暮らしたいちょっと狡い学者のImageに。

そういう目で見ると、Jeremy Howard氏のTutorialはそのTutorialの中ではまるで一番優れた教材であるかのように語っていますが、他のYouTubeの教材と比較して格段に優れている訳でもないようにも見えます。

特にこの教材で勉強したから仕事が見つけやすいとかも無いです。

Lecture内でそういう雰囲気を存分に出していますが。

ただしFastaiに関してはJeremy Howard氏のTutorialでしか習えないです。

これがどれくらい凄いのかは分かりません。

ひょっとするとものすごく優秀かもしれません。

そうなるとJeremy Howard氏のImageももう一回回転して凄い良い教授になります。

まあ実際に使用して確認するしかないですね。

3.3  Practical Deep Learning for Coders: Lesson 1 [2]の続きを勉強する

まあなんだかんだ言ってもしばらくはこれを軸に勉強する事にします。

先週の続きから勉強します。

<Datablocks API parameters explanation>

DataBlockのそれぞれの要素について解説しています。

まずBlockです。

Blocksの中身はInputとOutputについての解説です。

ImageBlockはInputがImageである事を示しています。

これは理解出来ます。

次の説明です。

CategoryBlockはOutputがCategoryつまり沢山ある数の中の一つの数字である事を示しています。

これはよく分かりません。

まあでもCategoryを数学的に厳密に表現するとこうなるのかもしれません。ここはあまり深く考えずにこういうもんだと思って進んでいきます。

次はGet_Itemsの説明です。

ここはどんなDataから学習するのかを指定するそうです。

Get_image_filesはFunctionだそうです。

今回の場合はImage Fileを返すそうです。

ここで唐突にValidation Setと言うものがある事を説明しています。

このValidation Setがどういうものであるのかは不明ですが、Fast.aiではこのValidation Setを指定しないでModelの学習をする事は出来ないそうです。

ここでそのValidation Setの指定をするそうです。

どのようにどれくらいのDataをSet Aside(Saveするという意味か?)するのかを指定します。

ここではRandomに選んだ20%のDataをSet Asideするようにと指定しています。

うーん。

結構、分かり易いぞ。

Fast.aiもかなり良いLibraryな気がして来ました。

どうやってPhotoのLabelが正しいのかを知る事が出来るのか?を指定しているそうです。

これは鳥の写真か森の写真かをどうやってFast.aiが知る事が出来るのかと言う意味だそうです。

そういえば鳥の写真と森の写真を集めていたんだ。

最初の前提を既に忘れてしまっていましたわ。

Parent_labelも関数でその機能は、そのFileが入っているFolderのPathを返すそうです。

今回の実装の場合は、森か鳥が返ってくるそうです。

うーん。

ここは実際の実装を見ながら検証しないとよく分からないですね。Pathという事はFolderの名前も帰って来るって事でしょうか?

最後の要素ですが、AIにおいては、学習用のImageはほとんどの場合Sizeを揃えてから使用するそうです。

ここでSizeを揃えているそうです。

ここでは192x192 PixelでSquishと言う手法でSizeを揃えています。

最後に以下の部分です。

これらのData BlockからData Loaderを作成しています。

PyTorchはこのData Loaderを利用して実際のDataをIterateしていくそうです。

まずTutorialの説明からまとめます。

GPUを用いて何千ものDataを同時に処理していきます。

これをBatchと呼びます。

ここでShow Batchと書いていますが、これはその何千もの処理の中から6個のDataを見せてと言っているのだそうです。

Tutorialでは以下の結果が表示されていました。

ここではInputされたImageとそのImageのLabel(以下の関数で指定されたLabel)

が表示されます。

<Where to find fastai documentation>

以下に示したDocs.fast.aiでこれらの関数に関しての詳細な説明を見る事が出来るそうです。

早速見てみます。

あれ?

なんか見た目が全然違いますね。

どちらかと言うと退化している気がします。

URLは合っていますね。

日本語訳とかも無いですね。

Deep Learningを勉強する人達は英語が出来るのは当然なのかもしれませんね。

<Fastai’s learner (combines model & data)>

ここからFast.aiにおいて重要なConceptであるLearnerについての解説が始まります。

LearnerはModelとDataを繋げる働きをするそうです。

ここで言うModelは我々が実際の学習したNeural Network Functionを指しているそうです。

うん。

この説明はまったく分からない。

我々というのは教授の事を指しているんでしょうか?

そしてNeural Network Functionって何の事でしょう。

分からない事はCopilotに聞きます。

うーん。

なんかDeep Learningそのものを指している感じですね。

実際の人間の脳の構造を真似て設計されているからNeuralと言うんですね。

この知識を元に先程の意味をもう一回考えると、既にTrainingが終わっているModelに鳥と森のLabelの付いたDataを読ませるって事だと思います。

そして以下のCodeです。

まずdlsでDataを指定しています。

次にResnet18で使用するModelを指定しているそうです。

<Fastai’s available pretrained models>

以下のSiteにFast.aiで使用出来るImage Modelについての解説があるそうです。

見てみましょう。

お、こっちは全く同じSiteが表示されました。

以下の場所から色々なModelを見る事が出来るそうです。

試してみたら

こんな結果になりました。

なんじゃこれ。

<What’s a pretrained model?>

ここでResnet18などのImage Modelについて解説しています。

これらのModelは既にTrainされている事なんかが解説されています。

やっぱりそうだったのか。

生成AIが有名になって、AIの学習に2つある事は今では一般常識になっています。

この当時(2年前)は、AIを学習する人の間でもAIの学習に2つある事は、そんなには知られてなかったみたいです。

結構詳しく解説しています。

Fine_tuneについて解説しています。

Fine TuningはModelに今までTrainしたDataとこれから学習するDataがどれくらい違うのかを示すそうです。

3回テストして違いが0%である事を示しています。

<Testing your model with predict method>

今度はPredict Methodを使用します。

文字通り提供されたImageがBirdであるかどうかを判断します。

このReturn Valueの意味が分かりません。

まずIs_birdですが、TrueかFalseが返ってくると思われます。

次の_はどういう意味でしょうか?

Tutorialの説明だと鳥かどうかをIntegerで返すそうです。

最後は鳥である確率(Probability)を示すそうです。

ここで写真に鳥が写っているとかのImage RecognitionだけでなくSegmentationにも使用出来るとSegmentationについての解説が当然始まりました。

以下の実装を示しています。

そもそもSegmentationって何の事でしょう?

もうそろそろAIの勉強に使用出来る時間が無くなって来ました。

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

Tutorialの55:02まで勉強しました。

残りは来週勉強します。

<Other applications of computer vision. Segmentation>

<Segmentation code explanation>

<Tabular analysis with fastai>

<show_batch method explanation>

<Collaborative filtering (recommendation system) example>

<How to turn your notebooks into a presentation tool (RISE)>

<What else can you make with notebooks?>

<What can deep learning do presently?>

<The first neural network - Mark I Perceptron (1957)>

<Machine learning models at a high level>

<Homework>

4.Materialの勉強

4.1 Introduction To Vertex Shaders - Advanced Materials - Episode 32 [3]を実装する

今週は簡単なはずです。

とっととやってしまいます。

今回試すのは

これです。

と言うかこれだけです。

まずTutorialの使用方法を試してみました。

こんな結果になりました。

他も色々ためしてみます。

Normalです

通常の結果です。

Vertex Interpolatorノードを追加しました。

結果です。

これは先程のNormal用のTextureはPixelに対応して使用するのでVertexに対応して使用したらこのような変な結果になるのは当然です。

うーん。

あんまりやる事無いですね。

これで終わりです。

4.2 Pwnisher氏のUnreal Engine Materials in 6 Levels of Complexity [4]を勉強する

これちょっとだけ見て凄い良いTutorialなんで勉強する事にしたんですが何と44分もあります。

今週は最初の10分だけ勉強します。

もうかなり疲れています。

<You can do it!>

このTutorialの内容が説明されていますが、Master Materialを一個作成して、それで全てのMaterialに対応させるそうです。

このMaster Materialの設計思想が凄い良いんです。

しかも結果も凄い。

<50% off my Master Material>

広告でした。

<How Material work in Unreal Engine

BlenderのMaterialとUnrealのMaterialの違いについて解説しています。

元々、Pwnisher氏はBlenderを使いこなしている人向けのUnrealのTutorialを作成しています。

全然関係ないけど、Pwnisher氏の家、障子があります。

何で?

<How to Create a Material>

ここからLevel1が始まっています。

まずMaterialを生成してMM_Tutorialと名付けています。

更にここからMaterial Instanceも作成しました。

Materialを開きました。

この設定はどうやっているんでしょうか?

左の部分にMaterialを表示して右の部分にはMaterial InstanceのParameterが表示されています。

これってDefaultでこうなってたっけ?

<Level 1 - Basic Material Setup>

更にMegaScanか何かから入手したような適当なTextureをMaterial内に配置しています。

指定の通りに並べています。

それぞれのTexture SampleノードをParameterにConvertしました。

InstanceにそれぞれのParameterが表示されています。

更に全部のTextureノードを選択してTexturesと言う名前のGroupとして登録しました。

<Honkai: Star Rail 3D Art Reveal>

広告です。

<Level 2 - Color Correction & Intensity Sliders>

まずBase ColorのTextureにMultiplyノードをつないでいます。

この値を弄る事で白くなったり

黒くなる事を示しています。

TutorialではBrightnessと言っていますがShadeの事ですよね。これ

非常に分かり易いです。

今度はContrastをつけるためにPowerノードを追加しました。

これは既に何度も勉強しているのでここで敢えて復習する必要はないですね。

次に行きます。

Desaturationノードを使用してSaturationを追加します。

これは何やっているんでしょうか?

値を上げると赤い部分が出て来ました。

Mathew Wadstein Tutorials氏のWTF Is? Material - Desaturation in Unreal Engine 4 [16]に分かり易い説明がありました。

Desaturationの値を上げるとそのTextureは本来の色を失って灰色に収束していくそうです。要するにGrey Scaleになる訳です。

ここの実装ではその逆を指定しているのでGray Scaleからどんどん彩度の高い色が発生してくる訳です。

成程。

理解しました。

最後に色を追加しました。

うーん。

これってSaturationする前に追加すべきでは?

後、Parameterに変換した時にTintと名付けていますが、Tintは白を追加してShadeは黒を追加するって意味じゃないの?

色を追加する事をTintっていうの?

ほら、Copilot先生もそう説明しています。

ここは単に色の追加で良いと思います。

ここで作成した全てのParameterをGroup、Albedoに追加します。

更にParameterの並びの順番を調整する方法も説明していました。

同じ様に他の要素にも調整用のNodeを追加していきます。

Specularです。

SpecularはMultiplyノードとPowerノードだけ追加しました。

Roughnessです。

RoughnessはSpecularと同じ実装です。

Normalの計算です。

NormalはRangeが違うから今までの計算と同じには出来ないはず。

と間違えるのを期待して見たんですが、Flatten Normalノードを使用してしっかり正しい実装をしていました。

今週はここまでにしておきます。

5.Gaeaの勉強

今週はGaeaの勉強は無しです。

GaeaのHomepageを読んでいたら以下のTextureをExport出来ると書いてありました。

これのやり方は分かりません。

これについて調査する事にします。

色々調べたら「Export出来るけど実用性がない。」って書かれていました。

Layer作ってそれぞれに色を塗る方が正しいやり方のようです。

6.UE5.4の新しい機能について

 前回、Unreal Engine 5.4: Create STUNNING Product Commercials with Motion Design [5]の実装をするに当たって以下の問題がありました。

  • Static MeshのSoda CanがNull ActorにAttach出来なくなってしまった。
  • MaterialからEmittしている色の光が強すぎて、Rectangle Lightの光がよく見えなくなった。
  • 生成したImageを60fpsでVideoに変換する方法が分らない(Davinci Resolve)

これらについてどうやって解決していくのかを検証します。

6.1生成したImageを60fpsでVideoに変換する方法が分らない(Davinci Resolve)

まず調べたらすぐにやり方が判明しそうなこれから調べます。

Copilotに質問したら以下の方法で出来るとありました。

更にTimelineのFrame Rateを変更する方法も説明されていました。

試してみます。

ImportしたImage群から作成されたVideoを右Clickすると確かにClip Attributesがありました。

選択します。

以下のWindowが開きました

確かにFrame Rateがありました。

60に変更してみます。

普通に出来ました。

Exportして確認します。

最初に指定した速度で動いています。

6.2 Unreal Engine 5.4: Create STUNNING Product Commercials with Motion Design [5]の実装をもう一回やる

以下の問題を解決するにはもう一回作成する必要があります。

  • Static MeshのSoda CanがNull ActorにAttach出来なくなってしまった
  • 3 MaterialからEmittしている色の光が強すぎて、Rectangle Lightの光がよく見えなくなった

もう一回、Unreal Engine 5.4: Create STUNNING Product Commercials with Motion Design [5]を実装します。

<Creating a Level>

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

<Enabling Motion Design Mode>

Motion Designを押してMotion Design Modeに入ります。

Create Defaultsを押して

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

<Importing our Supporting Files>

2024-04-14のBlogを見てたら

CanのImportをする時にCombine MeshesにCheckを入れろと書いてありました。

これ前回はやらなかったかもしれません。

Checkしました。

Importした結果です。

あ。Static Meshが一個しかありません。

Canを開くと蓋がくっついていました。

<Applying Textures>

TextureもImportしてMaterialに追加します。

Preview画面です。

<Materials>

ここは後ろの壁用のMaterialを作成しています。

今回も前にImportした壁をそのまま使用しますのでここはSkipします。

<Emissive Master>

Emissive Materialを作成しています。

ここです。

なんで前回作成した時はあんなに明るくなってしまったんでしょう?

今確認しましたが特にへんな所は無かったです。

前回作成したMaterialを使用してInstanceだけ生成する事にします。

<Making an Instance>

既に作成しました。

<Unlocking the Camera>

しました。

<Placing Props>

Infinity Wallを原点に配置します。

前回はこのWallのSizeが大き過ぎました。

今回はもっと小さくして配置します。

どれくらい小さくすると丁度いいのかまだ不明なので、取りあえずScale1で配置しています。

SkylightとPost Process Volumeを消します。

Soda Canを以下のように配置しました。

CanのScaleの値は取りあえずはそのままにしておきます。

<Emissive Lighting>

Planeを並べてMaterial Instanceを適用しました。

Cameraから見たViewです。

まだEmissive Colorの影響が出てますね。

Plateの位置を遠くに移動させました。

とりあえずこれでやってみます。

<Setting up the Camera>

Cameraの位置やSoda Canの位置はここで良いので、CameraのLensの設定だけやります。

Focus MethodをTrackingに変更して

Actor to TrackにSM_SodaCanをセットします。

更にLens Settingsの値を50mm Prime f/1.8に変更しました。

Cameraから見た風景が以下のようになりました。

Canの位置を調整し直します。

少しだけ正確に直そうとGridを使用しようと思ったんですが、

Gridを選択するためのIconが表示されていません。

何で?

Tutorialを見直したら、Cinematic Viewportを選択してからGridを表示していました。

今度は表示出来ました。

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

うーん。

Cinematic ViewportとDefaultの違いも勉強する必要がありますね。

<Using Light Actors>

Rectangular Lightも配置します。

しました。

結果です。

後ろの壁が味気なくなってしまいました。

壁の位置を調整します。

色々調整したんですが、良い感じになりません。

最終的にLens Settingsの値を以下のようにしました。

結果です。

かなり良い感じになったと思います。

更に調整しました。

これでOKとします。

明るさがTutorialと全然違う理由が判明しました。

Directional Lightです。

こいつの向きを調整します。

凄い明るくなりました。

Tutorialの様にRect LightをPlaneの後ろに配置してみました。

光が完全に遮断されています。

なんかPCの調子が悪いです。

一端再起動させます。

とりあえずこれでOKとします。

うーん。Post Processまで出来たらNull Actorの問題がどうなっているのか判明するんですが、今週はここまでとします。

なんかUE5.4を使用するとPCの調子が悪くなります。

7.Houdiniの勉強

 Houdini 19 - Wall Tool 12 [6]で実装しなかったParameterを実装して来ます。

7.1 追加するParameterの確認

まず黄色のNodeを抜き出します。

その後で、それぞれのNodeのどのParameterを追加すべきなのかを確認していきます。

最初のNodeです。

Resample Brick Spacingノードです。

Attribwrange Shuffle Bricksノードです。

Line_Brick Depthノードです。

Attribwr angle Brick Jitterノードです。

Carve Tweak Brick Widthノードです。

Attribwr angle Mask Noiseノードです。

Attribwr angle Crack Ratioノードです。

Color Tint Brickノードです。

Delete Small Parts1ノードです。

Peak1ノードです。

Color Brick Chipノードです。

Re-Mesh Grid Groutノードです。

Color Tint Groutノードです。

これらのNodeのParameterを追加していきます。

しかしこれらのNodeのどのParameterを追加すれば良いのかが分からないのでそれを調べます。

7.2 追加するParameterを調査する

<Resample Brick Spacingノード>

まずこのNodeの追加するParameterを調べます。

2024-01-07のBlogに以下のように書かれていました。

追加するParameterはLengthですね。

Lengthの値を変更すると

Brickの横幅が変化するそうです。

<Attribwr Angle Shuffle Bricksノード>

このノード内で使用するParameterの解説も2024-01-07のBlogに書かれていました。

Multiノードを使用するそうです。

<Line Brick Depthノード>

2024-01-07のBlogに説明されていました。

<Attribwr angle Brick Jitterノード>

これはもうParameterを見ただけで

この値を調整すると分かりました。

一応、Blogで確認すると2024-01-14のBlogに以下のように書かれていました。

<Carve Tweak Brick Widthノード>

これは以下のParameterを調整します。

この値が大きくなるとBrick同士の隙間が大きくなります。

これはBlogにも説明が無かったので自分でテストして確認しました。

Foreach_end1ノードの結果を以下に示します。

FirstUの値が0.003の時です。

Brick同士の隙間がほとんどありません。

今度はFirstUの値を0.08にします。

Brick同士の横の隙間が大きくなりました。

<Attribwr angle Mask Noiseノード>

これはBlogを見直しても、Parameterを確認してもどれを弄るとどうなるのかが全然分かりません。

Tutorialを見直します。

2024-01-29のBlogによると Houdini - Wall Tool 06 [17]でこのNodeを追加したそうです。

このTutorialを見てみます。

分かりました。

以下に示したRampです。

このParameterを弄る事によりMaskを掛けています。

Tutorialでは以下のようなMaskを生成する事で

BrickのTopとButtonだけに影響を及ぼすような設定にしていました。

<Attribwr angle Crack Ratioノード>

これはもう以下のCrack Probabilityしか該当しそうなParameterがありません。

BlogにはこのParameterについては何も説明していません。

この値を弄るとひび割れの数が変化します。

<Color Tint Brickノード>

これは以下のParameterでBrickの色を指定していました。

BarをClickするとColor Barが表示されて指定したい色が選択出来ます。

<Delete Small Parts1ノード>

これは最近しようしたNodeなので中身を覚えています。

以下のThresholdの値を弄ると

指定した値より小さなBrickを消してしまいます。

<Peak1ノード>

これはもうDistanceしかありません。

2024-03-31のBlogにこのPeakノードのDistanceをTweakした結果が載っているですが、これを読んだだけではどんな働きなのかイマイチ分かりません。

でもBooleanノードの結果を比較してPeakノードのDistanceの影響を見ている事は分かりました。

PeakノードのDistanceの値が0.002の時のBooleanノードの結果です。

これは弄って判明したんですが、一寸しか変化する事が出来ません。

以下に示したようにDistanceの値が0.025の場合で

Brickの凹みがほとんどなくなってしまいました。

逆にDistanceの値を0.001に下げると

以下の結果のようになり

これ以上はほとんど変化しなくなりました。

これらの結果から考えるとこのDistanceのRangeは0~0.03位で良いと思います。

<Color Brick Chipノード>

これは以下のParameterでBrickの欠けた部分の色を指定しています。

赤くしてみました。

<Re-Mesh Grid Groutノード>

2024-05-05のBlogで解説していました。

最近作ったばっかりです。

なんとここでは2つParameterが使用されていました。

この値によってGrout(セメントの部分)の厚みが変化します。

穴が大きくなったり小さくなったりします。

実際に試してみます。

Divisionの値が0.05の時です。

0.1に変更しました。

あ。

これはMeshの大きさが変わっていました。MeshのSizeを決定するParameterでした。

Dilate/Erodeの値も変更してみます。

Dilate/Erodeの値を上げました

Grout(セメント)の量が増えました。

こっちはGrout(セメント)の量の調整であってますね。

<Color Tint Groutノード>

これはGrout(セメント)の色を決定しているだけです。

以上でした。

Copilot Previewが使用出来ません。

BrowserからAccessしたらこっちは普通に使用出来ました。

なんでなんでしょう?

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

8.UEFNの勉強

8.1  Custom Fortnite Character P. 1 : Import CUSTOM Model - UEFN / Creative 2.0 Tutorial [7]を実装します

<Intro>

特になし

<Download Model from Sketchfab>

AnimationがついているModelをSketchfabからDownloadします。

まずはTutorialと同じModelで試してみます。

これですね。

FBXをDownloadします。

<Importing Model into UEFN>

展開しました。

Sourceを開くと以下のFileが確認出来ました。

UEFNを起動してImportしてみます。

最初からCheckがついていました。

Import出来たみたいです。

Login出来ないって出て来ました。

うーん。

では仕方ない。

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

<追記>

次の日になったら繋がるようになりました。

Animationを開いたら普通に動いていました。

Materialも作成しておきます。

出来ました。

9.DirectX12の勉強

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

9.1.1 Creating a Window | D3D12 Beginners Tutorial [D3D12Ez] [18]を勉強する

今週は最初の10分だけ勉強します。

<Intro>

特になし

<Recap>0:10

今までの内容の復習的な話で、特に重要な部分はなかったです。

<Framework>0:52

Mainの中の実装です。

緑のCommentがこれから追加していく内容になります。

<Creating a Window>2:31

今度はWindowを作成します。

DirectX12で生成した3DのObjectを表示するにはWindowが必要です。

それを作成します。

そう言えばこんな事もやりました。

これって結構大変だったんだ。

Support Foler内にWindow.hを作成します。

WinInclude.hの実装を丸CopyしてWindow.hに張り付けます。

まずClass名をDXWindowと変更しました。

<Window Class>4:24

全部、DXWindowに書き直しました。

ここでWindow Classで指定する内容について簡単な説明がありました。

勿論、通常のWindowの形状の指定をするのは当然ですが、それだけでは無くて、WindowのMemoryをどう扱うのか、例えばDesktopのMemoryを共同で使用するのか、それともWindow自身でMemoryを使用するのかの指定もすると言っていました。

こんな指定、前はした記憶無いです。

更にWindow CreationをどうやってHandleするのかとか、Window MessageをどうやってCycleするのかとかもここで指定すると言っています。

この辺は前にやった事を少しだけ覚えています。

Window.cppを作成し

Init()関数の実装を追加していきます。

以下のようにしてWindow Classを作成しました。

こんな方法で作成してましたっけ。

一寸Blogを調べてみます。

2022-11-06のBlogです。

これは前に勉強していたOlympusMonsTutorialsの内容でした。

2022-12-04のBlogでは「DirectX 12の魔導書」におけるWindow Classの宣言方法について解説してありました。

その次の年の2月頃までずっとWindow Classについて勉強していました。

Instanceの宣言方法がそれぞれ違っています。

Lötwig Fusel氏のD3D12 Beginners Tutorial [D3D12Ez]では

WNDCLASSEXW wcex{};

OlympusMonsTutorialsでは

WNDCLASSEX Wcex;

DirectX 12の魔導書」では

WNDCLASSEX  w = {};

どれも正解ですが、どう違うのかを忘れてしまいました。

Copilotに質問します。

WNDCLASSEX  w;

WNDCLASSEX  w{};

WNDCLASSEX  w = {};

Copilot PreviewにはAccess出来ないのでBrowserからCopilotにAccessしました。

いやこれは宣言はしているけどInitializationはしてないじゃん。と思ったら解説にそう書いてありました。

こっちは全てのStructureのMemberに0などの初期値が与えられるのか。

となると最後との違いが気になります。

同じって書いてありました。

単に読み易いのでこっちを使用する人が多いだけだと。

うーん。

成程。

更に以下のまとめが載っていました。

まあ、最初の方法で宣言するのは止めた方が良いって事ですね。

ホントにCopilotは凄い。

昔ならこれを調べるだけでも一仕事って感じでした。

Window ClassのMemberを追加しました。

<Window Class Styles>

以下のようにセットしただけです。

<Window Proc>7:05

まずWindow.h fileに戻って以下の関数を追加しました。

<Window Parameters>8:05

当然、Window.cppに以下の実装を追加します。

このCallbackと言う書き方も覚えていません。

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

うおお。

凄い沢山の回答が返って来ました。

以下にまとめます。

まずCallback全般についての解説です。

あるFunctionを別なFunctionのArgumentとして使用する事をCallbackと言う。と書かれていました。

あれ?

そうだったけ。

あるEventが実行されたらCallbackが起きる場合です。

今度はCallback Functionに関しての解説です。

ああ、成程。ボタンを押すというEventに対して、どんな機能を追加するのはを決定するのにCallback Functionを使用するのか。

Callback Functionの意味は理解してなかったけど、この機能は今までもずっと使用していましたわ。

要するにCallback FunctionにEventが起きたら何をするのかを具体的に書くわけだ。

相する事で全体のCodeを変更しないで、個別の機能を追加する事が出来るようになった訳です。

やっとCallbackについて心の底から理解出来た。

やっぱりCopilot凄い。

以下の実装をしていました。

後、Function Pointerについても質問してみます。

まあ、これは想像していた通りです。

最後のDispatch Tablesの意味は分かりませんが、残りは想像していた通りです。

以下のように宣言するそうです。

うん。

そうなの?

こんな宣言した事ないですけど。

ReferenceとDereferenceのやり方です。

この場合はReferenceで指定したFunctionを呼び出しているはずです。

後で、この辺の内容は確認する事にします。

やっぱりそうでした。

最後にFunction PointerをParameterとして使用する方法が載っていました。

これだと、ここで指定したFunction Pointerと同じ型のFunctionなら何でもPass出来るという事ですね。

Function Pointerについても完全に理解しました。

Copilot凄い。

OnWindowMessage()関数の実装を追加しました。

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

<Additonal Memory>9:19

さあ、ここでWindow作成のためのMemoryについて勉強します。

前回Windowを作成した時は、まったくMemoryについて勉強した記憶がありません。

よく聞いて理解する事にします。

この2つがExtraのMemoryを指定するそうです。

うーん。

これがそうなのか。

Blogで確認したけど、このParameterは使用してないですね。

公式SiteのWNDCLASSEXA structure (winuser.h) [18]を見たんですが、

以下のSyntaxになっていて

普通にcbClsExtraとcbWndExtraはあるんですが。

もう一回確認します。

ありました。

2022-11-06のBlogにOlympusMonsTutorialsでは以下のように指定していました。

正し説明はなく、どんなWindowでもこれらの値はこういう風に設定する。と言ってるだけでした。

それだけでした。

他の教科書にはこのParameterの説明は載ってなかったみたいです。

念のために「DirectX12の魔術師」のSample Codeだけ確認しましたが

やっぱりcbClsExtraとcbWndExtraは指定してないです。

公式SiteのWNDCLASSEXA structure (winuser.h) [18]のcbClsExtraとcbWndExtraの説明です。

うーん。

一応、このParameterがExtraなMemoryを確保するんですよ。と聞いているので何となく言っている事が理解出来るって感じです。

この後、このMemoryの使用方法について解説するのかと思ったらなんと、

次のMemberの値をどんどん指定して行ってしまいました。

残りのParameterの指定方法に関しては他のTutorialで勉強した内容と大同小異なので、ここでは勉強しません。

最後にこのWindow Classを登録(Register)します。

このRegisterしたWindow Classの結果を受け取るための変数を作成します。

Window.hに戻って以下の変数を作成します。

ATOMってどんな変数だったけ。

Copilotに聞きます。

うん。

この後もATOMについて詳しく解説していますが、肝心のVariableとして使用した場合についての解説がありません。

と思ったら以下のところにありました。

多分ですが、ATOMを使用するとどんなWindow Classが返って来てもErrorにならないんでしょう。

そしてWindow.cppに戻ってATOMを使用して作成した変数、m_wndClassにRegister Classの値をAssignしました。

勿論、失敗する時もあるので以下のようにその確認のためのCodeも追加しておきます。

以上で最初の10分(正確には12:53)が経ったので、今週のD3D12 Beginners Tutorial [D3D12Ez]の勉強は終わりにします。

9.1.2 Pointer Functionを実装する

まずCopilotにある例をそのまま書いてみました。

実行してみます。

うーん。

凄い。

一寸だけCodeを変更してみます。

以下の関数を作成して

Funcに追加しました。

その結果です。

おお。出来てます。

今度はPoint FunctionをParameterとしてPassする方法を試してみます。

以下の関数を作成しました。

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

結果です。

今度は

Add()関数に変更しました。

結果です。

おお、足し算に変っています。

出来てますね。

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

9.2.1 「4.11 三角形ポリゴンを四角形にしてみる」を勉強する

今週は軽く全体を読む事にします。

<「4.11.1 Primitive Topologyを変更する」を読む>

Vertexの数を4つにすると言っています。

いや私のProjectは既に4つになっているのに三角形しか表示しないです。

と思ったら、その理由が書かれていました。

以下のCodeの設定が

D3D_PRIMITIVE_TOPOLOGY_TRIANGLELISTになっているからだそうです。

これをD3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIPに変更して

更に、以下のDrawInstanced()関数の最初のParameterの値を4に変更すれば

四角形が表示されるようになるそうです。

先週、四角形を表示しようとして失敗しましたが、結構惜しい所までやっていました。

D3D_PRIMITIVE_TOPOLOGY_TRIANGLELISTなどのIASetPrimitiveTopology()関数内のParameterについては来週以降、しっかり教科書を勉強する時に調べる事にします。

<「4.11.2 Indexを利用する」を勉強する>

ここではIASetPrimitiveTopology()関数の値がD3D_PRIMITIVE_TOPOLOGY_TRIANGLELISTのままで、Indexを代わりに使用して四角形を表示する方法を示すそうです。

ここではIndexが何なのかと言う説明と、Indexを使用するとVertexを6個指定しなくても三角形を2つ生成して四角形が作成出来る事が説明されていました。

なんか、この辺の話は昔、OpenGLを勉強した時に一回勉強した気がします。

<<「Indexを使う理由」を読む>>

別な例を用いて、Indexを使用するとLoad時間やVertexの呼び出しの回数が少なくなる事を解説していました。

<<「Indexの実装」を読む>>

ここは実際のIndexの実装方法が書かれていました。

具体的な内容に関しては次回しっかり読む時にまとめます。

後以外に重要な事が書かれていました。

MMDに使用されるPMDモデルはIndexありきで制作されているのでIndexを読み込めないと表示出来ないそうです。

前にOpenGLを勉強していた時に、MMDのModelを表示させたりしていたのですが、その時にはそう言う事は気にした事はなかったはずです。

多分Indexは使用していたんでしょうね。

あんまりおぼえていませんが。

9.2.2 「4.11 三角形ポリゴンを四角形にしてみる」を勉強した感想

これで4章が終わりです。

結構感慨深いです。

4章と比較するとやっぱり3章がかなり難しい内容でした。

これから勉強する人達には、3章はもう少しかみ砕いて教える必要がありますね。

10. まとめと感想

なし

11. 参照(Reference)

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

[2] Jeremy Howard. (2022, July 21). Practical Deep Learning for Coders: Lesson 1 [Video]. YouTube. https://www.youtube.com/watch?v=8SF_h3xF3cE

[3] Ben Cloward. (2023, November 30). Introduction to Vertex Shaders - Advanced Materials - Episode 32 [Video]. YouTube. https://www.youtube.com/watch?v=CHrnErTJvHU

[4] pwnisher. (2024, May 11). Unreal engine materials in 6 levels of complexity [Video]. YouTube. https://www.youtube.com/watch?v=iZgbzwBQTPY

[5] Reality Forge. (2024, March 29). Unreal Engine 5.4: Create a Product Commercials with Motion Design [Video]. YouTube. https://www.youtube.com/watch?v=yWQIz5yzTrw

[6] Rick Banks. (2022, June 22). Houdini 19 - Wall Tool 12 [Video]. YouTube. https://www.youtube.com/watch?v=Bi-9UwB_B1Q

[7] Pi Equals Three. (2023, June 10). Custom Fortnite Character P. 1 : Import CUSTOM Model - UEFN / Creative 2.0 Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=9f9UyyWG94Y

[8] Lötwig Fusel. (2023, June 5). Creating a Window | D3D12 Beginners Tutorial [D3D12EZ] [Video]. YouTube. https://www.youtube.com/watch?v=yBKQLxkcXz4

[9] Lumen Technical details in Unreal Engine | Unreal Engine 5.4 Documentation | EPic Developer Community. (n.d.). Epic Developer Community. https://dev.epicgames.com/documentation/en-us/unreal-engine/lumen-technical-details-in-unreal-engine

[10] Patrick Loeber. (2019, December 13). PyTorch Tutorial 01 - Installation [Video]. YouTube. https://www.youtube.com/watch?v=EMXfZB8FVUA

[11] Codemy.com. (2023, April 24). Intro To Deep Learning With PyTorch - Deep Learning with Pytorch 1 [Video]. YouTube. https://www.youtube.com/watch?v=kY14KfZQ1TI

[12] AssemblyAI. (2022, July 9). PyTorch Crash Course - Getting Started with Deep Learning [Video]. YouTube. https://www.youtube.com/watch?v=OIenNRt2bjg

[13] freeCodeCamp.org. (2022, October 6). PyTorch for Deep Learning & Machine Learning – full course [Video]. YouTube. https://www.youtube.com/watch?v=V_xro1bcAuA

[14] sentdex. (2019, September 23). Introduction - Deep Learning and Neural Networks with Python and Pytorch p.1 [Video]. YouTube. https://www.youtube.com/watch?v=BzcBsTou0C0

[15] Aladdin Persson. (2020, June 24). PyTorch Tutorial - Setting up a deep learning environment (Anaconda & PyCharm) [Video]. YouTube. https://www.youtube.com/watch?v=2S1dgHpqCdk

[16] Mathew Wadstein Tutorials. (2016, January 30). WTF is? Material - Desaturation in Unreal Engine 4 [Video]. YouTube. https://www.youtube.com/watch?v=0pPyCZvZ05A

[17] Rick Banks. (2022, June 20). Houdini - Wall Tool 06 [Video]. YouTube. https://www.youtube.com/watch?v=o6Jfgv_FXWs

[18] Jwmsft. (2022, July 27). WNDCLASSEXA (winuser.h) - Win32 apps. Microsoft Learn. https://learn.microsoft.com/en-us/windows/win32/api/winuser/ns-winuser-wndclassexa