UE4の勉強記録

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

UE5の勉強などなど

1.今週の予定

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

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

去年のBlogを見直して一つ発見したんですが、勉強はしっかりしてるんですが、成果物がほとんど出来上がっていません。

この原因を追究したらすぐに判明しました。

その勉強を始めた目的を記録しておかなかったからです。

そのせいで勉強の途中で目的を忘れてしまい、勉強そのものが目的になってしまい、成果物が完成しませんでした。

ので、今週からそれぞれの勉強の最初にその勉強をする目的を一寸だけ書いておく事にします。

2. 映像作成用UE5の勉強

今週から節を以下の3つに分ける事にします。

  • 神社の作成
  • PCGの勉強
  • Level Sequence上でAnimationの編集をする方法

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

UEFNの勉強で、Mapに神社を作って参拝客を募ったら正月とか結構な人が訪れるんじゃない。と考えた事がありました。

で、UEFNの勉強は止めてしまったんですが、この神社をVirtualに作成するのは案外いけると思っています。

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

2.1.1 瑞垣の作成

瑞垣を一寸ずつ作成していきます。

今週はHere's How to Adjust Your Building Based on the Asset Size | UE 5.4 P2 [1]で勉強した方法を用いてLandscapeにRectangleなSplineを作成します。

<神社用のProjectの作成>

神社を作成するための専用のProjectを作成します。

UE5のVersionはUE 5.4 PCG Building Series[2]で使用してる5.4にします。

名前はJapaneseShrinePCGとします。

あれ?UE 5.4 PCG Building Series[2]ではどのTemplateを選択したのか覚えていません。

Blogを見て確認します。

2024-10-27のBlogから勉強していますが、どのTemplateを使用したのかは書いていません。

Tutorialを見直しましたがどのTemplateを選択したかは言っていませんでした。

ここは無難にThird Personを選択しておきます。

Procedural Content Creation Framework(PCG)をEnableします。

よく見たらProcedural Content Generation Frameworkでした。

<Splineの追加>

2024-10-27のBlogを参考にしてHere's How to Adjust Your Building Based on the Asset Size | UE 5.4 P2 [1]で勉強したSplineを作成します。

PCGと言うFolderを作成して、そこにPCG Graphを作成しました。

PCG Graphの名前はPCG_JapaneseShrineとしました。

次にActor ClassからBPを作成しました。

名前はBP_JapaneseShrineとしました。

このBPを開いて通常のSplineを追加します。

しました。

Splineの形状を四角に変更しました。

やり方は2024-10-27のBlogに詳しく書いてあるので

ParameterのClosed LoopをEnableします。

端が以下の様になりました。

この辺は2024-10-27のBlogのまとめと全く同じになってしまうので結果だけ記録する事にします。

最後にPCGを追加してBPの設定は終わりました。

今度はPCG Graphの設定をしていきます。

以下のところまで作成しました。

特に問題はありません。

BPに戻ってWallSizeを追加しました。

以下のところまで作成して

2024-10-27のBlogのBlogは終わっています。

続きは2024-11-17のBlogに載っているのでそれも継続してやります。

以下のところまで作成しました。

最後にStatic Meshを入れて確認します。

Static MeshはModular Japanese Architecture Packにあった以下のAssetを使用してみました。

回転だけ直しました。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で建物を作成する方法を勉強する事になりました。

のでUE 5.4 PCG Building Series[2]を勉強しています。

2.2.1 Isolate Corners With PCG To Create Pillars and Roofs | UE 5.4 P3 [3]の最初の10分を勉強する

<00:00 - Tutorial Result Demo>

この回のTutorialでは以下に示した様にCornerに柱を追加し、屋上に柵を追加する方法を勉強します。

更に以下のような屋根も追加します。

<00:24 - Corner Pillars>

今の時点ではBuildingのCornerは以下の様になっています。

ここに柱を追加します。

以下のAssetで柱を作るそうですが、

もとのAssetの大きさは柱のSizeに調整してしまうので関係ないそうです。

柱用のSub Graphを作成します。

まず以下に示したPCG_CreateWallsをDuplicateし

名前をPCG_CreateCornersに変更しました。

中を開き以下の場所にTransform Pointsノードを追加します。

一番下のTransform Pointsノードに一番上にあるMake Vector Attributeノードの結果を繋げました。

残り3つのNodeも同じようにやりました。

そして以下の様に繋ぎました。

何故、これをやっているのかは後で考えます。

更に次の部分の実装にも以下のように変更しました。

最後にあったTransform Pointsノードを消しました。

InputにあったWall Thicknessも要らないので外しました。

これでPCG_CreateCornersの設定は終わりです。

今度はPCG_Buildingに戻ってこのPCG_CreateCorners を使用してCornerの柱を実装します。

以下の実装を作成します。

そして先程作成したPCG_CreateCorners をSubGraphとして以下の様に追加しました。

この時点で可視化すると以下の様になります。

FloorのPointsも残っていますね。

Tutorialによるとこれは単なるBugでその証拠に以下の様にDefault設定のTransform Pointsノードを追加して

可視化すると

以下の様にCornerだけPointが生成されている事が分かります。

今度はPDA_ModularBuildingに柱として使用するStatic Meshを追加します。

FloorをDuplicateして名前をCornerPillerに変更しました。

今度はDA_RegularBuildingを開き

ここにPillar用のMeshをセットします。

PCG_Buildingに戻り、Graph Settingを選択し

DataAssetにもう一回DA_RegularBuildingをセットします。

そしてまたPCG_Buildingに戻り以下の実装を追加します。

今の時点でMeshがどのように表示されるかTestします。

Static Mesh Spawnerノードを追加します。

Static Mesh Spawnerノードの以下の部分の設定だけ変更します。

結果です。

大きさはあってないけど、柱は形成されました。

Tutorialによると大きさはあってるけど位置がずれてるそうです。

以下の実装を追加する事で柱の位置を調整します。

結果です。

柱と壁の間にある隙間については後で調整するそうです。

<08:59 - Roof Border Wall>

更に屋根も追加します。

PDA_ModularBuildingを開きCornerPillerをDuplicateして名前をRoofBorderWallに変更します。

DA_RegularBuildingを開き柱に追加したのと同じMeshをセットします。

あれ?

これって屋根を生成するんだと思ってたんですけど違うんでしょうか?

まあいいや、最後まで見たら何を生成してるのか分かるでしょう。

何故かここで節が終わっています。

大体10分なのでここまでとします。

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

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

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

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

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

今週もControl Rigの勉強をやっていきます。

 Creating and Modifying Control Rig [4]の続きを勉強します。

2.3.1 Creating and Modifying Control Rig [4]の続きを勉強する

<Debugging>

先週勉強した内容を実際に試してみます。

Basic IKノードの

を選択してAdd Visual Debugにしました。

先週のBlogに書いてあるようなBugのIconはありません。

赤いBoxは表示されました。

このBoxのPropertyは先週のBlogでは以下の様に表示されていますが

私のProjectでは以下の様になっていました。

これだとSpaceを使用してBoneの設定を追加する事が出来ません。

ChatGPTに質問したらそのTutorialは5.1か5.2のVersionのままになってるからだ。と回答してきました。

そうなのか?

確認してみます。

本当だ。5.0って書いてありました。

こっちのSiteで勉強したらと言って来ました。

Control Rig [5]

そうなのか?

同じような気もしますが、確認してみます。

確かに内容が違います。

マジか。

これはこっちで勉強する必要がありますね。

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

3. AIの勉強

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

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

3.1 前回の復習

先週はLesson 3: Practical Deep Learning for Coders 2022[6]を最後まで勉強しました。

ExcelDeep Learningの計算方法を再現するのは宿題で出されると思ったら出されなかったんです。

でもこれはやっておいたほうが良い気がしています。

ただしLectureの内容だけではこれを再現するのは一寸難しいかもしれないと思っています。でどうしょうかと。

更に最後に一寸だけ教科書の内容を確認したんですが、Lecture3の内容は第4章に載っていました。じゃ第3章は何が書いてあるのかって話になります。

後、先週は見なかったんですが、3: Neural net foundations [7]にも重要な情報があるかもしれません。

これは今週Checkします。

3.2 「3: Neural net foundations [7]」を読む

これしか説明がありません。

Stochastic gradient descent (SGD)って何でしょう?

これがLecture3で勉強した計算方法の名称でしょうか?

おお、勾配降下法の事だそうです。

Resourceの紹介です。

How does a neural net really work?から見てみます。

おお、ここに以下の計算の実装方法が詳しくまとめられています。

ただし上のGraphはBarを動かしても値は変化しません。

「Titanic spreadsheet: see the course repository」です。

おお、ここにExcelで作成した計算方法がまとめられているみたいです。

Lecture 4の内容を見てみます。

これはExcelの計算方法じゃなくてその前のKaggleの実装方法がまとめられているみたいですね。

「Titanic data (training CSV) can be downloaded from Kaggle」です。

Excelの計算で使用したTitanicのDataがある場所です。

うーん。

3.3 Stochastic gradient descent (確率的勾配降下法)について勉強する

教科書を読むより、こっちを重点的に調べて理解した方が実際の役に立ちそうです。

確率的勾配降下法について調査する事にします。

まずはChatGPTに質問する事にします。

以下に計算方法の説明を記します。

回帰問題ってよく聞くけど具体的に何を指すのかよく分かりません。

これもChatGPTに聞いてみます。

離散してたら駄目なのか。

じゃ式で表す事が出来る問題って事ですね。

線形じゃない回帰問題もあるの?

よく分からないです。

出力が連続だったら良いのかも。

ChatGPTに聞いたら

線形と言うのは連続というだけでなく直線的な式で表す事が出来るものを指す。と言っていました。

うーん。

そうだったのか。

更に出力値が離散してなかったら良いので、入力値が連続値である必要もないそうです。

こっちはまあ想像してた通りです。

うん。でも大体理解しました。

本当にこういう勉強をする時はAIは役に立ちますね。

ただここまでAIが凄いと、果たして人間が勉強する必要があるのかが疑問になります。

次の計算Stepに行きます。

これは初期値は何でも良いって事でしょう。

こんな計算やってたかな。ここはよく分かりません。

はい。

Lecture3を見た時に、この偏微分の計算をどうやってたのかが理解してないんです。

ωの値を更新するための式です。

最後です。

更に簡単な例が紹介されていました。

これだとf(x)の式がxなのかaxなのか分かりません。

うーん。

これを理解した上でもう一回Lecture3を見たらかなり理解が進みそうです。

そうだ。

勾配降下法と確率的勾配降下法SGD: Stochastic Gradient Descent)の違いについてもAIに聞いておきます。

両方の具体的な計算方法を表示してもらいました。

まず勾配降下法です。

f(x)の値が最小値になるxの値を探すって意味でしょうか?

あれ?ωの最小値を探すんじゃないの?

まあ良いです。

続きを見てみましょう。

微分しました。

初期値と学習率を決定しました。

これは具体的には何を計算してるんでしょうか?

以下の実際の計算で何をやってるか確認出来ました。

計算結果をまとめたものです。

はい。

この計算方法は理解出来ましたが、損失関数ωの値はどうなってしまったんでしょうか?

今度は同じ式をSGDで計算してもらいます。

まず以下の様にDataを準備します。

真値が3であるかどうかの保証は無くても良いんでしょうか?

元の式が分からないとこの真値は決定出来ないものなのでしょうか?

あ、ひょっとしてYiの値って、f(x)の値が最小値になるxの値の事じゃないですか?

最初から最小値が分ってるなら計算する必要ないですよね。

こっちも???です。

これは適当に決めただけでしょう。

はい。ここで最初の計算です。

ωの値は0.03になりました。

Step5まで計算しました。ωの値は0.34になりました。

うーん。

こっちはωの計算方法は分かったけど最小値の計算は分からないじゃないですか。

これは駄目だ。

今度はCopilotに英語で質問します。

回答です。

ここはChatGPTとほとんど同じ回答を返しています。

以下の簡単な例で説明するそうです。

いや、これなら分かるよ。

だって式のwとbを計算するんだもん。

目的がはっきりしてるじゃん。

で実験値からyとxは分かってる訳じゃないですか。

Lが損失関数になるのか。

今度はLの式をwとbで偏微分しています。

もう微分のやり方忘れてしまいました。

この計算があってるのか分かりません。

Copilotにこの計算どうやったのか聞いてみました。

だそうです。

あ、この式みたら思い出しました。

微分の計算方法思い出しました。

式をTypeするのは無理なんで手書きにしました。

wx+bはy(Predicted)なので以下の式に繋がります。

SGDの計算に戻ります。

そして最後です。

大体理解しました。

けどもう一歩具体的なDataを使用して実際に計算方法を見せてくれると完璧に理解出来ます。

Copilotに実際のDataを使って計算してくれ。と頼みました。

結果です。

以下のDataを使用してwとbの値をSGDを使用して計算してくれるそうです。

おお、これなら完璧です。

Step2です。

Wとbの初期値を決めました。さらにLearning Rate、αの値も決めました。

以下の式で計算します。

これはさっき散々計算して正しい事を確認しました。

Step4です。

長いので最初の計算だけ示しています。

残りの計算です。

よしこれでStochastic gradient descent (確率的勾配降下法)について完璧に理解しました。

3.4 Stochastic gradient descent (確率的勾配降下法)について勉強した感想

英語で質問しないとAIの回答がおかしくなります。

やった。

英語が出来るMeritがAIのせいでもう無くなるかと思ったが、以外にそうでもなさそうです。

最後にCopilotにGradient Descentで計算した場合の違いも聞いておきましょう。

同じ問題を今度はGradient Descentで計算してもらいます。

次のStepです。

これもまったく同じです。

Step3です。

これも全く同じです。

ここで計算方法が変わりました。

全部のxの値に対してのy_Predictionを一辺に計算しています。

一辺に計算してるのでwやbの値は初期値のままです。

そしてその計算したy_Predictionの値を合計してGradientを計算し次のwとbの値を計算しました。

Exampleはここで終わっていますが、この新しいwやbの値を使用して繰り返しこの計算を続ける事が出来るはずです。

その過程でLoss関数がもっとも小さくなったら最適解という事でしょうね。

<日本語のAIがどこでおかしくなったのかを検証する>

最初から日本語の回答は具体性にかけていましたが、以下の部分で徹底的に違う方向に進んでしまいました。

勾配降下法について質問しましたが、その回答に出て来た例が、DataがあってそのDataにもっともFitする式mx+bのmとbを求めるのではなく、式があってその式の最小値を求める例が出て来ています。

Deep Learningの勉強をしてるのに何で全く関係のない例を持ち出して来たんでしょうか?

ここから回復不可能な程ずれた回答を返すようになってしまいました。

しかもこの回答を読んでるときに以下の疑問を

書いていますが、

全くその通りで、答えが分かっている状態からその答えを計算するという2重の訳分からない事をしています。

実験値だからバラつきがあるんです。

バラつきが無かったらそもそもその実験値にもっとも一致する式なんてこんな方法で計算する必要はありません。

これは日本の科学力並びにAIの理解が稚拙で本質を全く理解してない証拠です。

私だったら、気体のいろいろな温度における体積を測定してそのDataからSGDを使用してLinearの式を計算し、Gasの体積が0になる温度をその式から計算して絶対零度にどれくらい近いかを計算させてみます。

これだ。

ChatGPTに聞いてみよう。

今度は英語で聞いてみます。

以下のDataを用意してくれました。

以下の条件で計算します。

一個目の計算です。

2個目のDataの計算です。

面倒なので最後の計算だけ示します。

これはどう見ても間違ってるでしょう。

まあ良いです。

多分、元のDataが悪いんでしょう。

Googleで検索したら以下のDataがすぐに見つかりました。

もう時間切れですね。

今週のAIの勉強はここまでにしておきます。

4. Nvidia Omniverseの勉強

Nvidia Omniverseの勉強を始めた理由は以下のようなものです。

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

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

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

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

4.1 NVIDIA Isaac Sim - MuSHR RC Car - Ackermann Tutorial [8]を勉強する

4.1.1 前回の復習

確かROS2のInstallは全部出来たはずです。その後どこまでしたのかは覚えていません。復習します。

4 - Action Graphs - Part 1 - NVIDIA Isaac Sim - MuSHR RC Car - Ackermann Tutorial」[9]を勉強していました。

この実装を来週やると言って終わっていました。

4.1.2 「4 - Action Graphs - Part 1 - NVIDIA Isaac Sim - MuSHR RC Car - Ackermann Tutorial」[9]を実装する

まずOmniverse Launcherを起動する前にROS2を起動させる必要があります。

WSLからUbuntu22.04を起動させました。

うーん、ROS2を起動させるCommandが分かりません。

Copilotに質問します。

うーん。二番目のCommandは要らないはずです。

はい、ROS2が起動しました。

今度はOmniverse Launcherを起動します。

そしてIsaac Simを起動させました。

以下の設定を確認して

起動させました。

このTutorialのProjectを起動させました。

Autographを開きます。

今は以下の状態になっています。

ここに先週勉強した実装を追加していきます。

まずOn Playback TickノードのTickをROS2 Subscribe AckermannDriveノードのExec Inに繋げました。

次にAckermann Steeringノードを追加します。

無いです。

ChatGPTに質問してみました。

以下の質問文を書きました。

I am studying this YouTube Channel, "https://www.youtube.com/watch?v=pqE2y8YVdGI&list=PL60qgWqGu6k82AJ2SDWOscEKLjCc5tdEW&index=4". I cannot find Ackermann Steering node from my Isaac Sim. Do you have any suggestions? I followed this instruction, https://docs.isaacsim.omniverse.nvidia.com/latest/installation/install_ros.html, to install ROS2 and Isaac sim. My PC is windows 11 and Isaac sim is opened from Omniverse Launcher. I mention before you tell me I installed ROS2 not ROS like the Tutorial did. But I do believe ROS2 also has Ackermann Steering Node. My Isaac Sim has ROS2 Subscribe Ackermanndrive node, ROS2 Publish Ackermannsdrive node, and Ackermann Controller node.

結構簡潔に質問をかけたと思います。

この質問はこれからも使用出来そうなのでここに貼っておきます。

回答です。

Ackermann SteeringノードはROS2には無くなってその機能は他の3つのAckermannノードに追加されたと書かれています。

本当なんでしょうか?

同じ質問をCopilotにもしてみます。

こっちはAckermann Steeringノードが使用出来るはずだ。と言っています。

ChatGPTとは回答が違いますね。

読んでいきます。

これってどういう意味?

Copilotに質問しましたが要領を得ない返事が返って来ました。

次です。

これはやった。

何!

公式SiteにAckermann SteeringのTutorialがあるそうです。

見てみます。

ROS 2 Ackermann Steering [10]です。

おお。

と思ったら以下の様に書かれていました。

最新版を探します。

ありました。

ROS 2 Tutorials (Linux and Windows) [11]です。

しかし4.0にあった

が4.5では

となっています。

どうやらChat GPTの言ってる方が正しいそうですね。

と言うかこのTutorialに沿って勉強するからおかしくなるんです。

ちゃんと、私のVersionにあったTutorialを選んで勉強すべきです。

それを探します。

そうだその前にExtensionも見てみます。

Ros2で検索すると

となっていました。

これが正しいのかどうかは分かりません。

ChatGPTに質問したらこれでEnableされてるそうです。

4.1.3 公式Siteから自分のIsaac SimとROS2の設定と同じTutorialを探します

公式SiteのROS 2 Tutorials (Linux and Windows) [11]を見ると

2つのTutorialが最初に紹介されています。

これから見てみます。

4.1.4 URDF Import: Turtlebot [12]を勉強する

Turtlebotって何なんでしょう?

<Learning Objectives>

これだそうです。

可愛い。

Link先に載っていました。

このModelをIssac SimにImportするのがこのTutorialの目的のようです。

<Getting Started>

今までの設定をしっかりやってある事が前提と書かれています。

これは出来てるはずです。

これは全く分かってない。

けど出来る所までやっていきます。

<Importing TurtleBot URDF>

以下のCommandでTurtleBotのCloneを得ます。

URDFは以下の場所にあるそうです。

turtlebot3/turtlebot3_description/urdf/turtlebot3_burger.urdf.

Isaac Simの操作に移ります。

まずこのRobotを使用するEnvironmentを開きます。

Viewportの下にあるIsaac Sim Assets tabを開きます。

こういうのは図で示してほしいです。

Environments/Simple_Room/simple_room.

があるそうです。

New Stageを作成した後に、このSimple_roomをStage上にDragします。OmniverseではUE5で言うところのLevelをStageと呼ぶみたいです。

EnvironmentはOriginにセットしろ。とか書いてありますが普通Originにセットするんでまあ、そんなに強く記録しなくてもいいでしょう。

File > ImportからTurtleBotのURDFをImportします。

Windowが開くので以下の設定に変更するそうです。

後、図でしか書いてなかったですが、以下の

URDFを選択していました。

最後にImportを押します。

この後、新しいURDF Fileが生成されてそのSave場所について色々説明しています。

あまり重要に思えないのでSkipします。

TurtlebotはTableの上に生成されるので床の上に移動させます。Playを押すと床に落ちます。

<Tune the Robot>

material, physical, そしてjoint propertiesの値は自動でImportされるそうです。

しかし何らかの理由で正しくImportされない場合もあります。

もしRobotのタイヤが滑ってる場合は、Frictional Propertiesを調整する必要があるそうです。

車輪のfriction coefficientsの値を調整しろ。って言っていました。更に床も同様にしろとも言っていました。

mass やinertial propertiesはPhysical Propertiesに属するそうです。これらの値は直接与えられなかった場合は勝手に決定されるそうです。

自分で値を指定したい場合は、

次の文章の意味が一寸わかりません。

と言うかPrimが何を指しているのかが不明です。

本当に図で表示して欲しいです。

でこのPhysicsのCategoryの中にMassがあるのでそこに指定すれば良いそうです。でMassが無い場合は+を押してMassを追加してそこに値を書き込めば良いそうです。

Jointが振動したり、Jointの動きが遅い場合は、Joint Propertiesにあるstiffness とdampingの値を調整すれば良いそうです。

これは前に勉強しました。確かStiffnessが固さを表し、Dampingが元に戻る力を表してるはずです。

ここでは以下の様に説明されていました。

High stiffness makes the joints snap faster and harder to the desire target, and higher damping smoothes but also slows down the joint’s movement to target.

DeepLの訳です。

高い剛性は、関節をより速く、より強く目標にスナップさせ、高いダンピングは、関節の動きを滑らかにするが、同時に目標への動きを遅くする。

Stiffnessって剛性って意味だったのか。

一つ勉強になりました。

あれ?しかし説明が逆ですね。

一寸BlogでStiffnessとDampingの定義を確認します。

2025-02-23のBlogで勉強していました。

Stiffnessがばねのような力で、DampingはBreakとまとめていました。

先程の説明を読むと、もう少し複雑な概念の様です。

こういうのもこれから勉強していきます。

次の文です。

For pure position drives, set relatively high stiffness and low damping. For velocity drives, stiffness must be set to zero with a non-zero damping.

Position DrivesとVelocity Drivesのもっと深堀した定義が知りたいですね。

今回は

に設定するそうです。

これで終わりです。

4.2 Nvidia Omniverse Issac Sim [13]の勉強

うーん。もう頭が働かない。これは今週はお休みします。

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

なし。

6. Houdiniの勉強

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

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

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

今はVEXの使用方法について理解する事を主に勉強しています。

6.1 前回の復習

前回はVEX Isn't Scary Project - Part 4: Rendering [14]の最後まで実装したんでした。

そして

と書いていました。

今週はこれについて調べます。

6.2 映像として生成する

まずは画像として全てのFrameをExportしてDavinci Resolveで映像化する方法を試します。

ChatGPTに以下の質問をしました。

出来そうですね。

ここに書かれている方法を試してみます。

Cameraは既に配置してあります。

Viewport云々は多分既にやってるでしょう。

これも既にやってあります。

次です。

これを設定すれば良いのか。

以下の様に設定しました。

次です。

しました。

最後のStepです。

ありました。

押します。

こっちでした。

結構時間かかりそうです。

途中で止まってしまいました。

255 Frameまで出来たのでそれでAnimationにします。

一寸画面が暗すぎます。

Davinci ResolveでBrightnessを上げてみました。

全然駄目じゃん。

今週はもう一回Renderingしてお終いにします。

そして来週はどうしたらもっとPhoto-Realisticな映像が出来るのかを調査します。

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

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

3Dやイラストそして動画関連のAI Softについて

  • どんなSoftが公開されているのか
  • それらのSoftを使用するとどんな事が出来るのか
  • どんな方法で操作するのか、

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

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

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

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

後、Framepackと言うLocalでRTX3000台でも普通に映像を生成出来るModelが公開されたそうです。

これもUE5のReinforcement Learningの勉強が終わった後に勉強しようと思っています。

7.1  Learning to Drive (5.5) [15]を実装する

<<Observation Exampleの続き>>

先週、Goal Locationの値に何をセットすれば良いのかが不明と言って終わったんでした。

これはTutorialを最後までやってから考えます。

あれ?

2025-04-20のBlogを見ると、Observation Exampleまでしか勉強していません。

どうなってるの?

分かりました。

その前の2025-03-30のBlogLearning to Drive (5.5) [15]で一端最後まで勉強したんですが、途中で勘違いして理解してる箇所があったんで、2025-04-20のBlogでもう一回勉強し直したんでした。

そのもう一回勉強し直した時は、最後までやらずにObservation Exampleまでの勉強で終わっていたんでした。

となると今週やる事は、Observation Exampleの次からの内容を実装する事じゃなくてObservation Exampleの次の内容を勉強する事になります。

7.2  Learning to Drive (5.5) [15]の続きを勉強する

続きを勉強しようと思ったら2025-04-20のBlogに以下の様に書かれていました。

これについて全く覚えていません。

これが理解出来ないと今週の勉強が出来ません。

2025-04-20のBlogを読み直して何故このような回答をしたのかを思い出す必要があります。

分かりました。

2025-04-20のBlogを読み直したらこのように書いた理由がはっきり分かりました。

まずInteractorの定義ですが、

のように書いてあります。

つまりAgentがどのように周りを認知したり、その認知に基づいてどんなActionをとるかを決める行為を指します。

2025-04-20のBlogでは、そのInteractorの機能について以下の様にまとめています。

この説明はあってますが完全では無いのでここで説明し直します。

Learning Agentsでは、以下の4つ関数をOverrideする事でこのInteractorの機能を実装します。

  • SpecifyAgentObservation,
  • SpecifyAgentAction,
  • GatherAgentObservation,
  • PerformAgentAction.

ここで、2025-03-30のBlogではこの4つの関数を順番にOverrideしていくと勘違いして理解しています。

それが間違っていると2025-04-20のBlogでは言っています。

そんだけです。

理解してしまえば全然大したこと言ってない事が分かりましたが、理解するのが大切です。

では続きを勉強していきます。

<<Observation Example>>

まずはLearning to Drive (5.5) [15]の説明を読みます。

だいたい言ってる内容は理解しました。

重要なのは以下のParagraphで

目的地を以下の様に指定すると

AIは、その目的地に行く方法を学習してしまい、目的地が変わった場合、最初からもう一回学習させる必要が出て来てしまうそうです。

しかし目的地を以下の様に

Agentを中心にしてそこからどの方向でどれくらいの距離にあるのかと指定する方法を採用すると

目的地が変わっても最初からもう一回学習させる必要が無くなるそうです。

ここではサラッと説明してるけど、これってRobotic AIの専門家達がいろいろ試行錯誤して辿り着いた結論でしょう。

理論的に導かれた訳では無いでしょう。

ので何故これいう設定にすると、目的地が変わっても最初からもう一回学習させる必要が無くなるのかを深く考えるのそんなに重要ではなく、こういうものだ。と覚えておくだけで十分です。

で、このEgocentric Coordinatesを使用して目的を指定する方法を

Learning Agentsにある4つの関数をOverrideする事で実装すると以下の様になります。

ここではLearning Agentsにある4つの関数の内、Specify Agent Observation()関数と Gather Agent Observation()関数をOverrideしています。

これらの実装は既に先週やっていますね。

しかし何故この実装をするとEgocentric Coordinatesを使用して実装した事になるのかまだ理解していません。

特にGoal Locationです。これの値をどうやって決定するのかが全く分かっていません。

分かりました。

Tutorialの説明を読んでも一寸しか理解出来なかったのでCopilotにしつこく質問したら完全に理解出来ました。

以下にその内容をまとめて説明します。

まず最初のSpecifyAgentObservation()関数です。

ここではどんなObservationの情報をSchema Elementに送るかを指定しています。

この例ではLocationを指定していました。

で次のGather Agent Observation()関数では

具体的にどんなLocationの情報を保持するのかを指定しています。

ここまではTutorialにも説明されていましたが、

この後のMake Location Observationノードの機能の説明をCopilotが詳しくしてくれました。

そしてそのお陰でここで何をやっているのかがしっかり理解出来ました。

まず結論から説明します。

そしてその結論に到達した証拠としてCopilotの回答を貼り付けます。

まずMake Location ObservationノードのInputについてです。

最初のInputであるObjectはLocationのDataを保持するObjectを指定しているそうです。

ので特にここで何かを指定してる訳ではないです。

次のInputであるLocationですが、ここにObjectに保持するLocationの値をPassします。

このTutorialの例ではGoalのLocationが指定されています。

しかしそれはGlobal Coordinateの値で、この節の最初で説明したEgocentric Coordinatesを使用したAgentを中心とした値ではありません。

三番目のInputであるRelative TransformはLocationでInputされた値をここにInputされた値からの相対的な位置に変換します。

そしてこのTutorialではここにAgentの位置がPassされています。

つまりこれで、Goal PositionがGlobal Coordinateの値からEgocentric Coordinatesを使用した値に変換された訳です。

やっとこの節で説明されている内容が理解出来ました。

最後のScaleはここで得た値をNormalizeしてるだけです。

CopilotではScaleに関しては以下の説明をしていました。

ここは先週勉強した記憶があります。

一個分からなかった事は理解出来たのですから今週はこれで良しとしましょう。

最後に前のBlogを読み直してこの部分をどう勘違いして理解していたのかを確認します。

7.3 前のBlogを読み直してEgocentric Coordinatesをどう勘違いして理解していたのかを確認する

2025-03-30のBlog

Observation Exampleの節を読み返してみると、Egocentric Coordinatesだけでなくその他の専門用語の意味もほとんど理解していません。

まあ、最初の勉強なんてそんなものかもしれません。

ただOffset CoordinateとEgocentric Coordinateの違いについての説明はしっかりしていますね。

この説明は今でも使用出来ます。

Egocentric Coordinatesについては以下の解説が書いてありました。

ここのParagraphの理解はほぼあっていますね。

結構正しく理解していました。

この後の具体的な実装は全く意味が分からないと書いてあります。

最初の勉強ならこれで十分でしょう。

この後、完全に勘違いしてこのTutorialの説明だとよく分からないけど、このTutorialこのまま勉強して大丈夫かとなり、別なTutorialを探し始めています。

これは今回の話とは関係ないので2025-03-30のBlogのまとめはここまでとします。

結構しっかり考察、推測して勉強していました。

2025-04-20のBlog

この次にこのTutorialを勉強してるのが2025-04-20のBlogなんですが、3週間も空いています。

体調崩してしまったんです。やっぱり無理はいけないです。

Egocentric Coordinatesとその実装については何も書いていませんでした。

2025-04-27のBlog

先週のBlogです。Clickで飛びやすいようにLinkを作っておきました。

まずGather Agent Observationの実装を行っていますが、これがEgocentric Coordinatesを実現するための実装である事は全く理解していません。

しかしここでScaleについて調査していて、

Circuitの大きさが253mだから100ではなく10,000にセットすべきと論じています。

これは、今でも重要な指摘です。

こうやって今までの勉強を見直すと、一寸ずつ理解が増しています。

こんな感じで勉強していきます。

8. DirectX12の勉強

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

8.1.1 前回の復習

NvidiaのNsight Graphicsの使用方法を勉強していました。

そうだ今週はこれをInstallする事にします。

8.1.2 Nsight GraphicsのInstall方法を調べる

これはSimpleにAIに聞いてしまいます。

Copilotの回答です。

もうこれで十分でしょう。

各StepをCheckして行きます。

Step1です。

Link先を見てみます。

Windows版をDownloadすれば良いだけです。

Step2です。

今度はこのSoftが動かせる環境にあるかどうかをCheckします。

Link先のInstallation Guideを確認します。

Link先のLink先とかに飛んでやっと要求されるDriverのVersionが出て来ました。

私のDriverのVersionは572.83なのでギリOKです。

OSとかVideo CardのRequirementも一応調べましたが大丈夫でした。

次のStepです。

単にExe fileを実行するだけです。

これはやる必要ないです。

これも関係ないです。

はい。やり方分かりました。

以下のDownloadをClickしたら

Downloadが終わったら直ぐにInstallが開始しました。

この部分の設定方法については何も説明されていません。

うーん。

そのままで良いや。

出来たみたいです。

開けました。

開けたのが良いんですが、DesktopにIconが無いです。

DesktopにIconを追加する方法を調べます。

出来ました。

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

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

今週はこっちを勉強します。

8.2.1 前回の勉強

前回勉強したのが相当昔です。復習しないと何をしたのか全く覚えていません。

まず復習します。

2025-03-30のBlogで前回の勉強をしていました。ほぼ一か月ぶりの勉強になります。

「5.10 Pixel ShaderのProgramを変更」を勉強していました。

この節が終わると一応、Textureを貼ったPlaneが表示されるようになっています。

8.2.2 「5.10 Pixel ShaderのProgramを変更」を勉強する

2025-03-30のBlogによると教科書の内容とSample Codeの内容が微妙に違うみたいです。Sample Codeの内容と同じにします。

BasicPixelShader.hlslに以下の実装を追加しました。

更にBasicPixelShader.hlsl内のBasicPS()関数内の実装を以下の様に変更しました。

これで完成です。

実行してみます。

おお、出来ました。

Textureが表示されるようになりました。

9. まとめと感想

なし

10.参照(Reference)

[1] Procedural Minds. (2024, August 11). Here’s how to adjust your building based on the asset size | UE 5.4 p2 [Video]. YouTube. https://www.youtube.com/watch?v=xVMz-LW1SJw

[2] UE 5.4 PCG Building Series. (n.d.). YouTube. https://www.youtube.com/playlist?list=PLokuMVKY46wh11uPz7UeJlPuWS65CvobM

[3] Procedural Minds. (2024, August 18). Isolate corners with PCG to create pillars and roofs | UE 5.4 p3 [Video]. YouTube. https://www.youtube.com/watch?v=x0J_i56zaOw

[4] Creating and Modifying Control Rig. (n.d.). Unreal Engine. https://dev.epicgames.com/community/learning/courses/5vL/unreal-engine-creating-and-modifying-control-rig/DnO1/unreal-engine-creating-and-modifying-control-rig-overview

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

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

[7] Practical Deep Learning for Coders - 3: Neural net foundations. (n.d.). Practical Deep Learning for Coders. https://course.fast.ai/Lessons/lesson3.html

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

[9] Berk Tepebağ. (2024, August 20). 4 - Action Graphs - Part 1 - NVIDIA Isaac Sim - MUSHR RC Car - Ackermann Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=pqE2y8YVdGI

[10] ROS 2 Ackermann Steering — Omniverse IsaacSim latest documentation. (n.d.). https://docs.isaacsim.omniverse.nvidia.com/4.0.0/ros2_tutorials/tutorial_ros2_ackermann_steering.html

[11] ROS 2 Tutorials (Linux and Windows) — Isaac SIM Documentation. (n.d.). https://docs.isaacsim.omniverse.nvidia.com/latest/ros2_tutorials/index.html

[12] URDF Import: Turtlebot — Isaac Sim Documentation. (n.d.). https://docs.isaacsim.omniverse.nvidia.com/latest/ros2_tutorials/tutorial_ros2_turtlebot.html

[13] What is Isaac Sim? — Omniverse IsaacSim. (n.d.). https://docs.isaacsim.omniverse.nvidia.com/latest/index.html

[14] Nine Between. (2021, February 13). VEX isn’t scary Project - Part 4: Rendering [Video]. YouTube. https://www.youtube.com/watch?v=SYxlVqwvONE

[15] Learning to Drive (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