UE4の勉強記録

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

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

1.今週の予定

今週からやっと普通のScheduleに戻ります。

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

Kiri Engineを試してみます。

Niagara の勉強>

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

<Materialの勉強>

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

<Gaeaの勉強>

GaeaのTutorialを作成します。

<Houdiniの勉強>

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

<UEFNの勉強>

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

<DirectX12の勉強>

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

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

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

今週はKIRI Engineを実際に使用してみます。

2.1 KIRI Engineを使用してみる

KIRI EngineにSign Upしました。

以下の画面が表示されています。

+のIconを押します。

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

先週、勉強したImageと全然違います。

うーん。

Photo Scanを試してみます。

70枚、写真を撮れ。と出て来ました。

手短に近くにある時計を撮影しました。

汗ぐっしょりです。

矢印を押してUploadしました。

この辺の画面は大体は先週勉強した内容と同じでした。

Turn Tableは使用していませんが、AI Object MaskingはOnにしました。

別に深い理由はありません。

Uploadが終わりました。

Tokeiが登録されています。

Clickすると以下の画面が表示されました。

うーん。

かなり時間がかかりそうですね。

これは別な作業をする事にします。

PCからWebにAccessして

Loginしようとしたら

となってLogin出来ません。

うーん。

Google Passwordから調べます。

何と、Passwordを一文字間違って打っていました。

そのPasswordを打ったらLogin出来ました。

撮影した時計がありました。

色々Sampleが表示されていました。

Downloadも出来るみたいです。

してみます。

以下のFileが生成されています。

これをどうやってUE5にImportするんでしょうか?

𝟑𝐃 𝐒𝐜𝐚𝐧𝐧𝐢𝐧𝐠 𝐢𝐧𝐭𝐨 𝑼𝒏𝒓𝒆𝒂𝒍 𝑬𝒏𝒈𝒊𝒏𝒆 5: 𝐊𝐢𝐫𝐢 𝐄𝐧𝐠𝐢𝐧𝐞 𝐖𝐨𝐫𝐤𝐟𝐥𝐨𝐰 𝐓𝐮𝐭𝐨𝐫𝐢𝐚𝐥 [2]によると一端Blenderに読み込んで、FBXに変換して読み込んでいます。

3d scan to Unreal Engine 5.2 using Android Phone [3]の方が少しだけ詳しくやり方を解説していました。

こっちもBlenderを使用しています。

このTutorialを勉強します。

2.2 3d scan to Unreal Engine 5.2 using Android Phone [3]を勉強する

ここでBlenderで何をするのかだけ勉強します。

まずUnzipしています。

そうかBlenderだからZipのままImportするのか。

うん。

なんか私のFileと一寸違いますね。

説明をよく聞いたら、RetapoとPERはPro Versionだけ生成されるそうです。

うーん。

まあいいです。

Blenderを開いて真ん中にあるCubeを消しました。

FileからImportそしてWavefrontを選択します。

3D Model Retapo.objをImportしています。

私の場合はここは普通のObj FileをImportすればいいはずです。

色はついていませんね。

右上の以下のIconを選択すると

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

以下の箇所からStaticsをEnableします。

左上に以下の表示が追加されました。

220万のTriangleが使用されていますが、これは多すぎます。

Edit Modeに移動します。

そしてZをHoldして以下のIconを表示させ

Wireframeを選択します。

そして以下の箇所からSelect Lassoを選択します。

そして以下のようにRockを選択します。

結果です。

これをInvertします。

Ctrl+Iを押します。

そして以下のBoxを表示させ(どうやって表示させたのかの説明は無し)

SeparateからSelectionを選択します。

これで要らない地面の部分だけを消す事が出来るようになりました。

Object Modeに戻って地面の部分だけ消します。

結果です。

Nを押して以下のBoxを表示させ

Rockが原点に配置されているか確認します。

Rockの位置を調整した後、Ctrl+Aを押して以下のBoxを表示させ

All Transformを選択します。

Lightを消します。

今度はExportから

OBJを選択します。

うん。FBXじゃないの?

後はそのObjをUE5にImportしているだけでした。

Errorが起きています。

これは無視していいそうです。

Textureは手動でImportしていました。

どうやらMaterialは自分で組むみたいですね。

DisplacementのFileを開いてsRGBのCheckを外していました。

RoughnessとNormalのsRGBのCheckも外していました。

この辺のFileは私の場合はないのでまあその分の質は落ちるという事になります。

3D Model.jpgをDrag and Dropします。

そして以下の3D Model_Retopo.jpgのExtensionを

Pngに変更します。

そして3D Model.jpgを選択した状態で

Reimport With New Fileを選択します。

すると以下のBoxが表示されるので

そして先程作成したPNG Fileを選択します。

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

うーん。

この部分が私のFileには全くないのですがどうやってTextureを張り付けるのでしょうか。

まあ適当にやってみます。

そしてこれらのTextureを使用して以下のようにMaterialを作成しました。

成程ね。

そして作成したRockをLevel上に配置しました。

うん。

大体のやり方は理解しました。

2.3 DownloadしたFileをUE5で表示する

別に編集しないのならBlenderを介する必要はないはずです。

直接UE5で開いてみます。

Import出来ませんでした。

うーん。

やっぱりBlenderで一回Importしないと駄目みたいです。

BlenderをInstallしてなかったです。

からします。

しました。

あれ?

Zip Fileからどうやって開くのかが分かりません。

Objを代わりに開いてみます。

おお。

普通に開けました。

Viewportを変更しました。

結果です。

何も変わっていません。

これはTextureを自作すべきなのか?

Blenderの設定はよく分かりません。

位置だけ移動させました。

UEでImportしてみます。

固まってしまいました。

しばらくほっておきます。

今度はDownload出来ました。

Level上に配置します。

うわ。

ちっちゃ。

25倍にします。

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

結果です。

おお。

思っていたのよりかなりマシな結果になりました。

白い点が散在しているのが気になります。

それ以外はほぼ満点の出来です。

もう少し細部を見てみます。

この辺はかなりCG感がありますね。

Wireframeを表示しました。

これは多すぎでしょう。

Blenderで減らす必要がありますね。

Naniteにしてみます。

普通に出来ました。

6体並べましたが、別にPCに負担が掛かる事は無かったです。

うーん。

成程。

2.4 撮影した3D Modelをみる

Succeedになっていました。

開いてみました。

何これ?

下から見た図です。

分かりました。

時計の上の部分だけが生成されたんです。

時計の文字なんて全く生成されていません。

これは駄目ですね。

無料版では3/WeeksしかExport出来ません。

これはExportするのは止めておきます。

もっとModelの撮影を試してみます。

2.5 KIRI Engineを使用した感想

思ったよりきれいに表示される事が確認出来ました。

ただこれってPhotogrammetryですよね。

3D Gaussian Splattingでは無いですよね。

その辺はどうなっているのか知りたいです。

Smart Poly氏がScan Anything to Unreal Engine 5 (TUTORIAL) [4]でRealityScanを試していました。

他のAppも試す事にします。

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

もう少しやりたいですが、まだ風邪が治って無いです。

あまり無理は出来ませんのでここで終わりにします。

3.Niagara の勉強

3.1 「16.8 水面のRendering」を勉強する

「16.8 水面のRendering」の勉強と実装をやります。

思ったより簡単そうなので予定した分より少しだけ多くやるかもしれません。

3.1.1 「16.8.1 Levelの作成」を実装する

ではまずMapを作成します。

TemplateはEmptyを選択しました。

名前はFluid Simulationとしました。

Sample Codeと同じにするためにSkylightとVolumetric Cloudだけ追加しました。

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

Directional Lightが無いならこれらのAssetを追加しても意味ないと思います。

NSを配置しました。

何も見えません。

うーん。

止めた。

別なLevelでやります。

以下の要になりました。

真っ暗な所に作成しても??なのでTemplateで全部そろっているのを使用しました。

NSの位置です。

更にNSの設定も以下のようにしました。

これならLevel上から見てもParticleの動きが確認出来ます。

次にCameraを配置します。

Pilot機能を使用して以下のような映像になる位置にCameraをセットしました。

Cameraはこんな感じで配置されています。

Cameraの位置です。

当然Sample CodeのCameraの位置とは違います。

3.1.2 「16.8.2 Render Target、Scene Capture 2Dの追加」を勉強する

Scene Capture 2Dを2個追加するそうです。

これはCameraの代わりに画面ではなくRender Target 2DというTextureに対してRenderingを行っていくものだそうです。

そしてこのRender Target 2Dに対してPost Processを掛ける事でDiffuse LightやSpecular Lightの計算結果をRender Target 2Dに反映させるそうです。

Sample Codeでは以下のようになっていました。

次にこれらと対になるRender Targetを作成します。

TextureからRender Targetを選択します。

それぞれRT_WaterDiffuseAndSpecularとRT_WaterThicknessと名付けます。

それぞれ開きSizeを以下のようにセットします。

今度はScene Capture 2DのTexture TargetにそれぞれのRender Targetをセットします。

Scene Capture 2D Diffuse And SpecularではRT_WaterDiffuseAndSpecularをセットします。

Scene Capture 2D ThicknessではRT_WaterThicknessをセットします。

以上でした。

3.2 Scene Capture 2DとTexture Render Target 2Dについて調べる

もう少し教科書を進めようかと思いましたが、Scene Capture 2DとTexture Render Target 2Dというよく知らない機能が出て来たので、これらについて調べる事にしました。

やっぱり焦りは禁物です。

ゆっくりしっかり勉強していくことにします。

<Scene Capture 2D>

まずScene Capture 2Dから調べます。

公式Siteの「1.7 - Scene Capture 2D」[5]です。

これはUE4のDocumentでUE5では同様のDocumentは見つかりませんでした。

以下の解説がありました。

どうもこれを読むとScene Capture 2DはCameraで撮影した映像をMaterialに写し込む機能を持っているようです。

後、こんな質問が公式Forumにありました。

Why doesn’t the Scene Capture 2D camera in UE5 display the Render-Target texture like it did in UE4? [6]です。

UE4ではScene Capture 2D自身をCameraで撮影すると、鏡を重ねた時のような映像を作成する事が出来たのに

UE5では以下のように真っ黒になってしまう。と言う話でした。

これなんかもScene Capture 2Dの機能がCameraで撮影した画像をMaterialに写し込む事であるの証明ですね。

Scene Capture 2Dの機能は理解出来ましたので、今度は一般的な使い方を調べます。

YouTubeで検索しました。

これを見るとScene Capture 2Dのもう一つの使用方法としてWidgetに3DのCharacterを表示するのがあるみたいですね。

最初のTutorialは3分なのでこれを見ます。

UE5 l How to Capture Your Scene in Real Time Using Render Target l 3-Min Tutorial l Unreal Engine 5 [7]を勉強します。

以下のようなSceneが作成されていました。

これの作成方法を勉強するみたいです。

まずMaterialを作成しました。

次はRender Targetを作成しました。

Materialを開きTexture Sampleノードを追加します。

このTexture SampleノードのTextureに先程作成したRender Targetを追加します。

当然ですがこのTexture SampleはBase Colorに繋ぎます。

ActorからBlueprintを作成していました。

BPを開いてScene Capture Component 2Dを追加します。

そしてTexture TargetにRT_Testを追加します。

この設定をする事でCameraで撮影したImageがここにSetされたRender TargetにPassされるそうです。

うーん。

理解した。

今度はPlaneを追加します。

以下のようにCameraの前にこのPlaneをセットしました。

成程。

これで鏡のようになるわけですね。

更にこのPlaneのMaterialに先程作成したMaterialをSetしました。

うん。

もう完全に理解した。

このBPをLevel上に配置しました。

しかしImageのResolutionが低すぎます。

Render Targetを開いて以下の値を変更しました。

「16.8.2 Render Target、Scene Capture 2Dの追加」で、以下のようにRender TargetのSizeの値を変更していましたが、

写ったImageのResolutionを変更していたようです。

結果です。

うーん。

確かに映ったImageは細部まで表示されています。

3.3 UE - Get 3D character into 2D widget [8]を勉強する

もうScene Capture 2DとRender Targetの基本的な使い方は分かったんですが、ついでにWidgetに3D Characterを写す方法も勉強してしまいます。

<Intro>

以下のようなWidgetを作成するそうです。

もう今更Gameを作成しても仕方ない気がします。

もう時代がGameを求めていません。

しかしまあ、Widgetに3D Characterを表す方法には興味があるのでそこは勉強しておきます。

<Setup>

以下の3つを作成する必要があるそうです。

Character Capture BPです。

Scene Capture Component 2Dが追加されています。

このBPが何から作成したのかの説明がありません。

Third Person Character BPのDuplicateしたやつな気がします。

うーん。

微妙に違いますね。

まあ良いです。

2つ目はRender Targetです。

うん。

この辺は普通ですね。

この後で、TutorialではBPのParent Classについて詳しい説明をしていました。

どうやらこのTutorialはSeriesものの一部のようです。

以下のPlayer Character BPから

Proxy Classを作成してそのProxy Classを親にしてBPを作成していました。

なんのこっちゃと言う感じですが、

要は、

  1. このBPにCameraとScene Capture Component 2Dを追加する
  2. このCharacterを撮影してその画像をRender Targetに送る
  3. Render TargetのImageをWidgetに表示

をやっているだけでしょう。

最後のWidget内からRender TargetのImageを受けとる方法だけが分からないです。

やっぱりCameraをセットして

Texture TargetにRender Targetをセットしていました。

しかしこのTutorialを作成している人、バカですか?

このTexture Targetにセットしている箇所の説明をしているのに自分の画像でその部分をほとんど隠してしまっています。

<Render Target>

Render Targetの設定について解説しています。

Sizeの部分だけ変更すれば良いだけです。

Materialの作成はWidgetに表示する場合は要らないのかと思ったらしっかり作成していました。

以下のように作成していました。

Final ColorはBase Colorの事でしょう。

OpacityにAのOne MinusをPassしています。

Widgetに表示される3D CharacterにBackground Imageが写ってしまったらおかしくなってしまうので、この部分の設定は大切です。

<Widget Design>

Widgetの作成です。

これは普通のWidgetでしょう。

Widgetを開きました。

3DのCharacterが表示されています。

左側を見ると以下のようになっていました。

これは単なるImageのようです。

このImageのImageの設定を見ると以下のようになっていました。

うん。

これってさっき作成していたMaterialだよね。

MaterialをここにSetする事が出来るの?

後はこのGameの設定みたいな話でほとんどWidgetの設定とは関係ない話でした。

うーん。

これだけではWidgetに3D Characterを表示するのは無理かもしれない。

まあ良いです。

今回の目的はScene Capture 2DとRender Targetの基本的な使い方を理解する事です。目的は十分果たせました。

4.Materialの勉強

もうFlagの勉強はしません。

やりたくないのをいくら頑張っても成果は薄いです。

Ben Cloward先生の次のTutorialをやる事にします。

4.1 Procedural Brick Pattern Shader - Advanced Materials - Episode 28 [9]を勉強する

<Intro>

以下のBrick模様を作成します。

Materialの実装もここで表示されていました。

<Benefits>

今回の勉強の肝はこれをTextureを使用しないで作成する事だそうです。

その結果以下のMeritがあるそうです。

この辺は現状のGPUでは全くその通りですが、これからはどうなるんでしょう。

今日、NvidiaのConferenceのVideoを見ていましたが、もうGameなんか全く眼中に無かったです。

これからは「AI一本でやっていこう!」と言う感じでした。

そうなると、これからはAIに特化したGPUが作成されていくようになるわけですが、その場合Textureの読み込みにかかる時間は今よりも早くなるのか遅くなるのか。

その辺の情報も一寸欲しいですね。

<Tutorial>

ここはUnityにおける実装を説明しているのでSkipします。

Unreal Tutorial>

まずTexCoord[0]を以下の値で割ります。

これはWidthとHeightで割っているそうです。

結果にFracノードを追加しました。

うーん。

この時点ですでにBrick感がありますね。

MaskをかけてUとVに分けています。

これはBrickのずれを再現するためにやっています。

Fracノードは可視化のために使用したので実際は以下のようにFracノードを外して繋げます。

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

うーん。

これでズレるのか?

またFracノードを追加して可視化しました。

おお、ズレています。

Brickみたくなりました。

<Rectangle Pattern>

UnityにはRectangleを作成するNodeがあるそうですが、UEにはありません。のでMaterial Functionを使用して自分で作成するそうです。

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

それなりに細かい説明はしていましたがあんまり興味を引く内容では無かったので記録はしません。

実装する時に少しだけ考える事にします。

その時に興味が出てきたら戻って勉強する事にします。

完成したRectangleノードを使用して以下のように実装しました。

結果です。

うーん。

それなりに凄いです。

実装は来週やる事にします。

5.Gaeaの勉強

今週はGaea以外のYouTubeの動画関連の内容もここに記録します。

5.1 Google App作成の顛末を猫ミームで作成します

これはGaeaの勉強とは関係ないですが、先週までシャカリキになってやっていたGoogle PlayのGame作成の顛末を猫Memeで動画にしました。

たった2分半の動画ですが、ものすごく手間がかかっています。

動画の数だけで72個もあります。

Memeの中で使用されている曲はどうするんでしょう。

以下の曲が使用されています。

他の曲も使用していますが、Downloadした元の動画には元ネタが記録されていません。

色んな動画を見ましたが、曲名を記していない動画も結構ありました。

いろんな猫meme動画を調べましたが、My Happy SongとChipi Chipi Chapa Chapaは著作権関係が少し厳しいみたいです。

大体分かりました。

これらの曲は著作権で保護されていて、YouTube上で歌詞を使用したり曲を弾いたりするのは、YouTubeJASRACとの契約でOKですが、録音した曲をそのまま流すのは録音した人が許可しない限り違法だそうです。

そんな危険な行為はしたくないです。

Chipi Chipi Chapa Chapaを歌っていた歌手の人はどんどんMemeに使用してくれ。って言っていましたが、だったら利用可能な曲を自分で歌ってYouTubeに上げてくれ。って感じです。

そうじゃないと怖くて音源を利用する事なんか出来ません。

この2つは別な猫Memeで代用します。

調べた結果、一個を除いて使用されている音楽は著作権のあるものと判明しました。

残った一個のBGMも元の音が不明なだけでおそらく著作物を勝手に使用している可能性が高いです。

これは最初から仕組まれたブームかもしれません。

こんな著作権違反をしまくっても大丈夫なのは、このブームの仕掛け人たちが著作権を管理している団体と最初からつるんでいるとしか考えられません。

その人達の目的と違う事を誰かが猫Memeを使用して行った場合は、すぐに著作権違反で取り締まる事も最初から織り込み済みかもしれません。

BGMは全部消して音源フリーの曲で代用します。

うーん。

考え過ぎかもしれません。

YouTubeを見るとこの曲を使った動画も沢山載っています。

一日考えます。

5.2 Unreal Engine 5.4が公開されました

一応、Downloadしたんですが、まだどんな機能が追加されたのかよく理解していません。

Unreal Engine Public Roadmapを見るとNiagara Fluidsはまだ残っていますね。

一応、開発は継続されてはいるみたいです。

GameFromScratch氏のThe State Of Unreal GDC 2024 in Under 10 Minutes! [10]でUE5.4の発表された内容がまとめられていたので更にこれを以下にまとめます。

Dynamic Tessellationです。

Tessellationが出来るようになったのって5.3からですよね。

ここで紹介されている内容も5.3でも出来ると思っていました。

煙がVolumetric Cloudで作成出来るようになりました。

このお陰で煙や雲自身に影を追加する事が出来るようになったそうです。

今回のもっとも注目すべき内容の一つは以下のMotion Matching Animationです。

何をやっているのかは不明ですが、なんか凄い事をやっています。

PCGについてです。

これ木だけじゃなくてTerrainも変形しているようです。

うーん。

Gaeaを使う必要も無くなるのかも。

PCGで木を生成した後です。

うーん。

凄いけど、OpenAIのSoraを見た時のような衝撃はもうないですね。

UE5.4についてはこれだけでした。

<追記>

pinkpocketTV氏のUnreal Engine 5.4 New Features! Everything New in UE5.4 [12]を見たら更に色々理解しました。

Motion Matching Animation

が何をやっているのか判明しました。

今までUEでCharacterのAnimationを作成するためには以下のようにState Machineを使用してCharacterのMotionのAnimationを追加する必要がありました。

これの進化版がMotion Matching Animationだそうです。

この方法を導入する事でDynamicにCharacterのMotionのAnimationを作成する事が出来るようになるそうです。

更にRetargetingが簡単になった事も語られていました。

これについては別な人が詳しく解説していたのでそれも後でまとめます。

最後にMotion Graphic Toolsについてです。

Motion Graphicって何?と思ってググったら

と解説されていました。

要はAnimationのあるPowerPointです。

これはYouTubeの動画を作るのにものすごく有用になると思われます。

これについては別に勉強する事にします。

Chaos Physics Cloth Editorについても解説していました。

この機能は個人的には興味深いですがいかんせん情報が少なすぎます。

次いでなので、他のUE系YouTuberのUE5.4に関してのまとめもここに記録しておく事にします。

まずUnreal Sensei氏のUnreal Engine 5’s Biggest New Features [13]です。

やっぱりNanite Displacement(Tessellation)から紹介されていました。

以下のLandscapeが

Displacementを使用する事で

以下のようになります。

Unreal Sensei氏の説明なんですが、やっぱりDisplacement自体はUE5.3で導入されています。

それがUE5.4では劇的に改善されたそうです。

その一つがDisplacementをDynamicに行えるようになった事だそうです。

このDynamicがどの部分を指しているのかは不明ですが、CharacterやCamera周りだけDisplacementを生成する事ならUE5.3でも出来たような気がします。

間違っているかもしれません。

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

うーん。凄い。

ただSpecular Lightの設定がCG感を増してしまっています。

誰が見ても実際の風景を撮影したのではない事はすぐに分かります。そこが残念です。

UE5におけるDisplacementの使用方法が知りたい方は、Unreal Sensei氏のTutorialでそれを教えるのがあるそうです。

その時に作成したLandscapeが表示されていました。

最初の例は写真と言われても全く疑わないです。

凄い質です。

やっぱりUnreal Sensei氏は凄い!

次はPCGについてです。

これについてはPCG BIOME位しか新しい情報はなかったです。

同じ内容を繰り返してもしかたないので今まで知らなかった情報だけ記録します。

Face Animationが追加された件についてです。

この後、UEFNに新しく追加された機能について解説しています。

まずFirst Person Modeが追加されたそうです。

この辺の情報がどれくらいの精度なのか私は判断出来ません。

次がPhysics Engineが大幅に改善されたそうです。

Server側でPhysicsを管理するようになったそうです。

これで全部のUserが同じ挙動を同時に得る事が出来るようなったそうです。

更に以下のようなPhoto-RealisticなMapを作成する事も可能になったそうです。

これは意味が分からん。

今までのUEFNだって膨大な容量を使用したらPhoto-RealisticなMapは作成出来るはずです。

使用出来る容量が増えたのか、それとも少ない容量でもPhoto-RealisticなMapが作成出来るような技術的な革新があったのかもしれません。

Meta HumanをUEFN内でも使用出来るようになったそうです。

特にMeta Human Animatorを使用出来るようになったので

以下のような表情を作成出来るようになったそうです。

Cloth Editorも追加されたそうです。

うーん。

でも紹介している映像にBPが表示されています。

それよりもこのClothのDesignをするのにMarvel’s Designerが必要だそうです。

調べました。

Marvelous Designerなら有りました。

韓国の伝統衣装のAnimationが紹介されていました。

韓国の会社なのでしょうか?

数年前、Cloth Simulationの世界で物凄い優秀な会社が韓国にあるって聞いた事があります。

多分、この会社でしょう。

何と、UEFNのCreatorは一年間、無料で使用出来るそうです。

うーん。

これは良い事を知りました。

最後にLogoが表示されていました。

やっぱりMarvelous Designerでした。

ただしMeta Humanが使用出来るのはNPCだけだそうです。

VerseのUpdateも行われたそうです。

Scene Graph?が追加されたそうです。

以上でした。

もうかなりお腹いっぱいですが、もう一人Smart Poly氏のEVERYTHING NEW IN UNREAL ENGINE 5.4 [14]も見る事にします。

既に知っている内容は端折って、新しい情報だけ記録します。

Retargetingに関する情報です。

Retargetingの設定を今までは手動で一生懸命やっていたんですが、ほとんどの有名なSkeletonとのRetargetingが一瞬で出来るようになったそうです。

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

  • Mixamo
  • Motion Builder
  • Accents
  • Move AI

MixamoはAdobe社の標準Boneでしょう。

MotionBuilderはAutodesk社の標準Boneなはずです。

Accentsは何の事がまったく分かりません。

Move AIはこれの事でした。

それぞれUEの標準Boneとは違う設定があるようです。

MMDのBoneとの互換性はないんでしょうか?

と言うかMMDの標準Boneの権利って誰が持っているんでしょうか?

後はVulkanのRay Tracingが紹介されていました。

お、これはAndroidにも使用出来るかと思ったらLinuxだけだそうです。

Large World Coordinates On GPUです。

Mapの最大の大きさが21kmから88,000,000kmになったそうです。

21kmって今までそんなに小さかったけ。21x21=441㎞^2か。

日本の大きさが378,000 km²なので余裕で日本全体を収める事が出来るようになったのか。

これって地味に凄い事です。

2024-02-19のBlogで3D Gaussian Splattingの応用にあった

3Dの地図の話にも被ります。

Apple Vision ProもSupportするようになったみたいです。

Apple Vision Proが販売される時、UEは開発Softからハブられている。と言われてましたが、一応は開発出来るようになったみたいですね。

LumenがMobileでも使用出来るようになったみたいです。

これも地味に興味深いです。

せっかくGoogle Developer Accountが残ったので、なんかUEの最新の技術を使用したAppでも公開してみたいです。

Texture Toolsです。

何でしょう。

これってAdobeSubstance Designerみたいな機能なんでしょうか?

Large World Coordinates Networkingです。

これはMulti-PlayerでもLarge World Coordinateが使用出来るようになっているみたいです。

他にも色々述べてましたが、私が重要だと感じたのは以上でした。

6.Houdiniの勉強

6.1 Houdini - Wall Tool 08 [11]を実装する

先週勉強したHoudini - Wall Tool 08 [11]を実装します。

<Random Tint Color>

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

Color Typeの設定をRamp from Attributeに変更しました。

Attributeの値にcolRampと打ちました。

Colorノードの名前をcolor_TintBrickに変更しました。

WallのParameterがあるNodeなので黄色くします。

Loopの最初のNodeを選択しました。

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

このNodeのCodeの場所の最後に以下の実装を追加しました。

Color_TintBrickノードのClassをPrimitiveに変更します。

Delete All Existing Color AttributesにCheckを入れます。

結果です。

それぞれのBrickに色がつきました。

色を薄くしました。

今度は前回作成したFractureのシステムにもう少しだけ色々な干渉が出来るように実装を変更します。

以下の箇所にAttributewrangle2ノードを追加しました。

ここで別の新たなRandomな値を作成します。

Foreach_begin2_metadata1ノードの結果を

このAttribwrangle2ノードの2番目のPinに繋ぎました。

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

Run Overの値をDetail(Only Once)にします。

<Detail Attribute>

Scatter1ノードのForce Total Countに以下の実装を追加しました。

結果です。

うーん。

多分出来てるでしょう。

後、Attribwrangle2ノードの名前を変更しました。

<Randomize the Seed>

Attribwrangle_CrackRatioノードの

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

そしてSeedの値を0.768に変更しました。

Scatter1ノードの名前をScatter_randSeedに変更しました。

ここからの手順が前回のBlogには上手くまとめられていませんでした。

以下にまとめ直します。

Scatter_randSeedノードのGlobal Seedを選択して以下に示した

Copy Parameterを選択します。

Attribwrangle_CrackRatioノードに戻って

Paste Relative Referencesを選択します。

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

Global Seedの値を変化させると

亀裂の形状が変化しました。

同じ事をAttribwrangle_randScatterPointsノードにも適用します。

Seedを追加して

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

結果です。

ScatterするPointも変化するようになっていますね。

これでこのTutorialは終わりです。

今度は花粉症になってしまったのか鼻水が止まりません。更に前からの咳も直って無いのであんまり深く考える事が出来ません。

無理しても仕方ないのでこの位で終わりにします。

7.UEFNの勉強

7.1 HOW TO ANIMATE YOUR CUSTOM PET - Fortnite UEFN / Creative 2.0 Tutorial [15]を勉強します

<Intro>

以下のCharacterが動いています。

NPCを動かす方法でも勉強するんでしょうか?

以下の3D Modelを使用しているそうです。

<Creating our Freddy Prop>

前回作成したDebbyをDuplicateして

Freddyを作成しました。

うーん。

これは単なるBlueprintでしょう。

中を開くと以下のようなComponentになっていました。

Static Meshを消してSkeletal Meshを追加します。

Skeletal Mesh AssetにGlamrock_Freddyを追加します。

<Creating Cine Sequence Devices>

このBPとCinematic Sequence Deviceを

Level上に配置します。

このCinematic Sequence Deviceの名前をIdle Animationに変更しました。

Duplicateしました。

DuplicateしたCinematic Sequence DeviceはFreddy Running Animationと名前を変更しました。

<Creating Animation Sequences>

そして新しいLevel Sequenceを作成します。

名前はFreddy Idleとしていました。

Duplicateしています。

2つ目はFreddy Moveと名付けていました。

Freddy Idleを開いてFreddyを追加しました。

Track、AnimationからGlamrock_Freddy_Anim_RIG_Glamrock_Freddyを選択します。

どっちも同じ名称だと思ったら2番目の手を振っているのを選択していました。

赤いBarはどこまでAnimationをPlayするかを指定しているそうです。

それをAnimationの一番最後にセットしていました。

同様の設定をもう一つのLevel SequenceであるFreddy Moveにもします。

Cinematic Sequence DeviceのIdle Animationを選択して

SequenceにFreddy Idleをセットしました。

8秒以上経っている場合もあるかもしれません。

その場合を想定してLoop PlaybackにCheckを入れます。

同様の事をCinematic Sequence DeviceのFreddy Run Animationにも行います。

SequenceにFreddy Moveをセットして

Loop PlaybackにCheckを入れます。

<Setting Up Creative Prop in Verse and Cinematic Sequence>

いきなりVerseのCode画面に飛びました。

しかも以下のCodeが既に実装されています。

どうもこれは前にFreddyのAnimationを作成した時のCodeのようです。

その時はVerse上でDebbyをSpawnしましたが、2つ以上のAnimationを作成する時はVerse上でNPCをSpawnすると動かなくなるそうです。

ので以下の実装を追加するそうです。

お、名前が見えました。

このDeviceの名前はSpawn_pet_deviceでした。

SpawnDebby()関数は消します。

そしてStart Following Player()関数を新たに作成します。

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

うん。

話のつじつまが合わない理由が分かりました。

このTutorialのSeriesには入ってないんですが、このTutorialの前に以下のSpawn Custom Petsと言うTutorialがありました。

これを先に勉強してその続きがこのTutorialだったみたいです。

前のTutorialを開いたらVerseのDeviceの名前がSpawn_pet_deviceになっていました。

このTutorialに出て来た最初のVerseのDeviceの名前も

です。

これは間違いないです。

7.2 Spawn Custom Pets / Props in Fortnite - UEFN / Creative 2.0 [16]を勉強する

そう言う訳で、急遽予定を変更してSpawn Custom Pets / Props in Fortnite - UEFN / Creative 2.0 [16]を勉強する事にしました。

<Intro>

上手くScreenshotは取れなかったですが、Playerのいる場所にPropをSpawnさせていました。

このTutorialではこの機能を追加するみたいです。

<Setting up Custom Prop>

以下のPropを用意していました。

このTutorialでは何故かこれらのPropをPetsと呼んでいます。

作り方は極めて基本的でPropからBPを作成して

以下のようにStatic MeshをComponentに追加しているだけです。

今回はDebbyを使用するそうです。

<Setting up Signal Remote Manager / Signal Remote Spawner>

Signal Rem… ManagerをLevel上に配置しました。

Signal Remote AもLevel上に配置しました。

こんな結果になっています。

Signal Remote Managerの名前をSpawn Eggに変更しています。

Signal Remote TierをUncommonに変更しました。

<Creating Verse Device>

新しいVerse Deviceを作成しています。

Verseを開きました。

<Exposing Remote Manager and Creative Prop in Code>

まずCharacter Moduleを追加します。

そしてSignal_remote_manager_device型のSpawnEggを初期化します。

もう流石にこの宣言の仕方にも慣れました。

更にCreative_prop_asset型のDebbyAssetも初期化しました。

SpawnDebby()関数も作成しました。

Player型のArrayの変数であるPlayersも作成しました。

OnBegin()関数内でこのPlayersも初期化しています。

<Subscribing on Remote Press>

そしてSubscribe()関数を追加しました。

<Creating Spawn Prop Function>

SpawnDebby()関数の実装を作成しました。

Playerの位置から3m離れた場所にSpawnします。

Rotationの値がEmptyなのはDebbyがSphereだから向きが関係ないからでしょうか?

<Setting up Devices in Editor>

BuildしてDeviceをLevel上に配置しました。

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

<Result 1 (Testing Spawns)>

テストしています。

普通に出来ています。

<Creating Pet Follow Player Function>

今度はこの生成されたDebbyがPlayerを追いかけるようにします。

またVerseに戻って以下の関数を宣言しました。

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

<Controlling Pet's Speed>

DebbyのSpeedを変化させます。

Playerが近くにいる時はゆっくり近づき、遠くにいる時は急いて移動します。

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

うーん。

これTimeなの?

これだと、距離が変わっても速度が同じになってしまうんじゃないの?

うーん。

まあいいや。

実装するときにCreativeProp.MoveTo()関数の三番目のParameterの意味を確認します。

CreativeProp.MoveTo()関数の三番目のArgumentをTimeに変更しました。

<Getting Creative Prop Instance from Spawn Prop Function>

SpawnDebby()関数内から

PetFollowPlayer()関数を呼びます。

ここで一個問題があります。

PetFollowPlayer()関数の三番目のParameterはCreative_prop型です。

しかし以下に示した様にDebbyAssetはCreative_prop_asset型なんです。

でこの問題を解決するために以下の方法をとります。

まずSpawnProp()関数を利用します。

SpawnProp()関数のDigestを開くと以下のように書かれています。

ここにあるTupleはReturn Valueの事です。

そしてTupleは単なるContainerでその中にcreative_propが入っています。

これを取り出せばCreative_prop型のDebbyAssetを得る事が出来ます。

そのためにSpawnProp()関数の結果をResultで得るようにCodeを変更します。

そして以下の実装でSpawnProp()関数のReturn Valueの最初のMemberの値を得ます。

まず?ですが、これはそもそもTupleにあるCreative_propがOptionalなので無い場合もあります。

それを示しているのが、Digestに載っていた以下の部分で

Creative_propの前に?がついている事です。

この場合は、Result(0)の後に?をつける必要があります。

その次にCreative_propはTupleの最初のMemberなので0で指定します。

ただしTupleなのでParentheses ()を使用します。普通のArrayのようにBracket[]は使用しません。

だそうです。

Tupleってそういう意味だったのか。

このTutorialの方がその辺のC++の教科書より分かり易いTupleの説明をしていました。

そして以下のようにPetFollowsPlayer()関数を追加しました。

Errorになっています。

これはPetFollowPlayer()関数にSpecifierでSuspendsが指定されているにもかかわらず、この関数を呼び出すSpawnDebby()関数にはSuspendsが無いからだそうです。

以下のようにするとこの問題は回避できます。

うーん。

今回のTutorialはかなり勉強になります。

<Random Tanget I Had lol

特に重要な内容は無いです。

Signal Remote Aの以下のParameterの値を変更したそうです。

更にSpawn EggのCooldown Timeの値も0にしました。

<Final Result>

テストしています。

Debbyは移動していますが非常に遅いです。

<Giving Pet Speed III Potion>

Speedを900に変更しました。

<Final Result>

もう一回テストしています。

今度はDebbyの動きが速すぎてほとんど一体化しています。

以上でした。

実装は来週やります。

8.DirectX12の勉強

8.1 Fence & Command List | D3D12 Beginners Tutorial [D3D12Ez] [16]を勉強する

前回の勉強で Device & Command Queue | D3D12 Beginners Tutorial [D3D12Ez] [17]の実装が終わったので、今週からその次のTutorialであるFence & Command List | D3D12 Beginners Tutorial [D3D12Ez] [16]を勉強します。

まずDeviceとCommand QueueとFenceがCPUとGPUの関係においてどう動くのかをSynchronizationの観点から説明するみたいです。

Lötwig Fusel氏の話は抽象性が高くて、何が言いたいのかを把握するのが結構大変です。

とりあえず話を聞いてみます。

まず一般的な場合の、CPUとGPUのSynchronizationがどうのように働いているのかを説明するそうです。

GPUは一個のCommand Queueを実行するそうです。

この時にCommand Queueにある仕事を実行する事が出来る準備が整っているのかを確認する必要があります。

ここから一寸、曖昧な理解になってしまいますが、Command Queueが何かを実行したらFenceにある値をセットするそうです。

そのFenceの値を見て、Command Queueが実行されたかどうかを確認する。

こんな感じの内容と理解しました。

うーん。

Fenceってそんな働きだったでしたっけ。

確認します。

2023-10-15のBlogでFenceについて勉強していました。

DirectX 12の魔導書」の「3.4.2 Fence」のところです。

これを読むと、Fenceの機能はGPU側の処理が終わった事を教える事のようです。

そしてその具体的なやり方はGPU側の処理が終わるとFenceがある値をIncrementします。

CPU側はその値を確認する事でGPU側の処理が終わった事を確認出来るようになります。

はい。

大体こんな感じでした。

このTutorialにおけるFenceの説明を私なりにまとめた内容をもう一回見直します。

うん。

あってますね。

続きを聞く事にします。

この後、Singalを発してとかの具体的は解説をしていました。

この辺の実装は非常に複雑で2023-10-15のBlogを読み直しても、何をやっていたのか思い出せません。

実際に実装する段階になったらしっかり復習する事にします。

Signalを待つ関数でしょうか?

SingalAndWait()関数を宣言しました。

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

しかし赤で囲った部分はOSの観点から言うとあまり良い方法ではないそうです。

その理由についても簡単に説明していましたが、こんな感じです。

GPU側の作業が終わるまで、このThreadはやる事が無い。その間CPU側の作業を減らすために、このThreadは眠らせておく。

しかしただ眠らせておくとGPU側の作業が終わった時にも眠ったままになる危険がある。

GPU側の作業が終わった時にはこのThreadが目覚めるように(目覚まし時計)をかけておく。

よく分からないので直した新しい実装だけ以下に示します。

Handle型のEvent Classを作成します。

名前はm_fenceEventです。

そして以下の箇所にCreateEvent()関数を作成しました。

そしてShutdown()関数で作成したEventをReleaseします。

これはCloseしているだけなのかな。

もうC++分からないです。

そしてSingal And Wait()関数の実装を以下のようにしました。

これだとずっと待ってる事になる気がしますが。

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

うーん。

分からん。

丁度、Tutorialが10分だったので今週の勉強はここまでにします。

この実装の内容については来週検討します。

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

8.2.1 前回の復習

「4.8.5 Blend Stateの設定」を読んでいました。

Blend Stateとは生成されたFragmentをどのようにBlendするのかを指定しています。

その中でAlphaテスト、D3D12_BLEND_DESC structure、D3D12_RENDER_TARGET_BLEND_DESCについても解説していました。

AlphaテストはそのFragmentのAlphaの値が0だった場合そのFragmentを破壊してしまうそうです。

8.2.2 「4.8.5 Blend Stateの設定」を実装する

ここで実装するのは以下の部分だけです。

自分のProjectで確認するとこの部分の実装の前の部分の以下のCodeの部分がまるまる抜けています。

Blogを読み直して確認したら「4.8 Graphic Pipeline Stateの作成」を全部読んでからまとめて実装する予定だったみたいです。

成程。

では一端、実装は中止して「4.8 Graphic Pipeline Stateの作成」の残りを勉強する事にします。

8.2.3 「4.8.6 Input Layoutの設定」を勉強する

今度はD3D12_GRAPHICS_PIPELINE_STATE_DESC structureのInput Layoutの設定についてだそうです。

公式SiteのD3D12_GRAPHICS_PIPELINE_STATE_DESC structure (d3d12.h)[18]には

InputLayoutに関して以下の記述がありました。

では公式SiteのD3D12_INPUT_LAYOUT_DESC structure (d3d12.h) [19]を見てみます。

2つしかMemberがないんですね。

それぞれのMemberについては以下のように説明していました。

Sample CodeのInputLayoutの実装です。

ここで教科書ではInputLayoutは既に設定しているのでそれをここで使用します。

と書かれていました。

うーん。

調べたら確かに実装していました。

「4.7.1 D3D12_INPUT_ELEMENT_DESC構造体」で実装していました。

もう、節が一個前の作業も忘れてしまっています。

ジャングルで迷子になった感じです。

今度はIBStripCutValueです。

Sample Codeでは以下のようにセットされていました。

ここが何をやっているのか教科書の説明を読んだんですが、結構複雑です。

Triangle ListとTriangle Stripについての説明があってTriangle Stripの方が効率が一見良いですが、効率良くない場合もあって、その部分だけTriangle Listに切り替える場合に使用するそうです。

今回は当然使用しないので上記の設定になります。

PrimitiveTopologyTypeです。

PrimitiveのTypeは点、線、そして三角形だそうです。

ここでは三角形を指定しています。

8.2.4 「4.8.7 Render Targetの設定」、「4.8.8 Anti-AliasingのためのSample数設定」そして「4.8.9 Graphic Pipeline State Objectの生成」を勉強する

この辺は短いので一気に勉強してしまいます。

<「4.8.7 Render Targetの設定」>

これは現状では1しかないそうです。

更にRender TargetのFormatを指定します。

<「4.8.8 Anti-AliasingのためのSample数設定」>

教科書ではAnti-Aliasingはしないので以下の設定にしろ。で終わっていました。

<「4.8.9 Graphic Pipeline State Objectの生成」>

これでGraphic Pipeline State Objectを生成するために必要なものはSignatureを除いて全て完成したので、Graphic Pipeline State Objectを生成するそうです。

やり方はID3D12PipelineState型のObjectを以下のように宣言して

CreateGraphicsPipelineState()関数で初期化します。

以上でした。

これでやっと「4.8 Graphic Pipeline Stateの作成」の勉強が終わりました。

来週、「4.8 Graphic Pipeline Stateの作成」を実装します。

9.まとめと感想

特にないです。

10. 参照(Reference)

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

[2] Dusty PIxels. (2023, August 17). 3D Scanning into Unreal Engine 5: Kiri Engine Workflow Tutorial [Video]. YouTubehttps://www.youtube.com/watch?v=Zwk3Me6wnc0

[3] JSFILMZ. (2023, June 2). 3d scan to Unreal Engine 5.2 using Android Phone [Video]. YouTubehttps://www.youtube.com/watch?v=nBGF_jUN0GE

[4] Smart Poly. (2023, July 22). Scan anything to Unreal Engine 5 (TUTORIAL) [Video]. YouTubehttps://www.youtube.com/watch?v=wajCJvSTnOQ

[5] 1.7 - Scene Capture 2D. (n.d.). Unreal Engine 4.27 Documentation. https://docs.unrealengine.com/4.27/en-US/Resources/ContentExamples/Reflections/1_7/

[6] Why doesn’t the Scene Capture 2D camera in UE5 display the Render-Target texture like it did in UE4? (2022, April 16). Epic Developer Community Forums. https://forums.unrealengine.com/t/why-doesnt-the-scene-capture-2d-camera-in-ue5-display-the-render-target-texture-like-it-did-in-ue4/530139/1

[7] Coreb Games. (2022, August 16). UE5 l How to Capture Your Scene in Real Time Using Render Target l 3-Min Tutorial l Unreal Engine 5 [Video]. YouTubehttps://www.youtube.com/watch?v=c4YCMK9L9qI

[8] Unreal game dev with Yaz. (2023, January 24). UE - Get 3D character into 2D widget [Video]. YouTubehttps://www.youtube.com/watch?v=QjIMXIsT3ew

[9] Ben Cloward. (2023, November 2). Procedural Brick Pattern Shader - Advanced Materials - Episode 28 [Video]. YouTubehttps://www.youtube.com/watch?v=7UelK8pouFE

[10] Gamefromscratch. (2024, March 20). The state of unreal GDC 2024 in under 10 minutes! [Video]. YouTubehttps://www.youtube.com/watch?v=eF5arWfzP2k

[11] Rick Banks. (2022, June 21). Houdini - Wall Tool 08 [Video]. YouTubehttps://www.youtube.com/watch?v=syK94wp3HHg

[12] pinkpocketTV. (2024, March 22). Unreal Engine 5.4 New features! Everything new in UE5.4 [Video]. YouTubehttps://www.youtube.com/watch?v=Qtzsmpyc0EA

[13] Unreal Sensei. (2024, March 21). Unreal Engine 5’s biggest new features [Video]. YouTubehttps://www.youtube.com/watch?v=6VFSg6Ad8Ns

[14] Smart Poly. (2024, March 21). EVERYTHING NEW IN UNREAL ENGINE 5.4 [Video]. YouTubehttps://www.youtube.com/watch?v=233cdsSz3iE

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

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

[17] Lötwig Fusel. (2023, May 15). Device & Command Queue | D3D12 Beginners Tutorial [D3D12EZ] [Video]. YouTubehttps://www.youtube.com/watch?v=nQzALY8nX1c

[18] Stevewhims. (2022, September 1). D3D12_GRAPHICS_PIPELINE_STATE_DESC (d3d12.h) - Win32 apps. Microsoft Learn. https://learn.microsoft.com/en-us/windows/win32/api/d3d12/ns-d3d12-d3d12_graphics_pipeline_state_desc

[19] Stevewhims. (2024, February 22). D3D12_INPUT_LAYOUT_DESC (d3d12.h) - Win32 apps. Microsoft Learn. https://learn.microsoft.com/en-us/windows/win32/api/d3d12/ns-d3d12-d3d12_input_layout_desc