UE4の勉強記録

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

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

1. 今週の予定

1.1 今週の予定

先週は休息したので何をやっていたのか結構忘れています。

復習しながら勉強する事にします。

今週は以下の内容を勉強する予定です。

<Landscapeの作成>

建築用のLevelの作成の勉強の続きをやります。

Niagaraの勉強>

NS_Mage_Fireballをアニメ調に改造する続きをやります。

<Materialの勉強>

Advanced Material Seriesの勉強の続きを勉強します。

<Gaeaの勉強>

Earth and Space Sciences XのTutorialを勉強します。

更にGaeaのTutorialを作成します。

<Houdiniの勉強>

Free Time Coder氏のUnreal PCG Tutorial [1]の続きを勉強します。

<UEFNの勉強>

インベーダーゲームを作成するためにUEFNのTutorialを勉強します

<DirectX12の勉強>

DirectX 12の魔導書」と「Direct3D 12 ゲームグラフィック実践ガイド」の勉強をやります。

2. Landscapeの作成

2.1 先々週の復習

先々週何をやったのか全く覚えていません。

2023-09-25のBlogを読みます。

以下の本を買ったんでした。

この事はすっかり忘れていました。

休みの間はRVCなどのAIを用いたVoice Changerの使用方法や3D Gaussian Scatteringなどの画像から3D Imageを作成する技術について調べていました。ですっかりこの本の事を忘れてしまいました。

この本は一応は読んでおく必要があります。

分かりました。

先々週からUnreal Engine 5 for Architecture - 2023 Full Beginner Course [2]を実際に実装する事にしたんです。

しかし家が無いので代わりに以下のAssetを使用する事にしたんです。

このAssetをImportしてDemo Mapを開いて見ると以下のErrorがずっと表示されています。

これを直すために色々試したんですが、結局

  • iniのQuality Settingのr.ReflectionCaptureResolutionの値を512に下げる
  • DISABLEALLSCREENMESSAGESでError表示自体を消す

の二つしか効果が無かったです。

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

Texture Streaming Pool Over…のError表示はいつでも消せる事は判明したので今はそのままにしておきます。

まずこの家を以下に示した先週作成したLandscape上に建設します。

建物を開きます。

内側の複雑な作りを無視すると

外側は以下の

3つのStatic Meshで構成されています。

これらを使用して家を作成してみます。

SM_Floor_1_Floor1を配置しました。

Landscapeが平でないのでCubeを広げて下に引きました。

土台の代わりです。

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

結論から言うと何をやってもこのErrorは消す事が出来ませんでした。

以下にやった内容を簡単に示します。

  • Build Physical Material Onlyを使用(前回はこれで直った。)
  • Physical Materialを作成して追加
  • 一から作り直す
  • Editorの再起動
  • 上記の作業を複合して行う

一から作り直してもLandscapeを作成した時点で表示されます。

UE5.2で試してみました。

全く同じ方法でLandscapeを作成しましたがLandscape:1 Actor with Physical Materials Needs to be Rebuiltは表示されません。

うーん。

UE5.3の問題なのかもしれません。

UE5.3の別なProjectで同じ事を試してみます。

うーん。

Error表示は出ないです。

こっちはGameのThird PersonをTemplateにしていますがそれと関係あるのかもしれません。

このErrorは無視して先をやる事にします。

SM_Floor_1の隣にSM_Floor_1_Interiorがありました。

のでこれも次いでに追加します。

SM_Floor_2_Floor_2を追加します。

こっちもInteriorがあったので追加します。

二階の床は無いですね。

これは後で考えます。

最後にSM_Roofを追加します。

結果です。

窓とドアを追加します。

窓は以下のSMでした。

ドアはこれでした。

まず窓から追加します。

SM_WindowsというStatic Meshもありました。

こっちは窓枠のAssetでした。

これも追加します。

結果です。

BP_Enter_Doorを追加します。

こっちはBPですね。

何でBP何でしょうか?

Eを押すとDoorが開く機能があるからみたいですね。

結果です。

かなり良い感じです。

こっち向きしか撮影しませんのでこれで完成とします。

家の配置は一応完成しました。

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

2023-09-04のBlog に次の作業がまとめられていました。

<Material Library: Quixel>

黒や白の色の設定方法について解説しています。

このTutorialの作者であるGediminas Kirdeikis氏も以下のChannelで色の指定方法を勉強したそうです。

せっかくですのでWilliam Faucher氏のYouTubeのChannelを見てみます。

あれこれって?

GaeaのHomepageに載ってるこれと同じ?

右端にWilliam Faucherって書いてありました。

これは見ない訳にはいかないでしょう。

2.3 Capturing Lofoten in Unreal Engine 5 [3]を見る

まず軽く見ます。

見ました。

圧巻の一言です。

この動画はTutorialというよりは全体の流れを簡潔にまとめたドキュメンタリー動画と言う感じで、個別の技術を学ぶための動画ではなく全体の流れを理解するためのものでした。

特にどのSoftを使用したのかについての解説が面白かったです。

以下に使用したSoftをまとめておきます。

  • Photo-Geometryを使用した建物の作成
  • Substance Painterで建物の外観を赤いペンキで塗る
  • Gaeaで奥の山を作成
  • Davinci Resolveで作成した映像を編集

Substance Painterは買えませんが、それ以外のSoftはそれなりに使用しているかこれから勉強しようと思っているのばかりです。

なんか風が自分の方に吹いてきてる気がします。

更にUEでは以下のPluginを使用していました。

後、Dynamic Sky Systemも使用していたはずです。

持ってないんです。

うーん。

ずっと待っていればいずれFreeで配られるとは思っているんですがどうなんでしょう?

まあ、Epic Games社も大量解雇をしたのでもう無料でAssetを配る事も無いかもしれませんね。

その辺を見極めた後で、購入する事になるかもしれません。

今週のLandscapeの作成はここまでとします。

3. Niagaraの勉強

Unreal Engine 5で学ぶビジュアルエフェクト実装 基本機能からNiagara、シミュレーションまで」を読む事にします。

この本を読まない選択肢は無いです。

さっさと読んでしまいます。

3.1 最初の実装

川の表面を作成しています。

うーん。

とりあえずSample Codeを見てみます。

これは思っていたのよりかなり良いです。

何て言うんでしょうか?

本物の水面の感じがあります。

流石にこの辺の実装まで一々確認している時間はありません。

さっと見て仕組みを理解しました。

次の揺れる草の実装です。

これも結構凄いです。

草自体がStylizedされた形状なのでPhoto-realisticな感じは無いですが、そこさえ直したら本物と区別つかないと思います。

この制作方法はしっかり読む事にします。

うーん。

でもこれ本なんですよね。

書かれている内容をBlogで公開する訳にはいかないですね。

勉強した感想をまとめる位しか出来ないですね。

あれGitHubのFileにはMIT LicenseでSample Codeを公開していますね。

うーん。

という事はSample Codeと言うかGitHubに載っていう内容に関してはBlogで公開しても問題ないですね。

一応、そういう解釈で勉強を進めていきます。

もし苦情が来たらこの部分のBlogは消します。

SM_Grass.objをImportしました。

これが草の元になるStatic Meshなの?

草のImageですが、本物の草の写真を使用してみます。

以下の写真を使用します。

これだとかなりPhot-realisticになる気がします。

試してみます。

うーん。

微調整が必要ですね。

後で調整します。

結果です。

四角感が凄いあります。

何ででしょう?

Sampleの草と比較しましたが、Sampleの草のImageは下半分がかなり暗くなっています。それが四角感を消しているみたいです。

Photo-RealisticなSceneでこれを使用するのは無理があります。

PCへの負担はどうなんでしょう。

1~8の間位です。

結構PCが音立てていたので負担が掛かっているのかと思ったんですがそうでもないです。

Nanite化してみました。

GPUの使用率は同じ位ですね。

うーん。

よく分かりません。

Instanced Static MeshってGPU内だけで計算するからCPUとGPUのやり取りが無い分、負担が減る訳です。

Naniteも同じ効果が有った気がします。

そうだとするとInstanced Static MeshをNanite化してもあまり変化は無いのかもしれません。

まあ良いです。

次をやります。

3.2 「Chapter 4: Post Processを作成する」を読む

疑似乱数の話が面白かったです。

この疑似乱数の作成方法を、私はこの本で初めて知ったんですが、これって一般的な作成方法なのでしょうか?

後、Post Processingの事をPost Effectと呼ぶGame Engineが有る事も知りました。

ホントかいな?と検索したら以下のGame Engineが出て来ました。

https://www.stride3d.net/

こんなGame Engineがあるなんて初めて知りました。

Open SourceのGame EngineでC#で書かれているそうです。

この章ではVHSの作成方法について解説しています。

2022-11-20のBlogから12月の終わりにかけてBen Cloward先生のVHSのTutorialを勉強しています。

この内容既に忘れてしまったんですが、Post Processingを使用した事は間違い無いです。

4. Materialの勉強

時間が無いので今週のMaterialの勉強は無しです。

Ben Cloward先生のTutorialはまだ更新されません。

大丈夫なんでしょうか?

5. Gaeaの勉強

5.1 MindmeisterのBugについて

今週から以下のようなBugが発生するようになりました。

Presentation Modeで線が表示されない時があります。

Presentation Modeを切ると線が表示されます。

その状態でPresentation Modeに入り直すと以下のように線が表示されるようになります。

線が消えるのはいつも同じ場所です。

先週まではこんなBugは無かったです。

何で起きたのか全く不明。

調べても同じ症状を訴えている人はいなかったです。

5.2 Geology 14 (The Ocean Floor) [4]を勉強する

<The Ocean Floor>

特になし。

海底の情報は特に少ない事を説明していた。

<Ocean Provinces>

この場合のProvinceとは単に場所を指しています。

どの海も同じ形状をしているそうです。

次のSlideです。

Continental Marginについての解説です。

<Passive Continental Margin: Continental>

何故か、Continental Marginの説明が続きます。

Slopeに沢山の石油が眠っているそうです。

次のSlideです。

この図をBlogで描いた記憶があるのですが、見つかりません。

どこで勉強したんでしょうか?

見つけました。

2023-02-26のblogでした。

GaeaのFoldについて調査している所でこの絵を描いていました。

Foldは山の部分で今回は海の中の話ですので、直接の関係性は無いですね。

確認取れたので先に進みます。

次のSlideです。

このSlideで大事なのは、地中に潜っていく方のPlateの表面はもう片方のPlateに削られて海底の表面に大量に溜まる事です。

それをAccretionary Wedgeと呼びます。

<Features of the Deep Occean Basins Deep>

Basinについて解説していますが、何でBasinに島があるのかが分かりません。

それよりもEpic Games社、2024年からGame作成以外の目的でUEを使用する場合、無料じゃなくするそうです。

あんまりにも衝撃的なNewsで、集中力が切れてしまいました。

今週のGeologyの勉強はここで中止します。

UEの件ですが、

どんな値段体系になるのか分かりませんが、出来ればSubscriptionにするか、ある程度の収入を超えたら5%のLoyal料を払うかを選択出来る形式にしてほしいです。

例えば、映画会社がある映画を撮影するのにUEを使用したとします。

その場合は、その映画の売上の5%をEpic Games社に払うか、UEのSubscriptionを払うかのどちらかを選択出来るようにします。

当然、売上が何十憶もある映画を作成する大手の会社は一部の撮影で一寸だけUEを使用しただけで、映画の売り上げから5%も取られると大変な出費になってしまうのでSubscriptionを選択します。

しかし私のようなIndieな開発者はそもそも売上自体が発生しませんので、売上の5%を払う方を選択します。

万が一、私が作成した映画が大ヒットしてウン億円の売り上げが出た場合は、そもそも宝くじに当たったようなものなので、売上の5%を取られても何の問題も無いです。

5.3 Mind Mapの変化形について

これはGaeaの勉強とは直接関係ありませんが、Mind Mapつながりという事でここに記録しておきます。

Mind Mapは非常に便利ですが、複数の人物が登場して相互に干渉していく様を時系列で整理する事は出来ません。

そこでMind Mapを改良して複数の人物が登場して相互に干渉していく様を時系列で整理するMapを考えました。

まず以下の図を見てください。

横軸に人物、縦軸に時間を配置する事で人物の活動を時系列で整理出来ます。

この図をMind Mapで表すと以下のようになります。

当然ですが、時系列が分からなくなりました。

更に人物の活動が他の人物の活動にどう干渉するのかについても分からなくなっています。

しかし先程の図に無かった以下のMind Mapの長所も追加されています。

  • 人物を途中で追加したくなったり人物の順番を入れ替えたりする事が出来ます。
  • 更にその人物の活動もNodeを追加する事で途中で思いついても追加出来るようになっています。

これらの長所を無くさずに時系列を追加や人物同士の干渉を追加するにはどうしたらいいでしょうか?

まず時系列を以下のように追加します。

Mind Mapに無かった縦軸を追加しました。

縦軸は時系列を表しています。

それぞれの人物の活動を表すNodeは横軸でその人物と繋がっているだけでなく縦軸で特定の日と繋がっています。

そしてその日付は時系列で並んでいます。

これでMind Mapに時間軸を追加する事が出来ました。

この改良したMind Mapを使用すると西郷隆盛坂本龍馬を嫌いになってから暗殺を決定するまで一晩しかない事が、一目で理解出来ます。

更に西郷隆盛が暗殺を決定してから京都見回り組が暗殺を了解するまで一日ずれがある事も分かります。

もし坂本龍馬暗殺の小説を書くとして、

西郷隆盛坂本龍馬を嫌いになってから、一日で暗殺を決定したと仮定してしまうと

読者から西郷隆盛が短期で思慮の浅い人物として見られてしまいます。

更に西郷隆盛から暗殺を命じられた京都見回り組が、一日も躊躇してから暗殺を了解するのも

京都見回り組が弱く見える事でしょう。

これが文章では西郷隆盛を思慮深く我慢強い性格だったり、京都見回り組を最強の剣客集団だったとして書いていたりしたら

自分で考える知性を持つ読者はこの小説の内容に混乱するか、この小説を書いた作家はバカだと断定するはずです。

小説を書く人間としてはそういう事は避けたいはずです。

この改良したMind Mapでそれぞれの人物の行動を整理する事で、全ての人物の行動が辻褄があるように整理する事が出来るようになります。

人物の活動が他の人物にどのような干渉を与えたかを表す。

これは単に矢印で繋げば出来ます。

更に複数の人物が同時に行う活動、例えば会合などは以下のように表す事にします。

これは人物とその活動を表すNodeを繋ぐ矢印の色をそれぞれの人物で変える必要があります。

5.4 TutorialのVoiceについて

先々週はTutorialのVoiceにCOEIROINKの音声を使用しました。

COEIROINKは英単語が読めないのでカタカナで入力する必要が有る事が分かりました。

Unreal Engineはアンリアルエンジンと書く必要があります。

実際に試してみると、この作業が異常に負担になる事が判明しました。

そこでVoice Changerを試す事にしました。

色々なSoftを試しましたが、AIを使用せずPitchを変換するだけのVoice Changerは現代のVoice Changerとしては品質が劣る事が分かりました。

AIを使用したVoice Changerを調査しました。

ほとんどのServiceが実質有料である事が分かりました。

唯一、RVCが無料で更にOpen Sourceである事が判明しました。

5.4.1 RVCを試す

とりあえずRVCを試してみました。

以下の動画を参考にしてInstallしました。

最初は使用出来なかったんですが以下の点を変更したら出来るようになりました。

<使用するマイクを以下のFileを実行する前に繋げておく>

これをしておかないとMicrophoneを認識してくれません。

<SRの値は48000だった>

これはCommand Promptを読んだら言っていました。

直したらすぐにErrorが消えました。

使用した結果、以下の疑問点が生まれました。

  • httpを使用して安全なのか?
  • Yamahaのソフトは要らない?

これらの疑問は後で検討します。

5.4.2 RVCの音声を録音してみる

RVCで変換した音声を録画出来るようになりました。

設定方法が結構複雑なので、時間が経ったら忘れてしまうと思われます。

のでここに記録しておきます。

<Microphoneを繋ぐ>

これを最初にやる必要があります。

これ忘れて後から繋げても認識してくれません。

GeForce Experienceの設定を変える>

以下に示したIconの設定をClickします。

すると新しいWindowが開きます。

その中から以下に示した「ゲーム内のオーバーレイ」の設定を押します。

すると以下に示したBoxが開きます。

Audioを選択します。

するとBoxが開きます。

その中に以下に示したMicrophoneのSourceの設定があります。

ここが先程、差し込んだMicrophoneが指定されています。

これをYamahaのラインに変更します。

(後述:Yamahaのソフトは録音する時には絶対に必要でした。)

<RVCを立ち上げる>

Start_http.batをClickするだけです。

一々、探すのが面倒なのでShortcutを作成しました。

後RVCの以下の設定も変更する必要があります。

5.4.3 色々なModelの音声を試してみる

色々なModelの音声を試してみました。

結構音割れします。

Modelによって精度が全然違います。

30個位のModelを試しましたが、音割れしないのは2個しかありませんでした。

しかしその2つのModel、アニメのCharacterの名前がついています。

これはそのまま使用する訳には行きません。

結局、Modelをしっかりした販売元から買うか、友達に頼むなどしてModel作成用の音声を録音し、それを元に自分でModelを作成するしかないようです。

5.4.4 AI生成物の著作権について(アメリカ)

前にアメリカのAIに関する著作権を調べたら事があるのでそれをここにまとめておきます。

あくまでもアメリカで現在言われてるAIの著作権にたいする考え方です。

<学習用の素材>

AIが学習するのも人間が学習するのと同じ。

著作権の範囲外。

例えば、芸術家が絵画の勉強をするのに有名な画家の絵を見て勉強します。

これは著作権に違反しません。

有名な画家の絵を見るのに一々その画家の承諾を得る必要は無い訳です。

AIも同じと考えています。

<AIで作成した作品>

著作権はない。

AIは人間でないから。

AIイラストに関して言うとPrompt Programmingはどんなに複雑でもイラストレターに依頼したのと同じと見なされる。実際に絵を描いている訳では無いので著作権はない。

<AIで生成した作品が従来の著作物に似ていた場合>

著作権違反。

しかも作成した人でなくそれを公表した人が著作権違反になる。

こんな感じです。

5.4.5 AI生成物の著作権について(日本)

日本の事情についても調べました。

https://www.bunka.go.jp/seisaku/chosakuken/pdf/93903601_01.pdf

文化庁の見解が載っていました。

これを読むと

<学習用の素材>

著作権の範囲外。

ただしAIの学習以外の目的で使用するのは不可。

これを判断するのは享受があるかないかで判断します。

享受というのはかなり難しい概念です。

私が理解した範囲で説明すると以下のようになります。

享受とはその著作物を見たり読んだりしたときに得られる、精神的な満足感の事です。

例えば、AIの学習用に手塚治虫全集を販売したとします。

これは著作権の範囲外なので別に手塚治虫氏の著作権を管理している会社の承諾を得る必要はないです。

しかしそのAI学習用の手塚治虫全集が人間にも読める状態で販売されたとすると、享受が発生します。

つまり人間が勝手に読んで、手塚治虫作品を読んだ後に得られる精神的な満足感を得る事が出来ます。

こうなると著作権違反に当たる事になります。

後、ただしと書かれていて

著作権者の権利を不当に害する場合は著作権違反になる場合もある。と書かれていました。

うーん。

成程。なんでもOKと言う訳でもないんですね。

日本の場合は、著作権者の利益に反しないかどうかも判断材料に含まれる訳ですね。

そしてこれは個別に裁判で判断すると書かれていました。

先程の手塚治虫氏の場合で言えば、手塚氏と全く同じ画風の漫画をAIが生成してそれを販売した場合なんかは著作者の利益を不当に害した例に当たるかもしれません。

アメリカでは有名なIllustratorの絵だけを徹底的に学習させたAIがそのIllustratorそっくりの画風で新しい絵を何百枚も生成して裁判になっていました。

これに対してアメリカのLawyerたちはそっけなく

「画風に著作権はない。」

と回答していました。

日本だとこれは著作者の方が勝つ可能性もある訳ですね。

<AIで作成した作品>

ここはアメリカ程、一括で著作権無しとは言っていませんでした。

人がAIを道具として使用した場合には著作物に当たると述べています。

この判断基準は人が創作意図をもって作成したかどうかだと論じています。

ここはアメリカのAI創作物の著作権と一線を画した考え方をしています。

「この解釈はよく吟味する必要がある。」

と正直思いました。

現実を顧みれば日本はアメリカのClient Stateです。

これは身も蓋も無い言い方をすれば、日本の法律の上にアメリカの法律が存在してるという事です。

このようにアメリカの解釈と真っ向から衝突する解釈をしてしまうと、後で整合性を取るのが難しくなる気がします。

文化庁、大丈夫なんでしょうか?

一寸だけ思考実験してみる事にします。

モナリザの絵が存在しないと仮定して、ある人が

  • 微笑した中世の美女、
  • 手を前に組んでいる

などのPromptを複雑に指定してモナリザそっくりの絵を生成したとします。

このモナリザそっくりの絵が芸術作品である事に異論がある人はいないでしょう。

これに著作権があるかないかが問題です。

アメリカの現況の解釈なら

  • Prompt Programmingは依頼主の依頼と同じ。依頼主に著作権はない。故にPrompt Programmingをどんなに頑張っても著作権は無い。
  • この絵の著作権を持つ事が出来るのはこの絵を生成したAIだけ。しかしAIは人間ではない。著作権が発生するのは人間が生成したものだけ。よってこの絵には著作権はない。

で終わりです。

ここで日本の主張である「人が創作意図を持って作成した」はどう判断するんでしょうか?

モナリザがどのような創作意図があって作成されたかどうかを言語化出来る人はいません。

となるとPrompt Programmingから創作意図があったかどうかを判断するのは不可能でしょう。

やっぱり日本のこの解釈はかなり無理筋な気がします。

<AIで生成した作品が従来の著作物に似ていた場合>

これは文化庁の解釈でも著作権違反でした。

5.4.6 これらの点を考慮したAI生成物の著作物

日米のAIにおける著作権の考え方を検証した結果、(例え日本においても)アメリカのAIに対しての著作権の考え方がこれからの主流になると結論が出ました。

のでアメリカのAIの著作権の考え方を元に、AI生成物の合法的な生成方法、および使用方法を考えてみます。

まず生成方法においては従来の著作物を使用して学習していても問題ないと考えられます。

のでRVCを使用する事には問題は無いと思われます。

次にRVCのModelの作成に著作物を使用した場合です。

これもRVCの学習の一環です。

故にこれも問題ないと考えられます。

最後にそのModelを使用したRVCの音声が元のModelと同じ声であると誰が聞いても判断出来る場合です。

これが著作権違反にあたる可能性があります。

つまりアニメのVoiceから生成したModelを使用した場合、ここに違反する可能性がある訳です。

この辺を考慮すると声の綺麗な友達の音声を録音してModelを自作し、それをRVCで使用するのがもっとも安全であると考えられます。

6. Houdiniの勉強

今週もHoudiniの勉強はお休みしてFree Time Coder氏のUnreal PCG Tutorial [1]を勉強します。

Unreal 5.2 Preview PCG Tutorial - Part 8 - Jungle Breakdown [5]の実装の続きをやります。

6.1 先週の復習をする

もう先々週何を実装したのか覚えていません。

2023-09-25のBlogを見直します。

更に先々週、実装したCodeも見ます。

大体何をしたのか思い出してきました。

PCB_Pathの実装を作成して以下のようにPointを配置する形状を作成しました。

6.2 Unreal 5.2 Preview PCG Tutorial - Part 8 - Jungle Breakdown [5]の続きを実装する

2023-09-18のBlogを見るとこの後で更にPCG_Pathの実装をしています。

今週はその辺をやる事にします。

まずCopy Pointsノードの後はTransform Pointsノードが使用されています。

しかしこのNodeのParameterがどうなっているのかは不明です。

Unreal 5.2 Preview PCG Tutorial - Part 8 - Jungle Breakdown [5]を見るとCopy Pointsの時のPointsは以下のようになっていて

Transform Pointsの時のPointsは以下のようになっています。

これはPointのサイズだけでなく位置も変更していますね。

取りあえず以下のように設定しました。

この結果を確認しようとしたら何も表示されません。

この結果を表示するためには以下の赤線で囲った実装のGet Spline Dataノードの設定を指定する必要がある事が判明しました。

しかし指定先はまだ作成していません。

のでこの先の実装を先に作成してしまいます。

Project Points on Landscapeノードを追加します。

このNodeはExecute Blueprintノードから作成しました。

Transform Pointsノードを追加します。

自動でFilter-Pointノードが追加されました。

このNodeはTutorialにはありませんね。

UEのVersionが違うからでしょうか?

Transform Pointsノードの後の実装です。

Spawn Pebbles and Rocksの実装を追加しました。

それぞれのNodeのParameterは全くいじっていません。

今の時点ではどうすれば良いのか全く分からないからです。

Spawn Fallen Treeの実装です。

一緒ですね。

こっちもそれぞれのNodeの値はDefault値のままです。

後でそれぞれのNodeの値は調整します。

Spawn Fallen Treeの後にCompute Points for Detail Plantsがあります。

これは朽木に草を生やすための実装です。

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

これもそれぞれのNodeのParameterが決まっていないのでDefault値のままになっています。

Outputの実装です。

ここのTransform PointsノードはParameterが紹介されていました。

なんとDefaultのままです。

OutputはCustom InputとしてDetail Pointsを追加します。

更にCompute Points for Detail Plantsの結果をDetail Pointsに繋げます。

これでPCG_Pathの実装は一応、完成です。

残りの実装が終わってからPCG_PathのParameterの調整はやります。

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

7. UEFNの勉強

今週もPi Equals Three氏のTutorialをやっていきます。

7.1 Easily Make Anything Follow Your Player! UEFN/Creative 2.0 [6]を勉強する

以下に内容をまとめます。

<Intro>

Playerを追いかえるPropを作成するそうです。

UEだとMonsterがPlayerを追いかける実装がありますが、それはNav MapやAIなどを使用したりして結構複雑です。

これはぱっと見ですがかなり単純な仕組みでPropがPlayerを追いかけているようです。

<Creating Your Prop>

Content FolderにPropsを追加します。

この中にBlueprint Classを作成します。

Content BlowerをClickしてBlueprint Classを選択します。

すると以下のBoxが表示されるのでBuilding Propを選択します。

以下の新しいBlueprintが作成されます。

名前をFollows Playerと変更します。

Double Clickして中を開きStatic Meshを追加します。

次にFab Alpha Marketplaceに言って以下のAssetをDownloadします。

え?

何これ?

UEのQuixel Bridgeみたいなものなの?

Downloadしたら先程追加したStatic MeshのStatic Meshに追加します。

結果です。

Scaleを変更します。

Compileを押してSaveします。

<Creating Verse Device>

Verse Deviceを作成します。

VerseからVerse Explorerを選択します。

画面ではBuild Verse Codeを選択していますが、Verse Explorerを選択します。

今ではすっかりお馴染みになりましたが、以下のBoxが表示されます。

File Nameを右Clickして以下のBoxを表示させます。

そしてその中からAdd New Verse File to Projectを選択します。

以下のBoxが開くのでDevice NameにProp_Follows_Player_Deviceと打ちます。

そしてCreate Buttonを押します。

Verse Explorerに戻ると先程作成したFollow_Player_Deviceが追加されています。

これをDubble ClickしてVisual Studio Codeを開きます。

<Get Editable Reference to Prop>

先程作成したBlueprintのPropを指定するためのObjectを作成します。

名前はFollowerPropでClassはCreative_propです。

Device関連のClassなのでcreative_prop{}で初期化しています。

後、UEFNで編集するので@editableも追加しています。

UEFNに戻り以下のところからBuildします。

そしてCreative Devices Folder内のprop_followers_player_deviceをLevel上に配置します。

更に先程作成したBlueprintもLevel上に配置します。

そうしたらLevel上のprop_followers_player_deviceを選択して以下のFollowsPropにLevel上に配置したBPをセットします。

<Create Follow Player Function>

これでVS CodeからこのBPに特定の命令を追加する事が出来るようになりました。

まずPlayerを追いかける関数を作成します。

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

名前はDo Follow Player()です。Return ValueはVoidです。Parameterは無しです。

SpecifierにSuspendが追加されています。

関数の作成にSpecifierを使用するのは初めてです。

検索して調べてみると公式のSiteにSpecifiers and Attributes [7]がありました。

Suspendsは以下のように解説されていました。

成程、常にPlayerを追いかける関数はAsyncである必要があるのか。

この辺は実装する時に<Suspend>を外したらどうなるかもCheckします。

<Get Reference to Players / All Players>

このFunction内でPlayerを追いかける命令を書くためにはPlayerのReferenceを得る必要があります。

以下に示した様に、Character Moduleを追加します。

今度はFunction内に以下の実装を追加します。

まずずっとPlayerを追いかけるためloopにします。

おお。

VerseでLoopを使用するのは初めてです。

これも調べます。

公式SiteにLoop and Break [8]がありました。

軽く読んだんですがまず以下の説明がありました。

そりゃそうだ。

Loopを使用する関数にはSuspendを指定するかBreakやReturnでLoopを終了する手段を追加する必要が有る訳です。

うーん。

納得。

次のIf節内の実装ですが

InstanceであるPlayerListを宣言しています。

PlayerList内にはPlayerのListが保持されるようになっているみたいです。

がPlayerListがどんなClassから作成されたのかは不明です。

GetPlayerspace()はおそらく今Playerが遊んでいるLevelの事を指していると思われます。

この空間にいるPlayerを全部集めて、PlayerListに保持させています。

普通は一体しかいませんが、Multiで遊んでいる時は複数のPlayerがいる場合もある訳です。

実装の続きです。

FortniteCharacterを追加しています。

PlayerListにセットされている一番最初のInstanceからFortCharacterを取り出しています。

これでFortnite CharacterにPlayerのReferenceを得る事が出来ました。

Errorを消すためにElseにBreakを追加します。

If節の()内の書き方についてですが、これってAndになっているでしょうか?

Andじゃないとおかしな事になる場合があるからAndにはなっているんでしょうね。

でもOrで指定したい場合はどうするんでしょうか?

うーん。

調べます。

公式Siteのif [9]には以下の例が紹介されていましたが、

If節の()内の書き方を説明している箇所は無かったです。

まあAndを使用しているんだから、Orも使用出来そうではあります。

何も指定しない場合だとAndになるんでしょうね。

<Get Player Position Move To() Function>

今度はPlayerの位置を保持するための実装を追加します。

まずVector Classを使用しますので以下のModuleを追加します。

そしてVector3 ClassからObjectを作成します。

名前はPlayer Positionにします。

保持する値は上記の方法で得ます。

GetTransform()関数でTranslation、Rotation、そしてScalingの3つ値を得ているはずです。その後のTranslationで位置を指定しています。

次にFollowerPropの位置をPlayerPositionに移動させるようにします。

以下の実装でします。

Move to()関数の最後の値はScaleではなく移動にかかる時間だそうです。

これでこの関数は完成です。

最後にこの関数をOnBegin()に追加します。

これで完成です。

UEFNに戻ってBuildをします。

<Final Result>

テストします。

UEFNに戻ってBuildをします。

そしてGameを開始します。

Propが追いかけて来ました。

以上です。

7.2 Easily Make Anything Follow Your Player! UEFN/Creative 2.0 [6]を勉強した感想

まずFab Alpha Marketplaceと言うのが有るのを知りました。

UEのQuixel Bridgeとどう違うんでしょうか?

Verse言語に関してですが、今回は結構勉強になりました。

Loopの作成方法とかIf節の()内の指定方法など、地味に重要な話とか、Loopを使用する関数にはSpecifierでSuspendを指定する必要があるなどです。

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

7.3 Mathew Wadstein氏のTutorialについて

Mathew Wadstein氏が2年ぶりに動画を更新してました。

何と2年前にEpic Games社に雇われて専属でTutorialを作成していたそうです。

そして先日の大量解雇でMathew Wadstein氏も解雇されてしまったそうで、これからはYouTubeでTutorialを作成する生活に戻るそうです。

この動画では、何とEpic Games社で働いていた時にUEFNのTutorialも作っていたと言っていました。

以下のTutorialはMathew Wadstein氏が作成したものだそうです。

探したらありました。

https://dev.epicgames.com/community/learning/courses/Yl6/fortnite-your-first-hour-in-uefn/yXkB/fortnite-your-first-hour-in-uefn-overview

その前のPageに行ったら

Learning Library [10]というPageがあって

こんなにたくさんのTutorialがありました。

ここのCapturing Realityに

PhotogrammetryのTutorialがいっぱいあります。

全然知らんかった。

結構知りたい事を解説していそうなTutorialがあります。

これは後でじっくり見る事にします。

8. DirectX12の勉強

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

今週から「3.4 Error対応」を勉強していきます。

8.1.1 「3.4 Error対応」を勉強する

まず実際に今のProjectを実行してみます。

どんなErrorになるのかの確認です。

真っ黒な画面になりました。

もう何回か試してみます。

何回やっても真っ黒な画面でした。

8.1.2 「トラブル原因の究明」を読む

DirectX 12にはDebug Layerと言うInterfaceがついているそうです。

これについて調べます。

公式SiteにDebugging and diagnostics with Direct3D 12 [11]がありました。

あれ、これしか書いていません。

このPageに飛びます。

GPU-based validation and the Direct3D 12 Debug Layer [12]です。

このSiteを読んでみます。

以下の2つの節の感想だけまとめておきます。

<Purpose of GPU-based validation>

Debug Layerは以下の目的で使用されるそうです。

それなりにここに書かれている内容が理解出来ますね。

今までの勉強の成果ですね。

<Debug Output>

Outputの例が載っていてそれについて解説しています。

流石にこれは意味が分かりません。

<Debug Layerを有効化する>

Sample Codeを見ると以下のように実装されていました。

教科書と同じですね。

更にDebug LayerをEnableするための実装が以下のようになっていました。

これも教科書と同じです。

実装方法そのものには特に疑問もないのでこれを実装してみます。

8.1.3 「トラブル原因の究明」を実装する

あれ、自分のProjectを見たら既に実装されています。

何で?

前のCodeを実装する時に次いでにCopyしたのかもしれません。

調べます。

2023-02-26のBlogに何故Enable Debug Layerの実装を追加したのかの詳しい経緯が書かれていました。

このBlogを読むとDebug Layerの実装は既に終わっています。

以下に示した様にDebug LayerをEnableするための実装も既に追加されていました。

となるとOutputが気になります。

実際にErrorの原因をOutputしているのでしょうか?

以下の当たりのCommentがそれっぽいです。

試しにEnable Debug LayerをComment Outして

実行してみました。

上記の部分の表示が消えました。

あってますね。

最初のErrorの内容だけ読んでみます。

まずCommand QueueのExecute Command ListsがErrorになっていると言っています。

Command ListのClear Render Target Viewの使用に関してですが、Resourceの状態がInvalidになっているので、ResourceをRender Targetとして使用出来ません。

と書かれていますね。

教科書にはResourceが完了していないのにResetしている。という話が書かれていますがこれは私のProjectのErrorでは述べられていませんね。

うーん。

次のErrorも見てみます。

Command AllocatorのResetに関するError

Command Allocatorが前のAllocatorが終了する前に実行されています。

と書かれていました。

おお。

これは教科書の言っている内容とだいたい同じです。

うーん。

確認取れました。

Debug Layerが実装出来たので今週はここまでにします。

8.2「Direct3D 12 ゲームグラフィック実践ガイド」の勉強

先週はEvent Objectの勉強をして終わったんでした。

8.2.1 先週の復習

先週のBlogを読み直したんですがEvent Objectを完全に理解した訳では無かったです。

もう一回勉強し直します。

以下にEventの設定を示します。

これ見るとInitial StateがFalseになっています。

Eventが終了した時にSignalを発すると考えられます。

以下の結果を見ると

Thread17880だけがMain Threadが作業を終えるより先に生成されたのでEventを待っています。

残りのThreadはMain Threadの作業が終わってSignalを発してから作成されたので直ぐにBufferに書き込んで終了しています。

Thread17880もMain ThreadのSignalを受け取ったらBufferを読み込んでいます。

次の例です。

今度は2つのThreadがMain Theadより先に生成されています。

うん。

今度こそ理解しました。

8.2.2  2023-09-11のBlogを見直す

ここで最初にEventを実装した2023-09-11のBlogを見直します。

「2.3.6 Fenceの作成」を実装していました。

以下のように述べていました。

これは何を言っているのか不明ですね。

一回、教科書を読み直します。

教科書を読み直しましたが何故、Fence EventがIncrementするか不明です。

DirectX 12の魔導書」の「3.4.2 Fence」ではCommand QueueからSingalを発してFenceValの値をIncrementしていました。

これは「DirectX 12の魔導書」のFenceを先に勉強してからこっちを勉強した方が良いですね。

来週から「DirectX 12の魔導書」だけ勉強して「3.4.2 Fence」まで先に終わらせてしまいます。

その後で、ここの勉強に戻る事にします。

9. まとめ

特になしです。

10. 参照(Reference)

[1] FreetimeCoder [FreetimeCoder]. (n.d.). Unreal PCG Tutorial. YouTube. https://www.youtube.com/playlist?list=PLA03OHAaHgYpo0enf8p-2oEpja3grLOKZ

[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] William Faucher. (2022, November 3). Capturing Lofoten in Unreal Engine 5 [Video]. YouTube. https://www.youtube.com/watch?v=ifryjffUJT8

[4] Earth and Space Sciences X. (2015, October 30). Geology 14 (The Ocean Floor) [Video]. YouTube. https://www.youtube.com/watch?v=W2Dh7-qLdSc

[5] FreetimeCoder. (2023, March 29). Unreal 5.2 Preview PCG Tutorial - Part 8 - Jungle Breakdown [Video]. YouTube. https://www.youtube.com/watch?v=SCDZ8kobv1M

[6] Pi Equals Three. (2023, March 31). Easily make anything follow your player! UEFN/Creative 2.0 [Video]. YouTube. https://www.youtube.com/watch?v=J7f2zHJbcUg

[7] Specifiers and attributes. (n.d.). Epic Developer Community. https://dev.epicgames.com/documentation/en-us/uefn/specifiers-and-attributes-in-verse

[8] Loop and break. (n.d.). Epic Developer Community. https://dev.epicgames.com/documentation/en-us/uefn/loop-and-break-in-verse

[9] If. (n.d.). Epic Developer Community. https://dev.epicgames.com/documentation/en-us/uefn/if-in-verse

[10] Epic Developer Community Learning | Tutorials, courses, demos & more – Epic Developer Community. (n.d.). Epic Developer Community. https://dev.epicgames.com/community/fortnite/learning?source=epic_games&types=tutorial,course&applications=all_uefn&languages=en-us

[11] Stevewhims. (2021, December 30). Understanding the D3D12 Debug Layer - Win32 apps. Microsoft Learn. https://learn.microsoft.com/en-us/windows/win32/direct3d12/understanding-the-d3d12-debug-layer

[12] Stevewhims. (2021, December 30). GPU-based validation and the Direct3D 12 Debug Layer - Win32 apps. Microsoft Learn. https://learn.microsoft.com/en-us/windows/win32/direct3d12/using-d3d12-debug-layer-gpu-based-validation