UE4の勉強記録

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

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

1. 今週の予定

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

撮影した映像をLuma AIに上げて3D Gaussian Splattingを作成します。

Niagara の勉強>

Unreal Engine 5で学ぶビジュアルエフェクト実装 基本機能からNiagara、シミュレーションまで」の実装の続きをやります。

<Materialの勉強>

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

<Gaeaの勉強>

GaeaのTutorialを作成します。

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

UE5.4の新しい機能を解説した動画がそれなりに出て来ました。

重要そうなやつを何個かまとめる事にします。

<Houdiniの勉強>

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

<UEFNの勉強>

Pi Equals Three氏のTutorialをやります。

<DirectX12の勉強>

DirectX 12の魔導書」の勉強をやります。

更にLötwig Fusel氏のDirectX12のTutorialをやります。

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

2.1 Luma AIを試す

室外で撮影した2つのVideoを試してみます。

今度は5周ぐらい回って撮影しました。

回れば回るほど正確なImageが生成されるのかを知りたいです。

地面がぼけています。

対象物である花に近づきすぎて撮影してしまったのかもしれません。

しかし花は花で一寸ピンボケしています。

以下の方向から見た場合はかなり綺麗に生成されています。

この原因は撮影対象に近づきすぎたのかもしれません。

前回、自転車を撮影した時は、2~3m位離れて撮影していました。

別のDataです。

こっちはiPhoneで撮影しました。

花はバッチリ写っていますが、周りの風景がまったく写っていません。

中々難しいです。

こんな感じでしばらく毎週何かを撮影してそれをLuma AIにUploadして行こうと思います。

2.2 Unreal Engine 5 for Architecture - 2023 Full Beginner Course [2]の勉強の続きをやる

先週勉強したSettingの内容の勉強を実装します。

EngineのRenderingの設定から変更していきます。

これって一個のProjectの設定を変更したら全部のProjectの設定も変わってしまうんでしょうか?

これ確認しておきます。

まずGlobal IlluminationのDynamic Global Illumination Methodの値をLumenに変更します。

既にLumenになっていました。

うーん。

Reflections Reflection Methodの値もLumenに変更します。

これも既になっていました。

その次のReflection Capture Resolutionの値ですが、

現在2048になっていますが、256に変更しています。

これで、ここの設定を変更した場合、他のProjectでも2048の値が256に変更されるのか確認してみます。

まずReflection Capture Resolutionの値を変更しないでこのProject(My Architecture)のProjectを閉じます。

別なUE5.3のProject(Text_3)を開きます。

Reflection Capture Resolutionの値を調べます。

128になっていました。

この時点で違う値になっています。

という事はEngineの設定と言えども、それぞれのProjectで独自の値を設定しているという事になります。

はい。

確認出来ました。

考えてみればEngineの設定はそれぞれのProjectのDefaultEngine.iniで管理している訳ですからそれぞれのProjectで独立していて当然でした。

では次にReflection Capture Resolutionの値を変更した場合の反射像の精度について検証します。

現在Reflection Capture Resolutionの値は2048になっています。

256に下げました。

凄い、UEが計算を初めました。

結構時間がかかっています。

結果です。

確かにそんなに変わってないです。

ただし先週のBlogには以下のようにまとめられていました。

うーん。

そうなのか。

この結果を比較した感じでは全く同じに見えますね。

Ray Lighting Modeの設定です。

そもそもこれが何を設定しているのかが分かりません。

Cursorを乗せると以下の説明が出て来ました。

要するにLumenのRayの計算方法は2種類あって、Defaultでは計算Costが低いけどQualityも低いSurface Cacheが使用されているが、計算Costが高い代わりにQualityも高いHit Lightingもあります。

という事です。

何だ。

先週のBlogでも同じ説明が書かれていました。

変更したら結果が少し変化しました。

主に2つ変化しました。

まず以下の窓から光が入っている箇所です。

これはRay Lighting ModeがSurface Cacheになっています。

Hit Lighting for Reflectionに変更します。

外からの光が入ってきている場所が曖昧になっています。

うーん。

こういうのって科学的な計算としては正しいのかもしれませんが、芸術的な観点から見るとどうなんでしょう。

こんなぼやけた画像が欲しい場合は、こんな面倒な計算しなくてもBlurを掛ければ良いだけです。

むしろ、最初のSurface Cacheで計算した結果のような光の境目がはっきりした画像の方が美しく見えます。

3D Graphicsの研究者はこういう所に気が回らないから、生成AIに人気を奪われてしまったんですよ。

もう一つの違いは以下のReflectionの部分です。

Surface Cacheの場合です。

外からの光が床やBedに写っているのが見えます。

Hit Lighting For Reflectionの場合です。

外からの光がぼやけて見えなくなった代わりに、Bedの脇にあるLightの光が写っています。

色々な場所で確認しましたがこの設定は結構結果が変わります。

要確認が必要な値という事が分かりました。

なんと先週のBlogには以下のように書かれていました。

こういうのはやっぱり一個ずつ自分で確認する必要がありますね。

Tutorialの主張と私の感想は真逆になっています。

Software Ray Tracing Modeの設定です。

TutorialではDetail Tracingを選択していました。

この機能の解説です。

この文章から推測するとLumenのTracingにはHardで計算する場合とSoftで計算する方法があるみたいです。

こっちはSoftwareで計算した時の設定を指定しているようです。

Detail TracingとGlobal Tracingの2種類がありました。

どちらを選択しても結果は全く変化しませんでした。

おそらく私のProjectはHardwareでこのTraceを計算しているのだと思われます。

Tutorialでは以下のような説明がされていました。

うーん。

参考になります。

ShadowsのShadow Map Methodです。

値にはVirtual Shadow MapsとShadow Mapsの2つがありました。

TutorialではVirtual Shadow Maps(Beta)を選択していました。

機能については以下のような説明がありました。

Shadow Mappingの方法についての指定のようですね。

Virtual Shadow MappingはForward Shadingが選択されている時は使用出来ないんでしょうか?

色々な場所で試してみましたが、違いは確認出来ませんでした。

Hardware Ray TracingのSupport Hardware TracingをEnableします。

これは元からEnableされていました。

機能の説明です。

Support Compute SkincacheをEnableする必要あるそうです。

どこでその設定はするんでしょうか?

これについての解説はTutorialも何もしてなかったですね。

今度はPlatformsのWindowsの設定です。

D3D12 Target Shader Formatsの設定です。

SM6を選択していました。

CopliotでSM5とSM6について質問したら以下の回答が表示されました。

SM6ではSM5にはないRay Tracing、Mesh Shader、そしてAmplification Shaderがあるそうです。

ふーん。

Ray Tracingを使用するためにはSM6を使用する必要があるのか。

Mesh ShaderとAmplification Shadarはどんな機能か知りません。

調べます。

Mesh Shader [3]に以下の解説がありました。

かなり最新の機能みたいですね。

これは知らなくても良いです。

Targeted RHIsのDefaultRHIです。

これは最初からDirectX 12になっていました。

先週のBlogにRHIについて以下の説明がありました。

UE5の公式のForumにRender Hardware Interface (RHI) [4]がありました。

うーん。

DirectにRender Hardware Interfaceが何なのかを説明はしていませんでした。

と思ったらその下に説明がありました。

要するにDirectX12、VulkanそしてMetal2.0で生成された3Dを統合するLayerの事ね。

理解しました。

今度はPost Processingの設定です。

Global IlluminationのMethodをEnableしてLumenを選択しました。

これはDefaultではOffになっていました。

以下の場所で違いを検討しましたが、

全く違いが分かりませんでした。

Tutorialにはこの設定による変化を確認する方法が紹介されていました。

View Mode(普段Litと表示されているIcon)をLumen Overviewにセットします。

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

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

それぞれの画面について軽く調べる事にします。

Lumen Sceneです。

公式SiteのLumen Technical Details [5]に詳しい解説が載っていました。

いましたが、もう今日はこれを読む気力が湧きません。

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

血何にTutorialではこの後にLumen Global IlluminationのLuman Scene Lighting Quality?とLuman Scene Detailの値を1~4に増やしていました。

来週はこの辺から勉強します。

3. Niagara の勉強

先週勉強した「16.8.5 水の厚み(Thickness)をRenderingする」「16.8.6 Compositeする」を実装します。

今回で「Unreal Engine 5で学ぶビジュアルエフェクト実装 基本機能からNiagara、シミュレーションまで」の勉強は終わりです。

2024-01-07のBlogで宣言している通り、今週でNiagaraの勉強は一端終わりです。

来週からはJeremy Howard氏のPractical Deep Learning for Coders [5]を勉強します。

最後の章の最後の部分です。

3.1 「16.8.5 水の厚み(Thickness)をRenderingする」を実装する

Niagaraで調整します。

Particle Spawn StageのColor Moduleを使用するそうです。

む。

私のNiagaraにはParticle Spawn Stage 内にはColor Moduleは無いです。

教科書を読み直したらColor Moduleを追加しろ。と書かれていました。

しました。

Colorの値を以下のように設定しました。

これでこの部分の設定は終わりです。

3.2「16.8.6 Compositeする」を実装する

Composite用のMaterialを作成します。

Material Instanceを生成しました。

これを以下のCine Camera Actor(Instance)のCamera Component (Camera Component)の

Post Process Materialsにセットします。

Materialを開いて実装します。

Texture Sampleを2つ追加しました。

それぞれのTexture Sampleノードには以下のRender Targetをセットしました。

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

水の厚みに色付けしています。

この結果と最初のTexture Sampleノードの結果を足しています。

AddノードのPreviewを見ると

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

なんか結果がSample Codeと違うような気がします。

まあ最後までやってみましょう。

では次の背景を追加するための実装をやっていきます。

以下のように組みました。

Lerpノードの結果をResultノードのEmissive Colorに繋ぎました。

当然、ResultノードのMaterial DomainはPost Processに変更しました。

Previewを見ると以下のような結果になっています。

あれ?

出来てない。

うーん。

ああ。

UE5がCrashしてしまった。

もう一回立ち上げました。

背景を消すと以下のようになっていました。

これはこの時点で間違っているのか。

うーん。

来週考えます。

今週で「Unreal Engine 5で学ぶビジュアルエフェクト実装 基本機能からNiagara、シミュレーションまで」の勉強は終わりかと思ったんですが、来週もやる事になりました。

4. Materialの勉強

4.1 Procedural Brick Distortion - Advanced Materials - Episode 31 [6]を勉強する

今週は以下のようなDistortionを追加するそうです。

今回もUnreal Engineは後半で実装方法だけ説明されていました。

まあ良いです。

その部分だけ勉強します。

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

Functionの設定をFast Gradient – 3D Textureに変更しました。

Texture Coordinateノードの結果に0をAppendした値をNoiseのPositionにPassしました。

結果です。

Levelの値を1に変更しました。

このLevelの別名がOctaneだそうです。

Octaneか。

この言葉にも散々振り回されました。

結果です。

更にMinとMaxの値も以下のように変更しました。

結果です。

TurbulenceをOffにしました。

今度はScaleの値を3に変更しました。

結果です。

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

結果です。

この結果をBrickの結果に足すそうです。

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

更にこの結果をHash23ノードに繋がるFloorノードにもつなげていました。

結果です。

歪んでいますが、歪みが均一です。

この後、NoiseノードのParameterをTweakしてBrickの形を調整していました。

それなりに良くなりましたが、均一感は消えないです。

以上でした。

5. Gaeaの勉強

5.1 Tutorialの作成

以下のようにPowerPointを作成しました。

題です。シンプルにしました。

今回はSatMapノードの正しい組み方を頭ごなしに教えると書いています。

これを説明しておけば、何でそんな組み方をするのかと考える必要が無くなります。

とは言え最初にSatMapノードが色を追加するためのNodeである事だけは説明しておいた方が良い事に気が付きました。

のでこのSlideだけ追加しました。番号が0になっています。

SatMapノードの正しい組み方を説明しています。

隣に同じ様に色を追加するNodeであるConstantノードの正しい組み方を比較のために表示しています。

ここで先程出て来たTextureノードについての簡単な解説をしています。

その解説の続きです。

TextureノードがTerrainに灰色で濃淡をつける事を説明しています。

SatMapノードがTextureノードがつけた灰色の濃淡に対して、上記のColor Barに沿った色を配置する事を説明しています。

後、Slideには書いていませんが、このColor BarをUEにはExport出来ないので、SatMapノードで生成したImageをUEで同じ様に再現する事は出来ない事もここで説明します。

ここでSatMapノードをConstantノードの代わりに使用した場合のMaskの組み方を解説します。

Textureノードが余分に追加されています。

連続でMaskingを使用する場合はTextureノードの結果もPortする必要があります。

この場合、Fxノードを使用できるのか、覚えていません。

これは後で調べます。

まとめです。

今回はTextureノードがTerrainに白黒の濃淡を追加する事、SatMapノードがその濃淡に応じて色をUnLinerに配置する事の説明だけで終わらしています。

Terrainに白黒の濃淡をつけるだけなら別にTextureノードだけでなく、Data GroupにあるNodeの全てが出来ます。

のでこの部分の実装は別にTextureノードじゃなくても良いんですが、今週はそれについてはあえて述べない事にしました。

5.2 色を付けた後のFxノード

調べました。

Klaus氏のTutorialはどこでこの話を述べているのかは不明でした。

しかし自分で実験して何が正しいのかは判明する事が出来ました。

まずFxノードの代わりに使用すべきノードは以下のColor Groupに存在しているColor Fxノードです。

このNodeとFxノードの違いを以下の実験で比較しました。

Textureノードの後にFxノードとColorFxノードを繋げてその結果を比較しています。

まずTextureノードの結果です。

これと同じ結果をFxは保持する必要があります。

Fxノードの結果です。

全く同じ結果になっています。

Color Fxノードの結果です。

これも同じ結果です。

つまりどちらのNodeを使用しても同じ結果を得ることが出来ます。

それに対して以下の実装です。

色付けが終わった後にFxノードとColor Fxノードを追加しています。

このCombineノードの結果です。

そしてFxノードの結果です。

色が消えています。

これがFxノードを色付けした後では使用出来ないという理由だったんです。

ちなみに、Color Fxノードの結果は、

普通の色がついていました。

5.3 録音について

録音方法ですが、音を聞きながら録音して後で編集する事を考えています。

今回はそれを試してみます。

<追記>

結局、先週と同じ方法に落ち着きました。

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

6.1 内容の整理をします

今回も試したい新しい機能が目白押しです。

ここにやりたい内容をまとめ直します。

まず先週から実装を始めたUnreal Engine 5.4: Create STUNNING Product Commercials with Motion Design [7]の続きです。

ただしこれを作成しているProjectが開けなくなってしまっています。やり直すにしても最初からになってしまいました。

次にTexture Graphに関してです。

これを試すと次からProjectが開けなくなりました。今までにUE5.4のProjectを2つ作成したんですが、両方開けません。

のでしばらくTexture Graphには近づかない事にします。

後はMotion Design関連で以下のTutorialを見つけました。

この中で特に以下のようにAnimationで草を生やす方法について解説しているTutorialがあります。

これは勉強する必要があります。

更に先週、 Official Android Support for Unreal Engine Virtual Camera [8]も勉強しました。

これの実装をする必要があります。

うーん。

更にまだ調査していませんが、Biome GeneratorについてのTutorialを勉強する必要もあります。

以下のようにやる事にします。

  1. Unreal Engine 5.4: Create STUNNING Product Commercials with Motion Design[7]を実装します。
  2. Official Android Support for Unreal Engine Virtual Camera [8]を実装します。
  3. Motion DesignでAnimationで草を生やす方法について勉強します。
  4. Biome Generatorについて勉強します。

と言う訳で今週はUnreal Engine 5.4: Create STUNNING Product Commercials with Motion Design [7]の実装をやる事にします。

6.2 Unreal Engine 5.4: Create STUNNING Product Commercials with Motion Design [7]の実装をやる

先週作成した部分があるProjectはもう開けません。

新しいProjectを作成します。

UE5.4のUpdateが来ていました。

これを先にやります。

UE5.4.1になりました。

と言うかこれって先週UE5.4になりました。と発表された時にUE5.4.1になったと思ったんですが。何故か私のはPreviewから0にはUpdateされたんですが1にはなりませんでした。

よく分かりません。

ひょっとすると今の状態なら開けなくなったProjectが開けるかもしれません。

まずこれを試してみます。

まずはこのProjectです。

開けませんでした。

開けない原因にTexture Graph Engineと書かれています

もう一方のProjectでも試してみます。

こっちも同じ結果になりました。

うーん。

駄目だったか。

新しいProjectを作成します。

最初のTemplateにどれを選択すれば良いのか分かりません。

Film/Video & Live Eventsを選択しBlankを選択します。

Project名はMy Motion Design 0502としました。

以下のProjectが生成されました。

相変わらず、Content Browerが開いた状態から始まります。

Motion DesignのPluginをEnableします。

こっちはどうしましょう。

前回はこっちもEnableしたんですが。

うーん。

今回はこっちはなし。

これでUE5.4を再起動します。

Motion Designが使用出来るようになりました。

<Creating a Level>

まずこのProject用のLevelを作成します。

当然Empty Levelを選択します。

Empty Levelが生成されたら、以下のMotion Designを押します。

今度はTool BarにあるCreate Defaultsを押します。

以下のWindowが表示されたので

Spawnを押します。

以下のAssetが追加されました。

CameraをUnlockして自由に動くようにします。

Cameraの位置をPilotで操作しましたがよく分かりません。

これは後で調整します。

<Importing our Supporting Files>

CanをImportします。

やり方は先週のBlogでまとめた方法と全く同じです。

Materialは以下のように作成しました。

Previewの結果です。

ふたの方にもMaterialが適用されました。

後ろの壁紙です。

先週のBlogを見たらこれをどこから持ってきたのかを書いていませんでした。

まさかProjectが開けなくなるなんて思ってもいなかったので、記録していませんでした。

同じStatic Meshを見つけて来ました。

<Materials>

これはやる必要ないです。

ここまでが先週やった範囲でした。

やっと復元出来ました。

<Emissive Master>

新しいMaterial、M_Emissive

を作成しました。

<Making an Instance>

このMaterialのInstanceを作成します。

それぞれの色の具体的な値は無かったので適当に作成しました。

<Unlocking the Camera>

CamaraのLockを解除しました。

<Placing Props>

壁を原点に配置します。

SkylightとPost Process Volumeを消します。

UnLitに変更します。

Cameraから見て以下の位置にCanを配置しました。

この辺は完全に同じには出来ないので適当にやっていきます。

<Emissive Lighting>

Planeを両端に並べてそれぞれに先程作成したMIをセットします。

Planeを追加しようとしたらUEがCrashしました。

原因が分かりました。

以下のPlace Actor Windowを開いてここからPlaneを追加する必要があります。

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

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

遠くから見るとこんな感じです。

天井の光も追加しました。

Cameraから見た映像です。

もう少し天井を近づけました。

ここからTutorialはなんか複雑な操作を始めています。

今週はここまでにしてその複雑な操作は来週勉強する事にします。

7. Houdiniの勉強

今週は先週勉強したHoudini 19 - Wall Tool 11 [9]を実装します。

7.1 Houdini 19 - Wall Tool 11 [9]を実装する

<The Grout Pattern>

今週はGrout Patternを直します。

GroutとはBrickの間に使用されているセメントの事です。

Delete Small Parts1ノードを選択します。

これですね。

見つけるのに凄い時間がかかりました。

Nodeを名前で検索する機能とかHoudiniには無いんでしょうか?

先週のBlogでは

になっています。

同様の値をセットすると

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

これは影響が強すぎます。

まで下げました。

Foreach_End3ノードを選択し可視化します。

以下のように

それぞれのBrickでTextureのSizeが違っています。

これを先に直します。

<Texel Density Node>

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

Asset PropertiesのAsset Resolutionの値を1024x1024に変更します。

Scale UVs to Match Texel DensityにCheckを入れます。

UV LayoutのCheckを外します。

この状態でTexel Density1ノードの結果をForeach_end3ノードの左のInput端子に繋ぎます。

Foreach_End3ノードの結果です。

それぞれのBrickのTextureのSizeが同じになりました。

先週のBlogを見ると以下のように書かれています。

確認してみましょう。

同じ大きさになっていました。

Re-mesh Gridノードを追加します。

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

結果です。

Tutorialと同じような結果になっています。

Colorノードを追加します。

結果です。

Re-Mesh GridノードのDivision Sizeの値を0.05に下げました。

結果です。

Dilate/Erodeの機能も試してみます。

Dilate/ErodeのDefault値は0です。

0.05に上げてみました。

結果です。

先週のBlogでは

と書いてありました。

確かに穴も塞がっています。

全体的にVolumeが増しているというのがより正確な解説のようです。

Foreach_EndノードとRe-Mesh Gridノードの結果をMergeノードを使用してMergeします。

結果です。

おお、凄い。

Re-Mesh Gridノードの名前をRe-Mesh Grid_Groutノードに変更します。

更に黄色くします。

更にColor1ノードの名前もColor_TintGroutに変更します。

黄色にもします。

Tintってどういう意味でしたっけ。

前に調べた記憶があります。確認します。

2024-03-17のBlogに書いてありました。

これです。

これが知りたかった。

このGroutのMeshにもUV Coordinateが必要です。

UV Unwrapノードを追加します。

UV Unwrap2ノードを可視化します。

うーん。

なんかTextureが大きすぎる気がします。

Spacingの値を2から1に下げてみました。

結果です。

うーん。

まだ大きい気がします。

0.1にしました。

おお、今度はイイ感じになりました。

<Texel Density>

Tutorialの言う通りTexel_DensityノードをDuplicateしたんですが、

線が繋がったままDuplicateされました。

この線の切り方が分かりません。

前に一回勉強したんですが、Blogのどこにまとめたのか覚えていません。

Copilotに聞いてみます。

これです。

これが知りたかった。

切れました。

Copilot凄い。

以下のようにDuplicateしたTexel_Densityノードを追加しました。

うーん。

これってGroutのTextureのSizeがここで調整されるって事?

Texel_density2ノードの結果です。

やっぱりTextureのSizeが変わっています。

Merge3ノードの結果を可視化しました。

UV Coordinateの表示は消しています。

うーん。

凄い。

<UV Coordinates>

Color_TintGroutノードの色を灰色にします。

結果です。

ここでTutorialは終わっていました。

Delete_Small_Parts1ノードとRemeshgrid_Groutノードの値を少しだけTweakしました。

結果です。

おお。

かなり良い感じになりました。

この結果をSaveしておきます。

7.2 Houdini 19 - Wall Tool 11 [9]の勉強を続けて

流石にここまで続けるとHoudiniの仕組みと言うか何かが見えてきました。

まだまだよく分からない部分は沢山ありますが、今週のこの結果は

なんか不思議な自信を自分にもたらしてくれました。

Proceduralな実装の意味も何となく理解して来ました。

要はUEのBPの事を言っているだけです。

今週はゴールデンウィークで突然の用事が入ってしまったので残りは中止します。

8. UEFNの勉強

9. DirectX12の勉強

10. まとめと感想

11. 参照(Reference)

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

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

[3] Microsoft.(n.d.). Mesh Shader. DirectX Specifications. https://microsoft.github.io/DirectX-Specs/d3d/MeshShader.html

[4] Render Hardware Interface (RHI) | Community tutorial. (n.d.). Epic Developer Community. https://dev.epicgames.com/community/learning/tutorials/aqV9/render-hardware-interface-rhi

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

[6] Ben Cloward. (2023, November 23). Procedural Brick Distortion - Advanced Materials - Episode 31 [Video]. YouTube. https://www.youtube.com/watch?v=TBheGAKQeu4

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

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

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