
1.今週の予定
今週もこの順序に従って勉強していきます。
- 映像作成用UE5の勉強
- AIの勉強
- Nvidia Omniverseの勉強
- Gaeaの勉強もしくはVroidとUE5の勉強
- Houdiniの勉強
- AIについての調査(ComfyUIの勉強)
- DirectX12の勉強
それぞれの勉強の最初にその勉強をする目的を一寸だけ書いておきます。
2. 映像作成用UE5の勉強
2.1 PCGを使用した神社の作成
先週は以下の場所にPointを生成しました。

今週はこのPointを内側に少しだけ移動します。
出来ました。

以下にやり方をまとめます。
色々弄ってるうちに、Pointの位置を内側にずらすには、それぞれの辺で異なる移動をする必要がある事が判明しました。
まず以下の右辺1のPointを生成してる実装部分を見つけました。

以下の部分です。

このPointをずらします。

右辺1はxに50、yに-50ずらしました。
すると以下の様にPointが移動します。

次は右辺2です。

実装部分です。

以下の様にずらしました。

右辺2はxに50、yに50ずらしました。
結果です。

以下の様に移動しました。
この移動したPoint同士を以下の様にMergeして

以下の結果をSubtractすると

以下の様になりました。

ほぼ同じような処置をした左辺1と左辺2をMergeすると以下の様になります。

更にOriginalのPointとのDifferenceを取ります。

Density Filterノードを使用して灰色のPointを消しました。

屋根を追加で表示させると以下の様になります。

形を変更してもPointの位置は、ずれたりしません。

<課題>
今回はずらず距離を50cmに固定しましたがこの値は屋根のSizeかThicknessから導く必要があります。
後は、屋根の端を作成して向きがあってるかどうかです。
多分あってないでしょう。
でもその時はもう一回屋根の端の実装をやり直せば良いだけです。
次にやるときはPointの移動の原則をもっと理解してるので、もっと数学的に厳密な方法を思いつくでしょう。
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]の続きを勉強する
まず前回の実装が終わった状態でテストしています。
以下の様にWallのScaleの値を変更して、

壁のY方向の厚さを2倍にしました。

Y方向のOffsetの場合です。

隙間が空いてますね。
全てのStatic Mesh Spawnerノードの前にこのPCG Offset Transformsノードを追加しています。

今度は柱の大きさを変更します。

X, Y方向に2倍にしました。

おお、柱が太くなっています。
以下のRoof Boarder WallのScalingの実装は要らないので消します。

すると以下の様に隙間が空きますので

この隙間はScalingで埋めます。
今の設定だとCornerの部分で飛び出してしまいます。

この例ではXの値を3にしていました。
以下の場合はXの値が1.05で

このように少しだけScaleの値を変化した場合は、何の問題も無いです。
<07:54 - Doors Setup>
PDA_Modular BuildingのVariablesにDoorsを追加しました。

そしてDA_RegularBuildingのDoorsに

MegaScanにあるMeshをセットしました。
ここで使用するTechniqueは、Overlapした時にこのMeshを表示するTechniqueだそうです。
そう言えば、PCGを勉強し始めた時に、森に道路を通すTutorialをやりました。このTutorialでOverlapしたところに別なMeshを生成したはずです。
こういう方法を自分で思いついてProjectに利用出来るかどうかがProjectが完成するかどうかの鍵になるんですね。
それは兎も角、Proceduralな生成方法の意味を説明すると、実装に限って言えば「Pointを生成してそのPoint上にMeshを生成する方法の事」がもっとも実態を表しています。
これをいかに速く理解出来た人は、PCGによる生成もすぐにMaster出来るようになる訳です。
Trigger Boxを追加しました。

Actorの方のTagに

Doorを追加しました。
Wallの実装です。

赤い四角の場所にCodeを追加します。
まずGet Actor Dataノードを追加しました。

設定も変更します。

この図ではTrack Actors Only Within BoundsはCheckされていますが、Uncheckします。
後、Actor FilterとModeも変更していました。Actor FilterはAll World Actorsに、ModeはGet Single Pointに変更していました。
今度はIntersectionノードを追加します。

Triger Boxを移動させると以下の様にPointが表示されます。

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

このように組む事で、Trigger Box内にあるPointからWallが生成され無くなります。

そしてこの後はいつものMeshを生成するための実装を追加します。

結果です。

Trigger BoxのSizeを大きくしたら

少し変ですね。
あ、WallとDoorが重なって生成されているんだ。
これを直すには以下に示したDifferenceノードのDensity Functionの値をBinaryに変更します。

これはあれだ。
Pointの色が灰色な事と関係してるんだ。
この値をBinaryにすると灰色のPointも消すようになると推測出来ます。
これは実装する時確認します。
結果です。

今度は同様にRegular Wallの方にもDoorの実装を追加します。
ただし同じように実装を追加するとCodeが複雑になって見にくいので、整理してから実装します。
まず以下の様にNamed Re Routeを追加してそれぞれに名前を追加します。

先程作成した実装にDetailed Wallsノードを繋ぎます。

更にDifferenceノードのSourceにもDetailed Wallsを繋ぎます。

まだWallの実装と繋がっているNodeがありました。
DifferenceノードのOutです。

ここにもNamed Rerouteを追加します。名前はDetailed Wall Minus Doorsにしていました。
Wallの方の実装で以下に示したPCG Scale Wall SizeのPointsの部分をDetailed Walls Minus Doorsノードに変更しました。

先程作った実装は以下の様にCommentでまとめました。

もうここまで書くとどうやってRegular WallにOverlapするDoorの実装を作成するのかは自明ですが、一応以下にまとめておきます。
まず以下の実装をCopyして

赤い四角で囲ったNodeだけ変更しました。
残りは一緒なのでCopyして使うのかと思ったら以下の様にDetailed Wallsの実装に寄生していました。

賢い。
これで終わりかと思ったら今度はWallの実装を整理していました。
Regular Walls Minus Doorsノードを追加しました。

テストしています。

おお、出来ています。
でも二階や三階にDoorをつける意味は無いですね。
この後もまだ実装の整理をしています。

Get Actor Dataノードを一個だけにしてそのParameterのSelect MultipleをEnableしました。

これで以下の様に入口を複数生成出来るようになりました。

大体10分勉強したので、今週のPCGの勉強はここまでにします。
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 先週の復習
Full-Body IK [3]を勉強しました。
以下に示した様に、膝を曲げるような設定方法を教わったんですが、

何故この方法で膝が曲がるようになるのかが全く分からないです。
最後に以下の様に書いていました。

そうか色々いじってみないとそれぞれの設定の機能が分かりません。
今週はいろいろいじってみます。
2.3.2 いろいろいじってみる
Foot_lの位置を上げると

膝が曲がります。
Bone Settingの設定です。

となっています。
Full-Body IK [3]の最初に以下の様に書いてあります。
ご使用のセットアップによっては、FBIK(Full Body IK)の基本動作が意図した通りに機能しない場合があります。
これは、一部のボーン設定が有効になっていないことが原因かもしれません。
ボーン設定とは、Full Body IKノード内にあるプロパティで、FBIKが影響を与える各ボーンの挙動を制御するために使用されます。
この言い分をそのまま鵜呑みにするなら、Bone Settingの設定を変更すれば膝が正しく曲がる様になった理由が判明するって事です。
以下の様にZとYの値を交換してみました。

結果です。

膝は、今までと同じように曲がります。
うーん。よく分かりません。
以下のようなBone Setting以下の実装を消したFull Body IKを作成しました。

この状態で足を上げると

膝は曲がりません。
Pelvisがとんでもない事になっていますね。
だからBone SettingでPelvisのStiffnessを調整したんでしょうか?
では

PelvisのStiffnessだけ変更してみます。

おお、この状態で膝と足首が曲がる様になりました。
確かにPelvisの移動距離がPosition Stiffnessによって限定されたら膝と足首が曲がるしかなくなります。
でも膝の曲がる方向とかどうやって指定するんでしょうか?
前に逆向きに曲がってしまったModelがあります。
次に以下の3つです。

Full-Body IK [3]を読むとLimitsと書かれていました。
更にその機能として
以下の様に足首が曲がっているのを

Zの値の設定を以下の様に変更する事で、

以下の様になると説明しています。

これは足首の曲がる角度が60°までになってるようですね。
同じ事が起きるか試してみます。
何も指定してないじょうです。

Zの値を以下の様に変更しました。

はい。
足首の曲がる角度は以下に示した様に

足の位置によって変化します。

Limitがかかっていても足首の角度は60°以上曲がらないという事にはならないです。
厳密に測定するためにSide ViewでWire Frame表示に変更しました。
ZがFreeの設定の時です。
足を前方上部の端まで移動しました。

同じ場所にZの設定をLimit、60°でやってみます。

全く同じに見えます。
今度は足を後方上部に移動させます。
Zの値がFreeの時です。

Zの値がLimit、60°の時です。

変わってないです。
Preferred Anglesの実装も同じです。

値を追加しても足首の角度に何の変化も起きなかったです。
あ、大変な事に気が付きました。
Full-Body IK [3]で足首のControlを設定する時は
以下の様に足首にControlがあります。

しかしLimitなどを設定してTestする映像では
以下の様に足のつま先にControlが設定されています。

ははあ。
途中でControlの位置を変えたな。
ここで7月14日の週はやる気が無くなってしまって中止して休む事にしました。
のでここからは次の週、7月21日の勉強になります。
足のBoneを調べたら以下の様に


Foot_rの先にBall_rがありました。
ここにControlを作成します。

更に作成したControlをFull Body IKノードに以下の様に接続します。

Testします。

なんと膝が全く曲がりません。
Foot_r_Ctlがあるからでしょうか?
消してTestしてみます。

まったく同じ結果になりました。
Full-Body IK [3]では以下に示すように膝が綺麗に曲がっています。

無理やり曲げたら膝、曲がりました。

Use Prefered Anglesを使用しました。

結果です。

変わりません。
これってあくまでもPelvisの設定なのだから、足首の設定は別に作成する必要がある気がしてきました。
試してみます。
以下の様にFoot_rを追加して更にLimitをLockしてみました。

結果です。

膝が逆に曲がるようになりました。
ああ、これだ。今度は更にCalf_Rも追加してみます。

以下の様にStiffnessの値を1にしました。

結果です。

膝が曲がらなくなりました。
さらにいじってみるとZの値によって膝の角度に制限がかかる事が分かりました。
このScreenshotを取るためにもう一回いじったら今度は出来ません。
なんかFull Body IKは前のDataが残って悪さしてる感じがします。
あまり頼り過ぎない方が良いかもしれません。
このTutorialの図を見ても分かるように、Footといって途中で内緒でBallのBoneに変更してたりして、全体的に嘘がありそうです。
信じすぎるのは危ないかもしれません。
結局、膝が逆方向に曲がるのを直す方法は分かりませんでした。
Full Body IKは以下の様に足を前後に移動さえた時は綺麗に動きます。

CR_Mannequin_Bodyの

Foot_r_ik_ctrlを動かすと

膝は綺麗に曲がります。

来週はこのCR_Mannequin_BodyのFoot_r_ik_ctrlの設定を検証する事にします。
3. AIの勉強
AIの勉強の目的ですが、
生成AIが凄いTrendになってるので、最低限の基礎は知っておくべきと思いこの勉強を始めたんでした。
のでこれを勉強してどうしたいというのは無いです。
3.1 前回の復習
Getting started with NLP for absolute beginners [4]を途中まで実装しました。
最後に以下の様に書いてありました。

そうか。
Kaggleを開いて何をやったのかを確認します。

一応、前回やった結果はそのまま表示されています。
しかしInstallはされてないはずです。
全部やり直す必要があります。
前回のBlogを参考にしてやり直します。
Modelを変更したところの実装が抜けていたのでそこだけ追加しました。

以下の部分までやり直しました。

ここまで前回のBlogと全く同じ結果になっています。
うーん。
Collabでやり直す前に、一回Kaggleで全部やった方が良い気がして来ました。
今週はKaggleで最後までやる事にします。
3.2 Getting started with NLP for absolute beginners [4]の続きをKaggleでやる
<Metrics and correlation>
この部分からはまだ勉強もしてなかったです。
まず文章を読んで内容を理解します。
ああ、ここからカリフォルニア住宅価格データセットを使用したPearson correlation coefficientの使用方法の勉強が始まるんだ。
以下のCodeを実行しました。

これはscikit-learn ライブラリから、カリフォルニア州の住宅価格データセットを読み込み、ランダムに1000件だけ抽出しています。
最後のHead()関数でデータの最初の5行を表示しています。
次のCodeです。

Npの定義をしたCellを実行してないので、ここで実行します。
そして以下のCodeを実行しました。

ChatGPTにこの表の結果を解説して貰ったら以下の様になってるとの事でした。

そして以下の関係がある事が判明しました。

成程。
こうやって見るのか。
次の実装です。

さっきの表にあるMedIncとMedHouseValの値を返しています。
次の実装です。

[0][1]の意味が分かりません。
ChatGPTに質問します。
分かりました。
元々、Corrcoef()関数の答えは以下のようなMatrixになっています。

[0][1]は0行の1列の値を返してと言う意味だそうです。
次の実装です。

これはshow_corr()関数の定義をしただけですね。

休憩長くとり過ぎた。
もう一回やり直します。

家の価格が500,000ドルで頭打ちになっています。
これは最大値が500,000ドルの設定になってる可能性があります。
高所得層はDataが少なく正の相関関係があるのかよく分からないです。
次の実装です。

こっちは収入と部屋数の関係です。
ピアソン相関係数(Pearson correlation coefficient, r)の値は0.42と先程の収入と家の価格の0.68より低いですが、こっちの方が強い相関関係があるように見えます。
この理由はOutlinerが存在してるからです。
Outlinerの取り扱いについては散々勉強しました。
今回は単に取り除いてしまいます。

15以上の部屋数のDataは取り除いて再度計算しました。
今度はRの値が0.68になりました。
次の実装です。

家の値段と部屋数の関係です。
相関関係は低いですね。
築年数と部屋数の関係です。

こんなの関連性ないだろうと予測出来ますが、実際なさそうです。
ここでMetrics and correlationが終わっています。
先週、サボっておいて何ですが、まだやる気が戻りません。
今週はここまでにします。
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 [5]の勉強
Version 4.2.0のIsaac Sim Documentation [6]のTutorialの勉強がROS and ROS2まで終わるまでPending。
WorkspaceのInstall方法並びに、Installした後の確認方法は理解したので時間があったらWorkspaceだけInstallしておきます。
ただし今週も他にやる事が沢山あるのでやりません。
4.2 Version 4.2.0のIsaac Sim Documentation [6]のTutorialの勉強
4.2.1 先週の復習
前回は、以下に示したIsaac Sim Documentation [6]のTutorialの

Build Your First Virtual Worldにある
以下のTutorialを勉強・実装しました。

具体的にはOmniGraphの途中からOmniGraph: Input Devicesまで勉強しました。
それぞれ勉強した内容について簡単にまとめます。
<OmniGraph>
2つ目のAction Graphの追加方法が分らないと書いてありました。これやり方を見つけたと思ったんですが。Blogには書いてなかったです。記憶違いだったのかもしれません。
Keyboardの入力をIsaac Sim内のRobotに伝えるには以下の実装を行います。

To DoubleノードはIs Pressedの結果をDoubleに変換します。この後、結果の値を計算式で変化出来るようになります。
<Omnigraph Shortcuts>
Game Padから操作する方法を勉強しました。
特に記述する内容は無いです。
4.2.2 Development Toolsを勉強する
次のTutorial節であるDevelopment Toolsを勉強します。

4.2.3 Running Python Code from External Editors [7]を勉強する
それではこの節の最初のTutorialを勉強します。
Isaac Sim からOmniverse Script Editor の代わりに外部エディタを使ってPython Scriptを編集・実行することも出来るそうです。
ここでは、Visual CodeとJupyter Lab/Jupyter Notebookを使用してPython Scriptを操作・編集する方法を勉強します。
<VS Code>
以下の方法で出来るそうです。

更にその下のVideoの解説がありました。
やってみます。
VS Code Integrationを追加します。

再起動します。
Windowを開いてもVS Code無いです。

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

もう一度、Extensionsを開いて確認したら

Deprecatedと書いてありました。
しかし4.5からDeprecatedとあるんだから、4.2なら動くはずです。
もう一回確認したらありました。

なんで?
まあいいです。
VS Codeを開きます。

なんだこれ?
ChatGPTに聞いてみます。

だそうです。
これはChatGPTの指定通りにPython.batのAddressを指定したらError Messageは消えました。
2番目のError Messageです。

これを解決しようとした時に、ChatGPTから

と言われてしました。
うーん。どうしよう。
更に以下の部分の更新も止まっています。

TutorialにあるVideoを見ると
このへんの警告は無視して
以下のIconを選択して

Open Fileを選択して

以下のFileを読み込ませていました。

CommandのRunを押して実行すると

Isaac Simに以下のSphereが表示されました。

Test_Script.pyを作成します。
うーん。
これってVS Codeから作った方が簡単じゃ。
いや、今の状態だとどこに作成されるか全く分かりません。

出来ました。
これを実行出来たらそれでOKです。

うーん。
駄目ですね。
一回VS Codeを閉じます。
もう一度起動させました。

から実行しました。

やっぱり

から実行しないと駄目のようです。
あれ?

こっちをInstallする必要があるの?
うーん。
明日やるか。
ChatGPTに質問出来るようになってから続きをやった方が進みそうです。
今日はここまでにします。
出来ました。
Pointは以下に示したScript EditorからTextを実行する必要がありました。

以下のCodeを実行しています。

今度は、

を実行してみます。
以下の様にSphereが表示されました。

以下のようにSphereが生成されています。

ChatGPTの説明によると

という事だそうです。
Defaultで存在してるWorldにSphereを生成する場合のCodeをChatGPTに聞きました。

おお、Pythonを使用してIsaac simを操作する方法が大体理解出来ました。
<JupyterLab / Jupyter Notebook>
今度はJupyter LabやJupyter Notebookを使用してIsaac Simを操作する方法を説明しています。
Jupyter NotebookはWSL2にInstallしていますが、Windows11には入っていません。それでもJupyter Notebookを使用する事が出来るんでしょうか?
Tutorialにはその辺の説明はありません。
ChatGPTに聞いてみます。

だそうです。
やってみます。

出来ました。
以下のCodeを実行しました。

結果です。

Jupyter Notebookを起動した場合は、EditorからどのFileを実行するのかを指定する必要はないです。
こっちの方が楽ですね。
以上です。
今回は思ったより時間がかかってしまいました。
ここで終わりにします。
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 前回の復習
前回、水のsimulationの勉強をしたんですが、具体的に何を勉強したのか全く覚えていません。
前回のBlogを読んで確認します。
Houdini Tutorial | How to do White Water in Houdini [8]の最初の10分を勉強したんでした。
このTutorial自体は良いんですが、いかんせん言語がHindiです。
字幕で英語は表示されるので気入れてみたら全部理解する事は可能ではあります。
ただ言語を聞いてるとなんか言ってる事が理解出来そうで出来ない。という感じで結構Frustrationが溜まります。
うーん。
やっぱり英語のTutorialに変更するか。
以下のNine Between氏のHodini is HIP SeriesのTutorialの14~19にFluidのSimulationがあります。

これを勉強するのが無難な気がします。
こっちをしばらく勉強する事にします。
6.2 Houdini is HIP - Part 14: Flip Fluids I [9]を勉強する
まずNotebookLMを使用して要約します。どうもこの回はFLIPがどんな計算方法であるのかを説明するのが主のようです。
理論の理解にはNotebookLMです。
NotebookLMで要約したら簡単に骨子を把握出来るようになるかもしれません。

やっぱりこのTutorialではFLIPの理論的な説明をしてますね。
Mind Mapを見てみます。

Simulationの解法ではFLIPと他の2つの流体の計算方法の理論について説明してるはずです。
FLIP流体の基本設定で、HoudiniにおけるFLIPの使用方法を勉強するんでしょう。
最後の高度の制御はParameterの設定についての解説だと思われます。
Simulationの設定を開きます。

やっぱりそうでした。
それぞれの要素を見ると、Lagrangian法はParticleを使用し、Eulerian法はGridを使用します。
FLIPは両方使用します。

こんな順序で計算するそうです。
こんなのは自分でCodeを書くわけではないので、ざっと理解しておけば十分です。
次のFLIP流体の基本設定こそが、このTutorialの勉強すべき箇所です。

それぞれの要素を見てみます。

Pop Sourceは使用した事無いですが、単なるParticleのNodeでしょう。Particleに関してはUE5のNiagaraを3年間以上勉強したので、簡単に理解出来るはずです。
その後のFlip DOP Sourceからの内容が今回勉強したい内容のはずです。
Flip DOP Sourceの要素を見てみます。

SDF、Signed Distance Field Volumeと書かれています。

Flip DOP Sourceノードには2つの機能があってその内の一つが、Fluidの表面を表す機能です。
このFluidの表面を表す機能を担当してるのがSDF Volumeだそうです。
さらに詳しく以下の様に説明しています。

要はFLIP DOP Sourceこそが大切で、その一部の機能がSDF Volumeであるという事です。

パーティクルだけでは不可能だった表面張力のような流体の挙動や、流体が合流する際の形状変化を計算することが可能になります。
と書いてありますがそうなの?
始めて知りました。

これもFlip DOP Sourceノードの説明ですね。
どうやらFlip DOP Sourceノードについて理解する方が重要で、SDF、Signed Distance Field Volumeはそのおまけみたいな感じの様です。
次はDope Networkについてです。
これはその次の要素でも以下の様に細かく解説されています。

Dop Networkは、流体挙動の計算と定義を行うLayerのようです。
この中で流体の設定を行うはずです。
更にDope Networkについて以下の説明がありました。

ここでDope Networkの目的がSimulationの計算である事が分かります。
更に、Flip Object、Flip Solver、そしてOutputノードの3つで構成されている事も分かりました。

Flip Objectの機能について簡単に説明しています。
SDF(Signed Distance Field) Volumeはここで使用するようです。
あれ、でも
Flip DOP Sourceは、ボリュームソースとしてFlip Solverの最後の入力に接続されます。
とも書かれています。
Flip DOP SourceはFlip ObjectかFlip Solverのどっちで使用するんでしょうか?
これは実装する時に確認します。

これは今までも散々聞かされて来た内容です。

Gravity ForceとGround Planeについての解説ですね。
流石にこれらのNodeなどの機能を今の時点で勉強するのは無理です。内容が具体的過ぎて直ぐに忘れてしまいます。
ここは粘性のあるFluidを垂らすSimulationの設定方法もここに少しですが解説されている事だけ覚えておく事にします。

SDFを可視化出来るそうです。

これは勉強がもう少し進んだ時の話ですね。

計算結果のExport方法を説明してるのか。
次のParameterの調整です。

Flip Objectの設定やFlip Solverの設定(Collision)についての解説ですね。

あ、分かった。
Flip ObjectにParticle Separationの設定があるんだ。
そしてParticle Separationの設定ではここに紹介されている3つの要素が関係するんだ。
成程。

今度はFlip Solverの設定です。
このへんは実装しながら勉強します。

Volume Lossって何を指してるんでしょうか?
Volumeが無くなってしまう現象でもあるんでしょうか?
ここでFlip流体の基本設定が終わりました。
今度は

です。
それぞれの内容も見ていきます。

これは単なる操作手順です。
実装する事で勉強します。
残りの2つもだいたい同じでした。
ここで気力が尽きました。
続きは来週勉強します。
7. AIについての調査(ComfyUIの勉強)
AIを使用するためのSoftが大量に公開されていますが、それらについて全く理解していません。
3Dやイラストそして動画関連のAI Softについて、
どんなSoftが公開されているのか?
それらのSoftを使用するとどんな事が出来るのか
どんな方法で操作するのか、
などの一通りの事を勉強しておこうと思い、この章を特別に作りました。
特にComfyUIの使用方法やそれに関して生成出来るイラストや映像について集中して勉強していこうと思っています。
2025-03-30のBlogでUE5でもReinforcement Learningが出来る事を知りました。
のでComfyUIの勉強は一端中止してこっちを勉強する事にします。
Learning to Drive (5.5)Learning to Drive (5.5) [10]の実装内容の検証を行っていきます。
7.1 Improving Observations & Debugging (5.5)[11]を勉強する
今週からこのTutorialを勉強します。
前回のTutorialでは、Learning Agents API の基本を学び、車をTruck上で走らせるTrainingを行いました。
しかし前回の実装方法ではいくら学習させても、最後まで自動運転する事は不可能だそうです。
このTutorialでは、車のInteractorを改善することで、挙動を大きく向上させます。
<Why didn't it work well?>
InteractorのSpecify Agent Observation()関数を見るとこの原因が分かるそうです。

この実装をみるとそれぞれの車は
- (自分自身からの相対オフセットベクトルとしての)ある一点、
- スプライン上のその点における進行方向、
- そして自分自身の速度
を見ています。
もっと分かりやすく言えば、車は
- 「道路の中心からどれだけ離れているか」
- 「道路がどの方向に曲がっているか」
は分かりますが、それ以上の情報はあまり持っていません。
実際に我々が車の運転するときは常に前方の道路をスキャンして、車がどこへ向かうべきかを把握し、道路から外れないように必要な操作を予測して行っています。
<Lookahead Observations>
前方の道路をスキャンする機能を追加します。
BP_SportsCarInteractorを開きSpecify Agent Observation()関数を開きます。
float型のArrayであるVariableを追加します。名前はTrackDistanceSamplesとします。
以下のような値をセットします。

これらの値が車からどれだけ前方であるかを示します。
この値が示す位置からSplineの位置と向きの情報を取得するそうです。
そしてSpecify Agent Observation()関数の実装を以下の様に変更します。

以下に示した部分が変化していました。

何でこの実装で車の前方のPointからの情報を取得出来るの?
<Gather Agent Observation>
Specify Agent Observation()関数の実装を変化させたので、それに対応してGather Agent Observation()関数の実装も変化させます。
変化させたGather Agent Observation()関数を以下に示します。

ひええ。
これは何処を変化させたのか分かりません。
Tutorialの説明を読んで勉強するだけにします。
以下の様に書かれています。(ChatGPT訳)
壊れている接続を修正し、以下の項目をローカル変数として昇格させてください:
-
- Track Observations
- Sample Distance
このバージョンは前回のものとそれほど違いはありません。最初に、サンプリングしたい距離の一覧をループし、それから必要な情報を取得するためにスプラインを参照します。
実装そのものはそんなに変化してないのか。
じゃあ、変化したと思われる、サンプリングしたい距離の一覧をループするための実装の部分だけ確認します。

Tutorialにその部分の実装もしっかりScreenshotで載っていました。
あれ?ここで車の前方のPointからの情報を集めてる。
じゃ前のSpecify Agent Observation()関数は何をしてるの?
ChatGPTに聞いてみます。

成程。
観察するDataを定義してたのか。それなら先程の実装で出来るのも納得です。
じゃ実際のDataはここのGather Agent Observation()関数で集めてるのかな?
これもChatGPTに聞いてみます。

その通りのようですね。
おお、脳に余裕が生まれて来ましたね。
UE5における機械学習の実装の内容が徐々に理解出来るようになって来ました。
AIの学習とかになると他の人の実力とかが気になってしまい、焦ってしまって理解してないのに先に進もうとしてしまいます。
これが真の理解を大きく妨げます。
人は人、自分は自分。の境地で勉強しないと本当に勉強した事全部無駄にしてしまいます。
そして以下に示した様にMake Struct Observationノードを

Track Observationsに追加しています。
最後に、以下に示した様にMake Static Array Observation()関数(複数の観察値を1つの配列にする)を使用して

Track ObservationにあるDataを配列化しそこに、他の車の情報を追加します。
そして、またMake Struct Observation()関数を使用してStructに戻し、Return Nodeで結果をStructとして返します。
この実装の後で、Run Inference の値をFalseに変更して学習させたらよい結果が得られるそうです。
7.2 Improving Observations & Debugging (5.5)[11]を途中まで勉強した感想
うーん。
成程。
どんなDataを収集するのかはこっちがAIに指定しないといけないんですね。
そして、どのように学習に使用するDataを収集するのかで学習結果が大きく変わって来るという事ですか。
このTutorialでは前回のTutorialで取得したDataに追加して、我々一般人が車を運転する時にやっている車の前方の点における情報を収集する事で、学習結果を向上させました。
ここに機械学習の効果を左右するPointがあるのか。
これは一つの見識を学びました。
この点について一寸深堀してみましょう。
ChatGPTに質問します。

だそうです。

Robotic AIだけでなくGame AI、自動運転、Droneの制御などの私が一番興味があるAIの分野全部が、
どのように学習に使用するDataを収集するのか、
つまりObservationの設計が重要である事が判明しました。
凄い。
Robotic AIにおけるObservationの設計の例が紹介されていました。

これは面白い。
Observation Dataを集めるのに色々な制約があるんですね。
そして集めすぎると情報過多の問題が起きるのか。
学生がむやみに勉強量を増やすと逆に成績が落ちるのに似てますね。
更に、Observation Dataをどう集めるのかは、今現在の研究分野としても注目されているそうです。

更にOpenAI GymというLibraryについても紹介していました。

だんたん過学習になって来ました、
ので
今週のLearning to Drive (5.5)Learning to Drive (5.5) [10]の勉強はこの位にしておきます。8. DirectX12の勉強
8.1 Lötwig Fusel氏のD3D12 Beginners Tutorial [D3D12Ez]を勉強する
8.1.1 先週の復習
Resources, Heaps & Copying | D3D12 Beginners Tutorial [D3D12Ez] [12]の勉強と実装の続きをしていました。
Upload Heapの生成で、D3D12_RESOURCE_DESC型を作成しましたが、ここでLayoutの値を指定しないとErrorになります。
何故かTutorialとSample CodeにはLayoutの指定が無いにもかかわらずErrorになってないので、その理由を確認しました。
その理由ですが、
なんと、Tutorial、並びにSample CodeでもD3D12_RESOURCE_DESC型の作成でしっかりLayoutの値を指定していました。
更にFlagの値も指定していました。

多分、疲れていたんでしょうね。
その後で、Default Heapの作成も行いました。
最後にTestしてDefault Heapがきちんと出来てるのか確認しています。
そして

と言って終わっています。
8.1.2 Default Heapがきちんと出来てるのか確認する
正直、何がどうなってたら完成してるのか分かりません。
取りあえず前回の勉強と同じようにBreak PointをつけてDebugしDefault Heapに関連するStructやObjectの値を見てみます。
hpUploadの値です。

VertexBufferの値です。

正直、見ても何らかの値があるという事以外何も分かりません。
出来てると仮定して続きをやります。
8.1.3 Resources, Heaps & Copying | D3D12 Beginners Tutorial [D3D12Ez] [12]の続きを勉強する
またNsight Graphicを使用してTestするみたいなので勉強だけ先にやります。
Nsight Graphicsを起動させました。

Adminで起動させるのを忘れてた。とか言っていますがNsight GraphicsはAdminから起動させる必要があったんでしたっけ。
後、ここでTestできるのはReleaseで作成したexe Fileだけだったような。
以下のContinueにあるProjectを開きます。

以下のBoxが開きました。

特に変更はしてません。
Launchを押して起動しました。
以下に示したNVIDIA Nsight GraphicsというBoxが開きました。

Keepを選択しました。
以下の画面が開きました。

Captureをすると言っています。
具体的に何をしたのかは不明です。
画面が以下の様に変化しました。

画面下にBarが表示されています。
UI画面に移動しました。

Frame DebuggerからAPI Inspectorを開きます。

違いました。
直前になってAll Resourceを選択しました。
凄いFeintです。

Texture2Dが2つ、Bufferが2つあります。
Buffer1を選択した状態で、以下のResource Infoを見ると

Heap TypeにUPLOADと記録されています。
Buffer2の方には

Heap TypeにDEFAULTと記録されています。
Buffer2をDouble Clickすると以下の様にBuffer2の中身が表示されます。

Buffer2にはなんのDataも入って無いので全部0です。
注目すべき点は以下のAddressです。

TutorialではこのAddressを見て、GPU内にHeapを作成してる。って言っています。
そうなの?
そりゃDefault Heapだから普通に考えたらVRAM内にHeapを生成すると考えられますが、このAddressからそれが分かるんでしょうか?
Upload HeapとDefault HeapのAddressを比較しています。

で、違いがよく分からないと言っていました。
やっぱりAddressからVRAMにHeapを作ってるって分かった訳でなないようです。
以上でNsight GraphicsのCheckは終わりでした。
8.2 「DirectX 12の魔導書」を勉強する
ここでぎっくり腰になってしまいました。
今週はここまでにします。
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] Full-Body IK. (n.d.). Unreal Engine. https://dev.epicgames.com/documentation/en-us/unreal-engine/control-rig-full-body-ik-in-unreal-engine
[4] Jhoward. (2022, May 16). Getting started with NLP for absolute beginners. Kaggle. https://www.kaggle.com/code/jhoward/getting-started-with-nlp-for-absolute-beginners
[5] NVIDIA Isaac Sim - MUSHR RC Car - Ackermann Tutorial. (n.d.). YouTube. https://www.youtube.com/playlist?list=PL60qgWqGu6k82AJ2SDWOscEKLjCc5tdEW
[6] Isaac SIM UI and workflow Tutorials — Isaac SIM Documentation. (n.d.). https://docs.isaacsim.omniverse.nvidia.com/4.2.0/introductory_tutorials/index.html
[7] Running Python Code from External Editors — Isaac Sim Documentation. (n.d.). https://docs.isaacsim.omniverse.nvidia.com/4.2.0/advanced_tutorials/tutorial_advanced_code_editors.html
[8] Fx Guru. (2023, August 19). Houdini Tutorial | How to do White Water in Houdini [Video]. YouTube. https://www.youtube.com/watch?v=Vaj8fdyzEBM
[9] Nine Between. (2023, October 30). Houdini is HIP - Part 14: Flip Fluids I [Video]. YouTube. https://www.youtube.com/watch?v=DJfkTV3Pivc
[10] 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
[11] Learning agents (5.5) Improving observations & Debugging (5.5). (n.d.). Unreal Engine. https://dev.epicgames.com/community/learning/courses/GAR/unreal-engine-learning-agents-5-5/1w7V/unreal-engine-improving-observations-debugging-5-5
[12] Lötwig Fusel. (2023, July 27). Resources, heaps & copying | D3D12 Beginners Tutorial [D3D12EZ] [Video]. YouTube. https://www.youtube.com/watch?v=Mehv3B6l9JY