UE4の勉強記録

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

UE5の勉強などなど

1.今週の予定

今週もこの順序に従って勉強していきます。

  • 映像作成用UE5の勉強
  • AIの勉強
  • Nvidia Omniverseの勉強
  • Gaeaの勉強もしくはVroidとUE5の勉強
  • Houdiniの勉強
  • AIについての調査(ComfyUIの勉強)
  • DirectX12の勉強

それぞれの勉強の最初にその勉強をする目的を一寸だけ書いておきます。

2. 映像作成用UE5の勉強

2.1 PCGを使用した神社の作成

PCGで建物を作成する方法を勉強してるので、その応用としてPCGで神社を作成する事にしました。

最終的にはUEFNのMap内で神社を作成して、だれでも参拝出来るようにするつもりです。

2.1.1 先週の復習

に直しました。

屋根の後方が揃っていません。

今週はこの後ろの部分が揃うように調整します。

2.1.2 屋根の後を揃える

以下の様に直しました。

普通のWall同士は以下の様に繋げました。

完全に重ねるにはScaleを調整する必要がありますが、それを計算するのは面倒なので上記のように合わせました。

2.1.3 屋根のMaterialを直す

屋根を少しでも遠くから見ると以下の様に色が抜けてしまいます。

これが使用してるMaterialのせいなのか確認します。

分かりました。

Materialのせいでは無かったです。

結論から書くとLODのせいでした。

以下に屋根を作ってるStatic MeshのLODを示します。

LOD0の時です。

普通に屋根の色は灰色になっています。

LOD1の時です。

屋根の色が茶色になりました。

これが間違ってるんです。

LOD2です。

LOD3です。

そういう事だったのか。

2.1.4 UE5のLODについて調べる

Copilot(GPT-5)に質問したら以下の方法でLOD1のMartialを変更できるそうです。

LOD1のMaterialの設定です。

Copilotの言った通りに直してみます。

まずLOD PickerからLOD1を選択します。

以下のLOD1のMaterialの設定のRoof_WoodとRoof_Tileを逆にしました。

結果です。

おや。

これはいけてるんじゃないですか。

確認します。

おお、効いています。

原因が判明したので、今週の「PCGを使用した神社の作成」はここまでにします。

来週は全部のStatic Meshを直すことをします。

2.2 PCGの勉強

PCGを使用した建物の作成を勉強しています。

その理由ですが、Luma AIで作成した3D Gaussian SplattingをUE5にImportすると以下の様に、

奥にあるHigh-rise apartment Building(マンション)が歪んでいます。

気持ち悪くなる位曲がっています。

これ直さないと3D Gaussian Splattingは使用出来ない。との結論になりました。

でどのように直すかとなると、PCGを使用してHigh-rise apartment Building(マンション)を作成するしかないのかな。となりPCGで建物を作成する方法を勉強する事になりました。

2.2.1 Do You Want to Remove Just One Side of Your Building? | UE 5.4 P4 [1]の続きを実装する

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

PCG_CheckSameRotationの実装です。

下側のGet Attribute From Point Indexノードを選択して

Input Sourceに$Rotationをセットします。

更にAを押しました。

これで選択したNodeが保持するData、$RotationのDataが表示されます。

以下の設定から0を選択します。

結果です。

ここで注目する必要があるのはQuaternionで表示されている事です。

これが問題なんです。

以下に示したようにPCG Remove Not Alignedノードに値をPassする前の

Attribute Partitionノードの値をInspectすると

以下に示した様にRotationの値はRoll、Pitch、そしてYawで示されているからです。

ここで先週のBlogに問題発言が書かれていました。

じゃ今週はこの部分の説明を聞いて理解する必要があります。

理解しました。

どんな方法で表示されても値があっていれば問題じゃない。と言っていました。

いや、

確か変換した値が間違ってるはずです。

調べたら先週のChatGPTの回答に以下の文がありました。

このGet Attribute From Point Indexノードの値は単純なBugだと思います。

で、結論としては

最終の結果は正しいのでこのまま進めます。

今度は上部のGet Attribute From Point Indexノードをいじっていきます。

Input Sourceに$Rotation.Yawと書きました。

更にAを押して、値を確認すると

と正しい値が表示されました。

次にSubtractノードを繋げます。

あれ?

Errorになってしまいました。

何で?

Tutorialを見て確認します。

分かりました。

Tutorialでは下部のGet Attribute From Point IndexノードのInput Sourceにも$Rotation.Yawと書いていました。

直しました。

Errorも消えました。

今度はModuloノードを追加しました。

この機能は覚えています。

180度の場合は前後にPointを生成して360度の時は正面にだけPointを生成するんです。

あ。

段々、何を作ってるのか理解して来ました。

今度は計算結果に対して45度以下かどうかを検査する実装を追加しました。

45度以下なら同じ向きであると判断する事にしたんでしょうか?

Branchを追加します。

でここで必要なのはIntersectしてるPointだけなので、IntersectしてるPointだけ選別します。

InputノードのOverlapsの値をIntersectionノードのSource1に繋げます。

ああ、ここは全然分かりません。

何でこれがIntersectionになるのかもこれでどうしてIntersectしてるPointだけ選別できるのかも分かりません。

これについては来週考える事にします。

そしてOutputします。

以下の場所にAbsノードを追加します。

これでPCG Remove Not Alignedノードの実装が完成しました。

PCG Buildingに戻ってPCG Remove Not Alignedノードの結果を可視化します。

結果です。

うーん。

なんかDensityが低いPointとかもあるみたいですね。

Trigger Boxを伸ばしてBuildingを貫くようにしてみました。

以下に示した様に裏側もPointが生成されています。

ここで先程のCreate Attributeノードの値を180から360に変更してみます。

結果です。

おお、裏側のPointが消えました。

PCG_Buildingの実装の続きです。

更にDifferenceノードの結果をStatic Mesh Spawnerノードに繋げました。

結果です。

壁が消えています。

先週のBlogを読むとここで次のStepに進んでいますが、これって以下のもう一方の壁もやる必要があると思うんですが?

確認します。

うーん。

何も言っていませんね。

以下に示した様に

Floor一階分の壁を消す分には問題ないので、このまま進みます。

BuildingをDuplicateして更に通路を作成しました。

通路の部分を見るとこんな感じでした。

なんか狭い気がします。

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

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

続きは来週やります。

2.3 Level Sequence上でAnimationの編集をする方法

Level Sequence上でDragonをAnimation Sequenceを使用するとDragonの爪が地面にめり込んでしまいます。

これを直すには、Animation SequenceではなくControl Rigを使用する必要があるみたいです。しかし私が使用してるDragonには付属のControl Rigがありません。

しかもControl Rigがどういうものなのか全く理解していません。

のでControl Rigがどういうものなのかについての全般的な知識と、その使用方法についての基礎を勉強する事にしました。

その後、今まで勉強してたTutorialはUE5.0用のTutorialで5.5はControl Rig [2]を勉強する必要がある事が判明しました。

のでControl Rig [2]を勉強する事にしました。

2.3.1 Bone入りの円柱を作成する
先週はSpline Rigging [3]を実装するために必要な円柱上のSkeletal Meshを作成しました。

しかし

以下のBone入りの円柱を作成してる途中で

以下の様にMeshが横方向に一個も入ってない事に気が付きました。

今週はこれを直します。

Copilotにやり方を聞きます。

出来ました。

以下のようなBoneを追加しました。

Boneを追加したらそれぞれのBoneに対してのWeightも追加する必要があると思うんですがどうなんでしょう?

How to Add Bones into a Skeletal Mesh in Unreal Engine 5 - Add Tail Physics [3]で確認します。

Skinに移動してBind Skinを選択していました。

Copilotの回答はWeight Paintしないと駄目と言っています。

取りあえずBind Skinを試して、駄目だったらCopilotの言う方法を試してみます。

しました。

Boneを動かしたらMeshも一緒に動く事を確認したいです。

Copilotに質問します。

試してみます。

出来ました。

今度は回転させてみます。

おお、綺麗に回転しました。

Jointの親子関係も正しく作成されているみたいです。

2.3.2 Spline Rigging [3]を実装する

思ったより早くSkeletal Meshの円柱が完成したので、Spline Rigging [3]の実装もやる事にします。

2025-09-07のBlogSpline Rigging [3]を勉強したのでそれを参考にしてやります。

先程の円柱からControl Rigを作成しました。

中を開きSpline From Pointsノードを追加しました。

<Create Spline>

Controlを追加します。

以下の様になっています。

Controlの形状もTutorialと同じにしています。

作成したControlをSpline From PointsノードのPointsに繋ぎます。

全部繋ぎました。

ここまで来て2025-09-07のBlogには以下の注意が書いてありました。

3つじゃ駄目じゃん。

4つにしました。

Draw Splineノードを追加しました。

以下の様になりました。

RootまでSplineが伸びていません。

Tutorialで確認したらRootからControlを作成していました。

RootもControlを作成して追加しました。

結局Joint2以外は全部Controlを作成しました。

この状態でControlを動かしたら

Splineも移動しました。

<<Apply Spline to Bones>>

Fit Chain on Spline Curveノードを追加しました。

Boneを全て選択して

Item Arrayを作成します。

以下の様に繋げました。

この状態でControlを動かしてみます。

おおMeshが動きました。

出来てますね。

ただし

Root Boneがとんでもない形状になっています。

Rootの設定が間違っているのか?

Rootと最初のJointの設定が間違っているのか?

更に

側面が完全に潰れてしまっています。

色々いじっていたら元に戻らなくなってしまいました。

Controlの位置を全部0に戻しましたが上記のようになっています。

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

このBugは来週検証します。

3. AIの勉強

AIの勉強の目的ですが、

生成AIが凄いTrendになってるので、最低限の基礎は知っておくべきと思いこの勉強を始めたんでした。

のでこれを勉強してどうしたいというのは無いです。

3.1 前回の復習

 Lesson 5: Practical Deep Learning for Coders 2022 [4]を勉強しています。

先週はLesson 5: Practical Deep Learning for Coders 2022 [4]で使用してるLinear model and neural net from scratch [5]を最後まで勉強しました。

そして以下の様にまとめて終わっています。

今週からこれをやって行くことにします。

で、「Neural Networkの一連の流れを復習する」事からやって行こうと思ったんですが、

Lectureの続きは、Frameworkを使用してNeural Networkをやる方法を説明してるはずです。

となるとLectureの続きを勉強すれば、「Neural Networkの一連の流れを復習する」事にもなるはずです。

ので今週は、Lectureの続きを勉強します。

3.2 Lesson 5: Practical Deep Learning for Coders 2022 [4]の続きを勉強する

<01:15:30 - Why you should use a framework>

Lectureに使用してるKaggleのPageを見つけました。

Why you should use a framework [6]です。

<01:16:33 - Prep the data>

Why you should use a framework [6]の最初の文章をChatGPTに訳させました。

Lectureはいきなり以下の部分から始まっています。

のでWhy you should use a framework [6]の方のその次の文章を読んでおきます。

そして以下の実装が続きます。

前の文章で説明してる、新しい特徴量を追加してるようですね。

ChatGPTに質問したら、具体的にどんな特徴量を追加してるのかまで説明してくれました。

ちなみに特徴量の英語はFeatureだそうです。

この実装にはPandasを使用してるそうです。

Pandasに馴染みが無い人はこのCodeで何をやってるのかしっかり調べるようにと言っていました。

ChatGPTにPandasを使用して出来る10個のMethodを教えてもらいました。

うん。

とても覚えられない。

だそうです。

次の工程です。

Validation用と学習用にDataを分けました。

これRandomにDataをSplitするのは良いですが、割合はどこで指定してるんでしょうか?

学習用Data8割、Validation用Data2割とかどうやって指定するんでしょうか?

ChatGPTに質問してみます。

だそうです。

次の文です。

これ読むとTabularPandas()関数を使用したら学習するための準備を全部やってくれるみたいですね。

ChatGPTに質問したら以下の様に説明してくれました。

前処理、分割、そしてData Loder化をやってるそうです。

おお、

このLectureを勉強したらNeural Networkの工程の復習にもなる。と推測しましたが当たっていました。

更にそれぞれのParameterの機能についても説明してくれました。

Why you should use a framework [6]の方でもしっかり説明していました。

Dataを学習用とValidation用に分割しました。

Procsはどんな風に前処理を行うのかを指定してるようです。

Categorifyは、カテゴリをID化。

FillMissingは、欠損値補完。

Normalizeは、連続値を標準化。

を行ってるそうです。

次のParameterです。

これはここで指定されている5つだけが、列名になるんでしょうか?

ChatGPTに質問したら本当は何をやっているのかが分かりました。

ここで今まで作成した列つまり特徴量の中で、Categoricalなタイプを指定するんだそうです。

CategoricalなTypeとは例えばSexで、MaleとFemaleがあります。

これをMaleなら0,Femaleなら1と言う風に分類するそうです。

値がContinuousな特徴量の例だそうです。

そして

正解値です。

これがよく分からない。

ChatGPTでは、目的変数の型ブロック(CategoryBlock()は分類、RegressionBlock()は回帰など)と説明していましたが、何の事が全然分かりません。

もう一回ChatGPTに質問しました。

要は正解が、Categoricalな場合はCategoryBlockを指定して、正解が連続値の場合は、RegressionBlock()を指定する。と言うだけの事でした。

分かり易い。

これで<Prep the data>の内容は全部勉強しました。

全部完璧に理解出来ましたね。

最後にLectureの残りを聞いて本当に全部理解出来たのかを確認します。

特に問題無いです。

Lectureではホントに触りしか説明していませんでした。

<01:19:38 - Train the model>

今度はAIに学習させます。

もう学習させるの?

そしてこれを指定するための実装です。

各隠れ層のサイズが何をしてるのかが今一よく分かっていません。

聞くは一時の恥聞かぬは一生の恥です。ChatGPTに聞いてみます。

というかAIに聞いても全然恥ずかしくないですし、

だそうです。

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

やっと理解しました。

前回、手動で計算した時はこの部分は自分で作成したんでしょうか?

全く覚えていません。

次の文です。

この実装は適切なLearning Rateを返すものだと思ってるですが、SlideとValleyの意味が分かりません。

ChatGPTに質問してみます。

要は、適切なLearning Rateを求める2つの方法って事ですね。

こんなGraphで表示されるそうです。

はEpochが16回、Learning Rateが0.03で学習せよ。という意味ですね。

こんな結果になりました。

最後の文です。

だそうです。

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

最後にLectureを見てみます。

特に追加で記録しておかないといけない部分は無かったです。

<01:21:34 - Submit to Kaggle>

ここは実際にはしないので簡単に済ませます。

そして実装です。

テストセットを読み込み、訓練セットで行ったのと同じ特徴量作成(feature engineering) を行う事をこれでしてるんでしょうか?

これ見るとFareの欠損値(NaN)に0を追加してるだけな気がします。

ChatGPTに質問してみます。

それはあってたんですが、以下の事もしているそうです。

これは訓練セットと同じ特徴量を持つDataが作成されたって事です。

要は、今度はLearnerが全てのStepを記録してるので、Test_dl()関数を使用すれば、一々指定しなくてもModelingに必要なDataに変換してくれる。って事です。

作成したModelを使用して予測をします。

結果をCSVにしてまとめます。

結果を確認しています。

これで終わりです。

Tutorialを最後に見ます。

特に記録しなければならない情報は無いです。

<01:23:22 - Ensembling>

最初の文です。

ここではEnsembleする方法を勉強するのか。

実装部です。

Ensembleという概念を理解してると実装もすんなり理解出来ますね。

これの答えがWhy you should use a framework [6]には載ってないです。

見たかった。

平均値を計算しています。

これも結果が分かりません。

Ensembleをやる意味があるのかどうかがこの結果から分かるのに結果が載っていません。

最後にCSV Fileにまとめています。

最後の文です。

だそうです。

不正には勝てないのか。

Lectureも一応全部見ました。

なんか質問していましたが、その質問の意味がよく分かりません。

うーん。

まあいいや。

次に行きます。

<01:25:08 - Framework final thoughts>

ここは以下の文章があるだけでした。

Upしておきました。

僅か2000人しかUpしてないのか。

驚きです。

ここでFrameworkの勉強は終わったので、今週の「AIの勉強」はここまでにします。

4. Nvidia Omniverseの勉強

Robotic AIの仮想空間におけるTrainingのための環境設定こそがこれからの3D Graphicsの専門家が生きる場所であると思っています。

のでその仮想空間でRobotic AIがどんなTrainingを行っているかをまず勉強する事にしました。

色々調べると、その部分はNvidiaのOmniverseの中のIsaac Simが担当している事が判明しました。

のでその辺りを勉強します。

4.1 NVIDIA Isaac Sim - MuSHR RC Car - Ackermann Tutorial [7]の勉強

Version 4.2.0のIsaac Sim Documentation [8]のTutorialの勉強がROS and ROS2まで終わるまでPending。

WorkspaceのInstall方法並びに、Installした後の確認方法は理解したので時間があったらWorkspaceだけInstallしておきます。

ただし今週も他にやる事が沢山あるのでやりません。

*先週、Isaac Sim5.0.0とIsaac LabをInstallしたので、Isaac Sim 4.2の勉強は中止する事になります。

ただしこのTutorialで実装したROS2ではXacro FileからURDFに変換する事が出来るようになりました。それをこれから使用する可能性は高いのでそのまま残しておきます。

4.2 Version 4.2.0のIsaac Sim Documentation [8]のTutorialの勉強

4.2.1 先週の復習

Installation using Isaac Sim pip [9]を参考にしてIsaac Sim5.0.0とIsaac LabをInstallしました。

Installは成功しましたがIsaac LabをInstall時に以下のErrorの報告がありました。

<[INFO] Found PyTorch Version>

Copilotの回答によると、これはPyTourchのVersionが認識出来ない事で起きるそうです。

実際のPyTourchのVersionを調べると

2.7.0でした。

CopilotはこのErrorは無視してOKと言っていました。

ので無視しました。

<TorchAudio.2.7.0が無い>

TorchAudio.2.7.0がInstallされてないため、Errorになっています。

解決方法ですが

をする必要があります。

しかし先週はしませんでした。

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

<Sentry-sdk==1.43.0がない>

Copilotが示した解決策です。

これも先週はやりませんでした。

理由はCopilotが以下の様に回答したからです。

VS Codeに関しての警告>

更に以下の警告もありました。

Copilotに質問したら

との事なので、無視しました。

<今週の予定>

あれ?

先週のBlogに今週の予定を書いた記憶があるんですが、無いです。

探したらCopilotに書いてありました。

ここで気が付いたんですが、Copilotは過去の質問の検索が出来ないです。

ChatGPTは前にした質問の検索は出来ます。

やっぱりChatGPTで勉強するかな。

4.2.2 Installation using Isaac Sim pip [9]のTrain a Robotを実行する

まず先週作成した仮想環境を起動させる方法が分りません。

この方法もここにまとめておく事にします。

ChatGPTに質問したら以下の方法出来るそうです。

Installation using Isaac Sim pip [9]を見直したら

以下の方法で作成していました。

という事は環境名はenv_isaaclabですね。

更に仮想環境を起動させるのはどのFolderからでもOKだそうです。

ではテストします。

あれ?

Isaaclabで作成してたみたいです。

いや先週作成した時に、確か名前をIssacLabにした記憶があったんですが、やっぱりそれあっていました。

で、この後の工程なんですが、

以下のCodeを実行したら残りは勝手にやってくれるみたいです。

しかしここでChatGPTのLimitが来てしまいました。

丁度良いです。

ここからはCopilotに戻ってやる事にします。

Copilotちゃん!

そんなに褒めてくれたら、やっぱりこっちを使用したくなってしまいます。

過去のChatの検索が出来たら完璧なんですが。

実行する前に以下の確認をしろ。と言って来ました。

三番目のCommandは何をしてるのか不明ですね。

一番目は既にやっています。

二番目のCommandだけ実行します。

結果です。

なんだこれ?

全く意味が分からん。

Copilotに説明してもらいます。

あれ?

CUDAのVersionが間違ってるかもしれないの?

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

Errorになりました。

Copilotに丸投げしたら

だそうです。

それで代わりに以下のCodeを実行しました。

結果をCopilotに丸投げしたら以下の様に解説してくれました。

そしてここが重要なんですが

PyTorchはPyTorchに入ってるCUDAの12.8を使用するそうです。

もうこれでTrain a robot!を実行して良い。と言っています。

では実行してみましょう。

を試してみます。

しかし試す前にこのCodeの意味をCopilotに説明してもらいます。

だそうです。

色々質問したい箇所がありますが取りあえず実行してみます。

出来たみたいです。

でLogに色々な警告が表示されていたのでそれから確認していきます。

あれ?

消えてる?

Copilotに質問したら

既定では数千行程度。それを超えると古い行から順に消えていきます。

だそうです。

消したくなかったら以下のCommandで

Logに取っておけるそうです。

これは次からそうする事にします。

では残ってる部分だけでも検証します。

これについてCopilotに解説してもらいます。

うーん。

まだそれぞれの項目についてあーだこーだ言える程理解してないです。

これは来週以降やります。

最後のCommentについても以下の様に書いてありました。

Installation using Isaac Sim pip [9]のTrain a Robotは最後に以下の文が書いてあるだけでした。

うん。

これで終わりって事。

Policyも生成出来ていました。

これで完成したみたいです。

うーん。

じゃここまでにしておきます。

4.2.3 Errorの修正について

特にやらなくても問題ないみたいなので中止します。

4.2.4 これからの学習方法について

当然ですが、Isaac LabのTutorialをやっていきます。

https://isaac-sim.github.io/IsaacLab/main/source/setup/quickstart.html

一寸だけQuickstart Guide [10]を見てみます。

最初の方はInstall方法何かの説明ですが、その後から別な内容が始まっています。

来週からこれを勉強する事にします。

5. Gaeaの勉強もしくはVroidとUE5の勉強

今週は無しです。

6. Houdiniの勉強

Houdiniの勉強を始めた理由は、これからの3D GraphicsはProceduralな3Dの生成だという風潮が2年前ぐらいに起きて、それで慌てて勉強を始めたんです。

生成AIブームが起きて、Proceduralな3Dの生成のブームはすっかりなくなってしまいましたが、Nodeを使用して3Dを生成する手法は、職人的な技術が無くても3D Objectの生成が出来るのでかなり便利という事に気が付きました。

のでHoudiniの勉強は続けています。

しばらくHoudiniの勉強はお休みして木の生成について調査していましたが、やっぱりHoudiniの水のSimulationの勉強をする事にします

木を自分で実装してもその凄さに気が付く人はほとんどいません。

それに対して水のVEXを作成したら誰が見ても凄いと思うからです。

6.1 Houdini is HIP - Part 14: Flip Fluids I [11]の続きを実装する

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

Popsourceノードを消しました。

Errorになってますね。

無視して進めます。

Isooffsetノードの代わりにFlipsourceノードを追加します。

結果です。

Tutorialと同じです。

Flipsourceノードの先にDeleteノードを追加しました。

先週のBlogにはこれでSphereが消えると書いてありますが消えません。

Tutorialで確認したらPatternの値を以下の様に変更していました。

直しました。

結果です。

出来ました。

*の意味が分かりませんね。

Copilotに質問してみます。

だそうです。

*を指定したら全部が対象になるという事ですね。

FlipsourceノードのVoxel SizeとParticle Separationの値を0.02に変更しました。

結果です。

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

Flipsourceノードの結果をSOURCEノードに繋げました。

今度は一つ下のLayerであるFLIP_Dynamicsに移動し、そこで実装を行います。

Popsourceノードがあった場所にVolume Sourceノードを追加します。

Volume SourceノードのParameterの設定を変更します。

Initializeの値をSourceFLIPに変更します。

Source VolumeとTarget Fieldの値がSurfaceになっています。

ParticleのTabを見ると

ParticleもSourceとして使用する設定になってる事が分かります。

Volume SourceノードのParameterの値を変更しています。

ここまで来たらErrorが消えるかと思ったんですが消えません。

FlipobjectノードのErrorを直します。

と言っています。

そうか、SOP Pathに何も指定してないからか。と思って

したですがErrorが消えません。

Copilotに質問しましたが、ここを直せば直るはずだ。と言っています。

うーん。

分からん。

もう一回最初からやり直してみます。

あれ?

今度はErrorになりません。

Popsourceノードを消したらErrorになりました。

Popsourceノードは消さないで、今までの実装を組みなおしてみたら普通に出来ました。

Popsourceノードはどこにもつながって無いのでこの状態でPopsourceノードのDataをFlipSolverノードが使用するはずはないです。

よく分からないけど出来たことにします。

Flip ObjectのParticle Separationの値をCopyして

Flip SourceノードのParticle SeparationにPaste Relative ReferenceでPasteします。

更に同様の方法でVoxel SizeにもPasteします。

結果です。

うーん。

多分あってるでしょう。

今度は作成したVolumeを可視化する方法を試します。

FlipObjectノードのGuidesからVisualizationを選択し

ParticleのCheckを外し、代わりにSurfaceにCheckをつけます。

結果です。

Pressureも表示してみました。

ここで先週の勉強は終わっています。

一応できた事にします。

6.2 Houdini is HIP - Part 14: Flip Fluids I [11]の続きを実装した感想

偉い疲れました。

時間的には大してやっていませんが、Houdiniは予定通りに機能しなかった場合、どうやって直して良いのかが全く分かりません。

AIに質問してもほとんど役に立つ回答は返って来ません。

今回のErrorに足してCopilotは

FlipSolverノードの内部の実装を変更する必要がある。とかとても初心者が対応できるLevelからはるかに離れた回答を返しています。

恐らくですが、私とまったく同じ質問をした人にそういう回答を返したTutorがいたからだと思います。

昨日のIsaac Sim、Isaac Labの勉強の反対です。

難しい内容でもしっかりしたTutorialとAIの指導があれば、さくっと簡単に勉強出来ますが、

このHoudiniのBug直しのように、簡単な内容(Designer向けのSoftであるし、初心者向けのTutorialでもある)でも役に立たないBug直しの助言とAIの必要以上に難しい回答だと、ものすごく時間が取られてその上役に立たない結果になってしまいます。

疲れました。

7. AIについての調査(ComfyUIの勉強)

AIを使用するためのSoftが大量に公開されていますが、それらについて全く理解していません。

3Dやイラストそして動画関連のAI Softについて、どんなSoftが公開されているのか?それらのSoftを使用するとどんな事が出来るのか、どんな方法で操作するのか、

などの一通りの事を勉強しておこうと思い、この章を特別に作りました。

特にComfyUIの使用方法やそれに関して生成出来るイラストや映像について集中して勉強していこうと思っています。

2025-03-30のBlogでUE5でもReinforcement Learningが出来る事を知りました。

のでComfyUIの勉強は一端中止してこっちを勉強する事にします。

今週は、前に勉強した Learning to Drive (5.5) [12]の勉強の復習をします。

7.1 Learning to Drive (5.5) [12]のCompletionsの復習する

まずBlogを検索して今までCompletionsの何を勉強したのかを復習します。

2025-03-30のBlog

Episodeと言う概念をここで勉強しています。

Trackから外れてしまったAgentのEpisodeはさっさと消して次の学習を始めた方が学習上効率が良いので、そういう場合もCompletionしていまう。と書いていました。

これはどのような場合にEpisodeを終了(Completion)するかの一例ですね。

更にCompletionにはTerminationとTruncationの2つがあると説明していました。

Terminationはこれ以上の良い結果を得る事は出来ない場合、TruncationはEpisodeを途中で終了する場合だそうです。

そして

Gather Agent CompletionをOverrideして以下の実装をしていました。

AgentがSplineから8m離れた場合、TerminationでEpisodeを終了(Completion)します。

この実装は分からない部分はないです。

2025-05-25のBlog

2025-03-30のBlogを読んで復習してるだけでした。

Make Completion On Location Difference Above ThresholdノードのCompletion TypeにTerminationと書かれていますが、これはTruncationじゃないの?と疑問を投げていました。

しかしChatGPTに質問したらImageを貼れる限度を超えてしまったので、回答を得る事が出来ませんでした。

2025-06-08のBlog

ここは先週の復習で一寸だけCompletionsについて述べているだけでした。

7.2 Learning to Drive (5.5) [12]のCompletionsの実装の復習をする

もう実装の中身も大体理解してしまいましたが、一応復習しておきます。

Get Agentノードで対応するAgentを取得します。

Actorの位置を取得します。

更にその位置から一番近いSplineのPointの位置も取得します。

そのSplineの位置とAgentの位置の差が800を超えていたらTerminationで終了します。

以上です。

実装に関しては特に理解出来ない部分は無いですね。

2025-05-25のBlogでChatGPTに質問出来なかった、

TerminationとTruncationの違いについてChatGPTに質問してみました。

TerminationはTaskが成功したり失敗したりした時に使用します。

ので今回の実装はAgentが道路からはみ出した時に終了する実装をしているのでTerminationになります。

Truncationは制限時間に達しても終了しなかったTaskを無理やり終了するためのものだそうです。

一応、ChatGPTに確認しておきます。

あってました。

これで今週の予定していた勉強は終了です。

8. DirectX12の勉強

3D Graphicsを作成するのにOpenGLを使ってるとバカにされるからDirectX12の使い方も勉強しようとしたら、Windows 8ではDirectX12が使用出来なくてずっと勉強を我慢していました。

で新しいPCを買ってやっとDirectX12を勉強できる環境になったら、もうDirectX12を勉強する人がいなくなっちゃってたんです。

のでこれも出来たら何したいというのは無いですね。

ああ、昔MMDを自分で作りたいというのはありました。それを目的にします。

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

8.1.1 先週の復習

先々週で既にResources, Heaps & Copying | D3D12 Beginners Tutorial [D3D12Ez] [12]の最後まで実装していたんですが、その実装内容についてよく理解してない部分があったのでそれらの点を確認したりました。

具体的には、

  • CPU Resource からGPU ResourceにCopyするために必要な実装
  • CommandListの機能
  • CommandAllocator、Barrier、CloseそしてFenceの役割について

などを勉強しました。

内容を簡単にまとめます。

以下の手順で行われます。

まずCommandAllocatorを作成します。

次にCommandListを作成します。

そしてUpload HeapにGPUに送るDataを書き込みます。

GPUにそのDataをDefault HeapにCopyするように指示する命令書をCommandListに書き込みます。

Barrierを作成します。BarrierはこのDataがなんであるのかをGPU側に教えるものです。

CommandListをCloseで閉じます。

ExecuteCommandList()関数を使用してCommandListをCommandQueueに提出します。

Fenceを作成する。FenceはGPU側の処理が終わったらそれをCPU側に伝えてもらうための装置です。

8.1.2 Input Assembler | D3D12 Beginners Tutorial [D3D12Ez] [14]を勉強する

今週から次のTutorialであるInput Assembler | D3D12 Beginners Tutorial [D3D12Ez] [14]を勉強します。

最初だけちらっと見たんですが、BarrierとかFenceの話は全然してないですね。

どっかでするんでしょうか?

前回のTutorialの勉強はNotebookLMで要約し、よく分からない用語をChatGPTに解説してもらう形式で進めました。

その結果、Default HeapとUpload Heapと言うとても大事な存在が有る事に気が付け、DirectX12の理解が深まりました。

ので今回のTutorialも同じ方法で勉強します。

まずNotebookLMで要約を作りました。

「頂点データ(vertex data) を意味のあるものにし、」ってどういう意味でしょうか?

あ、分かった。前回はHello WorldしかGPU側のMemoryにPassしてないので、今度はVertexの値をPassするって意味なはずです。

どなると、BarrierやFenceの設定もこのTutorial内でやりそうですね。

VertexのDataを正しくGPU側に伝えるには、それらのDataが何を表しているのかを示す、Buffer Viewが必要だそうです。

Buffer viewとBarrierの違いがよく分からないですね。

これは後で、ChatGPTに質問します。

Mind Mapが完成しました。

IAはInput Assemblerの略でしょうね。

それぞれの項目を見ていきます。

PipelineはMemoryに直接Accessしない。とはどういう意味なんでしょう?

最初にGPUのMemoryからVertex Bufferに関してのDataを取得してるんだから、MemoryにAccessしてますよね。

Input Assemblerの設定には静的なものと動的(実行時)の2種類があるそうです。

静的な設定の内容です。

うーん。

静的と言われればそうかもしれませんが、今一ピンと来ません。

動的な設定の内容も見てみます。

Bindをする事を動的と呼んでいるのかな。

NotebookLMにIAの設定をどうのように静的と動的に分けているのかを質問してみます。

再利用可能な情報は静的なのか。

更に詳しい解説を読みます。

成程。

要はVertexのDataがどのように指定されているかの情報は静的な設定になるって事です。

ランタイム(実行時)にコマンドリストに対してバインドされ、静的に定義されたパイプライン構造に対し、実際に使用するデータのロケーションや使用方法を関連付けることを指します。

とあります。

つまりBindする行為を動的な設定と呼んでいるって事です。

Mind Mapの内容の続きに戻ります。

これは実際に実装に使用する関数の説明だと思います。

Input Layoutでは頂点のLayoutを記述する事と、Input Element Descriptionの配列で構成される事が説明されています。

あれ?

Input Layoutってさっきの静的な設定にも出て来ましたね。

この定義を理解するのがひょっとして重要だって事なの?

Input Layoutについてもう一回勉強し直します。

まず定義です。

はい。

この後、かなり、うだうだと細かい説明をしていますが、そこは端折ります。

最後のまとめです。

やっぱりこういう定義の説明はChatGPTに聞いた方が理解し易いです。

ChatGPTに質問します。

まずInput Layerに関しての簡単な説明です。

これはGPU側のMemoryに送られたDataがどんな形式でまとめられているのかの説明ですね。

Input Layerの役割です。

うーん。

まずDataがPosition、Normal、もしくはTexCoordのどれを示してるのかを指定しています。

その後で、Floatで3つとかFloatで2つとかを指定しています。

ここまでは元のDataの構造を説明してるだけですね。

その次の入力Slot/Offsetになると一寸よく分からなくなります。

どのBiteから読み取るのかって、最初のBiteからじゃないの?

いつも0になるんじゃないの?

という疑問が出て来ます。

Input Slotに関してはよく分からないです。

最後の入力Dataの種類ですが、Instance毎のDataとはどんなDataの事を指すんでしょうか?

Input Layoutの具体的な例も示してくれました。

ああ、成程。

NormalはPositionの後に記述されているので12 Bite目から読んでいます。

うーん。

今週はここまで。

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

8.2.1 先週の復習

「5.12 ID3D12GraphicsCommandList::CopyTextureRegion()Methodによる転送」をもう一度読み直しています。

そして最後に

と書いてありました。

で思い出したんですが、Visual StudioをUpdateした後、ProjectのCodeがBuild出来るのかどうかの確認をしてなかったです。

これを今週はやります。

8.2.2 UpdateしたVisual StudioでProjectが動くようにする

まず実行してどんなErrorが出るのかを確認します。

普通に実行出来ました。

あれ?

まあいいや。

でもLogをみるとErrorが出てますね。

うーん。

でも動いてるので今回はこれは後で直せば良いか。

8.2.3 Sample CodeがBuild出来るようにする

何故か、Chapter5のSample CodeはBuildするとErrorになるんです。

AIの助けを借りれば、このErrorを直してBuild出来るように直せるかもしれません。

試してみます。

BuildがErrorになりました。

DirectXTex.libが開けない。と言っています。

DirectXTex.libは前にCloneして自分のProjectに使用した事があります。

以下のやり方を調べます。

2025-06-08のBlog2025-06-15のBlogでやっていました。

その前に大発見です。

Chapter5のSample Codeは2つあってChapter5_CopyTextureの方はCopyTextureRegion()関数を使用する方法が載っていました。

マジですか!

こっちを元に実行すれば良いのか。

来週からはこっちもやる事にします。

2025-06-08のBlogを読むと結構複雑です。

今週はこのやり方を確認するだけにします。

Window SDKのVersionが同じである必要があるそうです。のでそれから確認します。

10.0になっていました。

これは前にやったのと同じですね。

Solution PlatformとSolution構成の値は当然

です。

という事は前にBuildして作成した

DirectXTex.lib

をそのまま使用出来るって事のようです。

探したら

にありました。

この後、環境変数DXTEX_DIRを設定します。

以下の方法で設定するそうです。

要はこの辺の設定を前と同じにすれば良いんです。

もう時間が無くなってしまったので続きは来週やる事にします。

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

9. まとめと感想

なし

10. 参照(reference)

[1] Procedural Minds. (2024, August 25). Do you want to remove just one side of your building? | UE 5.4 p4 [Video]. YouTube. https://www.youtube.com/watch?v=ngizgkYM2Ac

[2] Control Rig. (n.d.). Unreal Engine. https://dev.epicgames.com/documentation/en-us/unreal-engine/control-rig-in-unreal-engine

[3] Gorka Games. (2024, April 23). How to Add Bones into a Skeletal Mesh in Unreal Engine 5 - Add Tail Physics [Video]. YouTube. https://www.youtube.com/watch?v=MMe80uQr_Vg

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

[5] Jhoward. (2022, May 30). Linear model and neural net from scratch. Kaggle. https://www.kaggle.com/code/jhoward/linear-model-and-neural-net-from-scratch

[6] Jhoward. (2022, August 10). Why you should use a framework. Kaggle. https://www.kaggle.com/code/jhoward/why-you-should-use-a-framework

[7] NVIDIA Isaac Sim - MUSHR RC Car - Ackermann Tutorial. (n.d.). YouTube. https://www.youtube.com/playlist?list=PL60qgWqGu6k82AJ2SDWOscEKLjCc5tdEW

[8] Isaac SIM UI and workflow Tutorials — Isaac SIM Documentation. (n.d.). https://docs.isaacsim.omniverse.nvidia.com/4.2.0/introductory_tutorials/index.html

[9] Installation using Isaac Sim pip — Isaac Lab Documentation. (n.d.). https://isaac-sim.github.io/IsaacLab/main/source/setup/installation/pip_installation.html

[10] Quickstart Guide — Isaac Lab Documentation. (n.d.). https://isaac-sim.github.io/IsaacLab/main/source/setup/quickstart.html

[11] Nine Between. (2023, October 30). Houdini is HIP - Part 14: Flip Fluids I [Video]. YouTube. https://www.youtube.com/watch?v=DJfkTV3Pivc

[12] Learning Agents (5.5). (n.d.). Unreal Engine. https://dev.epicgames.com/community/learning/courses/GAR/unreal-engine-learning-agents-5-5/7dmy/unreal-engine-learning-to-drive-5-5

[13] Lötwig Fusel. (2023, July 27). Resources, heaps & copying | D3D12 Beginners Tutorial [D3D12EZ] [Video]. YouTube. https://www.youtube.com/watch?v=Mehv3B6l9JY

[14] Lötwig Fusel. (2023, July 31). Input Assembler | D3D12 Beginners Tutorial [D3D12EZ] [Video]. YouTube. https://www.youtube.com/watch?v=qmT98sWHe6o