UE4の勉強記録

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

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

1. 今週の予定

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

<映像作品としてのLandscapeの作成>

3D Gaussian Splattingの元になる動画の撮影では、中心のObjectが風で揺らいていると3D Gaussian Splattingにした時にピンボケする事が判明しました。

今回は中心のObjectは固体を使用して撮影してみます。

Asphaltの地面が綺麗に再現出来ない理由はまだ不明です。今回はObjectを遠くから撮影してみます。

Unreal Engine 5 for Architecture - 2023 Full Beginner Course [1]の勉強の続きをやります。

先週このTutorialの勉強の一環として、公式SiteのLumen Technical Details [2]を勉強しました。

その中で、凄い興味を引いたのがHardware Ray TracingのFar Fieldの機能です。

これの設定方法についてもっと調べる事にします。

もしその後も時間があったら2024-04-28 のBlogで勉強したProject Settingの続きを実装します。

<AIの勉強>

今週からNiagaraの勉強の代わりにAIの勉強を始めます。

Jeremy Howard氏のPractical Deep Learning for Coders [3]を勉強する予定です。

他にも3Blue1Brown氏のNural Networks [4]とか

東京大学 松尾・岩澤研究室の松尾研 LLM コミュニティ Beginning LLM [5]とかも見ていこうと思います。

このTutorialが良いという噂を聞いたんですが、一個しか動画が上がっていません。

これじゃないかもしれません。

こっちはLLMの勉強みたいですね。

AIは全く分からないのでDeep LearningとLLMの関係も分からないです。

まあ、慌てずにゆっくり勉強する事にします。

<Materialの勉強>

Ben Cloward先生のTutorialを勉強します。

<Gaeaの勉強>

GaeaのTutorialを作成します。

先週、何もしなかったので今週は頑張ってTutorialを作成します。

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

先週、以下の順番で勉強する事にしました。

今週も Unreal Engine 5.4: Create STUNNING Product Commercials with Motion Design [6]の実装の続きをやります。

<Houdiniの勉強>

Castle Wall Tool [7]の勉強をやります。

今週は先週勉強したHoudini 19 - Wall Tool 12 [8]の実装を行います。

<UEFNの勉強>

先週は突然、UEFNの勉強は無駄かもしれない。と思い、止めるか続けるのかをもう一回考え直す事にしました。

更に言うと、元々Mapを公開してお金を稼ぐのが目的だったのに、全くその目標に到達出来そうにないので、少なくともPi Equal Thee氏のTutorialで勉強するのは止めた方が良いのでは。と思っていました。

Blogを書いた後に、Map上に神社を作って賽銭を貰ったらどうか。というIdeaを最初に考えていた事を思い出しました。

3D Gaussian SplattingやPCGそしてGaeaで作成したPhoto-Realisticな神山とその中に神社をUEFNで公開するんです。

今かんがえても「このIdeaは絶対にいける。」と思っています。

やっぱりUEFNの勉強は続ける事にしました。

<DirectX12の勉強>

Lötwig Fusel氏のDirectX12のTutorialではFence & Command List | D3D12 Beginners Tutorial [D3D12Ez] [9]の最後の10分を実装します。

DirectX 12の魔導書」は「4.10.3 描画命令」を実装します。

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

2.1 3D Gaussian SplattingをUE5で試す

今日は大雨なので外での撮影は中止します。

代わりに3D Gaussian SplattingをUE5で落としてそれを撮影してみます。

この自転車の3D Gaussian Splattingは前にUE5の落としたものです。

この中をUE5のMannequinを走らせる映像を取ります。

このProjectが元々Third Person Characterが出てこないTemplateを使用していました。

うん。

新しいProjectを作りますか。

Third Person CharacterのTemplateを使用したProjectを新しく作成しました。名前はThird Person 3DGSとしました。

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

3D Gaussian SplattingのImportの仕方を忘れてしまいました。

調べます。

2024-04-07のBlogにLuma AIのGaussian SplattingのDataをUE5にImportする方法がまとめられていました。

Luma AI PluginをEnableします。

自転車のPly FileをImportしました。

Level上に3D Gaussian Splattingを展開してみました。

うん。出来てますね。

板を敷いてその周りをQuinnで歩いてみます。

床に敷いたCubeを調整しました。

色々な角度から見てみます。

これなんか結構良い感じです。

こっちは後ろの建物が歪んでいるのが確認出来ます。

自転車から離れると風景もぐちゃぐちゃになります。

もう一回、自転車の周りを回ってみます。

左の遊戯施設がボケています。

これはほぼOKです。

こっちも遊戯施設の一部がボケています。

自転車は綺麗に写っています。

これは写真を奥に置いた感じがしますね。

3D Gaussian Splattingの角度を少し調整しました。

後ろの建物が真っすぐになりました。

この角度から見る限りはギリギリですが、本物に見えなくもないですね。

2.2 3D Gaussian SplattingをUE5で試した感想

まず簡単には行かない事が分かりました。

その上で以下の改良すべき部分が分かりました。

一つ目は、Third Person Characterを歩かせるためには、CubeかPlaneを床に引く必要があります。

このStatic Meshが部分部分で表面に飛び出します。

適切なMaterialを張り付けて目立たなくする必要があります。

二つ目は、Third Person Characterに付属のCameraで撮影するとかならずぼやけた部分る事です。

Third Person CharacterであるQuinnをLevel上で動かす場合はLevel Sequenceを使用してCameraは別に配置した状態で撮影した方がよさそうです。

更に言うと、ここでAndroidを使用した撮影方法を組み合わせるのが良いかもしれません。

最後の点は、影の影響がどうなるかですね。

今回は影が出ないタイプの3D Gaussian Splattingで試してたので影の影響については全く分かりません。

これは来週、試す事にします。

2.3 Hardware Ray TracingのFar Fieldについての調査

これです。

まずこれを試す事できるMapを探します。

色々探したけどあんまりいいMapが無いです。

やっと見つけたのが以下のMapです。

Hardware Ray Tracingをセットします。

Use Hardware Ray Tracing when availableがEnable出来ません。

うーん。何で?

もしかして最初にProjectを作成する時に以下のCheckを入れないと駄目なのか?

2024-05-05のBlogでは

となっています。

もしかしてGame用のTemplateだとUse Hardware Ray Tracing when availableはEnable出来ないのかも。

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

今週はMapを探すのに時間を捉られて進みませんでした。

3.AIの勉強

3.1 Jeremy Howard氏のPractical Deep Learning for Coders [3]を勉強する

3.1.1 Practical Deep Learning for Coders: Lesson 1 [10]を勉強する

<Introduction>

特になし

<What has changed since 2015>

特になし

<Is it a bird>

写真を見て鳥かどうかを判断するCodeをPythonを使用して書いています

<Images are made of numbers>

特になし

<Downloading images>

以下のPythonのCodeでImageをDownloadしているんですが、

このCodeは自分で書けないと駄目なんでしょうか?

Python弄った事ないんですが。

一応、自分勝手に読んでみます。

まず最初の行にあるsearchesですが、Constantでしょうか。Typeの指定は無いですね。

ForestとBirdを指定しているのでStringのArrayになっているようです。

次の行のPathですがこれは何を指定しているのか分かりません。

Path(’bird_or_not’)

となっています。

次のIf not節は分かり易いです。もしPathが存在しなかったら実行を停止しろって事です。

次の行はFor Loopでしょう。

でもo in Searchの意味が分かりませんね。

そのまま解釈するとSearchの中のoを探せ。と言う意味に思えてしまいます。

Mkdir()関数はそのままDirectoryを作成しているはずです。

Resultsはddgの中にあるImageでoの条件であるものを保持しているはずです。

その結果の最初の200枚をDownloadしているようですね。その次の行で。

最後の行でImageのSizeを変更していますね。

うーん。

分からん。

一寸調べますか。

Python Variables, Constants and Literals [11]によると

=でVariableの初期化も出来るみたいですね。

何とPythonではConstantの名称はUppercaseで書く必要があるそうです。

更に別のFileで作成してそれを読み込むそうです。

Constとして読み込むようにと指定していますね。

これがConstantのAssignの方法のようです。

となるとこの例で宣言しているのはConstantではなくVariableですね。

これは実際にPythonでCodeを書いて確認しないと分からんですね。

このLectureで使用しているPythonは何て名前だったのかな。

なんかNetを利用して行うやつだったはずです。

これは後で調べてInstallします。

次のPathですが、調べてもPathlib.Path()しか出て来ません。

Copilotに質問したら以下の回答が返って来ました。

PathlibはどうやらModuleのようです。

そしてPathlib Moduleは以下の機能があるそうす。

FileへのPathを示しているって書いていました。

そうか。

じゃ、

は同じFolder内にあるBird_or_Not file(もしくはFolder)へのPathを示しているって事か。

次はPath Classの機能についての解説が載っていました。

使用したいFolderやFileへのPathを作成してくれることは分かりましたが、具体的なPathの書き方はどうなっているんでしょうか?

例も載っていました。

いや、例文のCodeでもbird_or_notを使用しているじゃないですか。

これでは分からん。

次はFor Loopの書き方です。

W^3 SchoolのWebpageにあったPython For Loops [12]です。

以下のように書くと

こんな結果になるそうです。

これXの代わりにOを使用しても同じ結果になるんでしょうか?

こういうのは自分で確認しないと分からないですね。

と思ったら自分でCodeを書いて試せる箇所がありました。

以下のCodeを実行してみます。

結果です。

成程。

となると

はSearchesにあるStringを一個ずつ取り出しているだけのようですね。

これは何をしているんでしょう。

以下の質問をCopilotにしてみました。

Copilotの回答です。

まずCodeを書き直しています。

そして以下の説明をしていました。

成程。

こういう意味だったのか。

要は、Distに新しいPathであるBird_or_not/birdをAssignしたって事でした。

そうなるともう残りの意味は分かりました。

Distの場所に新しいFolderを生成します。

DdgからBird のPhotoを探して来ます。

そのImageから最初の200枚をDistにDownloadします。

ImageのSizeを400に変更します。

今度は間違ったImageをUnlinkしています。

何でVerify_images()関数で間違ったImageを取り除く事が出来るんでしょうか。

そもそもVerify_Image()関数は何をやっているんでしょうか?

またCopilotに聞きました。

そんな関数はない。って帰って来ました。

これは教授のJokeだったみたいです。

<Creating a DataBlock and Learner>

で今度はDataBlockを作成しています。

このData Blockと言うのはC++でいう所のStructみたいなもんでしょう。

Data Blockの作成方法を確認します。

またCopilotに質問します。

これは実際に作成する方法を教えているのか。

これはPythonをInstallしてから勉強する事にします。

Lectureに戻ります。

以下の6つのImageを表示していました。

<Training the model and making a prediction>

今度は以下のCodeを流しています。

こんな関数があるんでしょうか?

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

あるみたいですね。

回答の残りも以下に示しておきます。

これ読むとcnn_learner()関数の大体のImageがつかめますね。

以下のような結果が出て学習が終わりました。

今度はこの学習したAIを使用してテストするみたいです。

これでテストになるのか。

まずlearn.predict()関数がなんなのかを調べる必要があります。

更にこのReturn Valueをis_bird, _ . probsで受け取っています。

Pythonって2つのReturn Valueを受け取る事が出来るの?

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

凄い。

何でも答えてくれます

ただこれって効率は凄い高くなりますが、その分疲れますね。

以下のような感じで使うそうです。

うーん。

じゃこのCodeだけ覚えてしまえば一応、Machine Learningが作成出来てしまうって事。

これは簡単だ。

LectureのCodeはつまりこのTrainしたModelにBird.jpgと言う名前のImageを見せて鳥かどうかを聞いている訳です。

その返事です。

うーん。

ここからがLectureの重要な内容でした。

今回のLectureは別にこの部分のPythonのCodeを勉強するのが目的ではなかったです。

ここでLectureの最初の部分の話と繋がって来ます。

ところが私はこのLectureの最初の部分は大切だと思ってなかったのでSkipしてしまいました。

以下に最初の部分の話を簡単にまとめます。

6:33

2015年頃は、AIに写真を見せて鳥が写っているかどうかを判断させるのは不可能でした。

それを示す当時の一コマ漫画です。

ところが現代(動画が作成されたのは2022年頃)ではこんな簡単なCodeでAIがImageを見て鳥かどうかをはっきり示す事が出来ます。

こんな短期間にどうしてAIはこんな大進化をする事が出来たのでしょうか。

<What can deep learning do now>

速くその解答を教えてほしいし、話の流れ的にそれがDeep Learningなのは想像出来ますが、中々その話が出て来ません。

その代りにMid JourneyとかDaliで生成されたImageを見せています。

2022年当時は衝撃的だったかもしれませんが、今となっては別にって感じです。

これでこの節は終わってしまいました。

あれ?

これはオカシイ。

前の節の最後をもう一回聞き返したら、

既にそれがDeep Learningだって言っていました。

<Pathways Language Model (PaLM)>

ここでそのDeep LearningのModelがどうなっているのかを習えるのかと思ったら、今度はGoogleのPathways Language Model(PaLM)についての話です。

別なClassで勉強するAIと倫理の話もしていました。

こういうのってアメリカだと当然のように勉強させられますが、日本ではこういうのはほとんど勉強する人はいませんよね。

こういう所で躓いてしまう日本人って多そうな気がします。

一応、気になっていたので記録に残す事にしました。

この後はClassの進め方についての解説をしていました。

Classの何%が理解出来なかったら内容をどうするのかとかの話をしていました。

これは私には関係ない話です。

私は理解するまで前に進まないので、勝手に自分のペースで勉強しますので。

ここでLectureの10分が経過したんですが、ほとんど何も勉強していません。

なので疲れもしません。

YouTubeのTutorialは10分も勉強するとくたくたになりますが、大学の時は一時間半とかの長い時間を良く勉強出来たな。と少し焦っていたんですが、何の事はない。内容が薄かったんです。

そりゃそうだ。教室には下手したら100人ぐらいの生徒がいる訳ですから、その生徒が全員理解出来るペースで教える必要があるから遅くなったり内容が薄くなったりするのは当然です。

これはYouTubeで勉強するのはかなりお得だったのかもしれませんね。

もう少し勉強する事にします。

<How the course will be taught. Top down learning>

このCourseの学習方法が少し特殊な理由を説明していました。

簡単にまとめると初心者でも理解出来る方法で教えるので、博士号とか持っている人が最初からぎっちり理詰めで勉強したい人には不満がある学習方法になっているとの事です。

後、以下の教科書に沿って勉強しますが、

この教科書が無料でDownload出来る事も説明していました。

これは前にDownloadした記憶があります。

Blogにも記録を残したはずなんですが見つかりません。

DownloadしたFileは見つかりました。

この前後のBlogも調べましたがAIについての話は載ってなかったです。

<Jeremy Howard’s qualifications>

これだけ勉強してこのTestを理解出来たら、まあこのCourseを履修した事を認めてやる。みたいな話かと思ったら、逆でした。

Jermey Howard氏がこのLectureを教える資格がある事を説明していました。

<Comparison between modern deep learning and 2012 machine learning practices>

何とやっとここで何で今のAIは簡単に鳥を見分ける事が出来るのかを説明するそうです。

どうもMachine LearningはDeep Learningより前にあってMachine Learningはあんまり上手くいってなかったみたいです。

でLayerを直接見る事にしたみたいな説明をしていました。

<Visualizing layers of a trained neural network>

なんかLayerをどんどん増やしています。

<Image classification applied to audio>

LayerをImageで表していますが、これは元のDataがImageだからではなく、どんなDataでもImageで表すそうです。

その例として音の学習のImageを示していました。

<Image classification applied to time series and fraud>

他の画像ではないDataでImageのLayerを作成した例を示しています。

後、Deep Learningの学習で以下のように述べていました。

<Pytorch vs Tensorflow>

このCourseではPyTorchを使用するそうです。

これをInstallする必要があるのか。

良し。

ここでLectureの時間で30分たったんですが、まだ余裕があります。

もう少し勉強します。

<Example of how Fastai builds off Pytorch (AdamW optimizer)>

PytorchだけでCodeを書くのは大変なので、Jermey Howard教授が作成したFastaiというLibraryを使用して学習するそうです。

Jupyter Notebookとかいうのを使用してSlideを作成しているそうです。

これ使う必要があるの?

調べます。

一応、無料と書かれてはいますね。

なんと、このSoftをCloud Serverで走らせて使用するそうです。

どうも大学の学生はこのCloud Serverを無料で使用出来るみたいですね。

これは別に真似しなくてもいいや。せっかくRTX-3700Tiがあるんだし、自分のPCで計算しますわ。

<Using cloud servers to run your notebooks (Kaggle)>

一応、この説明は聞いておきます。

以下にしめしたKaggleというCloud Serverを使用しています。

これか。

どうせ無料ではないでしょう。

こんなのもある位で理解しておきます。

いきなり以下の画面から始まっています。

Editを押します。

以下に示した様にEdit Modeに入りました。

ここでPythonが自由に使用出来るそうです。

この辺は勉強したくなったらKaggleのTutorialを個別に探して勉強した方が効率良いでしょう。

Tip的な話を何個かしています。

!があるのはPythonではなくBash Shell Commandだとかです。

この辺はKaggleを勉強しないといけなくなったら勉強する事にします。

<Bird or not bird? & explaining some Kaggle features>

実際にKaggleを使用して先程の鳥の画像を識別するAIを作成するためのCodeを書くみたいです。

まず、FastaiをInstallしていました。

Kaggle内でLibraryをInstallする時は電話番号を聞かれるそうです。

うん。

なんか既視感があります。

この動画は前に軽く見たはずですが、一回勉強したかもしれません。

<How to import libraries like Fastai in Python

<Best practice - viewing your data between steps>

この辺は前に示したCodeの解説をしています。

私は既にここで紹介されているCodeは勉強してしまったので繰り返しになる部分はSkipsします。

<Datablocks API overarching explanation>

あれ、Verify_images()関数を使用しています。

うーん。

ここは実装する時に確認します。

Data Blockの説明です。

BlocksはどんなDataなのかを解説しているそうです。

最初のParameterはInputのImageについての説明です。この例でImageのBlockだと説明しています。

次のParameterはOutputのImageについての説明です。この例ではCategoryのBlockだと説明しています。

うーん。

分かり易い。

ここで丁度、Lectureの半分が終わりました。

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

残りは来週勉強します。

4.Materialの勉強

4.1 Introduction To Vertex Shaders - Advanced Materials - Episode 32 [13]を勉強する

Brickの作成が終わって、次のTutorial Seriesです。

今度はVertex Shaderについて勉強するそうです。

UnityのMaterialではVertex ShaderとPixel Shaderが分かれていますが、UE5のMaterialでは一緒です。どうやって勉強するんでしょうか?

以下の内容を勉強すると言っていました。

成程。Materialから直接Vertex Shaderを扱う方法を勉強するのではなく、Vertex Shaderで扱っている機能についてUEやUnityを使用した場合の適用方法を勉強するみたいですね。

Offsetの説明をしています。

成程。

今回のTutorialはこんな内容を勉強するのか。

次に以下のVertex Interpolatorノードを使用していました。

このNodeの左側に来たものは全部Vertex Shader、右側に来たものはPixel Shaderに繋がるそうです。

以下のように使用していました。

これは面白いNodeを知りました。

何と今週の勉強はこれだけでした。

まあ丁度いいかもしれません。

実装は来週します。そしてこのVertex Interpolatorの機能を色々試してみます。

5.Gaeaの勉強

5.1 Tutorialを作成する

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

先週のSlideをそのまま流用しました。

今回勉強するNodeのPropertiesはTextureノードとSatMapノードの2つです。

SatMapノードのPropertiesを示しています。

Satellite MapのLibraryの種類を解説しています。

ひし形のButtonの機能について解説しています。

HeartマークのIconの機能です。

Rangeの機能です。

TextureノードのPropertiesです。

5.2 Tutorialを録画する

今回はMicrophoneを机に置いて録音しました。

録音する音が小さいのでPCの設定を変更しました。

Control Panelを開き

Soundを選択しました。

マイクを開き

LevelのTabからマイクのLevelを最大値まで上げました。

更に詳細のTabを開き

ApplicationによりこのDeviceを排他的に制御できるようにするもOffにしました。

一応これで録音した音が少しは大きくなりました。

ただしGaeaを操作している時の録音した音声はあんまり綺麗ではないのは一緒です。

ここは後から録音しなおします。

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

6.1 Unreal Engine 5.4: Create STUNNING Product Commercials with Motion Design [6]の実装の続きをやる

先週の最後にやった内容を確認します。

となると今週は2024-04-21のBlogの内容を実装する事になりますね。

<Adding Background Text>

ここからやって行きます。

Projectを立ち上げたらSoda Canがまたどっかにいってしまいました。

こんなところにありました。

更にMotion Designの項目を見ると

Soda CanとCTRL_Canが別々の存在になっています。

うーん。

なんで?

無理やり、Soda CanをDragしてCTRL_Canに追加してみました。

するとSoda CanのLocationが0を指さなくなりました。

Soda CanのLocationを0に直しました。

Soda Canの位置が元の場所に戻りました。

あー。

びっくりした。

以下のWindowの表示方法が分りません。

Place Actor Windowを開いてそこからText Actorを追加します。

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

TextにIt‘s Unrealと打ち込みました。

更にEnforce Upper CaseにCheckを入れました。

Fontの指定ですが、Tutorialでは以下のFontを使用していましたが、

このFontはDefaultではないのでDefaultのままにしておきます。

結果です。

字が大きすぎてはみ出してしまっていますね。

調整します。

文字のFontも変更しました。

次の工程ですが、2024-04-21のBlogには

CameraをTime Sequenceに追加すると書いておきながら。実際はText Actorを追加しています。

Text ActorをLevel Sequenceに追加しました。

Text Actorの+を押してActor Hidden in Gameを選択します。

Visibilityが追加されました。

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

以下に示した白いBarの位置が120の位置に移動しました。

ひし形のIconを押してKey Frameを追加しました。

今度は以下の場所に119を代入しました。

そしてVisibilityのCheckを外しました。

<Animating Background Text>

今度はFrameが240の場所に白いBarを移動させました。

Kerningの値をSequenceに追加しました。

更にFrameが120の位置に白いBarを移動させ

Kerningの値を-5.0にしてその値を記録しました。

Animationを見て確認しましたが、文字が大きくなるAnimationが追加されています。

次の工程です。

とりあえずBarを掴んでひっぱってみます。

出来ました。

白い縦のBarでは無く、Text Actorの横線のBarをひっぱったら出来ました。

更にSequence Curveの調整も行います。

右上のPointを選択して

Tangent Lineを表示させ、

Tangent Lineの左端のPointを引っ張って

このようなCurveに変更しました。

Animationを見て確認しましたが、あんまり変化は感じませんでした。

<Rendering>

とうとうRenderingまで来ました。

CameraをTime Sequenceに追加しました。

以下のIconをClickし

以下のWindowが開きました。

Unsaved Configを選択します。

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

ここは見ただけでした。

Acceptを押して前のWindowに戻り、右下にある以下のButtonを押します。

あ。

どこにOutputされたのか確認するのを忘れていました。

出来ました。

生成されたFileはProjectのSaved内のFolderに保存されていました。

おお。と思ったら生成されたImageを見ると

Textの文字がボケているし、Soft Canが表示されません。

???

です。

一回UEを再起動してみました。

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

Soda Canがまた外れていました。

Soda CanをCTRL_Canにつなげると元に戻りました。

Soda Canの方にもKey Frameを入れてみました。

もう一回Renderingしてみます。

うーん。

駄目でした。

これはSoda CanだけでLocationを指定し直す事にします。

色々やってとうとう出来来ました。

最終的にはSoda Canは新しいSatic Meshで作り直しました。

うーん。で

この300枚のImageからどうやってVideoに変換するんでしょうか?

Davinci Resolveに突っ込んだらVideoに変換してくれました。

それをMP4 FileでRenderingしました。

更にそれをGifに変換したのを以下に示します。

(Sizeが大きすぎるのでImageに変えました)

なんでこんなに遅いんでしょうか?

見直すとDavinci Resolveで生成したVideoそのものが遅くなっていました。

Frame rateが60FPSなのに24FPSでVideoを生成したからこうなったんです。

色々調べたんですがどうやって60FPSでVideoに編集するのか分かりません。

今回は250倍の速度でVideoを作り直しました。

それをGifにしたモノを以下に示します。

まあ、最初の映像作品なので、これでも良いでしょう。

一応完成とします。

7.Houdiniの勉強

7.1 Houdini 19 - Wall Tool 12 [8]を実装する

Clean UpとDigital Assetの作成を行います。

<Clean Up>

Color_TintGroutノードのClassの値をPrimitivesに変更します。

しました。

以下の位置にGroupノードを追加します。

Group Nameの値をGroutに変更します。

Merge3ノードを選択し

更にiを選択します。

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

以下のAttributeが生成されていました。

Tutorialで生成されていたAttributeです。

全く同じですね。

要らないAttributeを消します。

Attribute Delete1ノードを追加します。

以下のAttributeを消します。

ここはTutorialに書かれているままにやりました。

どのAttributeをどこで使用したのかについては全く覚えていません。

後、ここでDeleteされるAttributeが自分で書いたCodeから生成されたものなのか、それとも勝手に生成されたものなのかも分かりません。

この辺はおいおい勉強していくことになると思います。

同様の事をGroupにも行います。

Group Deleteノードを追加します。

要らないGroupを消します。

何とGroup Nameに何も登録されていません。

Merge3ノードを見ると以下のように沢山のGroupが存在しています。

以下のようにMerge3ノードから直接Group Deleteノードを繋いだ場合は

以下のように

存在するGroup Nameが全部表示されます。

これはAttribute Deleteノードの設定をどこか間違えている可能性があります。

Tutorialを見直して確認します。

TutorialのGroup DeleteノードはしっかりGroup名が表示されていました。

更にTutorialではAttribute Deleteノードのiを表示させると

以下のように残っているGroupを表示しますが、

私のAttribute Deleteノードは

あれ?

表示している。

前に見た時は表示してなかったんですが?

何とGroup DeleteノードのGroup NamesもGroup名を表示するようになっていました。

???です。

もしかしたら全体の計算をして情報を更新するのに少しだけ時間がかかるのかもしれません。

以下のように値をセットしました。

Outputノードを追加します。

名前をOutput_BrickWallOutputとします。

ここからDigital Assetを作成します。

全部のNodeを選択します。

以下のIconを押します。

しばらくなんの変化も起こらないので、焦りましたが

以下に示した様に一個のNodeになりました。

このNodeにBrick Wall Toolと名付けました。

右ClickしてDigital Assetを選択します。

<Create A Digital Asset>

これの事でしょうか?

先週のBlogで取ったScreenshotではDigital Assetと言う項目がありますね。

Tutorialを見て確認します。

Create Digital Assetの方を選択していました。

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

TutorialのBoxとは全然違いますね。

一寸、読む事にします。

まず最初のAsset Labelです。

これはTutorialのOperator Labelと同じでしょう。

名前をBrick Wall Tool (Build)としました。

以下の部分は名前や分類するための設定です。

そのままで良いでしょう。

次に行きます。

最後のSaveする場所ですが、

C:\Users\kazuh\OneDrive\Documents\houdini20.0\otls\sop_kazuh.Brick_Wall_Tool_Build.1.0.hdanc

C DriveになっているのでDに変更します。

D:\2024\Houdini\houdini20.0\otls\sop_kazuh.Brick_Wall_Tool_Build.1.0.hdanc

ここにAddressを記録しておくので駄目だった場合は元のAddressに直してまた試せるでしょう。

Createを押します。

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

実際は5秒ぐらい何の反応もなくて結構焦りました。

Maximum Inputsの値を2に変更します。

Parameterの設定をします。

高Polygonの結果と低Polygonの結果の表示を選択出来るParameterを作成します。

ParameterのTabを選択しました。

以下の画面が表示されました。

この画面はTutorialとほとんど同じですね。

Create ParametersのBy TypeにToggleもありました。

これをDrag and Dropして

Exiting ParameterのRootに追加します。

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

名前をBuildModeToggleに変更します。

Labelの値をBuild Modeに変更します。

この状態で右下のApplyを押します。

更にAcceptを押します。

開いていたWindowが閉じて通常の画面に戻って来ました。

BrickWall_tool_Buildを見ると以下のように

開いたLockのIconが表示されています。

このIconはTutorialの方には表示されていませんね。

更にParameterの表示ですが、

私の方は以下に示した様に

名前とBuild Modeしかありませんが、Tutorialの方は

Asset Name And Pathがあります。

うーん。

まあVersionが変わったのでUIも少しだけ変化しただけでしょう。

今度はBrick Wall Tool Buildノードの中を開いて中身を変更していきます。

先週、勉強した時にこれどうやって開くんだよ。と思ったんですがDouble Clickしたら普通に開けました。

Nullノードを追加します。

Switchノードを追加します。

Nullノードの結果を繋ぎます。

うーん。

Nullノードはなんの結果も受け取ってないんですが、繋いじゃって良いんでしょうか?

Tutorialで確認します。

思いっきりDelete Small Parts1ノードの結果をNullノードに繋いでいました。

繋ぎました。

更にNullノードの結果をSwitchノードに繋ぎました。

以下に示したBrickwall_tool_buildを右Clickして

以下のBoxを開き

Type Propertiesを開きます。

ここからが難しいです。

まずParameter DescriptionのChannel Tabを選択します。

以下に示したSwitchノードのSelect InputをDrag and Dropして

以下の場所にDropします。

結果です。

Defaultsの1のLinked Channelの値が追加されました。

この後の先週のBlogのまとめは細かい点が抜けているのでTutorialで確認しながら進めます。

Applyを押します。

その後で、SwitchノードのSelect Inputを押すと

以下に示した様に値が変化します。

そしてAcceptを押してWindowを閉じています。

先週のBlogではこの後に、

とだけ書いていて、どんなテストをしたのかがまとめられていません。

流石にこの辺に来たら疲れてしまったのかもしれません。

以下に示したBrickwall_tool_buildを右Clickして

Windowを表示させ以下に示したParameterを選択します。

以下のWindowが開きますので、

このBuild ModeをOn、Offします。

何にも変わらない!

と焦りましたが、Outputノードの可視化をセットしてなかったです。

Outputノードを可視化してもう一回テストすると

以下のようにOn Offで結果が変わる様になりました。

あ、先週のBlogはこの後にこのテストの内容の詳しいまとめをしていました。

テストしています。じゃなくてテストします。と書いてあれば気が付いたんですが。

まあ仕方ないです。

User Interface Layouts>

Type Propertiesを開きます。

ここにParameterを追加します。

<Line Width>

まずLine_WidthノードのParameterを追加します。

Line WidthノードのLengthをDrag and DropしてType Propertiesの以下のRootにDropします。

うーん。

これParameterのTypeを先に指定しなくて良いでしょうか?

一応Tutorialで確認しておきます。

しなくて良いみたいです。

正しDropするのは以下に示したRootの方です。

ParameterのNameとLabelの値を変更しました。

ChannelのDefault値が3になっている事も確認しました。

<Line Height>

今度はLine Heightノードです。

以下のLengthを

Type ParametersのExisting Parameterに追加します。

他のParameterの値もLine_Widthノードの場合と同じように変更します。

Tutorialで確認したんですが、このParameterはDefault値の確認はやってませんでした。

<Brick Rose>

今度はBrick Rowノードです。

ここはSegmentの値をType ParametersのExisting Parameterに追加します。

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

名前も変更します。

こっちはDefault値が6になっているのも確認しています。

最後にParameterのRangeの値を調整します。

Wall HeightのRangeです。

しっかり鍵も掛けました。

Wall LengthのRangeも変更します。

最後にFolderを追加します。

以下の方法でFolderを追加するそうです。

出来ました。

Folderの名前を変更します。

ここで今回のTutorialは終わっています。

Type ParametersのApplyを押さないと

今までの設定、全部消えてしまうと思うんですがそこは書いてません。

Tutorialで確認します。

うん。

RowのRangeですが以下のように設定していました。

直します。

Defaultでこの値になっていました。

TutorialはType ParametersのWindowを閉じないで終わっていました。

Applyを押してAcceptを押してType ParametersのWindowを閉じました。

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

今週作成したParameterのテストと残りのParameterの追加は来週やります。

8.UEFNの勉強

8.1 先週のBlogを読み直す

先週のBlogは大急ぎで思いついたIdeaをまとめたので綺麗にはまとまっていません。

それで読み直して、ここに綺麗にまとめ直します。

読み直しました。

うーん。

思っていたより100倍しっかりまとまっていました。

特に生成AIがもたらす新しい情報の価値を具体的な例で表現していたのは俊逸でした。

やっぱり私、文才があります。

このBlogを読み直す前、Nvidiaの創設者であるJensen Huang氏が「AIは次の産業革命を起こす。」と言っていた動画を見ていたんです。

そのAIが起こす革命によって人類はどう変わるのか?を考える必要があると思ったら、何と私が先週書いたBlogに既にその答えが書かれていました。

まあ、「AIが起こす革命によって人類がどう変わるのか?」と言うお題はかなり壮大なので、先週私がまとめた内容だけが起きると言う訳ではないでしょう。

この疑問についてはまた別の機会に考える事にします。

8.2 UEFNの勉強について

UEFN内でPhoto-Realisticな神社を建設するというIdeaは絶対にいけるので、このまま勉強は続ける事にします。

でもまあ焦らないでやる事にします。

UEFNだけ理解が進んでもGaeaやUEのPCGの勉強が追い付かなかったら意味ないですので。

で、まあPi Equals Three氏のTutorialをこれからも続ける事にします。

ただし前に勉強したHOW TO ANIMATE YOUR CUSTOM PET - Fortnite UEFN / Creative 2.0 Tutorial [14]のBugの直しはやりません。

そんなに真剣に直しても今の時点では意味がないからです。

どんどん色んな事を試す方を優先させます。

ので今週はその次のTutorialを勉強します。

8.3 Custom Fortnite Character P. 1 : Import CUSTOM Model - UEFN / Creative 2.0 Tutorial [15]を勉強する

いやいや。

Custom ModelのImportの仕方は別なTutorialで既に勉強したよ。

と言うかこの前のTutorialをやるのにCustom ModelをImportする必要があったじゃないか。と思いましたが、今回は黙ってやる事にします。

ただやっぱりPi Equals Three氏のTutorialで勉強を続けるのはかなり危険な気もしています。

後で、他のUEFNのTutorialの探す事にします。

<Intro>

SketchfabからSkeletal MeshのImport方法を説明するそうです。

まあ題の通りですね。

<Download Model from Sketchfab>

これをImportするそうです。

なんと以下の部分を見ると付属のAnimationの存在も分かるそうです。

知らんかった。

一寸確認します。

全部の3D ModelにAnimationを選択するButtonがついているのではなかったです。

ただしRigがある3D Modelには以下に示した様にAnimationを表示するButtonがありました。

ついているAnimationはピンキリで

単にPoseを変えているだけのものから

複雑なAnimationをやるものまで色々でした。

でもAnimationはMixamoから入手すれば良いのでここでそんなに一生懸命する必要は無いと思います。

Downloadを押してWindowを開きFBXを選択します。

<Importing Model into UEFN>

DownloadするとSourceとTextureのFolderが出て来ます。

開くと3D ModelとそのModelに使用するTextureがあります。

ModelをImportすると以下のWindowが表示されます。

以下のImport AnimationにCheckがついている事を確認して下さい。と言っています。

これがOffになっているとAnimationがImportされないそうです。

え。

知らんかった。

前に3D ModelをImportした時にAnimationがImportされなかったのはこのせいだったのか。

以下にUEFNにImportされたDataを示しています。

確かに2つのAnimationが生成されています。

<Applying Materials To Model>

今度はMaterialの作成方法を説明しています。

なんか一気に出来る方法があるのかと思ったら、地道に一個ずつ作成していました。

<Converting Skeletal Mesh to Blueprint Prop>

もうこれで完成かと思ったらここからBPを作成するそうです。

PropからBPを作成して、そのBPを開いてSkeletal Meshを追加してそのSkeletal Meshに今の3D Modelを追加しただけでした。

以上でした。

8.4 Custom Fortnite Character P. 1 : Import CUSTOM Model - UEFN / Creative 2.0 Tutorial [15]を勉強した感想

まさか、3D ModelをImportする時にImport AnimationのCheckがOffになっているとAnimationがImportされないとは。

いやこのImport Animationという項目がある事に気が付いていたら、多分自分でその事を発見出来たと思うんですが、まあ、気が付きませんでした。

それだけ勉強出来ただけでもこのTutorialを勉強した甲斐はあります。

なんかPi Equals Three氏のTutorialってそういうのが多い気がします。

8.5 UEFNの他のTutorialを探す

他のTutorialを探す事にします。

UEFN Tutorialで検索したら以下のTutorial Seriesが出て来ました。

一番上にPi Equals Three氏のTutorial Seriesが出て来てますね。

やっぱり彼のTutorialの評価が一番高いんでしょうか?

後JSFILMZ氏のTutorial Seriesがありました。

こっち勉強するのもありかもしれません。

最後のGreme Bull氏のTutorial Seriesですが72本の動画が上がっています。

その割に再生数は7千回と非常に少ないですね。

何でなんでしょう?

最新のTutorialの最初だけ見たんですが、千回位再生されているし、別に変な感じもしません。

このTutorialで勉強するのもありかもしれません。

YouTube全体でこれだけしかないのが一寸驚きです。

もうGame産業自体が斜陽になっている証拠でしょうね。

9.DirectX12の勉強

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

9.1.1 Fence & Command List | D3D12 Beginners Tutorial [D3D12Ez] [6]の最後の10分を実装する

先週勉強した部分を実装します。

先週のBlogを見ると以下の実装から始まって

最後の方でDispatchCommantList()関数の名前をExecuteCommandList()関数に変更していましたが、

私のProjectを見ると既に

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

これはDispatchCommandList()関数(ExecuteCommandList()関数)の先週の最終的な実装と全く同じです。

更にSample Codeで確認しましたが、

以下に示した通り

Tutorialの最後の実装や私の今の実装と同じになっています。

今度はMain.cppの実装を行います。

Whileを追加します。

Whileの中を実装していきます。

まずCommand Listを初期化しました。

次にExecuteCommandList()関数を実行しました。

Close()関数をExecuteCommandList()関数に追加します。

Tutorialでは以下のように追加していました。

私のProjectでは以下に示した様に既に追加されていたのでそのままにしておきます。

これはSample Codeをそのままコピペしたからです。

試しに実行したら以下の真っ黒の画面が表示されました。

Memoryは82MBを使用していました。

Tutorialでは以下に示した様に72MBの消費でした。

まあ大体同じでしょう。

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

9.2.1 「4.10.3 描画命令」を実装する

先週勉強した内容を実装していきます。

以下の内容を実装します。

<「1.Pipeline StateのSet」について>

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

<「2. Root SignatureのSet」について>

とりあえず以下の場所にCodeを追加しました。

<「3. ViewportとScissor RectangleのSet」について>

以下の場所に追加しました。

<「4. Primitive TopologyのSet」について>

これはRoot Signatureの後に追加しました。

<「6. Drawを命令する」について>

最後のDrawを命令するための実装です。

これで完成のはずです。

実行して試してみます。

白い三角形が表示されました。

とりあえずは成功したと考えていいですね。

<「いろいろ試してみよう」を実行する>

ここは教科書に載っている以下の実装を試してみます。

まずDrawInstanced()関数の最初のArgumentの値を4から3へ変更します。

この部分の値はInputするVertexの数を表しているはずです。

今回はVertexの数は3つになっているので3に変更しました。

次にPixel Shaderの変更を行います。

Input.posを使用していますが、

Sample CodeにはStruct、Inputが実装されています。

更にPixel ShaderのBasicPS()のArugmentにInput inputを追加しました。

テストします。

Errorになりました。

以下の関数がExceptionをはいています。

うーん。

これはCodeを変更したからなったのか?

もう一回元のCodeに戻してTestし直します。

普通に三角形が表示されました。

一寸だけ変更してどこでErrorが発生するのか試してみます。

Pixel Shaderの色を変更してみます。

これはOKでした。

次にVertexの値を変更しました。

何でこれで三角形が描けるのか今一分かりませんが、Xの値だけ0.7から0.1に変更しました。

うーん。

出来てますね。

今度はPixel ShaderのBaiscPS()関数にParameterを追加しました。

ここでErrorが発生しました。

これは何かDirectX12のCodeを変更する必要がありそうです。

これから教科書で勉強する内容が必要な気がします。

Errorの原因の追究はここまでにして、来週は教科書の勉強を進める事にします。

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] 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

[3] Howard, J. (n.d.). Practical deep learning for coders. YouTube. https://www.youtube.com/playlist?list=PLfYUBJiXbdtSvpQjSnJJ_PmDQB_VyT5iU

[4] 3Blue1Brown. (n.d.). Neural networks. YouTube. https://www.youtube.com/playlist?list=PLZHQObOWTQDNU6R1_67000Dx_ZCJB-3pi

[5] 東京大学 松尾・岩澤研究室. (n.d.). 松尾研 LLM コミュニティ Beginning LLM. YouTube. https://www.youtube.com/playlist?list=PLT07SIG9QbZy12TWM9sBvtF0USv6m5Y9V

[6] WINBUSH. (2024, April 24). Official Android support for Unreal Engine virtual camera [Video]. YouTube. https://www.youtube.com/watch?v=bzFM0HdLYSU

[7] Rick Banks. (n.d.). Castle Wall Tool. YouTube. https://www.youtube.com/playlist?list=PLNbgmFvU__fiPhyUWHHzZ2Nv5ieM_bOdB

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

[9] Lötwig Fusel. (2023, May 22). Fence & Command List | D3D12 Beginners Tutorial [D3D12EZ] [Video]. YouTube. https://www.youtube.com/watch?v=KsCZDeJDXDQ

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

[11] What are Python Variables, Python Constants and Literals? | Definition. (2021, June 29). Toppr-guides. https://www.toppr.com/guides/python/python-introduction/variables-constants-literals/python-variables-constants-and-literals/#:~:text=In%20the%20Python%20programming%20language,initialized%20on%20different%20modules%2Ffiles.

[12] Python for loops. (n.d.). https://www.w3schools.com/python/python_for_loops.asp

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

[14] Pi Equals Three. (2023, May 30). HOW TO ANIMATE YOUR CUSTOM PET - Fortnite UEFN / Creative 2.0 Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=VTHH4S9VjAA

[15] 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