
1.今週の予定
今週もこの順序に従って勉強していきます。
- 映像作成用UE5の勉強
- AIの勉強
- Nvidia Omniverseの勉強
- Gaeaの勉強もしくはVroidとUE5の勉強
- Houdiniの勉強
- AIについての調査(ComfyUIの勉強)
- DirectX12の勉強
それぞれの勉強の最初にその勉強をする目的を一寸だけ書いておきます。
2. 映像作成用UE5の勉強
2.1 PCGを使用した神社の作成
PCGで建物を作成する方法を勉強してるので、その応用としてPCGで神社を作成する事にしました。
最終的にはUEFNのMap内で神社を作成して、だれでも参拝出来るようにするつもりです。
2.1.1 先週の復習
先週は以下に示した壁の外側のCornerを作成しました。

結果です。

2.1.2 屋根のズレを直す
やっぱり屋根のズレが気になります。
これを直します。
以下の屋根の一部だけ修正しました。

結果です。

屋根の継ぎ目が綺麗に合っています。
これで全部の屋根を整えてみます。

反対側は全く合わないです。

更に壁と壁の接続部にも問題があります。
Cornerの反対側の屋根の接合部のズレまくっています。

うーん。
これは困りました。
この問題は来週考える事にします。
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 先週の復習
Data Assetを作成しました。
以下に作成方法をまとめます。
Structureに必要なParameterをMemberとして追加します。

次にPrimary Data Assetを親にして新しいBPを作成します。

最後にData Assetを作成します。

そしてPCG Graph(このTutorialではPCG Building)に戻り、
Graph Settingを選択しInstanceのParameterにData AssetをSoft Object Referenceで繋げます。
以上です。
Data AssetからDataを抽出する方法も以下のまとめておきます。
Data Assetノードを配置し、

Parameterに使用するData Assetを指定します。

Get Property From Object Pathノードを追加します。

Get Property From Object Pathノードの設定の一例です。

大体こんな内容を先週は勉強しました。
後@Lastの意味です。

2.2.2 Create Procedural Interiors With Full Room Separation | UE 5.4 P5 [1]の次の10分を勉強する
先週は実装をしたので、今週はLectureの勉強をします。
<09:00 - Select Room "Center Points" Based on Data Asset Quantity>
新しいPCG Graphを作成しました。

名前をPCG_RandomPointsWithFloorsにしていました。
PCG_RandomPointsWithFloorsをLoopで配置しました。

Outputノードの設定を変更しました。

違った。
変えたのはUsageではなく、その下のAllowed Typesでした。
Allowed TypesをPointに変更していました。
Inputノードの設定です。

更に以下の4つのInput Pinを追加しました。

それぞれのPinの設定は

Allow Typesの値をAttribute Setに変更しただけです。
更にFloorのUsageの値をLoopに変更しました。

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

これの意味は分かります。
全ての階にPointを生成するんです。
今度は生成したPointから部屋数として指定された数だけ残して、残りを全部消す実装をします。
Density Noiseノードを追加します。

名前はAttribute Noiseになっています。

Attribute NoiseノードのInput SourceはDefaultで$Densityがセットされているので変更する必要は無いそうです。
それぞれのPointに別々なDensityを指定して、Densityで残すPointを選別するみたいです。
そしてSort Attributeノードを追加します。

Input Sourceの値を$Densityに変更しました。

Sort Attributeノードは何をしてるのか分かりませんね。
これは実装する時に確認します。
Attribute Filterノードを追加します。

これはFilterに指定した数のPointをInside Filterで返し、残りはOutside Filterで返すNodeです。
Get Property From Object Pathノードを追加します。

Get Property From Object PathノードのProperty Nameの値をRoomSizesに変更します。

TutorialはTypeしてる途中で消えて見えなくなってしまっています。
こういうのは直してほしいです。

Get Entries Countノードを使用します。
このNodeはEntryしてる数を数えるNodeだそうです。
以下のData Assetの値が送られてくるので

Get Entries CountノードのOutputは5になるんでしょうか?
それを以下に示した様にAttribute Filterノードに繋げます。

これで部屋数のPointだけFilterされるようになったはずです。
Match And Set Attributesノードを以下の様に追加しました。

残ったPointのAttributeだけOutputしています。
その結果をOutputノードから返します。

これで完成かと思ったら、
以下のAttribute Noiseはいつも同じ値を返すので、これをRandom化するような実装を追加するそうです。

Attribute NoiseのSeedの値を以下の様にして決定する事にしました。

Tutorialでは何故Seedをそのままつながないのかの説明をしていますが、よく分かりません。
多分、Floor事に部屋数を変更したいとかそんな事だと思います。
PCG Buildingに戻ってPCG Random Points with Floorsノードを以下の様に追加します。

結果です。

それぞれの部屋のPointが生成されていますね。
ここでこの節が終わっていました。
なんか今日は調子が悪いのでここで終わりにします。続きは明日やる事にします。
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 先週の復習
Pose Caching [3]を実装しました。
Tutorialで説明されてない部分が結構多くて実装するのに苦労しました。
以下に苦労した部分をまとめます。
PoseをVariableとしてSaveするために変数を作成していますが、どのFileで作成すべきなのかが分かりませんでした。

これはSKM_Quinn_Simpleから作成のControl Rig内で作成します。
Setup Eventノードは存在しない。
このTutorialではSetup Eventノードを使用していますが、私が使用してるUE5のVersionにはSetup Eventがありませんでした。
滅茶苦茶調べた結果、このSetup EventノードはConstructionノードに置き換わっている事が判明しました。
Setup Eventノードの代わりにConstructionノードを使用して実装したところTutorial通りに普通に出来ました。

最後にPreviewにAnimationを表示する方法ですが、以下のようにすれば出来る事が分かりました。

これもTutorialには説明が無くいきなりやっていました。
後、AIの嘘の回答が酷かったです。
これはここにはまとめませんが、UE5の細部に関してのAIの回答は全くの嘘ばっかりです。
2.3.2 UE5.7のAIを試す
UE5.7にはPluginのAIがあるそうです。こっちならUE5に関しての正しい回答を返してくれるかもしれません。
これを試してみます。
そう言えばUE5.7を開くのは初めてです。

こんなになったのか。Default画面が!
結構変わっていますね。
空の雲もかなりRealになりました。
PluginのAI AssistantをEnableします。

ProjectをRestartしました。
WindowからAI Assistantを起動させました。
以下の場所にSetしました。

先週のChatGPTが答えられなかった質問を聞いてみます。
あ、英語だけなのかな?

一応、日本語も大丈夫と言っています。
では日本語で質問してみます。
日本語打てないです。
うーん。
前回、ChatGPTにした質問を探します。

これだ。
公平を期すためにこの質問文を英語に訳してそれをUEのAI Assistantに質問します。
Copilotに英訳させました。

I am using the Setup Event Node
ってあってるのか?
使ってないから、I am going to use the Setup Event Nodeじゃないの?
うーん。
自分で訳すか。
以下の英文で質問してみます。

先週、この質問を書いた時点では、Setup Event NodeがDeprecationされてConstruction Nodeに変った事は全く知らないので、
代わりのNodeを教えて?
とかは書かないです。条件は先週のChatGPTへの質問と全く同じです。
UE5 AI Assistantの回答です。

おお!
キチンとSetup Event NodeはConstruction Nodeになりました。と返答しています。
凄い。
次の質問です。
このTutorialではControl RigのPreview画面にAnimationを表示しているんですが、これのやり方が分かりません。教えてください
これも英訳して質問します。
今度はChatGPTに英訳させます。Copilotの英訳はなんか意訳過ぎます。

うーん。
They areなの?
Tutorialを書いた人って複数なの?
ChatGPTに質問したら以下の書き方でも良いよ。と回答して来ました。

回答です。


完璧じゃないですか。
凄い。
英語で聞かないといけないのがネックですね。
もう英文書くのが億劫になってしまいました。
2.3.3 Control Shapes and Control Shape Library [4]を勉強する
UEのAI Assistantが役に立つ事は分かったんですが、どう利用すれば良いのかが一寸直ぐには思いつきません。
質問したい内容は沢山ありますが、今すぐは思いつかないのです。
後、どれくらいBrokenな英語でも意味を組んで読み取ってくれるのかも不明です。
ので残りの時間は今までの予定通りにControl Shapes and Control Shape Library [4]を勉強する事にします。

これらのControlに使用されているIconの変更方法の説明をここでやるみたいです。
これは大体は今の時点でも知っています。
簡単だけど今週の勉強には丁度いい分量です。
続けます。

はい。
<Prerequisites>
特にないです。
<Control Shapes>

これは知ってます。
<<Change Shape>>

これも知っています。


これも知っています。
この辺の内容はもう普段から使用していますね。
<Control Shape Library>

これは知りません。

図も付いていました。
ここに載ってるDefaultGizmoLibraryがGizmo Libraryなんでしょうか?


これはどうでも良いです。
速く新しいShapeの追加方法が見たいです。
<<Library Properties>>

それぞれのParameterの説明もありました。

名称が実際のParameterと違いますね。
まあいいや。
新しいShapeを追加するための方法とはあまり関係ないのでここはサラッと終わらせて次に行きます。
<<Adding New Shapes>>
やっとここで新しいShapeを追加する方法が習えそうです。

以下のStatic MeshのScreenshotが追加で載っていました。

これらはShapeとして、元から追加されているStatic Meshなのでしょうか?


これは単にFBX fileをImportする方法を説明してるだけですね。


なんでいらないの?
と言うか使えないのか。

これだけ。
こんな長々と説明されてやっと新しいShapeの追加方法が分りました。

図も付いて来ました。
追加した結果も載っていました。

これは来週試す事にします。
今週のLevel Sequence上でAnimationの編集をする方法の勉強はここまでにします。
3. AIの勉強
AIの勉強の目的ですが、
生成AIが凄いTrendになってるので、最低限の基礎は知っておくべきと思いこの勉強を始めたんでした。
のでこれを勉強してどうしたいというのは無いです。
3.1 前回の復習
前回、何を勉強したのか覚えていません。
先週のBlogを読んで復習します。
思い出しました。
How random forests really work [5]の<Creating a decision tree>を最後まで勉強したんでした。
そして最後に

Lectureを見たんですが、内容が結構濃くて理解出来ないので来週やる事にしたんでした。
という事は、今週はこのLectureを見る事からやる事にします。
その前に<Creating a decision tree>の内容を以下に簡単にまとめます。
まず最もいい成績を出す2分割を更に別な列で分割したら、もっと良い成績が出ると思います。
のでそれを試しました。

こんな結果になりました。
MaleはAgeで分割するのが最も良い成績でした。FemaleはP Classで分割したら最も良い生成になりました。
ここでGiniと書いてあるのはImpurityを計算するための別な方法です。
端的に言えばこれを繰り返してるだけです。
3.2 Lesson 6: Practical Deep Learning for Coders 2022 [6]の<Creating a decision tree>を見る
<00:00 Review>
前回のLectureで何をしたのかを覚えてない人向けに簡単な復習をしています。

ただ聞いても面白くないので日本語の翻訳と比較して聞いてみました。
ほぼあってますね。一か所気になったのは性別をそのままSexと言っていたところです。
後はそんなに気になるような間違いは無かったです。
ただし英語を聞きながら日本語の訳も理解するのはかなり難しかったです。
どっちかに全振りした方が遥かに楽です。
<02:09 TwoR model>
ここは2分割したDataを更に分割する話をしています。
こうやって分割して出来たTreeの事をDecision Treeと呼ぶそうです。
<04:43 How to create a decision tree>
Decision Tree Classifier()関数を使用して一気にDecision Treeを作成する方法が紹介されていました。

これが実際の実装です。

更にGraphとして表示する方法とかも説明していました。
ここまでは順当に
How random forests really work [5]の<Creating a decision tree>の内容を説明してるだけです。
<07:02 Gini>
Giniの説明です。
まず以下の実装を見せて

こんな計算をします。と書いてました。

ここで面白い説明をしていました。
この実装ではSample数が50以下になるまで分割を進めるそうです。
<10:54 Making a submission>
ここで完成した方法をKaggleに提出しています。
ここはやらないので簡単に見る事にします。
Decision Treeの結果とLinear ModelやNural NetworkのModelの結果を比較して少しだけ悪い位だと結論付けました。
そしてDummy Columnを作成する手間を省けるDecision Treeが費用対効果の面から優れていると述べています。
ここでDummy Columnの話が出て来たのか。
Decision TreeはDummy Columnだけではなく、Outlinerの存在とか、その他のこまごました要素を全部無視して使用出来るので、表のDataを使用する場合はDecision Treeをまず試すべきだそうです。
これはまったくその通りだと思いました。
ここでDecision Treeの話は終わっていました。
先週は何を言ってるのか分からなかったのは、疲れて頭が働かなかったからかもしれませんね。
今回は普通に理解する事が出来ました。
3.3 How random forests really work [5]の残りを勉強する
後、一寸なので残りの部分の勉強をやってしまいます。
<The random forest>
やっとこのLectureのMainであるRandom Forestの勉強が出来るのか。
正直長かった。

ここで言う大きな木を沢山作ってその平均を取るってどういう事でしょうか?
先程の例でいえば、最初の分割は性別以外には無いので、大きな木は沢山作れないんじゃないでしょうか?
その後の、平均化するModel同士の予測をお互いに相関させないというのも具体的にどうやるのか不明です。
更に次の文の
もしそれぞれのモデルの誤差が互いに相関していなければ、予測を平均したとき、その平均は真の目的値(ターゲット値)に近づきます。
のTarget値とは何を指しているんでしょう。
最後の
データの異なるランダムなサブセット(部分集合)を使ってそれぞれのモデルを学習させる ことが、互いに相関のない複数のモデルを作る一つの方法であるのは分かります。
うん。
という事はDataだけ別にしてDecision Treeを沢山作るのかもしれませんね。
ChatGPTに確認します。


あってますね。Sampleを変えるだけです。
ここで重要な発言がありました。
Sampleの重複を許すそうです。
これで沢山のTreeが作れるのか。
しかもそうする事で、互いに相関のないTreeが作れるのか。
凄い。
続きの実装です。

ChatGPTのこの実装に関しての説明です。

こうやって説明してもらえればCodeの意味もよく分かります。
前の節では最低50個のSample数という制約にしていましたが今回は最低5個になっていますね。
前の節の説明では、最低50位は必要みたいな事を言ってた気もするんですがどうなんでしょう?
これもChatGPTに質問しました。

Random Forestの場合は5個位のSampleでも良いのか。
この辺の数学はよく分からないな。

100本のTreeを生成しました。
Sampleが重複してても良いのでこんな事が出来るんですね。

Treeの予測の平均を出してます。

特徴量のSubsetもRandomに選ぶってどういう意味でしょうか?
ChatGPTに聞きました。

こういう事なのか。
AIはこういう細かい点の確認をするのに本当に便利です。

RandomForestClassifier()関数を使用した実装方法です。
結果が0.18 とかになっています。

結果をKaggleに提出しています。

あんまり向上は見られなかったという事ですね。

結果です。

やっぱり性別が断トツで重要ですね。
最後のまとめです。

こんなに色々一生懸命やったのに、結論は最初の感である性別の違い以上の予測は出てこなかったですね。
なんか科学的な分析の限界ってやっぱりこんなものなのかと感じました。
<Conclusion>
How random forests really work [5]のまとめです。

やっぱりここでも最初の結果がもっとも良い結果である事が述べられています。
Random Forestの工程並びに理論については、勿論基礎的な部分に限ってですが完璧に理解出来ました。
こんなに簡単にRandom Forestの仕組みを理解出来たのは、
Random Forestが極めて単純な仕組みを繰り返して構成されているのも関係していますし、
Lectureの説明が分かり易い順序だったのも関係していますが、
最も大きな原因は、AIの回答がよく分からないMissing Ringの部分をバッチと説明してくれたからです。
AI様様でした。
今週の「AIの勉強」はここまでにします。
4. Nvidia Omniverseの勉強
Robotic AIの仮想空間におけるTrainingのための環境設定こそがこれからの3D Graphicsの専門家が生きる場所であると思っています。
のでその仮想空間でRobotic AIがどんなTrainingを行っているかをまず勉強する事にしました。
色々調べると、その部分はNvidiaのOmniverseの中のIsaac Simが担当している事が判明しました。
のでその辺りを勉強します。
2025年9月からIsaac Lab Documentation [7]の勉強に切り替えました。
4.1 先週の復習
Build your Own Project or Task [8]を勉強しました。
以下に先週勉強した内容で重要な部分をまとめます。
基本的には新しいProjectの作成方法をもう一回復習しています。
Projectを作成する時にExternalかInternalかを選択しましたが、
Internalは、Isaac Labそのものの機能を改善させる時のみ選択すべきものである事が判明しました。
更にPipでInstallしたIsacc LabではInternalは選択出来ないそうです。
Isaac LabのProjectとTaskの関係ですが、ProjectがTaskの入ってる入れ物になるそうです。
Taskそのものの設定はProjectを新しく作成した時にはほとんどしていませんが、
作成したTaskは後で編集して自分の好きなように変更出来るそうです。
更に新しく作成したProjectには2つのDummy Agentが付いていて、それらを実行する事で環境設定が正しくされているのかの確認をする事が可能だそうです。
4.2 Walkthrough [9]を勉強する
本来ならBuild your Own Project or Task [8]の内容を実装して試すべきなんですが、やらなくてもそんなに問題ない気がしてます。
ので次のTutorialを勉強する事にしました。

Walkthroughから読んでいきます。
ちなみにCopilotによれば、Walkthroughとは、技術文書やチュートリアルでは「実践的な案内」や「段階的な解説」という意味になるそうです。
Walkthroughには以下の文章だけがありました。

以下の内容を学ぶそうです。
- Isaac Labの拡張ProjectのSetup方法、
- 新しいRobotの追加方法、
- 環境の設定、
- RobotのためのPolicyの学習
これだけ勉強したら実際に自分でIsaac Labを使用してPolicyを作成してRobotを動かすところまで出来るようになれそうですね。
それぞれのTutorialは以下のようになっていました。

これらを勉強していきます。
4.3 Environment Design Background [10]の勉強
最初の文章です。

ふーん。
Isaac Labでは、環境を構築するのに世界そのものから構築する必要があるのか。
世界の構築はIsaac Labの仕事ではなくIsaac Simの仕事のような気がします。どうなんでしょう?
<App, Sim, World, Stage, and Scene>
まず以下の図がありました。

この図だけ見ると3D Graphicsの基本を簡単に説明してるように見えますね。

はい。
なんか哲学的な説明ですね。
デカルト座標系の原点と、それを定義する単位系
と言われると世界の定義と言うより空間の定義って感じがします。

Guiが開いてない場合でもApplicationが全てを管理してる事だけ注意しておきます。

Simulationは時間経過を追加するものです。
更に重力などの他の物理法則も追加しています。
ここで言うStepはFrame毎による時間変化を計算するための機能の事でしょう。
要するにUE5で言う所の、Event Tickノードで動かすNode群を指してるんです。

これはStageについての説明なんでしょうか?
World CoordinationとLocal CoordinationがあるのはUE5では常識です。

これもUE5と全く同じです。
以下の図もありました。

で、これもUE5の設定方法と同じです。

Sceneについての解説ですね。
SceneはSimulationをするために必要なものと理解しました。
Vector化に関してはよく分からないですね。

成程。
Simulationで動かすObjectはSceneに追加する必要があるのか。
細かい説明はよく分からないですね。
4.3 Classes and Configs [11]を勉強する
次のTutorialも勉強します。

これは新しく作成したProjectのFolderを指してるでしょうか?
確認します。

ありました。
このFileを開くと以下のようなCodeが書かれているそうです。

これも確認します。

うん。全然違う?
あ、こっちじゃなかった。

こっちでした。

こっちは大体同じですね。

カートポールって何の事でしょう?
Copilotに質問しました。

質問して良かった。
これ動画で見た事あります。

実はこれ自分で実装してみたかったんです。
渡りに船ですね。
私が作成したProjectの方でもCartpoleになっています。

次の文です。

これですね。

私のProjectでも同じ設定になっています。

次の文です。

Simulation、Scene、そしてRobotは以下の様にセットされていました。

私のProjectの場合です。

大体は同じですね。
Simの説明です。

SimulationとRenderingの回数を同じにしないのは賢明ですね。

SceneはSimulationに使用するObjectを登録するところでしょう。
この説明だとその定義が一寸曖昧になりますね。
Robotの定義です。

Prim_Pathは何を指定してるんでしょうか?
Copilotの回答です。

え、Environmentは複数あるの?
分からない事はすぐにAIに質問します。

更に以下の説明も追加でしてくれました。

Sceneで確かに設定していました。

<The Environment>
なんと今度はEnvironmentの話です。
丁度良いですね。

こっちはさっき間違えてひらいたやつです。
以下のFileが付属で付いていました。


私のProjectのEnv.pyも開いてみます。

大体は同じ設定でした。

はい。
次の文です。

これは実際にこのCodeを弄った後じゃないと頭に入らないですね。
というかもう頭が働かなくなって来ました。
最後の文の訳だけ貼っておきます。

今週のNvidia Omniverseの勉強はここまでにします。
来週、この<The Environment>の途中からやる事にします。
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 [14]の続きを実装する
先週は実装の途中で終わってしまったので、残りをやります。
<40:10 Outputting Flip Fluids>
計算結果をCashとして保存する方法をここで実装します。
DOP IOを配置しようとしたら無いです。

先週のBlogにはFLIP_DYNAMICS Layerにある。って書いてあります。

Tutorialを見直したら、FLIP_BASICSでやっていました。

ありました。

配置します。
以下に示した様に2つのNodeが配置されました。

Dop Import FieldノードのDOP NetworkにFLIP_DYNAMICSをセットします。

DOP NodeにはFlip Objectノードを追加します。
Presetsの値にはFLIP Fluidを選択しました。

選択した後、

Presetの値はChooseになっています。
更にPreview画面が以下の様になりました。

BlogのScreenshotでは白くなっていますが、これは多分設定のせいでしょう。
Presetの下にあるImportのParameterが変わっていました。

これは先週のBlogと同じです。
多分出来てるでしょう。
次に行きます。
Fluid Compressノードを以下の場所に追加しました。

Previewの画像です。

で、このNodeは外しました。
Particle Fluid Surfaceノードを追加しました。

Previewの結果です。

ここで問題発生です。
Particle Fluid SurfaceノードのParticle Separationの値を
以下に示したFLIP Sourceノードの
Particle Separationから取って来てるんですが、

単なる数字が指定されています。
しかし私のProjectでは

Flip ObjectノードのParticle Separationの値がセットされていました。
これって逆じゃない?
つまり、本当はFlip SourceノードのParticle Separationの値をFlip ObjectノードのParticle Separationの値にセットしないといけなかったのに逆をセットしてしまった気がします。
確認します。
2025-09-14のBlogで書いていました。

あってますね。
うーんん。
では仕方ないです。
そのままCopyしてParticle Fluid SurfaceノードのParticle SeparationにPasteしました。

結果です。

一寸、形状が変わりました。
以上です。
今週は一寸短いですが一寸休憩したいので、Houdiniの勉強はこれでお終いにします。
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]のImplementing the Manager のTickを復習しました。
まず今までに勉強した内容を振り返るためにBlogの整理を行いました。
Blogを調べたところ、
でTickを勉強していました。
<2025-03-30のBlog>はTick関数の全体の実装をパッと見ただけでした。
そして<2025-07-06のBlog>では、
Sample Codeをそのまま貼り付けたら、Trainer Training SettingsとTraining Game Settingsの2つの変数がErrorになったので、この2つの変数の役割について調べていました。
この2つの変数の役割は以下の様になっています。
- Trainer Training Settings:強化学習アルゴリズムの内部設定(例:エポック数、学習率など)
- Training Game Settings:ゲーム内のAgentと環境とのInteraction設定(例:エピソード時間、成功条件など)
そしてこの2つの変数をInputとして使用するRun Trainingノードの機能も以下の様にまとめていました。

これ自体はChatGPTの回答なのでどこまで信用して良いのか注意が必要ですが、読んだ感じでは多分あってるでしょう。
ここまで復習した後で、もう一回、Implementing the Manager のTickについて勉強しています。
まずRun Trainingノードの機能として
先程の<2025-07-06のBlog>の復習で述べた
- Agentの観測を収集(Gather Agent Observation)
- Agentの行動を実行(Perform Agent Action)
- Agentの報酬を収集(Gather Agent Reward)
- AgentのEpisode終了状態を収集(Gather Agent Completion)
が有る事をもう一回述べていました。
そしてそれはつまりRun TrainingノードがReinforcement Learningを実行してるって事である。と結論付けました。
しかし一応、この結論をChatGPTで確認したところ、
Reinforcement Learningは以下の構成で行われているが、

実際にRun Trainingノードで行われているのは、最初の2つだけである。との回答が返ってきました。
これはまあそうですけど、私が言いたかったのは自分で関与出来る範囲の話では、Run Trainingノードが、Reinforcement Learningを実行してるって事です。
こっちが関与出来ないPython側のCodeの話をされても
はあ?
で感じです。
更に、以下の3つのInputの機能について調べ直していました。

最初のInputであるTargetでは、この強化学習で使用する学習Algorithmを指定します。つまりどのTrainerを使用するのかを指定しています。
Trainerとは教師のようなものでしょうか?
強化学習のTutorialを見ると、よく教師有り、とか教師無しとか言っていますが、それの事かもしれません。
良くは分かりませんが。
ここでは、PPO Trainerを指定しています。
ChatGPTの回答によると
PPOはProximal Policy Optimizationの略で
方策を更新するのに前のVersionからあまり離れない範囲で更新するのが特徴だそうです。
次に、Run Trainingノードの2番目のInputであるTrainer Training Settingsについてもその機能について調査していました。

ここでは先程指定して学習AlgorithmであるPPOの内部Parameterを指定しています。
具体的には
- Learning Rate
- Batch Size
- Discount Factor
- Entropy Coefficient
などをここで指定してるそうです。
しかしここで疑問が出て来ます。
それはこれらの値を具体的に指定した記憶がありません。
Run Trainingノードの2番目のInputであるTrainer Training Settingsには以下の変数が繋がっていますが。

この変数の内容をどこかで指定した記憶は無いです。
その事をChatGPTに質問すると
何も指定してない場合は、Python側にあるDefault値が使用される。

と回答が返って来ました。
そういう物なのかと一応納得して次のInputの勉強に移りました。
Run Trainingノードの3番目のInputであるTraining Game Settingsの機能についてです。
ここではUnreal環境のTraining挙動を設定しています。
具体的には
- 同時に走らせるAgentの数
- 1Episodeの最大長
- Tickの更新間隔
- Resetの条件
などだそうです。
ここで、これらの設定って以下のBP_SportsCarTrainingEnvでやった設定だ。と気が付きます。

で、前のRun Trainingノードの2番目のInputであるTrainer Training Settingsは実は

で行った設定かもしれない。
けどもうよく頭が回らないのでこの部分は来週検討する。となって終わっていました。
7.2 先週の疑問を検討する
はい。
先週の勉強には以下の2つの疑問があります。
- Run Trainingノードの3番目のInputであるTraining Game Settingsの機能は、BP_SportsCarTrainingEnvでやった設定をPassしてると書いていたが、それが正しいのかの確認はしていない。
- Run Trainingノードの2番目のInputであるTrainer Training Settingsの機能も、BP_SportsCar Interactorでやった設定をPassしてるだけかもしれない。
今、脳に余裕がある段階で考えるとすぐにBP_SportsCar Interactorは、以下の4つの点を指定してる
- Agentの観測を収集(Gather Agent Observation)
- Agentの行動を実行(Perform Agent Action)
- Agentの報酬を収集(Gather Agent Reward)
- AgentのEpisode終了状態を収集(Gather Agent Completion)
はずだと思いつきます。
つまりRun Trainingノードの2番目のInputであるTrainer Training Settingsの機能とは何の関係もないはずです。
やっぱり先週は疲れていたんですね。こんな事も思い付かないとは!
ですが一応確認だけはしておきます。
<Training Game Settingsの機能は、BP_SportsCarTrainingEnvでやった設定をPassしてるのか?>
BP_SportsCarTrainingEnvを見直すと以下の3つのFunctionがOverrideされていました。

これらのそれぞれの機能については今までの復習で存分に勉強したので理解しています。
Gather Agent Rewardは報酬の条件を設定し、Gather Agent CompletionはAgentがそのEpisodeを終了する条件を指定しています。
そしてReset Agent EpisodeはResetした時にどんなParameterを初期化するのかの指定をしていたはずです。
それらとChatGPTの回答を比較します。

これは例えばこんな事をします。と言ってるので大体合っていれば良いはずです。
で大体あってますね。
これはChatGPTに質問してみます。

一応、その通りとの回答が返って来ました。
どこまであってるかは不明ですが。
UE5.7のAI Assistantで質問した方が良いかもしれません。

回答です。

一応、全面的に肯定する回答が返って来ましたが、非常に怪しいです。
その理由ですが、これらについてもっと知るためのお勧めに以下の2つのSiteが出て来てるからです。

Volumetric Fogは全く関係ない話題ですし、Neural Network Engineは一見関係ある話題のように見えますが、よく読むと、今勉強しているLearning Agentとは全く関係ない話です。
つまりUE5のAI Assistantはまったく理解してないで適当に回答してる可能性もあります。
<Trainer Training Settingsの機能も、BP_SportsCar Interactorでやった設定をPassしてるだけかもしれない。>
こちらの疑問についても一応、調べておきます。
BP_SportsCar Interactorでやった設定でやった設定は以下の様になっていました。

やっぱり。
それに対して、Run Trainingノードの2番目のInputであるTrainer Training Settingsは(ChatGPTの回答によると)
- Learning Rate
- Batch Size
- Discount Factor
- Entropy Coefficient
を指定しているとあります。
うーん。
全然違う気がしますがどうでしょう?
そもそもこれらの値をこのTutorial内で指定した記憶がありません。
これは違うと言う結論にしておきます。
一応、ChatGPTにも質問しておきます。

回答は長いので以下の文だけ載せておきます。

つまり関係ないと言っています。
一応UE5.7のAI Assistantにも同様の質問をしてみます。

回答です。

これもあなたの回答は正しいです。としか言ってないです。
これ以上の調査は今の時点では無理ですね。
ここまでにしておきます。
7.3 Finishing Touchesを勉強する
先週の復習をするだけでこんなに時間を取られてしまいました。
今週の勉強を始めます。
今度はCopilotに訳してもらいます。

こんな設定した事、まったく覚えていません。
今日はもう時間も無くなってしまったので、文章を訳してそれを読むだけにして、これらが何を実際にしてるのかについての考察は来週やる事にします。


これも設定をどうするかの話ですね。

以下の様に配置していました。

もうこの辺は工程の説明と割り切っても良いかもしれません。

これも車が衝突しないで済むような設定に変更する方法を説明してるだけです。
時間が無くなってしまったので、今週のLearning to Drive (5.5) [12]の勉強はここまでにします。
8. DirectX12の勉強
3D Graphicsを作成するのにOpenGLを使ってるとバカにされるからDirectX12の使い方も勉強しようとしたら、Windows 8ではDirectX12が使用出来なくてずっと勉強を我慢していました。
で新しいPCを買ってやっとDirectX12を勉強できる環境になったら、もうDirectX12を勉強する人がいなくなっちゃってたんです。
のでこれも出来たら何したいというのは無いですね。
ああ、昔MMDを自分で作りたいというのはありました。それを目的にします。
8.1 Lötwig Fusel氏のD3D12 Beginners Tutorial [D3D12Ez]を勉強する
Input Assembler | D3D12 Beginners Tutorial [D3D12Ez] [13]の勉強をしています。
8.1.1 Input Assembler | D3D12 Beginners Tutorial [D3D12Ez] [13]の続きを勉強する
<Input Element>
以下の場所にCommentを追加し

変数名を変更しました。
更に以下の場所の名称を変更しました。

そしてInput Element Desc型のStructのArrayを以下の様に宣言しました。

そして以下の場所にこの変数を追加しました。

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

ここでInput Element DescのそれぞれのElementについての詳しい解説がありました。

これ非常に分かり易かったんですが、StructのElementについてまでここで一々勉強してると全体像が見えなくなってしまうので、
この内容はここにはまとめません。
結果だけ以下に記します。


もう少し見やすく整理してほしいですが、これらのElementを指定しました。
以上です。
今週は時間が無いのでこれでLötwig Fusel氏のD3D12 Beginners Tutorial [D3D12Ez]の勉強はお終いです。
8.2 「DirectX 12の魔導書」を勉強する
「5.12 ID3D12GraphicsCommandList::CopyTextureRegion()Methodによる転送」を実装します。
8.2.1 「5.12.1 Upload用のResourceを作成する」を復習する
これは前に勉強したはずですが、内容を覚えていませんBlogを調べて勉強した内容を確認します。
調べたら
2025-07-13のBlogで勉強していました。
正し、その内容に入る前に、教科書で書かれているCodeがSample Codeに無い事に気が付いて勉強を中止していました。
これは「5.12.1 Upload用のResourceを作成する」の勉強からやり直す必要がありますね。
8.2.2「5.12.1 Upload用のResourceを作成する」を勉強する
Upload用のHeapのResourceを作成します。
教科書のCodeと同じCodeが

のSample Codeにありました。

これでやっとこの部分の実装をする事が出来ます。
次にResourceの設定を行います。
こちらもSample CodeのCodeを以下に示します。

教科書のCodeとは僅かに違いう部分があります。
まあ良いです。
最後にUpload用のResourceを作成します。

これもSample CodeのCodeをここに貼っています。
最後にこのSample Codeで実行できるのかを確認しておきます。

出来ました。
今週はもう時間が無いので実装は来週やります。
以上です。
9. まとめと感想
なし。
10. 参照(Reference)
[1] Procedural Minds. (2024, September 9). Create procedural interiors with full room separation | UE 5.4 P5 [Video]. YouTube. https://www.youtube.com/watch?v=yefxdWg_GTo
[2] Control Rig. (n.d.). Unreal Engine. https://dev.epicgames.com/documentation/en-us/unreal-engine/control-rig-in-unreal-engine
[3] Epic Games. (n.d.). Control Rig Pose Caching in Unreal Engine [Documentation]. Epic Games Developer. https://dev.epicgames.com/documentation/en-us/unreal-engine/control-rig-pose-caching-in-unreal-engine
[4] Epic Games. (n.d.). Control shapes and control shape library in Unreal Engine. Unreal Engine Documentation. https://dev.epicgames.com/documentation/en-us/unreal-engine/control-shapes-and-control-shape-library-in-unreal-engine
[5] Howard, J. “How Random Forests Really Work.” Kaggle, https://www.kaggle.com/code/jhoward/how-random-forests-really-work
[6] Jeremy Howard. (n.d.). How random forests really work – Part 6 [Video]. YouTube. https://www.youtube.com/watch?v=AdhG64NF76E
[7] NVIDIA Isaac Lab. (n.d.). Welcome to Isaac Lab! https://isaac-sim.github.io/IsaacLab/main/index.html
[8] NVIDIA. (n.d.). Creating your own project. IsaacLab Documentation. https://isaac-sim.github.io/IsaacLab/main/source/overview/own-project/index.html
[9] Isaac Lab Project Developers. (n.d.). Walkthrough. Isaac Lab Documentation. Retrieved [access date], from https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/index.html
[10] Isaac Lab Project Developers. (n.d.). Environment Design Background. Isaac Lab Documentation. Retrieved [access date], from https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/concepts_env_design.html
[11] Isaac Lab Project Developers. (n.d.). Classes and Configs. Isaac Lab Documentation. Retrieved [access date], from https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/api_env_design.html
[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