UE4の勉強記録

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

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

1. 今週の予定

今週も予定を見直す時間がありませんでした。ぶっつけ本番でやっていきます。

何時も通り以下の内容を勉強する予定です。

  • 映像作品としてのLevelの作成
  • AIの勉強
  • Materialの勉強
  • Nvidia Omniverseの勉強
  • Gaeaの勉強
  • 4の新しい機能について
  • Houdiniの勉強
  • UEFNの勉強
  • DirectX12の勉強

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

2.1 ドラゴンを飛ばす

先週の最後に以下のように書いてありました。

取りあえず、WalkのAnimationの後にFlyを追加してみました。

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

www.youtube.com

Animationの繋ぎの部分が不統一です。

これってどう直すんでしょうか。

繋ぎのAnimationとか作成してそれを使用するんでしょうか。

そいう言えばUE5.4から新しいAnimationの機能が追加されました。

こっちはどうやって使用するのかまだ勉強してなかったです。

今週はこの辺を調査する事にします。

2.2 2つ以上のAnimationを混合して追加する

そのものズバリのTutorialがありました。

これを勉強する事にします。

UE5 Blending Animation Sequences in Sequencer for Cinematics. [1]を勉強する。

なんとこの動画30分もあります。

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

一応、以下に示しましたが、

登録者数と再生回数の関係やコメントを見る限り、かなり良いTutorialのようです。

信頼して勉強を開始して大丈夫でしょう。

MixamoからAnimationをDownloadしています。

Character Tabを選択してRacerと打ちました。

ここまでまとめてあれですが、何も全部勉強する必要は無いですね。

Animationの繋ぎをどうしているのかだけ勉強します。

全部、動画を見ました。

大体何をしているか理解しました。

Animationのつなぎ方だけ以下にまとめます。

以下のように2つのAnimationのSequenceが並んでいます。

2番目のAnimationを選択した状態で右Clickします。

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

Match With This Bone In Previous Clipを選択し合わせたいBoneを選択します。

これで最初のAnimationのBoneの位置と2番目のAnimationのBoneの位置が一致するようになるそうです。

2つ目のTechniqueです。

一番目のAnimationに2番目のAnimationを重ねます。

これで2つのAnimationがBlendされるそうです。

更に完成したAnimationを別なAnimation Sequenceとして取っておく方法も紹介していました。

生成したAnimationを持つCharacterを選択した状態で右Clickすると以下のBoxが表示されます。

Bake Animation Sequenceを選択して指定された手順を踏むと

新しいAnimationが生成されます。

大体こんな感じでした。

2.3 UE5.4から追加された新しいAnimationについて調査する

Motion Matching Animationの事でした。

検索すると既に沢山のTutorialが公開されていました。

まずお勧めの一番上に出て来たTutorialです。

どっちも聞いたことがない著者です。

Tutorialの時間が10分前後なんで、最初に勉強するには丁度いいかもしれません。

こっちは20分位ですね。

PrismaticDev氏のTutorialは前に何度か勉強した事があります。

しかしこれTutorialなんでしょうか?

こっちは一時間もあるTutorialですね。

もう一個の方はUnreal Engineで紹介されている動画でTutorialではなさそうです。

PinkPocketTV氏のTutorialがこんな所にありました。

8分だし見るだけ見ておくか。

最後にお勧めでは出てこなかったんですが、For YouのところでSmart Poly氏のTutorialが紹介されていました。

どうしたんでしょうか。

Smart Poly氏のTutorialって大抵最初に紹介されてたのに。

お勧めにすら紹介されなくなってるなんて。

一個だけ見る事にします。

*NEW* How to Use Motion Matching in Unreal Engine 5.4 [2]を見ます。

流石にお勧めの一番上に表示されるだけあって分かり易かったです。

これ見て分かったのはGameのAnimationにはこの技術は必須ですが、映像の撮影には直接は関係ない機能という事です。

はい。

のでこれはまあ時間があったら「7. UE5.4の新しい機能について」で勉強する事にします。

2.4 「2.2 2つ以上のAnimationを混合して追加する」で勉強したBlendを試してみる

本格的に試すのは来週やる事にしますが、一寸だけ試してみます。

まずはMatch With This Bone In Previous ClipsからRootを選択してみました。

結果です。

次のFrameです。

前よりはましですが、足の位置は一致していません。

代わりに右の上腕を一致させてみます。

こうなりました。

FlyとWalkの間のAnimationが別にある気がして来ました。

一寸そっちを調べます。

ありました。

ANIM_DesertDragon_TakeOffと言う名前のAnimationです。

Take offするまでのAnimationです。

こっちを使用します。

結果です。

www.youtube.com

足の位置はそれなりに一致してそうです。

うーん。

残りは来週やる事にします。

一応、今週の問題の解決のヒントは見つかったようです。

3. AIの勉強

3.1 先週の復習

先週のBlogを読み直します。

 Is it a bird? Creating a model from your own data [3]の「Step 2: Train our model」のData Blockを作成するところまでやっていました。

Data BlockのそれぞれのMemberについて復習しています。

Colabの仕組みが少しだけ分かって来ました。

PipでInstallしたLibraryは毎回Installし直す必要があります。

更に実際に使用するLibraryに関してもSession内でもう一回Importする必要がある事も判明しました。

3.2 今週の勉強内容

今週の作業はIs it a bird? Creating a model from your own data [3]の「Step 2: Train our model」の最後の部分である以下の実装を追加するだけです。

しかしこの部分は最初のDeep Learningを実行するためのCodeなので、本当に理解した上で実装したいです。

ので先に今までの実装を復習してから実装します。

まず以下のLibraryをInstallします。

これでDuckDuckGoを使用した検索が出来るようになりました。

次に以下のLibraryを使用出来るようにします。

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

その後に以下のCodeを実装します。

うーん。

この部分の実装を読んでなかったです。

これを勉強しておきますか。

String型のArrayであるSearchesにForest、Birdを追加します。

動的に型を指定するProgramming言語であんまり勉強した事ないんで、こういう解釈であってるのか不明です。

このPath()関数、忘れました。

ここに記載されている名前のFolderのAddressを取って来るんでしたっけ。

調べます。

と思ったんですが、面倒なのでCopilotに聞いて済ませてしまいました。

まずPath() 関数ですが以下の説明で言っているように

Path Objectを生成します。

このPath ObjectにはFileやFolderのAddressが記録されています。

つまり以下の実装の場合、

Path ObjectであるpathにはBird_or_notと言う名前のFileかFolderのAddressが記録されている事になります。

ここで疑問なんですが、

もしBird_or_notと言う名前のFileかFolderが無い場合はどうなるんでしょうか?

そのFileかFolderを生成してしまうでしょうか?

Time LibraryからSleep()関数をImportします。

SearchesのFor Loopです。

うーん。

分からん。

調べます。

分かりました。

まずdestはPath型のObjectだそうです。

そして

と言う意味でした。

ここで使用されているoはFor Loopのoでした。

DestのAddressにFolderを生成しています。

Exit_ok=True, parents=Trueの意味が不明です。

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

成程。

分かり易いです。

Search_images()関数の実装は以下のようになっています。

そして以下のようにPrintされていました。

Oの最初のStringはForestです。Search_images()関数の最初のParameterであるTermはforest photoになるはずです。

これは納得出来ます。

しかしfの意味が不明です。

Print(f”Serching for ‘{term}’”)のfの意味が分かりません。

F Stringというのがあるのか。

知らんかった。

うーん。

この説明はあんまり分かり易いとは言えないですね。

要は{term}を決められた文字に変換してくれるのがF Stringだそうです。

うーん。

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

Blogを見直してみます。

2024-07-22のBlogの「3.3 Is it a bird? Creating a model from your own data [1]の続きを勉強して分かった事と分からない事をまとめる」でしっかり勉強していました。

同じ事の繰り返しになるのでここではまとめませんが、

2024-07-22のBlogの「3.3 Is it a bird? Creating a model from your own data [1]の続きを勉強して分かった事と分からない事をまとめる」で勉強した内容は

全部忘れていました。

読み直したら非常に勉強になりました。

DuckDuckGoで以下の検索をして

そこで表示さえるImageを30枚ほど、以下のFolder内にDownloadしろって意味です。

やっと意味が理解出来ました。

Code全体を見て確認します。

これを

で繰り返しています。

Birdの時はDownloadするFolderは

そんだけでした。

うーん。

結構時間がかかりました。

がやっと意味が通りました。

やっぱりPythonを全く勉強しないでいきなりFast.aiを使用するのは結構負荷がかかります。

まあ、ゆっくりやっていきます。

次に以下の実装を追加します。

DownloadしたImageでImageとして使用出来ないものを省いています。

これも良く見たら知らない関数でした。

Verify_images()関数から調べます。

うーん。

何この文章。

なんかCopilotの質が落ちた気がします。

ここで言っているのはVerify_image()関数がFast.ai Libraryの関数である事だけです。

一行で説明付く事をこんなに回りくどく説明しています。

Image Fileが使用出来るかどうかを確認する関数のようです。

Return ValueはImageのFile NameのListだそうです。

次はMap()関数です。

なんか解答の質が低いと思ったら日本語のSiteを参考にして解答を作成していました。

どうやったら英語のSiteだけを参考にして解答するように設定出来るんでしょうか。

うーん。

Copilot役に立たず。

Google検索に戻ります。

検索してもFailed.map()関数が見つかりません。

はあ。

困った。

突然、思い出したんですがこのCodeは開けないImageを消す機能だったはずです。

うーん。

これ以上の情報が見つからないのでこの関数の調査はいったん打ち切ります。

これはFailedにあるListの数を返してるはずです。

だそうです。

この後にData Blockの実装がありますが、これは先週のBlogで全部勉強したので今回はSkepします。

これで一応、今回追加するCodeに必要な実装の全容が判明しました。

3.3 Is it a bird? Creating a model from your own data [3]の「Step 2: Train our model」の続きを勉強する

まず以下の実装を実行します。

出来ました。

次に以下のCodeを実行します。

結果です。

正常に実行されました。

次に以下のCodeを実行します。

結果です。

なんと今回は4個も開けないFileがありました。

先週は0個だったのに4個は多すぎます。

まあ良いです。

次のCodeです。

実行します。

結果です。

うーん。

正常に作動していますね。

次に今週の山場である以下のCodeを追加します。

しました。

実行します。

結果です。

うーん。

出来てるみたいですね。

教科書の結果です。

なんかよく分からないですが、私の結果はかなり悪いみたいです。

もう今週はAIの勉強する時間が無くなってしまいました。

この結果の解釈やCodeの読み込みは来週勉強する事にします。

4. Materialの勉強

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

YouTubeの動画を作成しながらこれだけの勉強を維持するのは結構無理がある気がして来ました。

量を減らすか、2週間で分けてやるか考える事にします。

5. Nvidia Omniverseの勉強

5.1 今までの勉強内容の復習

今まで何をやっていたのか忘れてしまったので一回整理します。

2024-06-17のBlog

仮想空間を利用したAIの学習方法を勉強したら他のAI専門家に差をつける事が出来る。と書いています。

これがOmniverseを勉強している理由です。

NvidiaのOmniverseにNVIDIA Isaac SimというPluginを入れてTrainingしている事が判明しました。

更にYouTubeにOmniverseのTutorialがそれなりにある事が判明しました。

2024-06-23のBlog

 Setting Up A Project in NVIDIA Omniverse Create Part 1: Getting Started [4]を勉強しています。

確かこのTutorialは最初のInstallの方法が説明されてなかったので別なTutorialを参考にしてInstallしたはずです。

Omniverse Createを勉強しています。

このBlogの後半で、もう一回Omniverseを勉強しています。

ここでやっとOmniverse Isaac SimとOmniverse Createが関係ない事を知ります。

How to Setup Nvidia Omniverse [5]を勉強しています。

ここでOmniverseがUSDを使用する事であらゆるSoftのDataを共有出来る設定になっている事を知ります。

ただしここではOmniverseとOmniverse Nucleusが同じものとして扱っています。

ここでOmniverseのInstall方法を勉強しています。

2024-07-07のBlog

Omniverse LauncherをInstallしています。

これは普通にInstall出来たみたいです。

次にOmniverse NucleusをInstallしています。

これも出来たようです。

ここでNucleusを起動してるようですが、起動出来ているのかどうか確認出来ません。

今、見直すとこの辺がどうなっているのか全く覚えていません。

というか最初から理解してなかったかもしれません。

この後、DriveをInstallしました。

Driveを起動すると以下のようにServerを設定するBoxが表示されるんですが、

Errorになってしまったと書いてありました。

ここからの説明が一寸分かりにくいです。

以下の

を押したら

が表示され

ここにLocalhostと打つとBrowserが開き以下の画面を表示するそうです。

ここに先程のServerのUser NameとPasswordを入力したら

以下のようにErrorになったみたいです。

で、この問題が解決しないので一端ここは諦めて、Omniverse CreateをInstallしました。

Omniverse Createは普通にInstall出来ました。更に起動する事も出来ました。

この後、このBrowserからのLog Inは両方にAdminと打つ事でLogin出来る事が判明します。

更に、Drive Betaの方も普通にServerに追加出来ました。

これで一応、Omniverseを起動出来る所まで出来るようになりました。

今度は、PCを起動するたびにOmniverse Launcherが起動する問題が発生します。

以下の方法で解決しました。

更にDriveもDisableしました。

ふーん。

Driveがどんな機能なのか今もってよく分かっていません。

2024-07-14のBlog

この週はNucleusとDriveの機能について調査する予定でした。

しかし Exploring the NVIDIA Omniverse World, Including IsaacSim [6]がかなり良いTutorialのようなので、急遽このTutorialを勉強する事にしました。

ここに Exploring the NVIDIA Omniverse World, Including IsaacSim [6]の内容がまとめてあるので読み直します。

Omniverse Core Platformsの内容とか全く忘れていました。

これらがOmniverseを構成する6つの要素だそうです。

Nucleusについての解説がまとめられていました。

私の理解はOmniverseのServer化です。

트윅 tweak氏はNucleusはGitのようなSystemを提供しているという説明をしていました。

2024-07-22のBlog

実際のOmniverseのSiteを見ながら先週勉強した内容を復習しています。

Uses CasesのDigital TwinsとRobotic Simulationの勉強をしています。

2024-08-04のBlog

Uses CasesのSynthetic Data GenerationとVirtual Factoryを勉強しています。

以上でした。

5.2 復習して判明した事

Omniverse Driveが何をしているのかが未だに解明出来ていません。

更に트윅 tweak氏の Exploring the NVIDIA Omniverse World, Including IsaacSim [6]の内容をOmniverseのSiteを使用して復習するのも、最初のUser Casesだけしかやってない事が判明しました。

以下の部分をOmniverseのSiteで確認します。

うーん。

無かったです。

この部分は트윅 tweak氏が独自に編集して作成した部分だったみたいです。

Omniverse Driveが何をするのか調査します。

まずCopilotに質問しました。

ええ。

こんな機能だったのか。

NucleusがServerの役割を果たしていると書きましたが、そのNucleusにSaveされているDataとPCで作業している内容に違いが生じる訳です。

それをSeamlessに同じにするのがDriveの役割と言う訳です。

でも私の場合はNucleusを自分のPCで起動させている訳ですが、別にDriveを使用しなくてもSeamlessに内容がUpdateされるはずです。

となるとDriveは要らない機能という事になります。

以下のSiteが参照されていました。

Omniverse Drive (Beta) [7]です。

ここに動画がありました。

うーん。

この動画を見てみます。

LauncherをInstallした後、DriveをLauncherからInstallします。

Installが完成したら、以下の箇所からDriveを開始します。

すると以下に示した様に

LibraryからDrive Betaが選択出来るようになります。

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

この画面は前に見ました。

Add Serverを押しました。

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

Addを押すと以下のような画面になります。

ここまでは良いんですが、

ここからいきなり以下の画面に切り替わりました。

うーん。

これってCreateなの?

この状態でExploreを開いています。

ここにFileをDropします。

以下のようにFileが追加されました。

以下のMarkがSyncがPendingされている事を示しています。

更に左下の部分でもSyncがPendingされている事を示しています。

以下のようにMarkが変化しました。

更に左下の部分の表示も変化しました。

Content BrowserにもImportしたFileが表示されています。

今度はOmniverse Driveがどんな活動をしているのかを簡単に見る方法を説明するそうです。

以下のButtonをClickしてBoxを表示します。

DriveのIconを右Clickします。

ここでLocalhostを選択すると以下のBoxが表示されるそうです。

うーん。

でもさっきFileを追加したのはov-contentだった気がしますが。

あ、このBoxの中にLocalhostとov-contentを選択するところがありました。

ov-contentを選択しています。

今しがた追加したPong.jpgが表示されています。

今度はOmniverse Driveを使用してCreate?内でPhotoshopを使用してTextureを変更する方法を説明するそうです。

以下のゲーム機の画面に使用されているTextureを変更します。

以下のMaterialの

以下のParameterに

このゲーム機の画面に使用されているTextureが指定されているそうです。

このTextureをPhotoshopを使用して開きます。

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

Saveします。

そして以下のExploreの画面に戻ってSave出来てる事を確認しています。

すると以下に示した様にCreate内のGame機の画面も自動でUpdateされました。

以上でした。

うーん。

これって別にUE5でも普通に出来る機能ですよね。

うーん。

よく分からん。

Driveがあると何が便利なのか。

まあいいや。

一応、Omniverse Driveの機能について聞かれたら、ServerとPCのDataをSeamlessに同期してUpdateしてくれる機能。と説明する事にします。

Localhostの場合はExploreに追加したFileを自動でCreateに表示してくれる機能になる訳ですが、これって別に特別なAppが無くても普通に出来ます。

うーん。

今週のOmniverseの勉強はこれくらいで十分です。

来週は久しぶりにOmniverseを起動させてみます。

6. Gaeaの勉強

今週はGaea2.0について調査します。

6.1 Gaea2.0のTutorial

まずGaea2.0のTutorialを探してみます。

以下の3つが見つかりました。

まだこんなもんですね。

Homepageを見てもDocumentationがまだありません。

6.2 Gaea2.0の確認

Quadspinner社のHomepageのFAQに以下のように書かれていました。

つまりGaea1にはもうAccess出来ない訳です。

今更、Gaea1のTutorialを作成する意味はあまりないです。

Community Versionの説明があります。

これを読むと商業利用は出来なくなったみたいです。

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

以下の予定が終わりました。

今度は何を勉強すべきでしょうか?

今週は次に何を勉強すべきかを検討します。

7.1 次に何を勉強すべきか

以下の事を考えています。

  • UEのPCGの勉強をする
  • Motion Matching Animationの勉強をする

うーん。

やっぱりUEのPCGの勉強をするべきか。

もしくはこの項目は一端終了するのもありかもしれません。

兎に角、今は色々な事に手を出し過ぎてまとまりが無くなってしまっています。

現在、1週間で以下の内容をやっています。

  1. 映像作品としてのLevelの作成
  2. AIの勉強
  3. Materialの勉強
  4. Nvidia Omniverseの勉強
  5. Gaeaの勉強
  6. 4の新しい機能について
  7. Houdiniの勉強
  8. UEFNの勉強
  9. DirectX12の勉強

多すぎます。

7つまで削れたら適量になります。

  1. 映像作品としてのLevelの作成
  2. AIの勉強
  3. Nvidia Omniverseの勉強
  4. Gaeaの勉強
  5. Houdiniの勉強
  6. UEFNの勉強
  7. DirectX12の勉強

Materialの勉強とUE5.4の新しい機能の勉強を削りました。

これで7つになりました。

これなら可能です。

Materialの勉強もなんか進歩してないし、しばらくお休みしても良いかもしれません。

うん。来週からこのScheduleで勉強する事にします。

7.2 Sequencer Editor [8]を勉強する

<Playback Controls>

これを勉強すれば一応Sequencer Editor [8]の勉強は全部終わります。

来週から「7. UE5.4の新しい機能について」の勉強はお休みするので丁度いいです。

以下の部分の操作方法を勉強します。

これは既に大体は理解しています。

知らないIconだけ調べます。

録画する機能があったみたいです。

でも使用しないと思われるので次に行きます。

このIcon、何度か間違えて押してStart Timeを変更してしまった事があります。

これは押さない事にします。

そうすれば問題起きないでしょう。

AnimationをBlendするTutorialで、Blendがしっかり出来ているのかを確認するために、コマ送りで確認していましたが、このIconを使用していました。

Selection Rangesで指定した範囲をLoopするかしないかを指定するためのIconです。

使わないと思われます。

はい。

これで一応、Sequence Editorの使用方法は全部勉強しました。

7.3 Cine Camera Actor [9]を勉強する

今週は以下のCine Camera Scene Capture Pluginを勉強しようと思っていたんですが

これはPluginで直接、Cameraとか関係ない機能でした。

となるとCine Camera Actor [9]の勉強も今週で終わりです。

丁度よく全部終わりました。

8. Houdiniの勉強

8.1 先週の復習

Rick Banks氏のCastle Wall ToolのTutorialの勉強が終わったのでどんな勉強をしたのかを簡単にまとめました。

この中でProceduralなWallを作成するために必要な最低限の基礎は以下の4つである事が判明しました。

そして最後に以下の文章を残していました。

今週からこの辺を勉強していきます。

8.2 VertexのためのPointを生成する

今週はこれを勉強します。

Houdini 19 - Wall Tool 02 [10]の内容で、2023-11-05のBlogで勉強しています。

2023-11-05のBlogを見ながら復習していきます。

まずGeometryノードを配置して

そのGeometryノード内で実装を組んでいます。

まず以下の形状を作成するところまで勉強します。

以下の実装を組む事でこの形状を作成しています。

しかしこの実装でどうしてこの形状が生成出来るのか理解していません。

それぞれのNodeを復習していきます。

まず新しいProjectを作成します。

Houdiniを開きました。

Fileを開きNew Projectを選択します。

設定は以下のようにしました。

Acceptを押しました。

GeometryノードをNetwork Paneに追加しました。

Geometryノードを開きます。

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

LineノードのParameter Paneは以下のようになっていました。

Scene Viewに表示されている画像です。

Pointは表示さえていません。

表示させます。

以下のIconをEnableして

Pointを表示させました。

ParameterをいじってPointの数を増やしてみましょう。

Pointの数を5にしました。

結果です。

Pointの数が5個になりました。

今度はLineの向きを横にします。

結果です。

Lineの中心を原点に合わせるための実装を追加します。

2023-11-05のBlogでは以下のような実装をしていました。

これって

0(原点)- Lineの長さ/2

を計算しているだけですね。

LengthをDrag and Dropしてこの場所に落とすと

以下のようになります。

つまりこれがLineの長さを表すCodeです。

この長さを半分にして、0(原点)から引けば

-ch("dist")/2

になります。

それだけです。

CopytoPointノードを追加します。

2つのLineノードの結果をInputしました。

結果です。

これはLineWidthノードの

を以下に示したLineHeightノードの

それぞれのPointで再現したものです。

うーん。

成程。

でもこれ以外の方法でこれと同じPointを生成する事は出来そうです。

この後、Resampleノードを追加しています。

そして以下のようなImageを作成しています。

でもこのようなImageを作成するだけなら

のPointsの数を30に増やすだけで

以下のように生成出来ます。

つまりResampleノードをLineHeightノードの下に追加する理由は単にLineの数を増やす以上の理由があるはずです。

これは来週、調査する事にします。

CopyToPointノードの

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

これも一応、読んでみたんですが複雑すぎて理解出来ませんでした。

今回はこのNodeのParameterを理解するのはPassします。

しばらくの間、Houdiniの勉強はこんな感じでやっていきます。

今週のHoudiniの勉強は以上です。

来週はResampleノードを使用する理由について調査します。

9. UEFNの勉強

9.1 前回の復習

先週はUEFNの勉強はしませんでした。

先々週のBlogを見ると以下の内容を勉強していました。

全体のCodeが何をしているのかを簡単に解説していました。

最後に以下のように書いていました。

今週はこれをやる事にします。

9.2 npc_behavior.verseのDefaultで生成されるCodeの勉強の続き

どこのDocumentを見るとそのCodeの解説が見れるのかを整理します。

まずModuleの部分です。

これらのModuleの機能については普通に検索したのでは表示されません。

公式SiteであるVerse API Reference [10]に移動してそこから人力で検索する必要があります。

このSiteに以下の項目があります。

ここから人力で検索します。

/Fortnite.com/AIを検索します。

ありました。

これをClickするとAI ModuleのPageに飛びました。

特に有用な情報は載っていませんでした。

これではAI Moduleがどんな機能を担当しているのか全く分かりません。

以下のようにCodeを変更してAI Moduleを使用出来ないようにしました。

結果です。

ここでErrorになっているCodeをみれば、どこでAI Moduleが使用されているか判明します。

以下の箇所でErrorになっています。

npc_behavior ClassがAI Module内でDefineされているみたいです。

CursorをNpc_Behaviorに合わせると以下のCommentが表示されました。

Npc_Behavior ClassがAI Module内で定義されているのは間違いないです。

先程のAI ModuleのPageに戻ると以下の記述がありました。

npc_behavior classを開いてみます。

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

Memberは無いそうです。

代わりに以下に示したClassがあるそうです。

OnBegin()関数とOnEnd()関数があるの。

Codeで確認したらOnBegin()関数が全部Errorになっていました。

うーん。

OnBegin()関数はnpc_behavior classから呼ばれていたのか。

npc_behavior classを右Clickして以下のBoxを表示しGo to Definitionを選択しました。

以下のPageが開きました。

うーん。

こっちは生のCodeなのか。

説明している内容はAPIと同じですが、いきなりこっちを見て理解出来たら、わざわざAPIを検索して調べる必要は無くなりますね。

今度は以下のDebug_Draw_channel Classについて調べます。

先々週のBlogには

とまとめられていました。

今週はもう少し深堀して調べます。

公式Siteのdebug_draw_channel class [11]には以下のように書かれていました。

後、このClassにはMemberが存在しないと書かれていました。

うーん。

じゃこのObject何の役にも立ってないじゃないですか。

要らないんじゃないでしょうか?

消してみました。

以下のCodeがErrorになりました。

確かにここで使用していました。

今度はDebug_Drawについて調査します。

検索したら以下のSiteがありました。

ああ、これか。

これを使用するのにDebug_Draw_channel Classが必要なのか。

Debug Your Game with Debug Draw [12]を勉強する事にします。

9.3 Debug Your Game with Debug Draw [12]を勉強する

そう言えばこのDebugの実装方法をどこまで勉強したのか覚えていません。

Blogを読み返して復習してから勉強する事にします。

2024-07-07のBlogで以下のようにまとめていました。

なんとここで勉強していました。

全く覚えていませんでした。

何で?

と思ったらこの後はParameter用のConstantを何個か作成しただけで

終わっています。

そしてCommentとして

と書いていました。

これで終わっています。

成程。

このTutorialからDebug_Draw_channel Classについて学べる事は0だった訳だ。

それじゃ、これからDebug_Draw_channel ClassについてDebug Your Game with Debug Draw [12]で勉強します。

<Enable Verse Debug Draw>

まずVerseで描いたShapeがLevel上に表示されるように設定を変更するそうです。

以下の手順で行うそうです。

これは来週、実際に試してみます。

<Draw Your First Debug Shape>

ここでは実際にShapeを生成する方法がまとめられています。

まず以下のModuleを追加します。

このModuleは調べておきますか。

Verse API Reference [10]を開きます。

Temporary moduleに移動します。

Diagnosticsを選択します。

Class and StructsにDebug_draw_channelがありました。

Tutorialの勉強に戻ります。

以下のCodeを追加します。

このClassからObjectを生成します。

ClassからObjectを生成する時ってこういう書き方でしたっけ。

まだこういう基礎的な所が分かっていません。

Tutorialの解説を読むと

Debug_draw_channelを継承したSub Classを作成している。と書いてありました。

うーん。

そうなの?

次の実装です。

こっちはDebug_Draw型のConstantを宣言していると書かれていました。

Debug_Drawについて調べます。

公式Siteのdebug_draw class [13]です。

Dataに

がありました。

これをParameterとして指定しているのか?

実際のCodeを見ると以下のようになっていました。

うーん。

分からん。

ClassからObjectを生成する方法から復習しないとこの辺が何をやっているのか理解出来ません。

うーん。

今週はこのTutorialを最後までやって来週、こういう所を勉強する事にします。

次の実装です。

Sphereを描いています。

DebugDraw ClassからDrawSphere()関数を呼び出しています。

debug_draw class [13]を開いて確認すると

Functionの項にDrawSphereがありました。

DrawSphereのSiteに移動すると以下のParameterが紹介されていました。

これらはOptionなのでしょうか?

APIを見ただけでは分かりません。

実際のCodeで確認してみます。

と書かれていました。

?がついているParameterはOptionでしたっけ?

これも来週確認する事にします。

これで実行すると以下のようにSphereが表示されるそうです。

この後、DrawSphere()関数以外の関数を使用して色々なShapeを表示させる方法を示していますが、重要ではないのでSkipします。

以上でした。

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

来週はClassからObjectを生成する方法とかParameterをOptionにする方法とかを勉強します。

忘れないように以下にまとめておきます。

結局全部だった。

来週は、この節を読み直しながらClassからObjectを生成する方法などを復習する事にします。

10. DirectX12の勉強

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

10.1.1   SwapChain | D3D12 Beginners Tutorial [D3D12Ez] [14]の次の10分を実装する

DXGI_SWAP_CHAIN_DESC1型のStructであるswdの設定を実装します。

しました。

BufferCountの設定であるGetFrameCount()関数がErrorになっています。

Sample CodeのWindow.h Fileに以下の実装がありました。

これをCopyして貼り付けます。

Errorが消えました。

一応、すべての設定がTutorialと同じになっている事を確認します。

<WidthとHeight>

Tutorialの値と同じです。

<Format>

DXGI_FORMAT_R8G8B8A8_UNORMが使用されています。

Tutorialと同じ設定です。

<Stereo>

これもTutorialと同じです。

<SampleDesc>

これもTutorialと同じでした。

<Buffer Usage>

これもTutorialと同じでした。

<Buffer Count>

ここは以下に示した様にTutorialでは2になっていました。

うーん。

それでさっきErrorになったのか。

もうFrameCount()関数は実装してしまったし、あえて2に戻す必要も感じないので、このままにしておきます。

<Scaling>

これもTutorialと同じでした。

<Swap Effect>

これも同じです。

<Alpha Mode>

同じです。

<Flags>

同じでした。

設定が違っていたのはBuffer Countの値だけでした。

10.2 「DirectX 12の魔導書」を勉強する

先週勉強した「5.1 DirectX12におけるTexture」には特に実装する内容はありません。

次の節を勉強します。

10.2.1 「5.2 Vertex情報にUV情報を追加する」を勉強する

Sample Codeを開くとChapter05は二つありました。

うーん。

最初の方のMain.cppを開き実行します。

Errorになりました。

何で?

Sample CodeがErrorになるの?

Errorの原因を見たら以下のように表示されていました。

成程。

DirectXTex.hをIncludeしてないからか。

これをIncludeするのは確か5章の最後でやっていたはずです。

確認します。

「5.13 d3dx12.h(CD3DX~)の導入」を見るとd3dx12.hをGitHubからDownloadしてInstallしています。DirectXTex.hではありませんでした。

でも解説を読むとDirectXTex.h内にd3dx12.hがあると書いてあります。

多分、ここでInstallすれば良いんでしょう。

DirectXTexはNuGetであるようです。

CopilotにDirextXTexのInstall方法を聞いてみました。

NuGetを利用する方法です。

NuGetを利用しない場合のやり方も紹介されていました。

NuGetを利用してDirextXTexをInstallしてしまいましょう。

Copilotの指示通りにやってみます。

Projectを選択して以下のBoxを開くと

Manage NuGet Packages..がありました。

選択すると以下の画面が開きました。

Browseを選択します。

しばらく読み込んでいましたが、以下の表示が出て来ました。

Package SourceがNuGet.orgになっている事を確認します。

なっています。

Search BarにDirectXTKと打ちます。

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

どれをInstallすれば良いんでしょうか?

Copilotの説明では

と書いてありました。

うーん。

このProjectはどっちだったけ。

Copilotに色々質問した結果、C++のProjectは全部Win32 Desktop Applicationになるみたいです。

すると以下のPackageが一番近そうです。

Descriptionに以下のように解説されています。

多分これでいけるでしょう。

あ。

駄目だった時のためにNuGetをUninstallする方法を調べておきます。

以下の方法でUninstall出来るようです。

更に以下の方法でUninstallされたかどうかも確認出来るそうです。

うーん。

それでは

をInstallしてみます。

以下のInstall Buttonを押しました。

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

OKを押します。

Outputに以下の表示が現れました。

Successfully Installed…と書かれています。

Install出来たみたいです。

Sample CodeのChapter05のProjectのmain.cppをもう一回開きました。

DirextXTexはInclude出来ていません。

うーん。

何で。

まずDirectXTKがInstall出来たかどうかを確認します。

出来てます。

そしたら後は普通にIncludeすれば使えると書いてあります。

他のTutorial(C#)を見ましたが、Using(C++ならInclude)を使用して普通に使用出来ていました。

うーん。

何で使用出来ないの?

以下の場所にPackageのFolderがありました。

中を見ると以下のFileがありました。

開くと

となっています。

教科書を読んだら「5.11 画像Fileを読み込んで表示する」でDirectXTexのInstall方法が詳しく解説されていました。

ああ、こっちを先に読むべきでした。

今回はDirectXTexのInstallは中止します。

NuGetからDirectXTexのPackageを消しました。

「5.2 Vertex情報にUV情報を追加する」の続きを勉強します。

Verticesは以下のように定義しています。

ここにUV情報を追加します。

そのために以下のような新しいStructを作成します。

当然、Verticesの設定も変更します。

UV情報が追加されました。

最後に以下の実装部分を

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

以上です。

11. まとめと感想

なし

12. 参照(Reference)

[1] 3D Education with JC. (2023, March 11). UE5 Blending Animation Sequences in Sequencer for Cinematics. #UE5 #unrealengine [Video]. YouTube. https://www.youtube.com/watch?v=DN6B7rJ5Mps

[2] Gorka Games. (2024, April 20). *NEW* How to use motion matching in Unreal Engine 5.4 [Video]. YouTube. https://www.youtube.com/watch?v=S4aBd64t-hY

[3] Jhoward. (2022, August 15). Is it a bird? Creating a model from your own data. Kaggle. https://www.kaggle.com/code/jhoward/is-it-a-bird-creating-a-model-from-your-own-data

[4] NVIDIA Studio. (2022, January 8). Setting up a project in NVIDIA Omniverse Create Part 1: Getting started [Video]. YouTube. https://www.youtube.com/watch?v=j-JPMgcyfvI

[5] Architecture Vanguard. (2021, September 27). How to setup Nvidia Omniverse [Video]. YouTube. https://www.youtube.com/watch?v=j4_-yush6pc

[6] 트윅 tweak. (2024, June 30). IsaacSim을 포함하는 NVIDIA Omniverse 세계관 알아보기 [Video]. YouTube. https://www.youtube.com/watch?v=5tNA2lgtqZE

[7] Omniverse Drive (Beta) — Omniverse Utilities latest documentation. (n.d.). https://docs.omniverse.nvidia.com/utilities/latest/ovdrive.html

[8] Sequencer Cinematic Editor Unreal Engine | Unreal Engine 5.4 Documentation | Epic Developer Community. (n.d.). Epic Developer Community. https://dev.epicgames.com/documentation/en-us/unreal-engine/sequencer-cinematic-editor-unreal-engine

[9] Cinematic Cameras 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/cinematic-cameras-in-unreal-engine?application_version=5.4

[10] Verse API Reference. (n.d.). Epic Dev. https://dev.epicgames.com/documentation/en-us/uefn/verse-api?application_version=1.0

[11] debug_draw_channel class. (n.d.). Epic Dev. https://dev.epicgames.com/documentation/en-us/uefn/verse-api/unrealenginedotcom/temporary/diagnostics/debug_draw_channel?application_version=1.0

[12] Debug Your Game with Debug Draw. (n.d.). Epic Dev. https://dev.epicgames.com/documentation/en-us/uefn/debug-draw-in-verse

[13] debug_draw class. (n.d.). Epic Dev. https://dev.epicgames.com/documentation/en-us/uefn/verse-api/unrealenginedotcom/temporary/diagnostics/debug_draw?application_version=1.0