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 前回の復習

Landscape PatchというPluginを使用して瑞垣が囲む部分を平にしました。

これが

以下の様になりました。

そして最後に

と書いて終わっていました。

2.1.2 楼門を追加する

瑞垣内の草を消したいんですが、やり方が分かりません。

ので、今やり方が分かってる楼門を追加する事を先にやります。

楼門を追加する場所の瑞垣の塀を消す方法は2025-11-23のBlogに載っていました。

2025-11-23のBlogのやり方に沿って以下のようなTrigger Boxを追加しました。

Trigger Box内の瑞垣が消えています。

こっちに変えました。

床を見ると草が飛び足しています。

楼門を地面から浮かせて、そこに床を追加してみました。

これは正面しか作成していませんが、これでOKな気がします。

このやり方で草は隠してしまう事にします。

2.1.3 草を消す方法を考える

Layerを増やして上のLayerに別なMaterialを貼ったらどうでしょうか?

ChatGPTに聞いたら以下の方法で出来ると言って来ました。

No Glassを追加するのはつかえそうなIdeaですね。

もしくはTrigger BoxにTagでNo Glassをつけて、そのNo Glassがある場合は、草を生やさないと言う風な設定に変更しても良いかもしれません。

草はPCGで生やしてるはずです。

ならば、楼門を置く場所だけ瑞垣を消した方法で草も消せるはずです。

草を生やしてる実装を確認します。

PCG使ってなかったです。

Foliageを使用して草を追加してるみたいですね。

Foliageの使用方法なんかもう覚えていません。

うーん。

どうしよう?

ChatGPTの回答は本当はもっと詳しくて以下の様になっていました。

なんかこっちを実行したらそのままできそうな気がして来ました。

以下の箇所に追加出来たら③はいけそうな気がします。

ChatGPTの①の手法だけ別なLandscapeを作成して試してみます。

以下のLandscapeをMW Landscape Auto Materialを使用して作成しました。

Layerを追加しようとしたら

出来ないです。

RemoveFoliageというLayerがDefaultであります。

これを使用したら草を消す事が出来そうです。

LayerInfoを作成しました。

すると草が消えてしまいました。

ChatGPTに聞くと

色々回答してくれたんですがもう時間が無くなってしまいました。

UE5 Landscape Material変更方法

という題でChatGPTには保存されています。来週はこれを復習する事からやる事にします。

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 前回の復習

Create Procedural Interiors With Full Room Separation | UE 5.4 P5 [1]の<15:15 - Set Density on Room Center Points>の実装が実際に何をやってるのかを理解ための復習の続きをやっています。

PCG Random Points with Floorsノードの

中身の実装を検証しました。

ここで

Attribute Filterノードの

設定が

となっています。

ChatGPTによると@Lastの意味は、

直前のNodeが書き込んだAttributeの事だそうです。

しかし、Attribute Filterノードの直前のNodeは、以下のSort Attributeノードで

このNodeではAttributeの値は変更していません。

更に、

Attribute FilterノードのFilterの値は、以下の方法で計算されており

5になるんですが、Densityだと0~1の間の値なので、全部Passしてしまいます。

つまりこのNodeの設定が間違ってるのか、私の理解が間違っているのかのどちらかになります。

で、

と言って終わっていました。

2.2.2 Attribute Filterノードの実装を確認する

Attribute Filterノードをどこで実装したのかを確認します。

2025-10-19のBlogで勉強してますね。

まずこれを軽く読みます。

ここでAttribute Filterノードについて述べているのは、

部屋数のPointだけFilterされるという事だけです。

そうなの?

この実装で部屋数のPointだけFilterされるの?

後、このBlogでこれが Create Procedural Interiors With Full Room Separation | UE 5.4 P5 [1]の<09:00 - Select Room "Center Points" Based on Data Asset Quantity>で勉強した内容である事も判明しました。

Tutorialを見直してみます。

Attribute FilterノードのTarget Attributeの値を$Indexに変更していました。

やっぱし。

どう考えても@Lastはおかしかった。

Projectの方のAttribute FilterノードのTarget Attributeの値も$Indexに変更しました。

Indexとは以下のAttributeの事を指す訳です。

これで疑問の一つ目は解決しました。

2つ目の疑問ですが、以下の実装が、それぞれの階の部屋数を返すそうです。

そうなのかよく分かりません。

これはChatGPTにGet Entries Countノードの機能を聞いてみましょう。

だそうです。

参照してるData AssetのIndexは以下の様になってるので

返す値は5になるみたいです。

この状態でAttribute Filterノードの結果を可視化してみました。

結果です。

こういう結果を求めてたのか。

これならやっと何をやってるのかが理解出来ました。

うーん。でもTutorialのは5個Pointが表示されていますね。

更にそれぞれの階で全く同じ結果になってるのかも分かりません。

あ、でもIndexの数が5で、

Attribute FilterノードのOperatorの値が<なので

4であってるのか。

それぞれの階で全く同じ結果になってるのは正しいかどうかはまだ不明ですが…

取りあえずは、PCG Random Points with Floorsノードの実装の復習を終わらせてしまいましょう。

最後に、Attribute Filterノードの後に、Match And Set Attributesノードが使用されています。

ChatGPTに質問します。

なんか凄い回答が返って来ました。

これは長いし、複雑なので来週勉強する事にします。

ChatGPTの題は

UE5 Get Entries Count

です。

この中でMatch And Set Attributesノードについて質問しました。

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]を勉強する事にしました。

そして2025-12-21のBlogでまとめましたが、別なLayerを使用する事で、Control Rigを使用してLevel Sequence上のAnimationを編集出来る事が判明しました。

ので、後はDragonにControl Rigを追加出来れば、Dragonの爪が地面にめり込んでしまう問題を直す事が出来る事が判明しました。

2.3.1 前回の復習

DragonのSkeletal Meshを使用して以下のControl Rigを作成しました。

そしてLevel SequenceからこのDragonのAnimationを追加し、そのAnimationをControl RigにBakeしました。

次にこのControl Rigを開いて一個だけControlを追加しました。

すると

なんとBakeに使用出来るControl Rigとして認識されなくなってしまいました。

ここでControl RigにBake出来ないと、次の工程に進む事が出来ません。

以下の方法で試してみたらどうかと提案だけ考えて終わっています。

今週はこれらを試してみます。

2.3.2 Mannequinで独自のControl Rigを作成して試す

前回、Mannequinで実験した時に使用したSkeletal Meshです。

既にDuplicateしたSkeletal Meshがありました。

これからControl Rigを作成しました。

これらを使用して先週やった検証と同じ事をやってみます。

まずこのMannequinをLevel上に配置し

Level Sequence上にこのMannequinを追加します。

そしてAnimationを追加し付属のControl Rigを消しました。

今の時点では指定したAnimationの動きをしています。

ここでBake to Control Rigを選択すると

SKM_Quinn_me_Simple_CtrlRig1が表示されています。

先程作成したControl Rigです。

SKM_Quinn_me_Simple_CtrlRig1を開きRoot BoneからRoot_ctrlを作成しました。

更に以下の実装も追加しました。

何故か、先週のBlogにはこの実装部分の記録が抜けていますが、先週のDragonのControl Rigもこの実装はしています。

Control Rigの形状も以下の様に変更しました。

Control Rigを動かすと

Mannequinも動きます。

この状態でLevel SequenceからBake to Control Rigを選択すると

先程まであった、SKM_Quinn_me_Simple_CtrlRig1が無くなっています。

先週試したDragonと同じ結果になりました。

Bake to an invertible control Rig that matches this skeleton

と書いてありますね。

今回はGemini3に聞いてみます。

というかなり複雑な説明をした上で質問しました。

Geminiの回答です。

別にFrustrationは感じてないですが、絶望はしてます。

Invertible(逆変換可能)な状態ではなくなったから

そうなったと言っています。

え、そうなの?

実はそういう気は先週からしてたんです。

前にBackward Solveを勉強した時に、Backward SolveはBoneからControl Rigを操作するための実装と勉強した記憶があります。

2025-03-16のBlogにも以下の様に書いてありました。

もっと詳しく勉強した週があるはずですが、今検索して見つかったのはこれだけです。

そしてGemini3は以下の回答も返してきました。

成程。

試してみます。

Control Rigに以下の実装を追加しました。

CompileしてSaveもしました。

この状態でLevel Sequenceに戻り、Bake to Control Rigを試してみます。

ああ、

SKM_Quinn_me_Simple_CtrlRig1が表示されています。

直りました。

Gemini3凄い。

2.3.3 Gemini3はやっぱりChatGPT5より上です

先週は散々、ChatGPTに同様の質問をして

という散々な結果になってしまったんですが、

今回、Geminiに質問したら一発で解決しました。

先週のChatGPTの回答は、Compileしてないからだ。とかSaveしてないからだ。とか回答していましたが、Backward Solveが未実装とは一言も述べませんでした。

ただ、先週は質問した時に

Bake to an invertible control Rig that matches this skeleton

は書きませんでした。

公平を期すために、Geminiにした質問とまったく同じ質問を今、ChatGPTにもしてみます。

結果です。

あれ?

今回は正しい回答を返してきました。

やっぱり

Bake to an invertible control Rig that matches this skeleton

があると回答の精度が上がるのでしょうか?

しかし解決策でBackward Solveによる実装は述べてないです。

ChatGPTが述べた回答は以下のようなもので

非現実的で実際に実装する事は出来ないものです。

やっぱりGeminiの方が優れた回答を返してます。

そういう事か。

これだけで判断するのは危険かもしれませんが、Geminiの方がChatGPTより上ですね。

2.3.4 先週のDragonで試してみる

では先週出来なかったDragonで試してみます。

Control Rigを新しく作成しました。

Level Sequence上にDragonのSkeletal Meshを配置し

Level Sequenceにも追加しました。

更にAnimationも追加しました。

この状態でBake to Control Rigを選択すると

先程作成したControl Rig、SK_DesertDragon_CtrlRig2が表示されています。

SK_DesertDragon_CtrlRig2を開き以下の実装を追加しました。

この実装のお陰で以下に示した様にDragonはControl Rigから操作出来る様になっています。

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

しっかりCompileとSaveをして

Level SequenceからBake to Control Rigを選択すると

SK_DesertDragon_CtirlRig2が表示されています。

Dragonでも出来ました。

これで先週の問題は解決しました。

先週、あんなに困って絶望した原因は、GeminiではなくChatGPTに質問してしまったからです。

うーん。

もしChatGPTが正しく回答出来ない時は、Geminiにも同じ質問をしてみる事は必須ですね。

先週、ChatGPTじゃなくてGeminiに質問してたら一日無駄にしなくて済んだかもしれません。

はい。

3. AIの勉強

AIの勉強の目的ですが、

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

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

3.1 Practical Deep Learning for Coders 2022 [3]の勉強をする

3.1.1 前回の復習

2025-10-26のBlogから始まったんですが、

Lesson 6: Practical Deep Learning for Coders 2022 [4]のRandom Forestの勉強までやりました。

ここで一端復習する必要を感じ、

今まで習った計算方法、特にTitanicの乗客の色々な要素(性別、年齢など)から生存を予測するための計算方法を整理する事にしました。

その理由ですが、これでLinear Model、Neural Network ModelそしてRandom Forestの具体的な手順を完全に理解した事になるんですが、実際は全然理解してないからです。

先週の前までの勉強で、一応今まで疑問だった数式(Linear Model)に対しての計算方法、

とTitanicの乗客の色々な要素から生存を予測しました。

しかしこれは

それぞれの要素に対して一回だけWeightを計算してるだけなのでNeural Networkではないそうです。

これを以下の様に

それぞれの要素に対して2回Weightを計算する事で、Neural Networkになりました。

で、ReLu関数に関する以下の疑問も解決しました。

これはChatGPTとGeminiの両方に質問したら解明しました。

結論は、やっぱり順伝播で使用しています。

そして逆伝播でも使用するそうです。

つまりReLu関数は両方で使用する事が判明しました。

ここまでが先週の前までにやった復習の内容です。

そして先週は

Lesson 4: Practical Deep Learning for Coders 2022 [5]がTitanic号のDataを使用して何らかの計算をしてないか確認しました。

先週のBlogはLesson 4: Practical Deep Learning for Coders 2022 [5]ではなくGetting started with NLP for absolute beginners [6]と書いていますが、正確に言うとLesson 4: Practical Deep Learning for Coders 2022 [5]です。

何故こんな事をしたのかというと、

今までの復習で出て来たTitanicの乗客の要素から生存を予測する計算は、Lesson 4: Practical Deep Learning for Coders 2022 [5]にはないんです。

じゃ

Lesson 4: Practical Deep Learning for Coders 2022 [5]では何を勉強してるか。

という事を確認しました。

その結果、

Lesson 4: Practical Deep Learning for Coders 2022 [5]では、Titanicの乗客の要素から生存を予測する計算はしてない代わりに、

California州の不動産のDataを使用して

計算している事が判明しました。

で、このCalifornia州の不動産のDataを使用した計算が何をやってるのかを今週は調査します。

3.1.2 Lesson 4: Practical Deep Learning for Coders 2022 [5]の復習をする

まずはLesson 4: Practical Deep Learning for Coders 2022 [5]でどんな内容を勉強したのかを復習します。

これをやっておかないとCalifornia州の不動産のDataを使用した計算の意味も理解出来ないからです。

2025-05-25のBlog

この週からLesson 4: Practical Deep Learning for Coders 2022 [5]の勉強は始まっています。

この週はまたNotebookLMを使用してMind Mapを作成しています。

簡単にこのBlogの勉強内容をまとめます。

Lesson 4: Practical Deep Learning for Coders 2022 [5]はNLP、Natural Language Processing(自然言語処理)について勉強する事を知りました。

と書いてありますが、これってHallucinationですよね。だって今までNLPは扱ってないですから。

ただ、このTutorialでTransformerを扱ったのは確か事実だったはずです。

そうだ、Hugging FaceのLibraryを使用して何かをしたんだ。

それは今でも覚えています。

更に、Fine Tuning、NLPの主要なTaskとして文書の分類、Token化、そして最後にKaggle Competitionについて説明していました。

更に機械学習について以下のまとめが貼ってありました。そこには

  • Dataを訓練セット、検証セット、そしてTestセットに分ける事。
  • 過学習について
  • MetricとLoss Functionについて
  • Outliersについて

についての解説がありました。

この辺の内容については今でも覚えていますね。

この週はMind Mapを使用して勉強していますが、結構効率的な勉強してました。

この辺からGoogleのAIの性能が急上昇を始めたのかもしれません。

この後もずっとMind Mapの内容をまとめていますが、実際の実装に関連してる話や、Mind Mapからでは断定は出来ない専門用語の紹介などが主になってるため、ここにはまとめません。

で、肝心のCalifornia州の不動産のDataを使用した計算に関してですが、まったくその話はありませんでした。

ここで時間が無くなってしまったので、今週のAIの勉強は終わりです。

続きは来週やります。

4. Nvidia Omniverseの勉強

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

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

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

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

2025年9月からIsaac Lab Documentation [7]の勉強に切り替えました。

4.1 前回の復習

Exploring the RL problem [8]を勉強してます。

最初の部分を一寸だけ勉強してました。

記録すべき内容はほとんどないですが、一個だけあえてのべるとすると

self.forwards

の計算は、Local CoordinateをWorld Coordinateに変換してると説明してるのに、実際の実装では、World Coordinateである

self.robot.data.root_link_quat_w

に(1,0,0)を掛けて計算してるだけで、どこにもLocal CoordinateをWorld Coordinateに変換してないと思ったら、

(1,0,0)がLocal座標でそれに

self.robot.data.root_link_quat_w

を掛けたら、(1,0,0)のWorld座標に変換されている。

という事だったという事です。

4.2 Exploring the RL problem [8]の続きを勉強する

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

ChatGPTの訳です。

そして以下の実装が書いてありました。

この実装についてもChatGPTに解説してもらいます。

と言ってもPythonの関数の書き方なんかは先週勉強して既に理解しているので、Rewardの指定方法にFocusして勉強します。

まずforward_rewardについてです。

Reshape(-1,1)の意味が分からないですね。

ChatGPTに聞いてみます。

うーん。

今一よく分からないです。

詳しい説明を読んでいきます。

あ、TensorのShapeを変える。という意味がよく分かってないんだ。

これをChatGPTに説明してもらいます。

非常に分かり易く説明してくれました。

その内容を以下にまとめます。

Tensorは数字の入った箱の集まり、

Shapeはその箱の並び方を示したものだそうです。

この説明を聞いたときは、あんまりピンとこなかったんですが、この後の説明で凄い上手い例えだと分かります。

一次元で、Shape=(4,)の場合です。

これだと、箱は横に4つ並んでいます。

今度は2次元Tensorの例です。Shape=(4,1)で説明しています。

これが2次元Tensorなら3次元TensorはShape(2,2)で作成出来るの?

と言う疑問が湧きますが、これは後で検討します。

先にReshape()関数についての説明をまとめます。

そして-1の意味です。

これは-1が行の数を勝手に決めて良いと言う意味だそうです。

だそうです。

これでReshape()関数の機能は完璧に理解しました。

<3次元Tensorの表し方について>

ChatGPTの回答です。

ガーン。

間違っていたのか。

だそうです。

ふーん。

Reshape(2,2)は以下の様になるそうです。

で3次元Tensorは以下の様になるそうです。

成程。

言われれば理解出来ますが、まだ腑に落ちないですね。

<>

では実装の勉強に戻ります。

まずSelf.forwardsについて勉強します。

ここには(N,2)や(N,3)と書かれていますが、これって2次元Tensorなんでしょうか?

ChatGPTに質問してみます。

流石にこれは合ってました。

次にNの意味について質問しました。

あ、そうだった。

これは先週勉強しました。

そしてSelf.forwardsについて簡単に説明してくれました。

(N,2)の場合の説明です。

そうか

2が2D平面の場合のX,Y方向を示すのか。

これは3D空間の場合です。

3D空間でもTensorは2次元のままです。

今度は

self.commands

について質問します。

ChatGPTは

と前に回答してます。

ここの

 

は2Dの場合の例なんでしょうか?

更に

self.forwards * self.commands

してるって事は、

self.forwardsには全てのEnvironmentのDataが入ってるから、全てのEnvironmentにこれらの進むべきVectorを掛けてるって事でしょうか?

ChatGPTの回答です。

ああ、そういう事ですか。

この場合だと、環境1と環境2の値が表示されていたのか。

そして

self.forwards * self.commandsが実際に何をしてるのかですが、

の場合、

となるそうです。

ので

となるそうです。

この後、Sumを取っていますが、これは

を計算してるそうです。

Dot Productの計算結果と同じになるそうです。

内積の結果が、そのままRewardの値になります。

後は、

dim=-1, keepdim=True

の意味を理解すればこのCodeの意味は大体理解しました。

一番内側の方向って、意味が分かりません。

詳しい説明を読んでいきます。

はい。

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

Dim=0を指定した場合です。

成程。

足した後は、1次元の2要素に変化してますね。

Dim=1の場合です。

うーん。

こういう計算になるのか。

Dim=-1の場合です。

だそうです。

頭がこんがらがって来ました。

後、KeepDim=Trueの意味です。

Shapeは変わらないって事でしょうか?

<dim=-1とkeepdim=True>

dim=-1とkeepdim=Trueは前に勉強した記憶があります。

2025-11-16のBlogにあるEnvironment Design [9]の_get_rewards()関数で勉強していました。

同じか。

これもChatGPTに聞いた回答だと思うんですが以下の様になっていました。

これ読むと、今回と同じ解説をしていますね。

ただこれを勉強した時は今ほどは理解してないで、何となくで流してしまっています。

keepdim=Trueについても勉強していました。

その時のChatGPTの回答を以下に示します。

次元を残す事を説明しています。

このShapeの次元が同じになる様にするという事はなんとなく覚えていました。

このころはまだ、ChatGPTにはLimitがあったんだ。

今は有るのかもしれませんが、表示されなくなりましたね。

それは兎も角、この時はTensorの次元の意味がよく分からないと言って終わっていますね。

もう時間が無いです。

今週のNvidia Omniverseの勉強はここまでにします。

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 15: Sparkling Water Project [10]の<09:23 Collider Geo Setup>を勉強しました。

VDB from Polygonsノードについて勉強しています。

このNodeはPolygonに穴が空いてる場合や、何らかの操作をすると穴が空いてしまう場合に、このNodeを使用して一端VDBにして、もう一回Polygonにするのに使用します。

そんだけです。

6.2 Houdini is HIP - Part 15: Sparkling Water Project [10]の<09:23 Collider Geo Setup>を実装する

先週勉強した範囲はほとんど無いですが、その分は一応実装しておきます。

GLASS_OUTに2つのNullを追加しました。

2つのNullノードの名前は、GLASS_SURFACE_OUTとGLASS_VOLUME_OUTに変更しました。

VDB from Polygonsノードを追加しました。

以上です。

6.3 How to create a River with Houdini [11]を勉強する

お正月にお勧めで以下のTutorialが表示されました。

こんな感じです。

もうこれを勉強したら水の生成に必要な知識全部学べるはずです。

こっちを勉強します。

今週は取りあえず、動画を全部見て中身を確認します。

途中までみましたが、初心者向けじゃなかったです。

全体の工程とかを大まかに説明していますが、一個一個のNodeの使用方法とかは全く説明してなかったです。

はあ。

これは中止します。

6.4 Houdini is HIP - Part 15: Sparkling Water Project [10]の<09:23 Collider Geo Setup>の続きを勉強する

仕方ないです。こっちの続きを勉強します。

VDB from PolygonノードのDistanceVDBをOffにして

FogVDBをEnableします。

そして以下のWindowを開き

Color Schemeの値をDarkに変更しました。

そしてVoxel Sizeの値を0.005に変更しました。

結果です。

と思ったらここで以下の様に元に戻してしまいました。

結果です。

ここで<09:23 Collider Geo Setup>が終わっていました。

じゃ、今週のHoudiniの勉強もここで終わりにします。

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

この日は時間が取れなかったので無しです。

8. DirectX12の勉強

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

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

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

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

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

8.1.1 先週の復習

「6.1 行列の基本」を勉強しています。

「6.1.1 座標交換操作の順番」では、一般的な行列の計算方法の解説をしています。

これは当たり前すぎる内容なのでここにはまとめません。

その後で、DirectXの特殊な行列の計算方法をまとめています。

ここで最初、ChatGPT5.2に質問したら以下に示した様に間違った回答が返って来ました。

まずx*1+y*0+1*3は、x+3で4ではありません。

更に、x*0+y*1+1*4もy+1で6ではありません。

今なら、すらすらと正しい答えを言えますが、先週はまだDirectXにおける行列の計算方法を知らなかったので、なんとなく間違ってない。と思って

そこでGemini3にも質問してみたらこっちは正しい回答を返してきました。

以下にそれを示します。

やっぱりGemini3の方がChatGPT5.2より凄いとなりました。

後、DirectXと通常の行列の計算では以下に示した様に

計算の順番が違うそうです。

これは実際に試して確認しないとあんまりピンと来ません。

「6.1.2 XMATRIX構造体」では、XMATRIX構造体について勉強しました。

ただしBlogにまとめてあるのは、

XMMatrixRotationY(XM_1DIV2PI)*XMMatrixTranslation(1,2,3)

という実装の

XM_1DIV2PIと1,2,3の意味についてです。

まずM_1DIV2PIの意味です。

次に(1,2,3)の意味です。

以上です。

「6.1 行列の基本」には実装する内容は無いので、今週は次の節を勉強します。

8.1.2 「6.2 定数BufferとShaderからの利用」を読む

CPU側で生成した行列も、GPU側に送って使用します。

その方法ですが、教科書には以下の手順で送ると書いてありました。

  1. 定数Bufferを作る
  2. 定数Bufferの中身をMapで書き換える
  3. 定数Buffer ViewをDescriptor Heapに追加する
  4. Roof Signatureに定数Buffer参照用のRange設定を追加する
  5. Shaderから利用する

Heapに追加する。ではUpload HeapかDefault Heapなのかは書いて無いですね。

では、6.2 定数BufferとShaderからの利用」のSub節を勉強していきます。

8.1.3 「6.2.1 定数Bufferの作成」を読む

Bufferの作成方法はVertex Bufferの時と同じだそうです。

Mapで中身を書き換える必要があるので、D3D12_HEAP_TYPE_UPLOADを使用するそうです。

Upload Heapを使用するのか。

後で、Default Heapに移すんでしょうか?

Bufferの作成は、CreateCommittedResource()関数を使用するそうです。

今までのやり方と同じです。

ここからは前節で使用したD3dx12.hをどんどん使用して実装していくそうです。

去年、D3dx12.hを使用出来る様にしておいて良かった!

そしてCreateCommittedResource()関数の実装が載っていました。

教科書とほぼ同じ実装がSample Codeにあったのでそれを以下に載せておきます。

あれ、Errorになってる。

D3dx12.hがErrorになってる。

これは来週直します。

教科書では以下のような表示になっていて

赤い部分に

「必要なバイト数を256アライメントしたBite数」

と書いてありました。

教科書では、DirectX12では

「定数BufferのAlignmentは256Biteでなければならない。」

と書かれていました。

これも前節でTextureの値をCopyTextureRegion()関数を使用してGPU側に送った時のRowPitchの設定と同じです。

DirectX12ではそういうものとして作成されているんでしょう。

ここで教科書では単位行列を一個、GPU側に転送しています。

この部分の実装はSample Codeには残っていませんでした。

一応、

手書きで書き残しておきます。

XMMATRIX matrix = XMMATRXIdentity();

matrixを生成して

Bufferに

(sizeof(matrix)+0xff) & ~0xff)

となっていました。

この

~

という記号は初めて使用します。

教科書には、この部分の計算の意味が説明されていました。

Size ÷ (256 – size % 256)

という意味だそうです。

これだと、どんな数字を入れても、256の倍数になるそうです。

で肝心の以下の実装の

(size+0xff) & ~0xff)

ですが、

まず

0xff

は32Bitsの最後の8桁だけが1になってる事を示してるそうです。

0000 0000 0000 0000 0000 0000 1111 1111

という事ですね。

~0xff

ですが、0xffの反転の意味だそうです。つまり

1111 1111 1111 1111 1111 1111 0000 0000

という意味だそうです。

(size+0xff)は、この値と&をしてるので、

下8桁は

???? ???? ???? ???? ???? ???? 0000 0000

必ず0になります。

だから256の倍数になる訳です。

うーん。

教科書の言ってる意味は理解しました。

ただ本当にこの計算でかならず必要とされる最低限のMemory数に最も近くて、更に必要とされる最低限のMemory数より大きな数になるのかは不明です。

最後の8桁を無条件に0にしたら、必要とされる最低限のMemory数より小さくなる事だってありそうです。

合ってるのか、一寸心配です。

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

続きは来週やります。

この計算方法については、来週Gemini3かChatGPTに質問して確認する事にします。

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

8.2.1 前回の復習

Writing Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [12]の続きを勉強していました。

前々回作成したHLSLのDefaultの実装を書き換えていました。

重要な内容だけ以下に示します。

TutorialではSV_TARGETをSV_Targetに書き換えていたんですが、ChatGPTの回答によると、HLSLのSemanticsは大文字と小文字は区別しないそうです。

Return ValueがSV_Targetの場合、Float2,3そして4のどれかになる必要があるそうです。

このTutorialではFloat4を使用していました。

これは以下のDXGI_SWAP_CHAIN_DESC1のFormatで指定してるからだそうです。

ここでSwap Chainが出て来ましたが、Swap Chainが何をしてるのかを忘れてしまったので、Swap Chainの復習をしました。

Swap Chainは画面の切り替え(Double Buffering)を行うためのものでした。

後、最後に

と書いているんですが、ここで?となりました。

今まで、SV_Targetを直していたのVertex Shaderだったはずです。

一寸、Tutorialを見直してみます。

見直してる途中で、2025-12-14のBlogを見たんですが、なんとそこに

って書いてありました。

これってどっちが正しいでしょう?

もしかしたらSVの付くSemanticは大文字小文字の区別がつかないのかもしれません。

Tutorialを見直してたら、14:33頃からPixel Shaderをしっかり作成していました。

この辺の勉強を先週のBlogはまるまる抜かしています。

これは勉強をやり直す必要がありますね。

8.2.2 Writing Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [12]の続きを実装する

取りあえず、Vertex Shaderの実装の部分だけやってしまいます。

あれ?出来てる。

どこまで実装したんだっけ。

2025-12-21のBlogを見直したら、そこでここまでしっかり実装してました。

その前のBlogで勉強したのか。

確認します。

2025-12-14のBlogを見ます。

うーん。色々勉強していますが、Writing Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [12]に関しては最初の10分を勉強した。と書いてありました。

Tutorialを見ながら確認していくと、13:32までは勉強しています。

その後の、ShaderをCompileするModelの確認とかはやっていません。

この辺の勉強が先週の勉強でまるまる抜けてしまったようです。

8.2.3 来週の予定

かなりゴチャゴチャになってしまいました。

しかし今週はもう時間が無いので、これ以上は勉強出来ません。

ので来週、効率的に勉強出来るように以下に整理しておきます。

まず、先週勉強したところですが、その前に実装したところから少しだけ飛ばして勉強を始めてしまっています。ので今回、先週勉強した範囲を実装する事が出来なくなってしまいました。

本来、先週勉強すべき最初の部分は、Writing Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [12]の13:32からでした。

来週はここから勉強して先週勉強した部分との空白を埋める事にします。

そしてその後で、実装をします。

もう一つ、問題があります。それは2025-12-14のBlogを見ると

Copilotが

と答えています。

これは先週のBlogのまとめにある

と矛盾します。こっちはChatGPTとGeminiの回答です。

これもどっちが正しいのか来週確認します。

以上です。

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] Epic Games. (n.d.). Control Rig in Unreal Engine, from https://dev.epicgames.com/documentation/en-us/unreal-engine/control-rig-in-unreal-engine

[3] Howard, J. (Instructor). (n.d.). Practical Deep Learning for Coders [Video playlist]. YouTube. https://www.youtube.com/playlist?list=PLfYUBJiXbdtSvpQjSnJJ_PmDQB_VyT5iU

[4] Howard, J. (Instructor). (n.d.). How random forests really work – Part 6 [Video]. YouTube. https://www.youtube.com/watch?v=AdhG64NF76E

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

[6] Howard, J. (Instructor). (2022, May 16). Getting started with NLP for absolute beginners. Kaggle. https://www.kaggle.com/code/jhoward/getting-started-with-nlp-for-absolute-beginners

[7] Nvidia. (n.d.). Isaac Lab Documentation. Retrieved from https://isaac-sim.github.io/IsaacLab/main/index.html

[8] Isaac Lab Project Developers. (n.d.). Exploring the RL problem. In Isaac Lab documentation. https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/training_jetbot_reward_exploration.html

[9] Isaac Lab Project Developers. (n.d.). Environment Design. Retrieved from https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/technical_env_design.html

[10] Nine Between. (2023, November 29). Houdini is HIP - Part 15: Sparkling Water Project [Video]. YouTube. https://www.youtube.com/watch?v=Xs2tHiVFKF0

[11] flyz. (2024, How to create a River with Houdini [Video]. YouTube. https://www.youtube.com/watch?v=ik3TWjGz3Ds

[12] Lötwig Fusel. (2023, August 6). Writing Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [Video]. YouTube. https://www.youtube.com/watch?v=8MMRz9QMJI8

 

UE5の勉強などなど

それぞれの節で何が目的で勉強してるのかを最初に述べているので、進捗が理解出来るようになっているので、今年は一年間のまとめはやりません。

今までの勉強を継続します。

1.今週の予定

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

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

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

2. 映像作成用UE5の勉強

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

2.1.1 前回の復習

UE5内にPCGで瑞垣を作成しました。

Landscapeを平にする必要があります。

ので

Landscapeを建物の大きさに合わせて平にするPluginを調べました。

ありました。

Landscape PatchというPluginだそうです。

2.1.2 Landscape Patchを使用してLandscapeを平にする

2024-09-15のBlogを参考にLandscape Patchを使用してみます。

まずProjectを立ち上げて、Landscape Patch PluginをEnableしました。

Projectを再起動しました。

以下のCubeでPluginが正常に機能しているか確認します。

CubeからPatchを検索しましたがありません。

あれ?

2024-09-15のBlogを良く読み直したら

Addを押してそこから選択するとありました。

ありました。

Landscape Circle Height Patchを追加します。

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

うーん。

何これ?

Gemini3(fast)に以下の質問をしました。

回答です。

あ、そういう事なのか。

LandscapeのLayerを新たに追加するのか。

そう。

これを理解してなかった。

はい。

Acceptを押して問題ないそうなので押しました。

CubeにLandscapeCircleHeightPatchが追加されました。

結果です。

あれ?

変わってない?

LandscapeCircleHeightPatchの高さを一寸だけ調整します。

以下の様になりました。

おお、変わっています。

凄い。

では同じ事をPCGにも試してみます。

SplineにLandscapeCircleHeightPatchを追加しました。

結果です。

おお、LandscapeCircleHeightPatchが効いて瑞垣で囲った部分の地面が平になってますね。

近づいて確認すると以下の様になってました。

内側です。

こっちもかなり良い感じになってます。

角の部分です。

これもかなり良い感じですね。

同じ部分を内側から見た状態です。

うん。

これも許容範囲でしょう。

瑞垣内が草ボウボウです。

これは消す必要がありますが、どうやったら消せるんでしょうか?

まあ良いです。

今日はこんだけ出来たら十分です。

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 前回の復習

前回、勉強したのは2025-12-21のBlogでした。このBlogを読み直すと

Create Procedural Interiors With Full Room Separation | UE 5.4 P5 [1]の<15:15 - Set Density on Room Center Points>の実装が実際に何をやってるのかを理解する事をやっていました。

具体的には

以下の実装が何をやってるのかを一つ一つのNodeの機能を復習して確認していました。

最初のSample SamplerノードのInputにあるInterior Sample Spacingの機能が

生成するPointの間隔を大体で指定してる。という事。

以下に示したPCG Random Points with FloorsノードのInputにあるFloorsに値を渡しているFloor Loopsノードは

以下の実装で、Named Rerouteを使用して指定されていた事。

ここで使用されているPCGGet Floor Loopsノードは

以下の実装で作成されていて

以下のようなPointを2つ作成し

そこから以下のようなSplineを作成し

そこからそれぞれのFloorに対応するPointを生成し

最後にそれぞれのPointを別々なAttributeにして返してました。

そして最後に

と書いて終わっていました。

ので今年の始めはこれからやって行くことにします。

2.2.2 Create Procedural Interiors With Full Room Separation | UE 5.4 P5 [1]の<15:15 - Set Density on Room Center Points>の実装を理解するの続きをやる

Room Sizesの値は以下のData Asset内のDataにありました。

以下にその内容を示します。

そういえばこんなData Assetを作成しました。

PCG Random Points with Floorsノードの実装をみてみます。

こんな感じでした。

まずInputノードの値から見ていきます。

Inの設定です。

これのそれぞれの要素の意味も勉強しておきます。

流石にLabelは分かるのでUsageから調べます。

まずChatGPTに質問します。

はい。

あれ?

おかしくない?

Usageの種類はNormal、Loop、Feedbackしかありません。

ChatGPTは駄目駄目ですね。

今度はGemini3に質問してみます。

あれ?

Pinsの中にIndexがあってその中にUsageがあるんですが、最初から間違った回答してますね。

この後もずっと間違えた回答を返してきました。

ありゃ。AIダメダメですね。

Normalを使用した場合は、

Normalをセットした場合は、全てのDataをそのままPassするって説明が出て来ました。

こんなに簡単に説明が出て来るのにAIが正しい回答が出来ないのはオカシイです。

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

回答です。

あれ、このBlogが参照に使用されている。

Loopの場合です。

配列の要素がPassされると言う意味でしょうね。

前のLoopの結果を今回のLoopにPassするという事ですね。

理解しました。

一応、Gemini3にも同様の質問をしてみます。

Normalの説明です。

Loopの説明です。

Feedbackの説明です。

ChatGPTと同じ回答ですね。

これは質問の仕方によってAIが舐めた回答を返して来るって事の証明でしょうか?

2026年もAIに関しては激動の年になりそうですね。

次です。

Allowed Typesです。

これはPointを指定しています。PointだけがこのPinにDataとして渡す事が出来ます。

InにDataを渡してるSpline Samplerノードの

Dataを見ると

Point Dataとしっかり書かれています。

残りのInputは言葉通りの意味なのでSkipします。

2番目のInputであるFloorですが、

UsageがLoopになっていて

Allowed TypesがAttribute Setになっています。

Floorsには前回勉強したFloor Loopsが繋がっているので、

のそれぞれのPointがAttributeとなってPassされていくはずです。

三番目のInputであるData Assetです。

これは全部のDataがそのまま読み込まれていますね。

残りのWall HeightとSeedもDataがそのまま読み込まれているだけでした。

InputノードがどんなDataをどのようにInputしてるのか理解しました。

次のNodeの機能をみます。

以下のTransform Pointsノードの機能です。

Inで入って来てるPointを可視化しました。

これらのPointの位置をLoop IndexとWall Heightでかけた値だけZ軸方向にずらしています。

つまりそれぞれの階にこのPointsを生成しています。

次にAttribute Noiseノードが繋がっています。

これは何をするNodeでしたっけ?

マジか。

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

では、Input Sourceに$DensityとなってるのはDensityの値を変更してるって事?

となっています。

一つ前のNodeのDensityの値です。

おお、変わっています。

一個謎が解けました。

次のOutput Targetに@Sourceとなってるのはどういう意味でしょうか?

ChatGPTの回答です。

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

更に詳しく説明していました。

更に@source以外を指定した場合、

や@の意味

も説明してくれました。

分かり易い。

次のNodeです。

Sort Attributeノードと書かれています。

これはDensityの値を低い順に並べるNodeでしょう。

その通りになっていました。

次のNodeです。

Attribute Filterノードです。

となっていました。

Target Attributeの値が@Lastとなっていますが、具体的にどの値を見てるんでしょうか?

Densityを見てるのでしょうか?

ChatGPTに聞いてみます。

そうでした。

いや、よく考えたら直線のNodeはSort Attributeノードでした。

え。

そうなの?

このNodeのFilterに値をPassしてるNodeです。

この結果が5になるんですが、Densityだと0~1の間の値なので、全部Passしてしまいます。

なんかおかしいですね。

Attribute Filterノード周りのこの実装、本当に合ってるんでしょうか?

このAttribute Filterノード周りの実装が正しくされているのかの確認が必要ですね。

うーん。

今週はここまで、

来週は、このAttribute Filterノード周りの実装が正しくされているのかの確認からやる事にします。

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]を勉強する事にしました。

そして2025-12-21のBlogでまとめましたが、別なLayerを使用する事で、Control Rigを使用してLevel Sequence上のAnimationを編集出来る事が判明しました。

ので、後はDragonにControl Rigを追加出来れば、Dragonの爪が地面にめり込んでしまう問題を直す事が出来る事が判明しました。

2.3.1 前回の復習

前回、2025-12-21のBlogでは色々勉強していますが、今週からの勉強で最も重要な事だけ以下に示します。

それはDragonにControl Rigを追加する方法を知りたかったら

How to Rig a Dragon in Blender & Unreal Engine 5 - Full Tutorial [4]を勉強する事です。

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

2.3.2 How to Rig a Dragon in Blender & Unreal Engine 5 - Full Tutorial [4]を勉強する

まずTutorialを軽く見ます。

Blender上でRigも生成していました。

これはどうしよう。

UE5に移ったらModular Rigを使用しています。

うーん。

何で既にControl Rigは追加されてんじゃないの?

最後はControl Rigが追加されていましたが、

これじゃ何の役にも立たないよ。

ChatGPTに質問し直します。

そしたら以下の無料Assetがあるって

見てみましょう。

同じ名前のAssetはありませんでした。

うーん。

よく分からん。

以下のDragonにControl Rigを追加出来れば良いんです。

ただしAnimationをControl RigにBake出来る必要があります。

試しにこのDragonのControl RigをSkeletal Meshから作成してみます。

ここに一個だけControlを追加してみました。

なんとBakeに使用出来るControl Rigとして認識されなくなってしまいました。

ChatGPTに1時間くらい質問して色々やりましたが直せませんでした。

恐ろしい。

今日は時間を無駄にして終わってしまいました。

<追記>

次の日になったら、何個か試す価値のある策を思いつきました。

以下に記録しておきます。

これらは来週検証してみる事にします。

3. AIの勉強

AIの勉強の目的ですが、

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

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

3.1 Practical Deep Learning for Coders 2022 [4]の勉強をする

3.1.1 前回の復習

前回、2025-12-21のBlogでは Lesson 3: Practical Deep Learning for Coders 2022[5]の続きを復習しています。

の計算を実際のTitanicの乗客のDataに対して使用して生存率を予測しました。

最初はそれぞれの要素に一個の勾配を計算し

次にNeural Networkにするために

それぞれの要素に対して2個の勾配を計算し

更に

ReLu関数で値を調整しました。

Lectureでは<Build a neuralnet by adding two regression models>までの復習が終わった事になります。

で、

の疑問がまだ残る事になりました。

逆伝播とReLu関数についてですが、ChatGPTに質問したら

と返事が返って来ました。

えー

今までと言ってる事が変わってる。

なんかChatGPTは今年になってからポンコツになったような気がします。

Gemini3に質問してみます。

うん。両方で使用されるの?

はい。これが今まで勉強したReLu関数の使用方法です。

やっぱり順伝播で使用しています。

この計算方法はまだよく知らないのかもしれません。

勾配の伝達方法はまだ勉強してないですし。

一応、これで納得します。

3.1.2 Lesson 3: Practical Deep Learning for Coders 2022[5]の続きを復習する

この後は次のLectureで勉強するNLPについての説明でした。

今、復習してるTitanicの乗客のDataを利用したAIの勉強とは関係なかったです。

3.1.3 Getting started with NLP for absolute beginners [6]がTitanic号のDataを使用して何らかの計算をしてないか確認する

この後、Lecture5でNeural Networkを使用してTitanicの乗客の生存率を予測するAIを制作し、その後Lecture6でRandom Forestを使用してTitanicの乗客の生存率を予測するAI?を作成したはずです。

つまりLecture4ではTitanic号のDataは使用してないはずです。

それを確認します。

2025-05-25のBlogからGetting started with NLP for absolute beginners [6]の勉強を始めていました。

NotebookLMのMind mapを利用して勉強してました。

しかもこの時期のMind mapはまだ英語で、正直これを使って勉強する価値あるのかなといったLevelです。
ですがどんな内容を勉強したのかは分かりました。

ここではTitanicの乗客の生存率を予測するDataは使用してないです。

California州の不動産のDataを使用して計算していました。

うーん。

これも整理した方が良いのかな?

もう時間が無くなってしまいました。

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

こっちもあんまり進みませんでした。

4. Nvidia Omniverseの勉強

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

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

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

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

2025年9月からIsaac Lab Documentation [7]の勉強に切り替えました。

4.1 前回の復習

2025-12-21のBlogで勉強していました。

Training the Jetbot: Ground Truth [8]を最後まで勉強していました。

なんかもう昔過ぎて、何が大切だったのか覚えていません。

と書いていますが、感想なんて何も覚えてないです。

4.2 Exploring the RL problem [9]を勉強する

そんなに時間がある訳でもないので、今回はWalkthroughの次のTutorialであるExploring the RL problem [9]を読む事にします。

ChatGPTの訳です。

はい。

IsaacLabTutorialEnvCfgにJetbotへのCommandを追加するんですね。

次の文です。

うーん。

Local CoordinateをWorld Coordinateに変換してるの?

続きの実装です。

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

これは関数の実装だったのか。

Pythonの関数の書き方忘れてしまいました。

だそうです。

->の意味は書いて無いですね。

だそうです。

理解しました。

次のCodeです。

Velocityの値を指定しています。

World CoordinateにおけるRobotの今の向きを計算してForwardにセットしてるのか。

でもこの説明だと最初からWorld Coordinateですね。Local CoordinateからWorld Coordinateに変換するんじゃなかったんでしょうか?

あれ?
Commandってどこから出て来たの?

Forwardsは何処に行ってしまったんでしょうか?

PolicyとCriticが出て来ましたね。

Return Valueの指定ですね。

ChatGPTが、self.forwardsはこの関数内で何処にも使用されていないにもかかわらず、あえてこの関数内で計算する理由も説明してくれました。

成程、そしてself.forwardsがこの関数内で使用されない。つまりPolicyの学習に使用されない理由も説明してくれました。

Rewardで使用するからか。

納得です。

後、分からんのは

self.forwards

の計算は

Local CoordinateをWorld Coordinateに変換
してると説明してるのに、実際の実装では、World Coordinateである

self.robot.data.root_link_quat_w

に(1,0,0)を掛けて計算してる事です。

World CoordinateからWorld Coordinateの座標で座標軸を変換していません。

ChatGPTに聞いてみました。

まず最後に_wが付いてるのはWorld Coordinateだそうです。

となると(1,0,0)を表してる

self.robot.data.FORWARD_VEC_B

がLocal Coordinateを表してるの?

あ、Local CoordinateにおけるRobotの今向いてる方向はいつでもX軸だわ。

そういう事か。

self.robot.data.FORWARD_VEC_B

が今Robotが向いてる方向をLocal Coordinateで表していて、それに

self.robot.data.root_link_quat_w

を掛けると、

今、Robotが向いてる方向がWorld Coordinateに変換さえるのか。

納得しました。

一寸短いけど時間が無くなってしまいました。

今週のNvidia Omniverseの勉強はここまでにします。

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 15: Sparkling Water Project [10]の<05:37 Fluid Sourcing>を実装しました。

全部見直しましたが、特にここで述べる内容はないですね。

咳が止まらないので一寸しかやっていません。

6.2 Houdini is HIP - Part 15: Sparkling Water Project [10]の<09:23 Collider Geo Setup>を勉強する

続きをやります。

Obj LayerからGlass Layerに入りました。

GLASS_OUTに2つのNullノードを追加しました。

それぞれGLASS_SURFACE_OUTとGLASS_VOLUME_OUTと名付けました。

GLASS_OUTとGLASS_VOLUME_OUTの間にvdbfrompolygonsノードを追加しました。

VDB From Polygonsノードについての説明です。

うーん。

何回か使ったはずですが、覚えていません。

Blogを見直すか。

2025-02-02のBlog

ここで初めてVDB from Polygonsノードを使用していました。

以下の様に書いていました。

この時はまだSimulation自体をどう組むのか分かってなかったので説明を無視して先に進めていました。

2025-02-09のBlog

この週は単に実装に使用しただけでした。

2025-05-25のBlog

これは前のTutorialの復習をしています。当然、その時にVDB From Polygonsノードが出て来ました。

2025-06-15のBlog

これも同じです。前のTutorialの復習をしていて、その時にVDB From Polygonsノードが出て来てるだけでした。

<>

あれ?

これ使って何かのSimulationをやったはずです。

ChatGPTで検索かけたらこんなに出て来ました。

こっちも見ておきます。

見直しましたが、特にVDBについて説明したところは無かったです。

何かの説明の次いでにVDBという言葉が一寸だけ出て来てる感じでした。

それじゃChatGPTにVDBについて質問しますか。

DreamWorksが開発したVolume Data構造なのか。

ふーん。

これはこれで重要だけど、今はこれを勉強する必要は無いですね。

VDB From Polygonsノードの機能についても説明してくれました。

そう、これは前のTutorialで使用した時と同じです。

この最初の目的で使用しました。

でもこれってどんな時に必要なんでしょう?

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

非常に沢山の回答が返って来ましたが、具体例として挙げているのは以下の3つだけでした。

要はPolygonに穴が空いてる場合や、何らかの操作をすると穴が空いてしまう場合に、このNodeを使用して一端VDBにして、もう一回Polygonにするのが主流だそうです。

理解しました。

うーん。

もう時間切れ。

今週のHoudiniの勉強はここまでです。

まあ、VDB from Polygonノードの機能を理解出来たから良しとしましょう。

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

今週は正月にやったCLIのInstallについてまとめます。

これはYouTubeの動画を見てたら、自分で勉強したい分野のTutorialをAIに作成させて、そのTutorialをAIと共に勉強していく。というのが有りました。

その動画を見た時はあまり意識しなかったので特に記録とかしなかったんですが、後から考えるとこれこそAI革命後の理想の学習方法だと思うようになりました。

このやり方なら、論文でも最先端分野でまだ教科書が出来てない分野でも、ニッチすぎてYouTubeにTutorialがない分野でも勉強出来ます。

更に勉強した後で、困った箇所やTutorialが間違っていた箇所をまとめてYouTubeにTutorialとして挙げたら、その分野を勉強したい人達はそのTutorialしかないからその動画を見ます。

で、その方法をやろうと思ったんですが、元の動画が見つかりません。

Command PromptからCLIを使用してたのだけは覚えています。

のでGemini3に聞いてみました。

7.1 Tutorialを作成する

Netにある色々なServiceを教えてくれましたが、私が知りたいのは以下の場合です。

どんなTutorialを作成したいのかGemini3が質問して来たので以下の内容を即興で作りました。

ここは色々な回答があったんですが以下の回答が一寸気になったので記録しておきます。

ここではWebGPUがVulkanやDirectXをWrapしてるのでWebGPUでCodeを書けばそれらは全部Cover出来ると言っています。

これって本当でしょうか?

ChatGPTに確認しておきます。

大体本当みたいです。

Gemini3は以下の順序で勉強したらどうかと言って来ました。

これはその通りですが、今回知りたいのはその勉強する内容をまとめたTutorialをAIで生成する方法です。

以下の質問をしてみました。

ここから色々やり取りしてやっとCLIの話になりました。

ここでCLIにはどんな特徴があるのか質問しています。

CLIは一日1000回も質問出来るとありました。

なんでこんなにお得なの?

だそうです。

へえ。凄い。

やり方も説明してくれました。

Node.jsをInstallする必要があるみたいです。

まあこれはどうでも良いです。

そう、私が見たYouTubeの動画もこんな感じでTutorialをサラッと作成していました。

この後、Node.jsをInstallしたんですが、滅茶苦茶Gemini3に質問してます。

一個だけ質問の内容を記録しておきます。

Node.jsのInstallが終わったので確認のCommandを入れたら、Install出来てないみたいな結果になった時の質問です。

これに対してGemini3は

と回答しました。

のでこれを試しています。

そしたらNode.jsが正しくInstallされている事が確認出来ました。

AIの凄い所は、こういうよく分からないけど無視すると後で痛い目に合いそうなところをズバット説明してくれるところです。

その結果、後で問題が発生してもすぐにどこが問題なのか理解出来ます。

Gemini3が次のInstructionとして以下の説明をしました。

その通りに実行してます。

GeminiにLoginするための手法も説明してくれました。

Loginしました。

この後、ちょっとごたごたが発生するんですが、AIのHelpのお陰で難なく回避して

を打ち込みました。

なんか以下の選択肢が出て来ました。

結果です。

Tutorialの目次が出来てました。

凄いです。

本格的でした。

今度はその中の第一章の中身を執筆してもらいます。

ここに書いてある指示をそのまま使用しました。

となりました。

7.2 Gemini CLIを使用してTutorialを作成した感想

このTutorialはmdで生成されるのでAntigravityのmdのTextを綺麗に表示するやつで読む事になると思います。

がAntigravityのmdのTextを綺麗に表示する方法忘れてしまいました。これは後で調べる事にします。

Gemini CLIを使用してTutorialを作成した感想ですが、確かに凄いです。そしてその内容も一定の質が保証されています。

ただ続けるかどうかは一寸悩みどころです。

まあ、こんな感じなのかという事さえ理解出来たら今は十分かな。と思いました。

8. DirectX12の勉強

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

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

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

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

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

今年はこっちから勉強する事にします。

8.1.1 今年の予定

今年からはAIの助けもあるので、今までの3倍のSpeedで勉強したいです。

6,7,8章は今年中に終わらせたいです。

と思っていたんですが、それやると理解が薄くなるので、やっぱ止めます。

楽しく勉強していくのが一番です。

6章は、「Chapter 6 行列による座標変換」です。

今週はざっと読んでどんな内容を勉強するのか把握します。

行列による座標変換は昔OpenGLを勉強した時に、散々やったのでDirectX12のGrammar以外は理解してるはずです。

分かってる部分はどんどん端折っていくことにします。

8.1.2 「6.1 行列の基本」を読む

ここでは行列の基本を説明しています。

しかし確かDirectXは行列の計算は普通と違ったはずですが、それについての説明が中途半端でよく分かりません。

<「6.1.1 座標交換操作の順番」>

Matrixの計算なので平行移動してから回転した場合と、回転してから平行移動した場合の結果が違う事を説明していました。

これは大学のLinear AlgebraやOpenGLの勉強で散々やったのでここでは深入りはしません。

<行優先と列優先>

ここで、DirectXの特殊な行列の計算方法について説明してるみたいなんですが、その説明が全く理解出来ません。

ChatGPTに質問して確認します。

以下の質問をしました。

回答です。

はい。

数学やOpenGLの場合の行列の計算方法は理解しています。

DirectXの場合です。

そう、これを具体的な例で理解したいんです。

例が載ってました。

あれ?

これ間違ってないですか?

これの答え、[x+3、y+4、1]じゃないですか?

うーん。

分からん。

Gemini3に聞いてみるか。

そもそも一般の行列と要素の配置自体が違っていたのか。

これを見ればDirectXにおける行列の計算方法は何となく分かりますが、一応Gemini3に聞いておきます。

一列目の計算方法です。

あれ、これ見ると普通に最初の行列の横の要素×2番目の行列の縦の要素をやってますね。

続きも見てみます。

やっぱりそうですね。

これでDirectXの行列の計算方法は分かりました。

次は掛け算の順番です。

これの言ってる事は分かるんですが、具体的な数列の場合どう書くのかが知りたいんです。

「回転してから移動する」の場合をGemini3に質問しました。

ふーん。そのまま行列を掛けるのか。

回転の行列が

になってるのはよく分からんですが、この辺は分からんでも問題ないでしょう。

そう言えば、この行列に関しても凄い勉強した記憶があります。

一寸Blogを調べてみます。

2019-04-28のBlog2019-05-05のBlogで勉強していました。

こんな計算しています。

今思えば、こんな計算一生懸命したって何の得も無かったですね。

まあ、DirectX12における行列の書き方は理解出来ました。

それは兎も角、ChatGPTの以下の計算は間違っていますね。

ChatGPTどうしちゃったんでしょうか?

<「6.1.2 XMATRIX構造体」を読む>

XMATRIX構造体を使用して、回転してから平行移動する場合のCodeです。

XMMatrixRotationY(XM_1DIV2PI)*XMMatrixTranslation(1,2,3)

平行移動してから回転する場合は以下の様になるそうです。

XMMatrixTranslation(1,2,3)*XMMatrixRotationY(XM_1DIV2PI)

ここで使用されているXM_1DIV2PIとか1,2,3の意味が分かりません。

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

そして

単位はRadianです。

次に(1,2,3)の意味です。

だそうです。

こんなのは一回説明してくれればすぐに分かるのに、何で教科書はこの部分を無視してるんでしょうか?

不親切です。

ここで教科書に恐ろしい事が書かれています。

HLSLでは行優先のため順序が逆になります。

へ。そうなの?

凄い計算複雑になるんじゃ…

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

8.2.1 前回の復習

 Writing Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [11]の最初を実装してました。

と言ってもやってるのはShader用のFileを保存するためのFolderを追加しただけです。

以下のHLSLのFileは以下の様に作りました。

8.2.2 Writing Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [11]の続きを勉強する

以下の箇所から勉強します。

Compileしたら.cso fileになってSaveされました。

ChatGPTに聞いたらそれぞれの3D Graphic APIは以下の様にShader言語を扱うそうです。

そしてShader Modelの設定を変更しました。

Tutorialでは最新のShader Modelを使用してCompileし直しても、何ら新しい情報は表示されませんでしたが、

新しいShader ModelでCompileする事で、有効な情報が表示される場合もあるそうです。

今度はPixel Shaderを作成しました。

名前はそのままPixelShader.hlslになってました。

PixelShader.hlslを開くと以下の様になっていました。

SV_TARGETをSV_Targetに変更しました。

これでMainのReturn ValueのSemanticsがSV_Targetになるのかな?

多分そうでしょう。

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

HLSLでは大文字小文字は区別しないそうです。

本当かな?

Gemini3にも聞いておきます。

同じ回答ですね。

合ってると判断します。

MainのReturn ValueがSV_Targetになるというのも

合ってました。

以下の様にmain()関数のParameterにSV_Positionを指定する事も可能だそうです。

以下のSiteからSV_Targetの定義を確認していました。

後が切れてて読めません。

これは公式のDirectX12のSiteでしょうか?

探してみます。

ありました。

Return ValueのTypeはFloat2,3そして4のどれかと書かれていました。

これは以下のDXGI_SWAP_CHAIN_DESC1のFormatで指定したそうです。

憶えてませんね。

そもそもSwap Chainって何をするものでしたっけ?

画面の書き換えをするのがSwap Chainでした。

Blogを読み直したら、2023-03-13のBlog

と説明されていました。

それは兎も角、ここでDXGI_FORMAT_R8G8B8A8_UNORMと指定しています。ので今回のPixel ShaderのSV_TargetのTypeはFloat4になります。

これでPixel Shaderの実装も完成だそうです。

Compileしました。

Pixel ShaderのShader Modelの確認もしています。

以下のFolder内にShaderのCSO Fileが生成されました。

今度はこのCompileされたShader FileをLoadする実装を作ります。

そのためにShader Classを作成するそうです。

以下のSupport Folderに

Shader.h Fileを作成し追加します。

Shader.h Fileに以下の実装をしました。

更にShader.cpp Fileに以下の実装を行いました。

ここからConstructor内の実装を行っていくんですが、切れがいいので今週はここまでにしておきます。

今週のDirectX12の勉強はここまでです。

9. まとめと感想

今週は今年初めての勉強だったんですが、あまり集中しませんでした。

まだ咳が止まらないからなのかそれとも色々な用事が入ってしまったためか分かりませんが、何とかして集中力を戻す必要があります。

更にAIをもっと効果的に使用して効率を上げたいです。

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] Epic Games. (n.d.). Control Rig in Unreal Engine, from https://dev.epicgames.com/documentation/en-us/unreal-engine/control-rig-in-unreal-engine

[3] Massimo. (2025, 6 months ago). How to Rig a Dragon in Blender & Unreal Engine 5 - Full Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=yj3DkIdA3LE

[4] Howard, J. (Instructor). (n.d.). Practical Deep Learning for Coders [Video playlist]. YouTube. https://www.youtube.com/playlist?list=PLfYUBJiXbdtSvpQjSnJJ_PmDQB_VyT5iU

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

[6] Jeremy Howard. (2022, May 16). Getting started with NLP for absolute beginners. Kaggle. https://www.kaggle.com/code/jhoward/getting-started-with-nlp-for-absolute-beginners

[7] Nvidia. (n.d.). Isaac Lab Documentation. Retrieved from https://isaac-sim.github.io/IsaacLab/main/index.html

[8] Isaac Lab Project Developers. (2025, November 25). Training the Jetbot: Ground Truth. In Isaac Lab Documentation — Walkthrough. https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/training_jetbot_gt.html

[9] Isaac Lab Project Developers. (n.d.). Exploring the RL problem. In Isaac Lab documentation. https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/training_jetbot_reward_exploration.html

[10] Nine Between. (2023, November 29). Houdini is HIP - Part 15: Sparkling Water Project [Video]. YouTube. https://www.youtube.com/watch?v=Xs2tHiVFKF0

[11] Lötwig Fusel. (2023, August 6). Writing Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [Video]. YouTube. https://www.youtube.com/watch?v=8MMRz9QMJI8



UE5の勉強などなど

1.今週の予定

今週は咳が止まらないのと急用が入ったのとで、お休みします。

ただしDirectXの勉強だけは一寸だけやる事にします。

2. DirectXの勉強

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

これの5章を今年中に終わらせるのが目標でした。

出来るかどうかは分かりませんが、時間が有るときはこの勉強をやる事にします。

2.1.1 「5.12.5 BarrierとFenceの設定」の続きを実装する

<Raw Pitchは256の倍数でなければならない>

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

あれ?

Errorになっていますね。

教科書を読み直したら、AlignmentedSize()関数は自作していました。

何で先週この事に気が付かなかったんでしょう。

Sample CodeにあるAlignmentedSize()関数をそのままCopyしてPasteしました。

Errorが消えました。

今度はUpload用のHeapのResourceの設定を変更します。

これです。

変更しました。

全部のSizeがImageのwidthである200x4=800を256の倍数に直した1024になってるはずです。それをHeightの回数だけかけたら256の倍数に変更されたImage全体のSizeになります。

これでTestします。

以下の結果になりました。

教科書の結果と同じです。

このような結果になった理由は、RowのSizeが800なのに1024で処理されているから行の先頭がずれてしまったからだそうです。

逸れの直し方を次で勉強します。

2.1.2 「5.12.5 BarrierとFenceの設定」の最後を勉強する

<Raw Pitchは256の倍数でなければならない>

先程のErrorを直すには一行毎にCopyしたら良いそうです。

以下の実装をMap()関数の間に行っていました。

うーん。

今まではどうしてたんだっけ。

ああ、そういう事か。

Copy_n()関数の最初のParameterがImageが保持されているMemoryの最初のAddress、次のParameterがそのImageをCopyするために使用するMemoryの長さ、最後のParameterがCopyする場所を示してるのでしょう。

一応、Copilotに聞いて確認しておきましょう。

うーん。

長い。

というかCopilotの回答を読むと画像をCopyするのはCopy_n()関数では一寸特別な場合で、他の、例えばVectorなんかの場合だと、Copy元のSizeとCopy先のSizeが違ったらそこでErrorになってしまうそうです。

ここにまとめ直すはかなり面倒なので、画像をCopyする場合に限りこの解釈であってると理解しておきます。

2.1.3 「5.12.5 BarrierとFenceの設定」の最後を実装する

<Raw Pitchは256の倍数でなければならない>

では最後の部分を実装します。

しました。

実行します。

Imageが元に戻りました。

出来ましたね。

2.1.4 「5.12.5 BarrierとFenceの設定」の最後を実装した感想

いつも今日みたいに時間をかけてゆっくり勉強出来れば、教科書の細かいニュアンスも理解して勉強出来ますが、このような贅沢な勉強をいつもする事は無理ですね。

まさか、Copy_n()関数にこんな深い内容があるなんて思いもよらなかったです。

こういうMemoryのCopyとか、Referenceの追加とかは、後で解放してはいけないのを解放しそうでおっかないですね。

<追記>

ここからは12月29日~1月3日の記録になります。

この週も咳が止まらないのと別な用事が大量に発生していて、とても勉強時間を確保出来る状況ではないので、DirectX12の勉強だけやる事にします。

なんとか5章は今年中に終わらせたいです。

2.1.5 「5.13 d3x12.h(CD3DX~)の導入」を読む

これが5章最後の節になります。

軽く読んだんですが、d3x12.hはDirectXTexのProject内部にあるので、このLibraryを特別にDownloadしなくても良いみたいです。

Copilotに確認してみましょう。

なんせ同じMicrosoftの製品です。Copilotが一番詳しいと思われます。

え。

出来ないの。

聞いてよかった。

うん。どう導入したのかによるってどういう意味?

ああ、理解しました。

DirectXTexをCompileするのにd3dx12.hは使用されているけど、DirectXTexそのものにはd3dx12.hは入ってないと言う意味だそうです。

成程。

じゃ追加する必要がありますね。

ひ、Typoしてた。D3dx12.hでした。

以下の3つの方法があるそうです。

最初の①でやる事にします。

2.1.6 「5.13.1 d3dx12.hの入手」を読む

これ読むとCopilotの回答とは逆に

#include <d3dx12.h>

と打つだけで、導入出来ると書いてあります。

どっちが正しいのか分からないので試してみます。

試す前にSample Codeを確認します。

#include <d3dx12.h>

は使用されてないです。

追加してみました。

Errorになってますね。

こっちでも駄目ですね。

ここから30分間位、

ずっとCopilotに質問し続けてやっと完成しました。

重要な部分だけ以下にまとめておきます。

まずGithubの方のd3dx12.hは以下の様になっていて

付属のHeader FileもInstallする必要があります。

教科書は同じWindows SDKのd3dx12.hでないとCompileした時にErrorになる。と言っています。

ので

DirectXTex内にあるd3dx12.hも探してみました。

Common Folder内にありました。

これを開くと、ずらっとCodeが書かれていました。

しかしIncludeしてるのは

だけです。

じゃこっちをCopyしてProjectに追加してみます。

しました。

CopilotはこれでIncludeするだけで使用出来ると書いていました。

しかしErrorのままです。

Solution ExplorerのFilterの方にAddでd3dx12.hを追加しないと駄目なんじゃないの?とCopilotに聞くと

必要ない。と言っています。

あ、これCopilot駄目だ。と思って自分で追加しました。

で、結果です。

Errorは消えません。

仕方ないのでCopilotに聞きました。

<>じゃなくて“”だと。

え?

そうだっけ。

直してたら

Error消えました。

Copilotすまん。

Copilotの方が合ってました。

だそうです。

はあ。

まあ、これでProjectと同じWindows SDKのd3dx12.hがProjectから使用出来るようになったので良しとします。

2.1.7 「5.13.2 d3dx12.hの利用例」を読む

利用例としてVertex Bufferの作成方法が紹介されています。

以下にまとめます。

まずVertex Bufferの作成方法は、以下の様に実装されています。

これが、d3dx12.hを使用すると

まず以下の部分がなくなります。

ここはComment Outしておきます。

ちなみにこの部分の実装はSample Codeにも載って無いです。

教科書に書いてある実装をそのまま書きます。

書きました。

これで動くんでしょうか。

Testしてみます。

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

だそうです。

あ。ここでComment Outした以下の2つの変数は別な場所でも使用していました。

この2つの変数のComment Outは戻します。

これでもう一回Testします。

またErrorになりました。

なんとさっき書き換えた箇所がErrorになっています。

うーん。

Copilotに聞いてみます。

&が要らないと言ってます。

本当かなと思って&を外すと

Errorになりました。

うーん。

ChatGPTにも同じ質問をしてみるか。

同じ回答ですね。

あ、そういう事か。

これはL ValueとR Valueの問題なんだ。

以下の様に書き換えました。

変数名は同じものを他の変数で既に使用してたので、一寸だけ変更しました。

これでテストします。

出来ました。

ChatGPT凄い。

Gemini3もこの問題に正しい回答が返せるのかが気になります。

同じ質問を聞いてみます。

まずはFastで聞いてみます。

一瞬で正解が返って来ました。

Copilot駄目じゃん。

DirectX12はMicrosoftの製品なのに、Copilotの回答が間違っているって。

そしてやっぱりGemini3は凄い。

ChatGPTはギリ合格だとするとGemini3は合格Levelを遥かに超えてる感じがします。

2.1.8 「5.13.2 d3dx12.hの利用例」の続きを読む

今度はBarrierのCodeをd3dx12.hを使用して短く書き換えます。

を使用して

でBarrierを指定していますが、

このBarrierDescの部分を使用しないで

直接以下の様に書く事が出来る

とありました。

でもこれって前節と同じ間違いしてますよね。

これだったらErrorにならないはずです。

これで試してみます。

ほほほ、

イキナリ出来ました。

一応、ChatGPTにCommentを求めておきます。

今の書き方でも問題ないですが、CD3DX12_RESOURCE_BARRIERの配列を使用して変数を指定する方法の方がより実務よりだそうです。

Gemini3にも同じ質問をしておきます。

説明の途中で以下の文章がありました。

ホントこれ。

途中から言ったい何をやってるのか訳分らなくなりました。

配列について以下の説明がありました。

ChatGPTのいう配列云々は、これの事が言いたかったんじゃないでしょうか?
うーん。
やっぱりGemini3の方が上ですね。
以上です。
2.1.8 「Chapter 5 PolygonにTextureを貼り付ける」の勉強を終えた感想
やっとChapter5の勉強が終わりました。
今年中に終わらせたかったんですが、出来ました。
出来たらなんかうれしく無いですね。
亢龍悔いあり
ってやつですかね。
というよりも、この山登り切った人間は今だいない。前人未踏の領域だ。と思って全身全霊でChallengeして、奇跡的に登り切ったら、もっと高い山は沢山あるし、この山登ったくらいじゃ誰からも評価されない事が判明したからというのが判明した。
というのが本当ですかね。
しかし、そうは行っても登り切ったのは事実です。
Chapter5の勉強を終えて一番、感じた事はAIは凄い。って事です。
Copilotは一寸性能に難有りですが、ChatGPTやGeminiなら今までなら何日もかけてやっと解けた問題が一瞬で解決します。
このAIの助けのお陰で、本来なら解けないで諦めないといけない箇所が無くなりました。
凄いです。
そしてそれは以下の疑問に繋がります。
AIの力を借りる事が出来る社会で価値ある勉強とは?
例えば、環境設定なんかはそれぞれのPCの環境によって違うので、前にその設定をやった人の中で自分と同じ環境の人のやり方を聞く必要がありました。
そういう人がまとめた環境設定のやり方は非常に価値が高かったんです。
これが無価値になりました。
だってAIに聞いたら一発で教えてくれるんだもの。
では、AIが教えてくれない分野の知識や技術を持つことがこれから重要になって来るんでしょうか?
これは違う気がします。
川の水はタダでも誰も飲まない。
と言われるように、AIが知らない分野とは価値が無い分野と同義である可能性が高いです。
結論だけ書くと、AIの力を借りる事が出来る社会で価値ある勉強とは、AIに一回聞いただけでは、学ぶことが出来ない専門性の高い分野だと思います。

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 先週の復習

先週から神社のためのLandscapeを作成する事にしました。

Gaea2を使用して以下のTerrainを作成しました。

Heightmapと色の追加に使用したMaskとSatmapのImageも追加でExportしました。

今週はこれを使用してUE5に神社用のLandscapeを作成します。

しました。

Sizeは適当です。

本当はMaskを使用してLandscape用のMaterialを自作する予定だったんですが、

最初は

MW Landscape Auto Materialで代用しておきます。

これの使用方法を忘れてしまったのでYouTubeの自分の動画で作成方法を確認しました。

なんと株式会社KAZUHIROで検索しても検索に出て来ません。

株式会社KAZUHIRO+Gaea2で検索してやっと出て来ます。

ショック。

以下のような地形を作成しました。

Gameを実行すると以下の様になりました。

凄い。

これで十分でしょう。

谷底です。

山頂付近です。

大きさを見ると大体3kmのようです。

無難に以下の場所に神社を建設する事にしました。

大体100m^2の大きさの瑞垣を追加してみました。

横から見るとこんな感じです。

まずLandscapeを平にする事から始める必要がありますね。

確か建物を置くとその周りのLandscapeを自動で平にしてくれるPluginが有ったはずです。

それから調べます。

2.1.2 Landscapeを建物の大きさに合わせて平にするPluginを調べる

Pluginの名前が分かりません。

こういう時はAIに聞いてしまいましょう。

ChatGPTに質問したら一発で答えが返って来ました。

Blogを検索したら2024-09-15のBlogに以下の様にまとめてありました。

あってますね。

ただしChatGPTの回答には以下の様に書いてもありました。

どういう事がよく分かりませんが、実行したら地形が元に戻る可能性もあるという事ですね。

これを試すのは来週にします。

今週はここまでです。

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 前回の復習

 前々回の勉強でCreate Procedural Interiors With Full Room Separation | UE 5.4 P5 [1]の<15:15 - Set Density on Room Center Points>の実装を完成しました。

しかし結果が以下の様になってしまいました。

本来ならPointが床に表示されるんですが、されてません。

で先週はこのBugを直して

Pointが表示されるように直しました。

でBugを直していてこの事に気が付いたんですね。

ので今週は先週、Bugを直した部分の実装が実際に何をやっているのか復習します。

2.2.2 Create Procedural Interiors With Full Room Separation | UE 5.4 P5 [1]の<15:15 - Set Density on Room Center Points>の実装を理解する

今週は以下の実装でそれぞれのNodeが何をやってるのかを理解します。

まず最初の実装の部分です。

Get Spline DataノードはこのPCGをSetしてるBPにあるSplineを取得します。

次のSpline SamplerノードがこのNodeの設定に従ってSpline内にPointを生成します。

こんな感じです。

まずこのNodeの機能を勉強しますか。

このNodeのDimensionの値をOn SplineからOn Interiorに変更したんですが

この意味が分かりません。

ChatGPTに聞いてしまいましょう。

もうこれだけでした。

線として扱う場合はOn Spline、面として扱う場合はOn interiorだそうです。

次に以下のInterior Sample Spacingについての質問です。

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

大体100cmになるようにPointを生成するのか。

更に詳しく説明してくれてます。

要は平均したら100cmになるって事です。

その理由ですが、

だからだそうです。

良し、この部分の実装は理解出来ました。

次行きます。

そもそもFloor LoopとかRoom SizesのNodeがどこから来てるのかが分かりません。

それから調べます。

なんとFloor Loopは

Named Rerouteで以下の場所で設定されてました。

PCG Get Floor Loopsノードの実装を確認します。

あれ、思ってるよりかなり複雑です。

まず以下の部分の実装を見ていきます。

Floorの数から1を引いた数をWall Heightにかけてます。これは最上階の床の高さを示してると思われます。

一階の床のPointと最上階の床のPointをMergeしています。

試しにMerge Pointsノードを可視化したら以下の様になっていました。

次のCreate Splineノードです。

可視化すると以下のようなSplineを生成していました。

先程生成した2つのPointを繋ぐSplineを生成したようです。

一応、このNodeの機能もChatGPTで確認しておきます。

あれ?

Create Splineノードの機能は2つのPointからSplineを生成するだけじゃないみたいです。

順序付きの制御点でSplineを作成するのか。

でもどんな順番で?

うーん。

Point毎にIndexがあるみたいですね。その順番でSplineを生成していくようです。

次です。

Num SamplesにはFloorの値がPassされてます。

可視化すると

となっていました。

それぞれの階の床の位置にPointが生成されています。

こっちのSpline SamplerのDimensionはOn Splineになっていました。

この後の実装が何をしてるのか分かりませんね。

ChatGPTに解説してもらいましょう。

では解説してもらいます。

ああ、そう言えばそんな事をTutorialが言ってた記憶があります。

Spline上のPointは全部同じMeshしか載せられないのを、それぞれのPointで別々なMeshを追加するために、ある事をやる必要がある。みたいな話だったと思います。

それをここでやっていたのか。

Spline Samplerノード上では全てのPointは同じSetに存在してるそうです。

つまり全部のPointに一個のMeshしか対応できないという事です。

それをAttribute Partitionノードが一個しかないPointのSetを分割します。

今回は$indexによって分割します。

これが分かりにくい。

以下にPoint SamplerノードのDataを示しますが

それぞれのPointが別なIndexを持っています。

となると$Indexで分割したらPoint一個毎に分割されてしまうじゃないですか。

どういう事なの?

と思ったらこれもChatGPTが具体的に例で説明してくれてました。

つまり前の解釈であってたんです。

そして次のGet Attribute From Point Indexノードの機能についての説明です。

これは先にまとめを書いてしまいます。

Attribute Partitionノードが分割したそれぞれのPointのData(Attribute)が取得出来ない状態になってしまってるそうです。

それを回復するためにこのNodeがあるそうです。

このNodeを繋げるとAttribute Partitionノードで分割されたそれぞれのPointのAttributeの値が再び読めるようになるそうです。

実際のDataで確認してみましょう。

Attribute PartitionノードのDataを見てみます。

あれ?

普通にあります。

Get Attribute From Point IndexノードのDataも見てみます。

こっちの方がDataが無くなってるじゃん。

間違えて理解してる?

もう一回ChatGPTの回答を読み直します。

うーん。

やっぱりそう説明しています。

これって

が返すのはPointです。

しかしAttributeで返してほしいです。

それを

がしてる気がします。

つまりGet Attribute From Point Indexノードの本当の機能は、PointのIndexからそのPointが属してるAttributeを返す事じゃないでしょうか?

これが正解でしょう。

今回はChatGPTに勝ったな!

うーん。

今週はここまでですね。

続きのRoom Sizesの実装については来週からやる事にします。

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 前回の復習

 Unreal Engine - How To Edit Animations Non-Destructively with Control Rig [3]を実装しました。

結果です。

首をかしげながら歩くAnimationが完成しました。

これだけでもかなり有用な方法です。

そして最後に

と書いて終わっていました。

2.3.2 足のAnimationを変更する方法を考える

首のAnimationは元のAnimationとは混じっていません。

しかし今度の足のAnimationは元のAnimationの形状を大幅に変更します。

それでも上手く出来るのかどうかを確認するのが今回の足のAnimationを変更するTestをする目的です。

足のAnimationを追加する方法ですが、

ここで首を回転させるAnimationの代わりに足の動きを変えるAnimationを追加すれば良いだけです。

2.3.3 足のAnimationを変更する方法を試す

それでは実際に試してみます。

先週のBlogを読むと以下のProjectで実装していたので

同じProjectを使用してTestします。

起動させました。

今のAnimationでは普通に歩いています。

以下に示した様に足元にCubeを配置すると

そのCubeを貫いて歩いています。

これをCubeの上に足を置くようなAnimationに変更します。

まず今のAnimationをControl RigにBakeします。

を選択しました。

Animationを消します。

この状態で再生すると

先程のAnimationが再生されました。

Control Rigの+を押してAdditiveを選択します。

Control Rigに新しいLayerが追加されました。

ここにAnimationを追加します。

ここに来て大問題です。

Control Rigが表示されていません。

AIに聞いてみます。

結論から書くと出来ました。

Viewportの右上に目のiconが有りました。

これがずっと見つからなかったんですが、ありました。

このIconをClickして

Viewport Statsを選択しRigと打つとControl Rigが表示されます。

これを選択します。

この状態で、Level SequenceのControl Rigを選択すると

Control Rigが表示されました。

ChatGPTとGeminiの両方に聞いたんですが、両方とも正解の回答を返していました。

ただChatGPTの説明では目のIconを見つける事が出来ませんでした。

Geminiの説明で見つける事が出来ました。

しかしその後、Level Sequence上のControl RigのLayerを選択するとControl Rigが表示されるというのはChatGPTだけが回答していました。

うーん。

甲乙つけがたしです。

Control Rigを利用して以下のAnimationを追加しました。

最初の時は足がCubeの上に乗ります。

2回目の時はCubeを貫いて歩きます。

再生して確認します。

普通に出来てました。

正面から確認しましたが出来てます。

一回目の時はCubeに足を乗せて

2回目の時はCubeを貫いて歩いています。

作成したAnimationをAnimation SequenceとしてBakeします。

Bake Animation Sequenceを選択してBakeしました。

名前はWalk_forward_headturn_RightLegUpにしました。

Control Rigを消しました。

AnimationからBakeで新しく作成したAnimationを追加します。

確認します。

完璧です。

出来ました。

2.3.4 DragonのWalkingのanimationを調整するには

これでControl Rigがあれば複雑なAnimationの微調整を簡単に出来る事が判明しました。

問題はDragonのSkeletal MeshにControl Rigが無い事です。

Control Rigを作成する方法を勉強する必要があります。

ChatGPTに質問したら

以下のSiteを紹介してくれました。

https://www.youtube.com/watch?v=yj3DkIdA3LE

このSiteは来週勉強する事にします。

以下のAssetもあるそうです。

確認したら有料のAssetでした。

やっぱりControl Rigの基本を勉強する必要があります。

以下の方法で勉強したらどうですか?と言っていました。

今までControl Rigの何を勉強したのかの復習も必要ですね。

今週はこんなもんで十分でしょう。

ここまでにします。

3. AIの勉強

AIの勉強の目的ですが、

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

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

今週からCursor AIの勉強もする事にします。Vibe Codingというか、AIによるCodingを知っておく必要がありますので。

3.1 Cursor AIの勉強

これはもうAntigravityの勉強と統合します。

ここで中止とします。

3.2 Practical Deep Learning for Coders 2022 [4]の勉強をする

3.2.1 前回の復習

前回の復習を行うには前々回の復習からやる必要があります。

まずLecture3の今まで勉強した部分のまとめです。

実際の深層学習ではax^2+bx+cの計算の代わりに以下のNodeの計算結果をそのまま使用します。

それぞれのNodeがmx+bという計算を司っています。

そしてその計算結果に

を行うと

のようなどんな複雑な形状も再現出来るようになります。

ここまでが前々回の復習です。

しかしこの解釈だと順伝播の時にReLu関数を使用する事になります。今までのAIの説明だとReLu関数は逆伝播の時に使用するって言っています。

やっぱりLecture3の残りを復習する事で、実際のDeep Learningでどんな計算をしてるのかを確認する必要が有ります。

ここからLecture 3の残りを復習する事になります。しかし実際のDeep Learningの計算をする節の前に5つ位、復習してない節があります。

その部分を勉強した2025-04-20のBlogを読み直すと結構勘違いして間違って理解してるところがあるのでその前回はその

Deep Learningの計算をする節の前の節をしっかり勉強し直す事にしました。

3.2.2 Lesson 3: Practical Deep Learning for Coders 2022[5]の続きを復習する

<Build a regression model in spreadsheet>

2025-04-20のBlogを読み直すとNotebookLMのMind mapを利用して勉強していました。

これ今考えると滅茶苦茶分かりにくいです。

のでこの部分はLectureからもう一回まとめる事にします。

Excelを開いて以下のDataを表示しました。

このDataは以下のSiteからDownloadしました。

この後、DownloadしたDataを少しだけ整理してる話が続きます。

この部分は重要でないのでSkipします。

今度は数字ではない要素、例えば以下に示したSexを数字に変換します。

ここでこれらの数字でない要素に掛け算する事は出来ないから。と言っていました。

やっぱしここはmx+bのxがそれぞれのCellの値になるんでしょうか?

ここでそれぞれのParameterに対してRandomな数字を作成しました。

これはmx+bのmのDefault値なんでしょうか?

今度は以下の2つParameterの値を比較して

値が全然違う事を述べています。

正規化するのかな?

Logしていました。

この理由は前に勉強した時にまとめてあるのでここでは述べません。

正規化するよりLogする方が全体のバランスを綺麗に表せる場合はLogするとだけここには書いておきます。

そして以下の値と

以下の値を

それぞれ掛けて、その結果を全部足していました。

うーん。

これじゃmxだけじゃない?

そしたら以下に示したOnesを追加してる事を解説していました。

うーん。

もしかしたらこれがbになるのか。

いやbの合計値になるのか。

そんな気がします。

結果です。

この結果からLoss関数も計算出来ます。

その結果です。

更にTotal Lossも計算していました。

で、Solverを使用してこのTotal Lossの値が最小になるように

以下の値を変化させるようにしました。

あ、成程。

これでmとbの最適解を決定するのか。

結果です。

おお、一応、

と同じ計算をやりましたね。

でもこの計算はReLu関数はまだ使用していません。

更にLectureの説明では、これはまだRegressionでNeural Networkではないそうです。
<Build a neuralnet by adding two regression models>

何で?

そしてNeural Networkにするために同じ事をもう一回繰り返します。

うーん。

これはNeural NetworkじゃなくてDeep Learningではない。と言いたかったんじゃないでしょうか?

2回繰り返す事で一応、Layerの数が2になります。

2つ目のLayerも同じ様に計算しました。

この結果に対してReLu関数で値を調整しました。

え。

この結果に対してするの?

それぞれのMx+bに対してするのかと思っていました。

うーん。

これで複雑な形状も近似出来る式が生成できるとは思えません。

まあ、このLectureの例はそこまで厳密ではないのかもしれません。

この2つの結果を足します。

予測値が出ました。

予測値と結果からLoss関数を計算します。

そしてTotal Lossを計算しました。

Solverを使用してTotal Lossの値が最小値になるように

以下の値を調整します。

結果です。

うーん。

これで完成か。

Lectureではこの後、Matrix Multiplicationを使用する方法を説明しています。

今週はここまでで十分でしょう。

3.2.3 Lesson 3: Practical Deep Learning for Coders 2022[5]の続きを復習した感想

前よりは何をやってるのかはっきり理解出来ましたが、まだTitanicのそれぞれのDataの計算と以下のLayerとNodeの関係が分かりません。

例えば今回運賃というDataをInputしましたが、この運賃はInput LayerのNodeの一つに対応するんでしょうか?

それともHidden LayerのNodeに対応するのかな?

するとそのNodeでmx+bの計算をしてそのnode特有のmとbの値が出て来るはずです。

一応、mの値は出て来るのか。

という事はやっぱりHidden LayerのNodeに対応してるのかな。

後、ReLu関数はやっぱりmx+bの計算結果に使用していましたね。

とならないんでしょうか?

うーん。

まだよく分からない部分が沢山ありますね。

でも今回の勉強の目的は達成出来ましたので、今週のAIの勉強はここまでにします。

4. Nvidia Omniverseの勉強

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

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

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

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

2025年9月からIsaac Lab Documentation [6]の勉強に切り替えました。

4.1 前回の復習

Training the Jetbot: Ground Truth [7]の続きを勉強していました。

以下の図が何を説明してるのかがよく分からないと書いて居てましたが、

結論としては、

Commandは-piからpiの範囲で定義しないと、Quadrant 2とQuadrant 4の値が同じになってしまいますよ。と前の文章の説明の補足をしてるだけ。

となりました。

これは多分あってるでしょう。

そして何故、何回もこの話をするのかとChatGPTに怒った時のChatGPTの回答です。

こういう事に気をつけないでミスをする場合が非常に多いそうです。

これは勉強になりました。

その後は、Makerを視覚化するための以下の実装

のそれぞれのCodeの意味を勉強しました。

重要な箇所だけ以下にまとめます。

Vstack()関数の意味で

が出て来ます。

ここで

の意味を説明しています。

これが以外に難しいのでここでも説明をまとめておきます。

まずnum_envsの意味ですが、並列で動かす環境の数を表しています。

この例では64になっています。

次の3はそれぞれの配列の要素が3である事を示しています。

そして

ですが、

のような計算結果になります。

これが難しいのは私がVectorTensorの区別がついてないからです。

ここは今調べて確認します。

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

回答です。

PyTorchにおけるTensorの定義があるんですね。

そしてPyTorchでは全ての数字をTensorと言う型の箱に入れて扱うのか。

だから全部Tensorになるのか。

こういう風にDataのShapeを表すと全部、Tensorとして扱われるのか。

具体的な例の説明もありました。

は、

となります。

の場合は

となります。

最後に回答のまとめです。

これは今、復習した内容の更なる補足ですね。

一つだけ分からないのは、3次元 テンソル (Tensor) [N, x, y]の場合はどのように表記かです。

これもGemini3に聞いてしまいます。

回答です。

更に以下の様に説明してくれました。

ああ、理解しました。

こうやって表示するのか。

要は[]で覆っていけば良いんですね。

最後に分かり易く本棚に例えて説明してくれました。

もう理解しました。

この後、以下の実装の機能を勉強していて

ChatGPTの説明で

Loc、Rots、そしてMarker_indicesの値を以下の様に定義したんですが、

間違って解釈して、ChatGPTに直されていました。

今はTensorの定義を理解したので正しく説明出来ます。

Indicesの意味は分かりませんね。

先週のBlogを読み直しても説明していません。

先週質問したChatGPTの回答を見つけて来ました。

だそうです。

Forward MakerのVectorは0、Command MakerのVectorは1で表示するという事です。

これで前回勉強した内容を全部復習しました。

4.2 Training the Jetbot: Ground Truth [7]の続きを勉強する

これは前回勉強した以下の実装の解説です。

次の文です。

これは短いのでそのまま訳さないで載せておきます。

続きの実装です。

まずParameterのActions: Torch.Tensorの意味が分かりません。

―>NoneはReturn Valueが無いと言う意味でしょう。これは分かります。

次のSelf.actions = action.clone()

ではParameterに指定したActionの値が入るんでしょうか?

最後のSelf._visualize_markers()は先程復習した関数です。

まず

からです。

ChatGPTに質問したら完璧に回答してくれました。

以下にその内容をまとめます。

これはParameter名はActionsです。そしてそのActionsの型がtorch.Tensorが想定されますよ。という意味です。

次のCodeですが、

Self.actionsはParameterのactionsとは違う変数です。

そしてParameterのactionsの値を別な場所で使用出来るようにSelf.actionsに保持しているそうです。

そしてCloneを使用しないと単にParameterのactionsのaddressだけを保持してしまい、ParameterのActionsの値が途中で変更した場合、その変更した値を参照してしまうから、Clone()関数で別なAddressにこのParameterの今のactionsの値を保持させ、それを参照するようにしてるそうです。

やっと理解出来た。

次の文です。

そして以下の実装が紹介されていました。

Codeを読んでいきます。

まず以下の部分の意味が分かりません。

ChatGPTの回答です。

はい。

そして

Sequence[int]の意味も教えてくれました。

だそうです。

# pick new commands for reset envs

の解説です。

2行目の-1の意味が分かりません。

だそうです。

この後、Normの計算方法とかをChatGPTにかなり詳しく質問したんですが、それはあまりに細かい話になるのでここではSkipします。

あれ?これって前にやった内容ですよね。

ここはSkipします。

だそうです。

ここは特に疑問は無いです。

そして

しています。

以上でした。

最後の結果です。

なんか途中で集中力が切れてしまいました。

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

Training the Jetbot: Ground Truth [7]を勉強した感想は来週書く事にします。

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 15: Sparkling Water Project [8]の<05:37 Fluid Sourcing>を勉強しました。

先週のBlogを見たら、風邪引いたかもしれないと書いてあります。

今週は、咳が止まりません。こうなると薬飲んでも全然直らないで、静かにしてるしかないんですが、忙しすぎて休めません。

ああ、どうしたら良いんでしょうか?

6.2 Houdini is HIP - Part 15: Sparkling Water Project [8]の<05:37 Fluid Sourcing>を実装する

それでは先週勉強した内容を実装していきます。

Obj Layerに戻り、新しいGeometryノードを追加します。

この中に入ります。

まずSphereノードを配置しました。

SphereノードはPolygonとPrimitiveがあります。

多分ですが、このSphereはPointを生成するために使用するだけなのでどっちでも良いと思います。

Polygonの方を使用しました。

SphereノードのUniform Scaleの値を0.1に変更しました。

結果です。

凄い小っちゃいです。

更に0.04に変更しました。

位置を以下の場所に変更しました。

Frameの位置を45に変更します。

Uniform Scaleを選択して

Altを押します。

Tutorialではこれで、以下に示した様なBarが

追加されるとありますが、

されません。

Uniform Scaleを右Clickしたら以下のBoxが表示されました。

これを見るとKeyframeを追加するには、Alt+LMBになっています。

試してみます。

お、出来ました。

でもUniform Scaleの値がbezier()になってしまいました。

これあってるんでしょうか?

ChatGPTに聞いてみます。

回答です。

Bezier()と表示されるのは正しいみたいです。

あってるって、合ってると言う漢字であってましたっけ。

前に調べた時は、正しいと言う意味で使用する時は平仮名で書く必要がある。のが正解だった気がします。

でもChatGPTの回答は自然に見えますね。

合ってるでも良いのかもしれません。

ここから重要な情報をChatGPTが教えてくれました。

これも重要な情報ですが、

この次です。

これ試してみたら出来ました。

MMBでUniform Scaleをクリックすると

現在の数字が表示されます。

一応、ChatGPTの回答の2と3も以下に示しておきます。

ベジェ曲線がどんな曲線なのか不明ですが、そういうものとして理解しておきます。

これは強引すぎる解釈でしょう。

でも一応、論理は通ってますのでこれも載せておく事にしました。

今度はFrameの位置を54に移動させます。

Uniform Scaleの値を0にして

Frameをセットしました。

これ最初は出来なくて、なんか色々弄ってたら突然出来ました。

合ってるのかな?

Frameの45から54を移動させるとSphereノードが表示されたり消えたりします。

一応出来てるようです。

でも緑のKey Frameが消えてしまいました。

Sphere Nodeをもう一回選択してみました。

表示されました。

今度はFLIP DOP Sourceノードを追加します。

FLIP DOP SourceノードのParticle Separationの値を0.004に変更します。

しました。

先週のBlogに重要な事が書いてありました。

10分の1が丁度いいのか。

更にVelocityの値も変更しました。

私の結果ですが以下の様になっています。

なんか違いますね。

一寸Tutorialを見て確認します。

Voxel Sizeも0.004にセットしていました。

直します。

今度は以下の様になりました。

うーん。

分からん。

取りあえずこれはOKと言う事にして先に進みます。

以下のIconをEnableしてVelocityを可視化します。

結果です。

あれ?

Sphereの位置が逆だった。

いや、TutorialのSphereのVelocityの向きもCupと逆向きでした。

最後にNULLノードを追加して

名前をFLIP_SOURCEに変更して終わっていました。

短いですが、咳が止まらないのでここで終わりにします。

休む事も必要です。

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

今週は特別にGoogleのAIについての調査をします。

最近GoogleはGemini3やTPUで快進撃を続けていますが、これがどういう事なのかを客観的にまとめられるように調査します。

7.1 Googleの逆襲

GoogleはAI革命で3つの戦いを主に行っています。

それはTPU vs GPU、Gemini vs ChatGPT、そしてYouTube vs TikTokです。

YouTube vs TikTokに関しては異論がある人もあると思いますが、

実は、どの動画をどの人にRecommendするかなんかはもろにAIが担当するところで、

その結果YouTubeを見る時間が多くなるかTikTokを見る時間が多くなるか変わってくる訳で

これもAI革命の主戦場の一つなんです。

<TPU vs GPU

私が前から予測してた通り、METAがTPU用のPyTorch、TorchTPUを発表しました。

これを踏まえてAI開発におけるTPUとGPUの長所、短所をまとめます。

まず結論から言うと

研究ではGPU、最適な状態が分かった上でScale upして大規模に試すときはTPUが有利。

となります。

ただしScale upする時にGPUからTPUに移るととんでもなく手間がかかる(無限のBug地獄)が有るとも聞きました。

そしてTorchTPUは研究において今まではGPU一択しかなかったのが、TPUの選択も視野に入れる事が出来る。となりました。

つまり選択肢の幅が広がった。という事です。

TPUの最大の問題は生産出来る会社です。今、最新のAI用のChipを生産出来るのは台湾のTSMCだけです。それに準じてSamsungIntelが来ています。

Intelは無理でしょう。となるとSamsungが担当する事になると思われますが出来るんでしょうか?

一説によるとTPUのChipの値段はGPUの70%以下だそうです。

そんなんでSamsung持つんですかね。

実際にTPUがGPUの対抗馬として公開されたら、ボロクソに叩かれそう。

<Gemini vs ChatGPT>

無料版同士を比較するとGemni3は三回位しか質問出来ないし、回答が遅い。

ChatGPTの方が沢山使えるし、会話してて楽しいです。

ただ回答の精度とかはGemini3の方が僅かに上のような気がします。

これを踏まえて考察するとGoogleはChatGPTに負けます。

Gemini3はPokémon GOと同じです。

あんなに流行っていたのに、今やってる人全くいません。

GoogleはUserの気持ちを理解するのが非常に苦手なんです。

無料版のUserが三回位しか質問出来なかったらUserは根付かないですよ。私も最初はGemini3の高精度な回答に感服してChatGPTから切り替えましたが、もう今はChatGPTに戻ってしまいました。

YouTube vs TikTok

私のChannelをShadow Banして潰したYouTubeが勝つわけ無いでしょう。

TikTokは中国系のChannelという事で今は避けられていますが、Oracleが買収した後は米国企業になります。信用度は爆上げします。

よほどOracleがへましない限り、TikTokがShareを奪うでしょうね。

YouTubeは今からでも私のChannelのShadow Banを外した方が良いですよ。

そして広告収入という現在のBusiness Modelが立ち行かなくなります。

OpenAIは、Agentic AIのServiceを通じて商品を購入して貰ったらその商品の数%を手数料として集めるという、新しいBusiness Modelを考えています。

こっちなら企業は無駄なお金を払う必要は無くなります。

Start up企業などのまだ収入が無い企業にとっては非常に有難いモデルです。

それに対して広告は儲かってる企業が払う税金を減らす分には、都合が良いですが、今のご時世そんな企業はほとんど無いでしょう。

ので、今Googleには安定してるBusinessがあるからOpenAIやOracleとは違う。という意見って本当に今しか見てないです。

勿論、YouTubeが広告を出す企業に特別な忖度をして、その企業に対しての批判的な動画をバンバン、Shadow Banするとかしてるなら別ですが、

そうでない限り広告を出すMeritはほとんどの企業にはなくなるんじゃないでしょうか?

そしてもしYouTubeが広告を出す企業に特別な忖度をしたら

その動画は物凄くつまらなくなってTVの二の舞になるでしょうね。

<まとめ>

これらを考慮すると、やっぱり今のGoogleのTPU、Gemini3の快進撃がこれからもずっと続くとは思えません。

Pokémon GOのように一時を境にして急速に廃れて、OpenAI、そしてNvidiaGPUに戻っていくと思われます。

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 前回の復習

前回の勉強では主に2つの事をしてます。

一つ目は、

HLSLではSemanticsによってDataが管理されている。

事についてもう少しだけ深堀して勉強しました。

もう一つは、

 Writing Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [9]の最初の10分を勉強しました。

一つ目の

HLSLではSemanticsによってDataが管理されている。

事に関して簡単にいかにまとめます。

まずShaderで言うSemanticとは変数の後に:POSITIONと書く事を指します。そしてこれがHLSLでC++側のCodeとHLSL側の変数が同じである事を示すと言う意味です。

Semanticには2つの種類があります。

一つ目はSystem Value Semanticで、名前の最初に必ずSV_が付きます。

このTypeのShaderにはSV_POSITIONやSV_Targetのように、その値を必ず指定する必要があるものがあります。

2つ目は自由にその名前を設定出来るもので、

以下の方法でCPU側でSemanticの変数の名前を指定します。

8.1.2 Writing Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [9]の最初を実装する

それでは先週勉強した内容を実装していきます。

Shadersという名前のFolderを作成します。

追加しました。

これは以下のIconが

Show All Fileになってる場合はそのままFileを追加出来たはずです。

そうじゃない場合は、Filterとか言うのが作成されたはずです。

前のBlogを見て確認します。

2023-11-05のBlogにそれらしき事が書いてあるんですが再現出来ません。

確かSolutionか何かを切り替えるとSolution Explorerに表示されるのがFolderではなくFilterになったはずですが、証拠のScreenshotが無いです。

あれ?

もうCopilotに質問してしまいます。

Smart Plus(GPT5.2)で質問しました。

やっぱり合ってた。

でこれはC++特有だそうです。

同じVSでもC#には無い機能だそうです。

以下の方法で切り替えられるそうです。

さっきこれを試したんですが、両方Folder Viewになってしまったんです。

どうしてなんでしょう?

あ、これだわ。

さっきSolutionからじゃなくてProjectから開いたわ。

いや、Solutionから開いても同じでした。

うーん。

今、これにこだわる必要は無いでしょう。

先に進みます。

一応、ShadersのFolderが追加されているのは確認しました。

ここにHLSLを追加します。

Addを押しました。

以下のFileが作成されました。

以下の様に書き直しました。

このCodeの意味については先週しっかり勉強したので今週は繰り返しません。

これで完成です。

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

8.2.1 「5.12.5 BarrierとFenceの設定」の続きを勉強する

<Raw Pitchは256の倍数でなければならない>

以下の部分の話をしています。

元のImageを見たら200x200です。

うーん。

でも普通に出来ましたよね。

Copilot(GPT5.2)に聞いたら、色々理由を並べていますが、たまたまだと言っていました。

たまたまなのか。

では直す必要がありますね。

Copilotによるとこの部分のCodeは以下の意味だそうです。

うーん。

Copilotの説明はあってはいるんですが、なんか文章がちぐはぐな時がある気がします。

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

回答を見ます。

うーん。

同じかな。

今週はCopilot(GPT5.2)で勉強します。

この次は中間BufferのSizeも変更する必要があるそうです。

以下の様に変更していました。

3D12_RESOURCE_DESC resDescの値を

の様に変更していました。

これがよく分かりません。

分かりました。

かなり時間がかかりましたが、分からなかった部分が分かりました。

教科書は中間BufferのSizeと言っていますが、これはUpload HeapのResourceの事です。

Copilotの説明を簡潔に述べると、CopyTextureRegion()関数のRowPitchの値を変更したら、Upload HeapのResourceのWidthの値も変更する必要が有るという事です。

そしてここが重要なんですが、Default HeapのResourceのWidthの値は変更する必要は無いんです。

何故なら、

Default Heap側のWidthは元の画像のSizeをGPUに伝えるのが目的だからです。

うーん。

深い。

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

本当はChapter 5終わらせたかったんですが、これは無理です。急いで終わらせてこういう重要なConceptを見逃がしてしまったら元も子もありません。

今週はここまでにして、一週間この勉強した内容を吟味する事にします。

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] Epic Games. (n.d.). Control Rig in Unreal Engine, from https://dev.epicgames.com/documentation/en-us/unreal-engine/control-rig-in-unreal-engine

[3] Motion Forge CG. (2024, January 15). Unreal Engine – How To Edit Animations Non-Destructively with Control Rig [Video]. YouTube. https://www.youtube.com/watch?v=nfz5H4PN2ys

[4] Howard, J. (Instructor). (n.d.). Practical Deep Learning for Coders [Video playlist]. YouTube. https://www.youtube.com/playlist?list=PLfYUBJiXbdtSvpQjSnJJ_PmDQB_VyT5iU

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

[6] Nvidia. (n.d.). Isaac Lab Documentation. Retrieved from https://isaac-sim.github.io/IsaacLab/main/index.html

[7] Isaac Lab Project Developers. (2025, November 25). Training the Jetbot: Ground Truth. In Isaac Lab Documentation — Walkthrough. https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/training_jetbot_gt.html

[8] Nine Between. (2023, November 29). Houdini is HIP - Part 15: Sparkling Water Project [Video]. YouTube. https://www.youtube.com/watch?v=Xs2tHiVFKF0

[9] Lötwig Fusel. (2023, August 6). Writing Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [Video]. YouTube. https://www.youtube.com/watch?v=8MMRz9QMJI8

 

UE5の勉強などなど

1.今週の予定

今週(12月1日)は用事があるのと風邪気味なのでいつもやってる以下の勉強から選り好みしてやる事にします。

成果が出てるのは今週はお休みします。成果がまだ出てないのや、予定より遅れているのをやる事にします。

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

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

<追記>

次の週(12月8日)も色々な用事が入って全部の勉強は出来ないので、先週勉強しなかった箇所を勉強していきます。

このBlogにはその抜けてる部分に追加で勉強した内容を書いておきます。

2. 映像作成用UE5の勉強

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

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

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

これは結構順調に成果が出てるので今週はお休みします。

―12月8日の週の追加―

2.1.1 前回の復習

2025-11-30のBlogを見ると

楼門は一応完成しています。

そして最後に

と書いてありました。

では今週はGaea2を使用して神社用の地形を作成します。

2.1.2 神社の地形を作成する

以下の地形を作成しました。

色も追加しました。

これをUnreal Engine用にExportします。

しました。

2.2 PCGの勉強

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

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

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

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

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

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

これも成果が出てるので今週はお休みします。

―12月8日の週の追加―

2.2.1 前回の復習

2025-11-30のBlogを見ると

 Create Procedural Interiors With Full Room Separation | UE 5.4 P5 [9]の続きを実装しています。

<15:15 - Set Density on Room Center Points>の実装を完成しました。

しかし以下に示した様にPointが表示されません。

今週はこのBugを直します。

2.2.2 <15:15 - Set Density on Room Center Points>のBugを直す

Get Spline Dataノードから順番に見ていきます。

可視化しました。

何も表示されません。

以下の最初の実装で同じ実装をしています。

ここでも同じ結果になるのか確認します。

Get Spline Dataノードを可視化しました。

結果です。

これは同じ結果になりました。

次にSpline Samplerノードを試します。

結果です。

何も表示されません。

今度は最初の実装です。

Pointが表示されました。

この時点でBugがあるという事です。

以下のCreate Attributeノードの値が5だからでした。

4まではPointが生成されますが、5にするとPointが0になります。

取りあえず2にしました。

これで問題解決かと思いPCG Set Densityノードの

結果を可視化しましたが、

Pointは表示されませんでした。

まだ他のBugがあります。

の結果を可視化したらPointが消えていました。

このNode内にBugがあるようです。

見ていきます。

InputノードのInとTransform PointsノードのInが繋がってなかったです。

更に以下のAttribute FilterノードでPointが消えました。

Tutorialを見直したらこのNodeのOperatorの値を以下の<に指定していました。

直しました。

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

もう一回PCG Set Densityノードを可視化してみます。

今度はPointが表示されるようになりました。

こっちはTutorialの結果です。

完全に同じとは言えませんがまあ良しとします。

それよりもこの部分の実装、何をやっているのか全く理解して無いです。

この部分の実装の復習をする必要があります。

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

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

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 [1]を勉強する必要がある事が判明しました。

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

これはいまやってるProjectの中で一番成果が出てません。

今週も勉強する事にします。

2.3.1 先週の復習

 Unreal Engine - How To Edit Animations Non-Destructively with Control Rig [2]を勉強しました。

Linked Animation Sequenceを使用して歩行してるMannequinのAnimationにControl Rigから操作した首を振るAnimationを追加する方法を勉強しました。

ただ最後に以下の様に書いていました。

実装して確認するしかないですね。

2.3.2 Unreal Engine - How To Edit Animations Non-Destructively with Control Rig [2]を実装する

これってUE5.6で試してるんでしょうか?

Tutorialを見て確認します。

UE5.6でした。

UE5.6で作成したProjectに以下のProjectがありました。

これを使用します。

<Intro: 00:00>

特に実装する事は無いです。

<Character Set Up in Level Sequence: 00:18>

SKM_Quinn_SimpleをLevel上に配置しました。

以下のFolderを作成したのでその中に作成していきます。

中にLevel Sequenceを作成しました。

そしてLevel Sequenceを開きました。

Skeletal MeshをLevel Sequenceに追加しました。

Control Rigが表示されています。

今度はAnimationの+を押してWalkの話を追加します。

Tutorialと同じAnimationが無いので以下のAnimationを選択しました。

しかし実行してもAnimationは再現されません。

これはControl Rigが既に存在してるからだそうです。

これを消します。

Animationが始まりした。

Level Sequenceの動画の終わりをこのAnimationの終わりに合わせました。

<Process 1 Edit and Bake Animations: 02:08>

ここからAnimationをBakeするそうです。

まずControl RigにBakeします。

先週のBlogにまとめた方法と全く同じやり方で出来ました。

これも全く同じです。

Createを押しました。

Bakeされました。

Animationを消しました。

BakeされているのでAnimationを消してもWalkingの動作をします。

ここでControl Rigの+を押し、Additiveを選択します。

新しいControl RigのLayerが追加されました。

ここにHeadを回転させるAnimationを追加します。

しました。

AnimationをLoopで表示させる方法が分らなかったですが以下の矢印をClickしたら

Loopになりました。

これ簡単なようですが、ChatGPTもGeminiもCopilot(GPT5)間違った方法を説明していました。

地味に重要な情報です。

首を振りながら歩くようになりました。

作成したAnimationをAnimation SequenceとしてBakeします。

OKを押します。

ナニコレ。

これはBlogには書いて無いです。

一応、Tutorialで確認します。

Export To Animation Setを選択していました。

同じ様にします。

そしてControl Rigを消します。

Animationに先程作成したWalk_forward_headturnを追加します。

結果です。

首をかしげながら歩くAnimationが完成しました。

これだけでも十分な情報ですね。

次の実装をやる前にこれを実際に使えるようにします。

来週は、足のAnimationを変更させてみます。それで歩く場所によって歩き方を変更できるのか確認します。

3. AIの勉強

AIの勉強の目的ですが、

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

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

今週からCursor AIの勉強もする事にします。Vibe Codingというか、AIによるCodingを知っておく必要がありますので。

3.1 Cursor AIの勉強

この勉強はまだ始まったばかりなので成果も何もないです。

今週はお休みします。

3.2 Practical Deep Learning for Coders 2022 [3]の勉強をする

こっちの勉強はまだまだやる必要があります。

3.2.1 前回の復習

まず前回の復習をする前に前々回の復習をする必要があります。

以下にNeural Networkの工程をax^2+bx+cで表した表を示しておきます。

この例ではStep1でModel(関数)を定義で、ax^2+bx+cを定義していますが、実際のNeural Networkではこのような式は無いそうです。

代わりに

で実際に計算するそうです。

ここからReLu関数の勉強になります。

ReLu関数は

という非常に簡単な関数ですが、これを使用する事で

例えばmx+bにRelu関数を使用してそれを足し続けた場合、以下の

を生成する事が可能になるそうです。

これはmx+bを何個足してもmx+bのままなのと対称的です。

これがReLu関数を使用する理由だそうです。

で、ここからが先週のBlogのまとめで、今読むと問題があるんじゃないの?と思える部分です。

Node一つ一つが、mx+bである事から、一つ一つのNodeに対してReLu関数で値を補正して全部のNodeの計算結果を足しているんだ。と推測してます。

しかしそれだと順伝播の時にReLu関数を使用する事になりますよね。

今までのAIの説明だとReLu関数は逆伝播の時に使用するって言っています。

はい。

問題です。

これを確認するためにも

このNeural Networkの計算方法をどうやってTitanicのDataに使用したのかを確認する。

必要が出て来ました。

しかし先週のBlogによると

How does a neural net really work? [4]はここで終わっているそうです。

そして

先週のBlogの最後には、2025-04-20のBlog

と書いて終わっていました。

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

3.2.2 Lesson 3: Practical Deep Learning for Coders 2022 [5]の復習をする

2025-04-20のBlogのまとめを見ていきます。

<49:21 A chart of all image models compared>

これは今の課題とは特に関係ない話です。

次に行きます。

<52:11 Do I have enough data?>

十分なDataを持ってるかどうかを判断するには、

あるDataでModelを作ってその回答があってたら十分なDataがあると判断する。

だそうです。

あってんの?この解答。

<54:56 Interpret gradients in unit?>

ここからが重要になります。

これ質問自体がオカシイですよね。

Lectureを見て確認します。

まず質問ですが以下に記しました。

Derivatives for a, b and c, we got values of -10.8, -2.4, etc.

What unit are these expressed In?

Why don‘t we adjust our parameters by these values themselves?

うーん。

確かに単位とか聞いていますが、そんなに関連性のある質問かな?これ。

そしたらProfessorが以下の様にこの質問の内容を言い換えました。

Why are we multiplying it by a small number

なる程ね。

これでLearning Rateの話に繋がるのか。

で以下の実装を表示しました。

それぞれのUnitについてまず回答しています。

うーん。

Unitって単位って意味でしょう?

ここでそんなのは存在しないと思うんですがどうなんでしょう?

説明聞いたら分かりました。

Unitってこの場合は、最小の単位って意味で使っています。

つまり次の値が幾つになるかって意味です。

2025-04-20のBlog

と書いてありますが、このLectureを見返した結果、同じ感想しかないです。

ここはこの後のLearning Rateの話に繋がる事が理解出来たら十分だと思います。

<56:23 Learning rate>

ここの2025-04-20のBlogの説明は完璧で何か付け足す必要は全くないです。

要は

Unitは最小の単位って意味で使っています。

って事を理解したらこの部分の意味が全部通じるんです。

<1:00:14 Matrix multiplication>

これは知ってる内容なので省略します。

<1:04:22 Build a regression model in spreadsheet>

やっとここに来ました。

来ましたがこれは来週やる事にします。

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

4. Nvidia Omniverseの勉強

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

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

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

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

2025年9月からIsaac Lab Documentation [6]の勉強に切り替えました。

4.1 先週の復習

先週は、先々週はEnvironment Design [7]を最後まで勉強したけど、特に実装して何かをやる事は無かったはずだからTraining the Jetbot: Ground Truth [8]の勉強を始めると言って次のTutorialの勉強を始めてしまいました。

これ絶対間違ってるはずです。

しかし実装はまとめてした方が効率が良いので、Walk Throughの勉強が全部終わってから実装する事にします。

Training the Jetbot: Ground Truth [8]では

を可視化するための実装を行っていました。

先週は<Expanding the Environment>の以下の実装の

解説までやりました。

その途中で

Pythonの型ヒントを勉強したり、VisualizationMarkersの仕様方法を勉強しました。

VisualizationMarkersを使用するとUSD File形式の3D Modelを表示する事が出来るようになります。

ここで以下の疑問が生じます。

仮想空間における強化学習において、この例のように トレーニングや推論中にポリシーが何をしているのかを簡単に理解できるように、可視化 (visualizations) を設定しておく のは普通に行われている事なのでしょうか?

それに対してのChatGPTの回答です。

Debugや研究開発段階では普通に行われているが、大規模Trainingでは可視化しないそうです。

これ聞くとTPUだけで仮想空間におけるRLを行うのは不可能ではないけど現実的では無いです。

途中で、Isaac Simでは通常Z軸が上になってる。とのGemini3からの説明があってそれがあってるかどうかを結構熱心に確認していました。

更に、.cuda()関数を始めて勉強しました。

ここでPyTourchとCudaの関係を質問しています。

大体こんな感じです。

4.2 Training the Jetbot: Ground Truth [8]の続きを勉強する

先週の続きから勉強します。

Gemini3による訳です。

多変量正規分布(multivariate normal distribution)の意味が分かりません。

Gemini3に説明してもらいましょう。

だそうです。

この後、詳しい説明をしてくれてます。それって大体の時はありがたいんですが、今回の場合の様にこれだけ説明して貰えば完璧に理解出来てしまう場合は、ウザいですね。

次の文です。

訳です。

ナニコレ?

もうLimitに達してしまいました。

もうアメリカは来年まで半休で、みんなが凄い勢いでAIを使用してるからServiceを制限してる。って話は本当みたいです。

isaaclab.utils.math.quat_from_axis_angle()関数が回転角と角度からQuaternionを生成するのは理解しましたが、今までの実装にはこの関数は使用されてませんね。

そして以下の図が追加されていました。

この図が何を説明してるのか見当もつかないですね。

でも分かる所もあります。

例えばWはWorld Coordinateを表しているんでしょう。そしてBはRobotのLocal Coordinate。

Forwardと書かれた青い矢印はRobotの進む方向、Commandと書かれた赤い矢印はAIがRobotに進ませたい方向です。

ここまでは完璧です。

次はやや曖昧ですが大体こんな意味だと思う箇所です。

まずYawです。

これはここではYawはWorld CoordinateのX軸を0としてCounterclockwiseに回転する。と定義してる事を示してるだけのような気がしますが。どうなんでしょう。

次にRotot.data.root_pos_wですが、これはWorld CoordinateにおけるRobotの座標を計算する関数だと思います。

矢印がWorld Coordinateの原点からRobotに向かっているからです。

最後に全然意味が分からない箇所です。

まずrobot.data.root_com_vel_v[:,:,3]です。

これ一体何をしてるんでしょうか?

Forwardの矢印がYawで回転した分だけずれているように見えますが、それって何が大切なんでしょうか?

全く分からないです。

次にforward x commandとz^・(forward x command)です。

これz^を掛ける事で

になっていますが、全く意味が分かりません。

取りあえず続きの説明を読んでみます。

今度はChatGPTに訳して貰います。

Command VectorからYaw角を求めるって事ですね。

次の文です。

ああ。

ここは単にCommandは-piからpiの範囲で定義しないと、Quadrant 2とQuadrant 4の値が同じになってしまいますよ。と前の文章の説明の補足をしてるだけでした。

こんなの当たり前すぎて、こんなに時間をかけて説明する内容じゃないです。

これ、

-piからpiの範囲で定義しないと、Quadrant 2とQuadrant 4の値が同じになってしまいますよ。

と言ってその実装方法を示した前の実装の部分と全く同じです。

何だお。

同じ事を2回も説明してたのかよ。

時間無駄にしました。

一寸ChatGPTに文句を言っておきます。

そしたらChatGPTが凄い重要な回答をしてくれました。

これらの小さなMissで数日が無駄になる事がよくあるそうです。

ええ。

そうなの?

更に以下の様に詳しく説明してくれました。

うーん。

有りそう!

でもこれ聞くと、TPCだけで仮想空間における強化学習を実行するなんで夢のまた夢である事も理解出来ます。TPCではこれらの問題を可視化して確認する事なんて出来ませんから。

ChatGPTの訳です。

今、気が付いたんですがChatGPTの方がGemini3より回答が早いです。

これは先程の以下の実装を説明しています。

そして以下の実装が紹介されていました。

これもさっきの内容の続きです。

次の文です。

そして以下の実装が紹介されていました。

これは新しい実装ですね。

それぞれのCodeの意味についてChatGPTに説明してもらいます。

まずこのMethodの意味ですが、Makerを描画するための関数です。

先程の図で出て来たRotot.data.root_pos_wが、self.data.root_pos_wとなってここに登場しました。

やっぱりこの関数はRobotのWorld Coordinateでの位置を返していました。

LocとRotsは2つのMarkerの位置と向きの情報が入った2つの行列をそれぞれQuaternionの形で保持してるって事でしょうか?

多分そうです。

一応ChatGPTに質問して確認します。

厳密に説明してくれるそうです。

全部をまとめると長くなってしまうので重要な所だけ以下に示します。

Rotsの場合は先程の解釈であってたんですが、Locは位置VectorでQuaternionじゃないそうです。

そしてここに書いてある

つまりVstack()関数の機能についても以下の様に説明してくれました。

2つのArrayをVstackで一つのArrayにまとめています。

しかし単純に足すのではなく、ArrayのShapeを(2,3)から(4,3)に変更して一つのArrayにまとめています。

ここで

の意味を確認しました。

回答です。

この説明では分かりにくいので以下に具体的な例を示します。

これでやっとこの意味が分かりました。

Robotの向きを表す矢印と、Commandが表す矢印がそれぞれの環境分あるので、こういう書き方になってるんです。

長々と解説が入りましたが、前の実装の説明に戻ります。

これはそれぞれの関数については説明して無いですね。

もう一回ChatGPTに解説してもらいましょう。

つまり0~63の要素を持つTensorを作成したって事です。

[0,0,0,0]と[1,1,1,1]の2つのTensorを作成しました。

Vstackは

[

[0, 0, 0, 0],

[1, 1, 1, 1]

]

でHstackは

[0,0,0,0, 1,1,1,1]

に結合するって事です。

これはよく分からないです。

例えばloc

[

[0,1,2],

[3,4,5],

]

でRots

[

[6,7,8,9]

[10,11,12,13,14]

]

でIndicesが

[0,0,0,0, 1,1,1,1]

の場合、

となった場合、どれがどれに当たるんでしょうか?

ChatGPTに質問してみます。

回答だけ以下にまとめます。

全然間違っていました。

こういう事だったのか。

LocとRotsがnum_envs = 2の場合はx2になるのを忘れていたのはケアレスミスですが、Indicesの意味は完全に買い違いしていました。

これ考えてみます。

loc =

[

[x0, y0, z0],   # 環境0 forward marker

[x1, y1, z1],   # 環境1 forward marker

[x2, y2, z2],   # 環境2 forward marker

[x3, y3, z3],   # 環境0 command marker

[x4, y4, z4],   # 環境1 command marker

[x5, y5, z5],   # 環境2 command marker

]

rots =

[

[qx0, qy0, qz0, qw0], # 環境0 forward marker

[qx1, qy1, qz1, qw1], # 環境1 forward marker

[qx2, qy2, qz2, qw2], # 環境2 forward marker

[qx3, qy3, qz3, qw3], # 環境0 command marker

[qx4, qy4, qz4, qw4], # 環境1 command marker

[qx5, qy5, qz5, qw5], # 環境2 command marker

]

indices = [0, 0,0, 1, 1,1]

これでChatGPTに確認します。

あってました。

良かった。

更に以下の事を述べていました。

だそうです。

これで実装部分の理解が全部出来ました。

最後にChatGPTのまとめを載せておきます。

Training the Jetbot: Ground Truth [8]はまだまだ続きますが今週のOmniverseの勉強はここまでにします。

まだまだ先は長いですが、諦めずにやって行きます。

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

5.1 Gaea2のTutorialの作成

前回のTutorialの作成は休んでしまったので、一か月ぶりのTutorialの作成です。

今週はCellular3Dについてです。

Fabの2週間毎のFree Assetについてです。

このTutorialのSeriesについての説明です。

公式Tutorialを勉強した感想です。

砂利の表面の作成方法についての感想です。

ひび割れの表面の作成方法についての感想です。

砂漠の表面の作成方法についての感想です。

6. Houdiniの勉強

―12月8日の週の追加―

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

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

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

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

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

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

6.1 前回の復習

 Houdini is HIP - Part 15: Sparkling Water Project [10]の実装をしました。

以下のGeometryを作成しました。

6.2 Houdini is HIP - Part 15: Sparkling Water Project [10]の続きを勉強する

<05:37 Fluid Sourcing>

Obj Layerに戻り、新しいGeometryノードを追加します。

名前はFLUID_BASE_DYNAMICSにしたそうです。

この中に入ります。

まずSphereノードを配置しました。

SphereノードのUniform Scaleの値を0.1に変更しました。

更に0.04に変更しました。

位置を以下の場所に変更しました。

Frameの位置を45に変更します。

Uniform Scaleを選択して

Altを押します。

するとFrame45に以下のような

緑色のMarkがつきます。

そしてFrameの位置を54に移動させます。

今度はUniform Scaleの値を0にし

Altでまたセットします。

今度はFLIP DOP Sourceノードを追加します。

FLIP DOP SourceノードのParticle Separationの値を0.004に変更します。

これはSphereのSize(0.04)の10分の1ぐらいが丁度いいからだそうです。

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

これはSphereから生成されるFluidがX軸の逆方向に噴き出すようにするためです。

以下のIconをEnableして

以下の様にしました。

これは何を可視化したんでしょうか?

Velocityでしょうか?

最後にNullノードを追加しました。

名前はFLIP_SOURCEにしていました。

なんか気持ち悪くなって来ました。

あれ風引いたかもしれません。

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

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

これは時間が無くて出来ませんでした。

―12月8日の週の追加―

元々、この節は

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

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

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

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

を目的に勉強しています。

ので今週はComfyUIの最新の情報を調査する事にします。

7.1 情報収集

まずGemini3に質問してみます。

以下の3つを進めて来ました。

VRAMが12GBも必要なのか。じゃ無理です。

これも12GB必要なの。

AnimateDffは前に使用した事があるはずです。

一貫性が全く無かったはずです。

うーん。

やっぱり動画の作成は無理そうです。

色々説明を聞くとやっぱりControlNetが使用出来るようにならないと駄目みたいです。

これが前使えなかったんです。

いや使えてたんですが、GPUから使用出来なかったんです。

そうだComfyUIのVersionはどうなってるんでしょうか?

以下のUpdate ComfyUIを実行すれば良いみたいです。

やっておきます。

Updateが終わった後、試しにImageを生成してみましたが普通に動きました。

とりあえずDWPoseを使用してImageの人物の骨格を抜き出す事が出来るようにしました。

今週はこれくらいにしておきます。

8. DirectX12の勉強

急な用事が出来て出来ませんでした。

―12月8日の週の追加―

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

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

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

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

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

8.1.1 前回の復習

 Writing Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [10]を勉強しました。

このTutorialは初めて勉強するので、NotebookLMで要約しています。

このTutorialで新たなKeywordが出て来ました。

HLSLではSemanticsによってDataが管理されている。

CPU側のDataを管理するためのUpload HeapとGPU側のDataを管理するためのDefault Heap、

GPUにおけるDataの管理方法には、渡すDataをStructにして一括で管理する静的設定(Static Configuration)とRuntimeにBindする事で渡す動的設定(Dynamic Binding)がある。

に続く新たな格言です。

この格言を中心にこのTutorialは勉強しましょう。

ここでは、NotebookLMのReportで要約を作成していますが、そのReportでは5つのSlideで内容をまとめています。

以下にそれぞれのSlideの内容を簡単に説明します。

<Shaderとは>

Shader言語は単なるProgrammingではなく、GPU上で動く並列処理の塊で有る事が説明しています。

かなり抽象的は話で特に重要とは思えません。

<Shaderで最も重要なのはSemanticである>

ここで言うSemanticとは変数の後に:POSITIONと書く事を指すそうです。

これがHLSLでC++側のCodeとHLSL側の変数を繋げる糊の役割を果たすそうです。

今の時点ではよく分かりません。

<Vertex Shaderのたった一つの目的:SV_Position>

Vertex ShaderはInputされた頂点の座標を同次Clip空間の座標に変換して、SV_PositionとしてOutputします。

これはOpenGLと同じですね。

<Swizzling>

これはFloat2、例えば(x, y)という値を持つPositionと言う変数をFloat4(Position, 1, 2)で(x, y, 1, 2)という変数に変更出来る事を指してるそうです。

<Shaderは実行するのではなくCompile済みのObjectが読み込まれる>

HLSL FileはHLSL専用のCompilerで.csoというFileに変換されており、実行する時はそのFileが読み込まれるそうです。

大体こんな話が述べられていました。

8.1.2 HLSLにおけるSemanticの意味を調べる

まずはこれをやります。

Gemini3に質問しました。

はい。

②と③については初めて知りました。SV_POSITIONもSemanticだったんですね。

次の2は実際のCodeを示してるだけなのでSkipします。

Shader同士でDataのやり取りをするためのSemanticの名前は自由に決められるようです。

これは分かり易い。Semanticは荷札と理解しておきます。

もうHLSLにおけるSemanticがどういうものなのか理解出来ました。

しかし以下の疑問が出て来ます。

CPUからGPUにDataを渡す際に使用されるSemanticの名称は決まっているのか?

自由に決定する事は出来ないのか?

これもGemini3に質問してみます。

あ、DirectX12の話と限定するのを忘れていました。

以下に更に詳しい回答が載っていました。

DirectX12の場合です。

System Value Semantic以外のSemanticの名前は自由に決定出来るみたいですね。

GPU Driverで最適化されているそうです。

となると使えるからと言って別な名前を使用するのは効率は悪いって事になりますね。

確認します。

やっぱり出来るそうです。

そう言えばC++側のCodeでPOSITIONとか書いた記憶があります。

D3D12_INPUT_ELEMENT_DESCでSemanticの名前を指定していますね。

HLSL側の実装です。

そういう事なのか。

たった三回の質問でLimitに達してしまいました。

でも疑問は解決しました。

8.1.3 Writing Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [10]の最初の10分を勉強する

では実際のLectureを見て勉強します。

前回のLecture内容の復習で以下の実装を表示していました。

D3D12_INPUT_ELEMENT_DESC型を使用してGPU側に渡すDataのSemantic名をPositionと指定しています。

そういう事だったのか。

やっとDirectX12の意味がはっきりして来ました。

このTutorialではShaderの実装を行うそうです。

まず以下の様にShadersという名前のFolderを作成しました。

うん。これはFilterを作成したのかもしれませんね。

どっちでしょう?

Sample Codeのsrcを見ると以下の様になっています。

Folderを作成したようです。

作成したShaders Folder内に新しいFileを追加します。

Fileの形式は以下に示した様に

HLSLからVertex Shader fileを選択します。

以下のような実装が書かれたFileが生成されました。

お、ここでMain()関数のParameterにあるFloat4型の変数のSemantic名がPOSITIONになっています。

先程見た

ではPositionと指定しています。

Semanticは大文字小文字の区別はつくんでしょうか?

Copilotに質問したら

だそうです。

Tutorialがなんかずっとよく分からない事を説明してると思ったらHLSLのCodeもHigh LightされてるはずだからされてなかったらVisual StudioのHLSLをInstallし直すようにしろ。と言っていました。

これは来週実装してみてHigh Lightされてないかったら考えます。

ここからLectureはSemanticの説明をしたり、Swizzlingの説明をしたりしています。

これらの説明は実装とは直接関係ないのでここにはまとめません。

以下の様に書き直しました。

これだとVertex Shader内でやらないといけない座標変換の計算が全く無いですね。

でも2次元の三角形だからこれでも一応、同次Clip空間の座標に変換されているのか。

一応納得です。

最後に同次Clip空間の座標のWの値を1にする理由だけ確認しておきます。

Copilotは他にも色々説明していましたが、これだけ分かれば十分です。

8.1.4 GoogleのGemini3の回答の方がChatGPTのGPT5より分かり易くない?

なんかそんな気がします。

確認するために今Gemini3にした質問をChatGPTにもしてみます。

この説明じゃダメダメじゃん。と思いましたが、Gemini3も同じような回答を返していました。

もう今はHLSLにおけるSemanticの意味を完璧に理解してしまったので、この説明だと不満になってしまっているんですね。

この説明はあってはいますが、分かりにくいですね。

Gemini3では以下の説明をしています。

ああ、これはGemini3の完全勝利ですわ。

Gemini3の説明を聞いたら一発で理解出来ます。

それに対してChatGPTの説明は抽象的すぎます。せめて例としてHLSLの実装を一つぐらい示すべきです。

更に言うとChatGPT5の回答は最後まで読んでもSystem Value Semanticの説明が無いです。

あーあ。

Gemini3の圧勝か。

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

8.2.1 前回の復習

2025-11-30のBlogを見ると

「5.12.3 Upload ResourceへのMap」の勉強と実装をしていました。

最初は

と意気込んでいましたが

最後は

となっていました。

まあ仕方ないです。

軽い気持ちでやって行くことにします。

8.2.2 「5.12.4 ID3D12GraphicsCommandList::CopyTextureRegion() Method」を勉強する

やっとCopyTextureRegion()関数を使用します。

長かった。正直、もう飽きてしまっています。

でもUpload用のHeapとDefault用のHeapを分けて実装するのは大切ですし、しっかり勉強しておきます。

教科書は最初にCopyTextureRegion()関数のParameterについて解説していました。

CopilotにCopyTextureRegion()関数のParameterについて質問したら以下の回答が返って来ました。

一応、公式Siteでも確認します。

ID3D12GraphicsCommandList::CopyTextureRegion method (d3d12.h)[11]です、

なんとAsk LearnというAI機能のようなのがついています。
早速試してみます。

Microsoft AccountにLoginしたら使えました。

無料では10回質問出来るみたいです。

日本語で質問出来るか聞いたら英語のみとの回答でした。

CopyTextureRegion()関数のParameterであるDstZには2D TextureをPassする時はどんな値をセットすべきなのかを聞いてみました。

以下の箇所読んでください。

よくDocument読めよ。書いてあるだろ。って言われてしまいました。

ガーン。

ショック。

10個質問したら次に質問出来るのは24時間後何でしょうか?

回答見る限り、CopilotのGPT5の方が親切かつ優秀な感じです。

この機能はまあオマケとして使用する事にします。

更にDashboardがありました。

Clickして開いたんですが使い方が分かりません。

Copilotに質問したら

という機能で、

だそうです。

ふーん。

納得。

5番目のParameterであるpSrcはD3D12_TEXTURE_COPY_LOCATION型のStructですね。

教科書はこのStructについても解説しています。

ここはCopilotに質問して確認します。

Unionなんかがある。

Unionの使い方なんてもう覚えてないです。

更にそれぞれのMemberの解説もしてくれました。

Unionの使い方も聞いてしまます。

まずUnionの基本は以下の様になってます。

そしてD3D12_TEXTURE_COPY_LOCATIONの場合はUnion内のどちらのElementを使用するのかはD3D12_TEXTURE_COPY_LOCATION のTypeで指定されているそうです。

うーん。

ちょっと深入りし過ぎた。

これは軽く聞き流しておこう。

教科書はこれらの関数の機能を軽く説明した後、いきなりD3D12_TEXTURE_COPY_LOCATIONの実装を載せています。

それだけ以下に記しておきます。

まずSample Codeの実装を以下に示しました。

微妙に教科書の実装と違っています。

細かく確認していきます。

Sample Codeにある以下の設定が教科書には無いですね。

更に教科書はこの後にCopy元だけでなくCopy先のためのD3D12_TEXTURE_COPY_LOCATIONも作成していました。

そして最後にCopyTextureRegion()関数を実装しました。

成程ね。

大体理解しました。

では実装してみます。

8.2.3 「5.12.4 ID3D12GraphicsCommandList::CopyTextureRegion() Method」を実装する

まず実装するに当たってProjectを間違えないようにします。

まず以下に示したCopyTextureRegion()関数を追加しました。

DisX、DstY、DstZは0になっていますね。

そしてpSrcBoxの値はnullptrになっています。

Copy元とCopy先のためのD3D12_TEXTURE_COPY_LOCATIONであるdstとsrcをこれから追加します。

これはSample Codeをそのまま貼り付けました。

Footprint.RowPitchのAlignmentedSize()がErrorになっていますね。

教科書の実装と比較して確認します。

教科書の実装と同じにしました。

Footprint.RowPitchの値はimg->formatとなっていました。

更に教科書の実装では以下の部分の実装が

丸々抜けていました。

教科書の次の節を読んだら

ここは次の節で勉強する内容のようです。

今週は抜かしておきます。

これで

CopyTextureRegion()関数

の実装が完成しました。

8.2.4 CopyTextureRegion()関数を使用した感想

これでやっとTextureにおけるCPU側のMemoryであるUpload用のHeapからGPU側のMemoryであるDefault HeapへのDataの転送方法が判明しました。

教科書にも書いてありましたが、CopyTextureRegion()関数はそのParameterで、Copy元とCopy先のための設定をD3D12_TEXTURE_COPY_LOCATION型で指定する必要があり、このStructの設定が難しいです。

Copy元では以下の設定を指定しています。

それに対してCopy先では以下の設定を指定するだけです。

この辺の細かい設定まで今深入りしてしまうと全体像が見えなくなってしまうので、こういう物なのだ。

で納得しておきます。

8.2.5 「5.12.5 BarrierとFenceの設定」を勉強する(BarrierとFenceの復習)

今週はまだ時間があるのでこの節も勉強する事にしました。

そもそもこのBarrierとFenceの役割を忘れています。Copilotに質問して確認します。

うーん。

この説明を聞いてもよく分からん。

更に読んでいきます。

うーん。

例が分かりにくいですね。

Citation先がGoogle Sitesなんですが大丈夫なんでしょうか?

Fenceの説明です。

あ、こっちは数字で管理してるのか。そう言えばそんな機能を前作成した記憶があります。

うーん。

もう少し具体的な説明が欲しいですね。

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

こっちは頼もしい回答が返って来ました。

成程。

GPUが使用するResourceは

  • 書き込み中なのか?
  • 読み取り専用なのか?
  • レンダーターゲットなのか?
  • コピー元/コピー先なのか?

という 状態(State) を持っているのか。

でその状態を適切なTimingで変更するのがBarrierになるのか。

次にFenceですが、

これか。

具体的には以下の様になってるそうです。

だんだん思い出してきました。

最後に以下のまとめがありました。

成程。

段々思い出してきました。

8.2.6 BarrierとFenceの復習

一応、過去のBlogも確認します。

2022-11-06のBlog

なんと一番最初にBarrierとFenceについてのべたBlogは2022-11-06のBlogでした。もう三年前になります。

そうか。

DirectX12の勉強を始めて既に3年が経過したのか。

まあ、一週間に一回しか勉強してないから進み具合は、亀の歩みですが、それでも3年もやるとそれなりの成果になりますね。

ここでは以下のような解釈をしていました。

FenceはLockじゃないんですよね。

ChatGPTにFenceとLockの違いを聞いたら以下のような回答を返してくれました。

Lockには他のThreadが触れる事を禁止する排他的な機能がありますが、GPU上では何千ものThreadが同時にMemoryにAccessするためLockするとGPUそのものが停止してしまうそうです。

のでGPU内でLockを使用するのは現実的ではなく、その代り作業が終了したら教える。Fenceが誕生したらしいです。

納得。

Barrierの説明はあってますね。

2023-10-01のBlog

ここで「3.4 Error対応」を勉強しています。その中で「3.4.2 Fence」と「3.4.3 Resource Barrier」を勉強しています。

まずFenceについてです。

この週の勉強でGPU側のある処理が終わったかどうかをCPU側が知るためのもの、という正しい解釈になりました。

次にBarrierです。

これも正しい解釈ですね。

2023-10-15のBlogでFenceの機能についてもう少し詳しい説明がありました。

GPU側の処理が終わってないのに、CPU側でBufferの内容をResetしてしまうとErrorが発生する。と前よりも少し具体的に書いてありました。

更に具体的は実装方法についても簡単にまとめてありました。

まずFenceValという変数を作成します。

最初のDefault値は0です。

この値をIncrementします。

具体的には

でIncrementしています。

Singal()関数は何を指してるのか不明です。

以下の実装でFenceが正しい値を返すのを待っています。

あ、この辺はEvent()関数とか使用してますね。

思っていたより複雑です。

この辺は今回は深入りしません。

一応、以下の説明だけ貼っておきます。

2023-10-29のBlog

ここでは「3.4.3 Resource Barrier」の勉強をしています。

Set Render Targets()関数を呼ぶ前に、Resource Barrier()関数をセットするそうです。

以下の様に実装していました。

そして以下の場所でBarrierのResourceが変化した事を宣言していました。

以下の様にまとめてありました。

この週のBlogはかなり混乱して書いてあり、間違って理解してる箇所が結構ありそうです。

でも大体の流れは理解出来ました。

次の週のBlogでBarrierを実装してるのを確認しましたが特に問題なく実装出来てました。

8.2.7 「5.12.5 BarrierとFenceの設定」を勉強する(その2)

今週はまだ余力があるので、教科書のこの節も全部読んでしまいます。

Barrierの実装です。

ResourceBarrier()関数に使用されているBarrierDescは以下のような設定になっています。

更にFenceの実装を追加しました。

以上です。

8.2.8 「5.12.5 BarrierとFenceの設定」を実装する

もう実装もしてしまいます。

を開きます。

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

Barrierの実装です。

更にCommand Listの実行も追加します。

そしてFenceの実装を追加します。

Sample Codeでは何故か

_cmdList->CopyTextureRegion(&dst, 0, 0, 0, &src, nullptr);の前から

ここまでをParenthesesで囲っています。

一応囲っておきます。

以下の様になりました。

教科書によるとこれで実行すればある場合を除きTextureが表示されるはずと書いてありました。

試してみます。

普通に表示されました。

出来ました。

うーん。

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

今週は余裕があったので結構進みました。

9. まとめと感想

なし

10. 参照(Reference)

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

[2] Motion Forge CG. (2024, January 15). Unreal Engine – How To Edit Animations Non-Destructively with Control Rig [Video]. YouTube. https://www.youtube.com/watch?v=nfz5H4PN2ys

[3] Howard, J. (Instructor). (n.d.). Practical Deep Learning for Coders [Video playlist]. YouTubehttps://www.youtube.com/playlist?list=PLfYUBJiXbdtSvpQjSnJJ_PmDQB_VyT5iU

[4] Howard, J. (n.d.). How does a neural net really work? Kaggle. Retrieved November 19, 2025, from https://www.kaggle.com/code/jhoward/how-does-a-neural-net-really-work

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

[6] Nvidia. (n.d.). Isaac Lab Documentation. Retrieved from https://isaac-sim.github.io/IsaacLab/main/index.html

[7] Isaac Lab Project Developers. (n.d.). Environment Design. Retrieved from https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/technical_env_design.html

[8] Isaac Lab Project Developers. (2025, November 25). Training the Jetbot: Ground Truth. In Isaac Lab Documentation — Walkthrough. https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/training_jetbot_gt.html

[9] 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

[10] Lötwig Fusel. (2023, August 6). Writing Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [Video]. YouTube. https://www.youtube.com/watch?v=8MMRz9QMJI8

[11] Microsoft. (n.d.). ID3D12GraphicsCommandList::CopyTextureRegion method. Microsoft Learn. https://learn.microsoft.com/en-us/windows/win32/api/d3d12/nf-d3d12-id3d12graphicscommandlist-copytextureregion


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 先週の復習

先週は楼門を瑞垣に追加出来るように、以下に示したように

Trigger Boxで囲った部分の瑞垣が消える実装を追加しました。

試しにその隙間に、楼門をはめてみると

こんな感じになりました。

最後に

と書いて終わっていました。

2.1.2 左右の塀の隙間を埋める

以下の様に直しました。

右側です。

左側です。

楼門を離れてみると以下の様になりました。

反対側から見るとこんな感じになります。

Gameを実行してみました。

門の内側から始まりました。

隙間から外に出ようとしましたが見えない壁があって出れません。

塀が内向きに曲がっている箇所は以下の様になっていました。

これは直す必要があるかもしれません。

が表示されています。

広いようで狭く端から端まで走るのに16秒ぐらいでした。

気になって測ってみました。

100m位ですね。

以下の部分から通り抜け出来るように楼門のCollisionの設定を変更します。

やり方を忘れてしまったのでCopilotに質問しました。

試してみます。

ありました。

変更したらUE5が止まってしまいました。

しばらく計算したら動き出しました。

今度は通り抜け出来るようになりました。

塀の外側を歩いてみましたが、結構、殺風景です。さらなる改良が必要と思われます。

上空から見るとこんな感じです。

取りあえず今回の実装はこれで終わりです。

2.1.3 次の実装を決める

2025-04-20のBlogに以下の図があります。

次は参道を作成するか、本殿もしくは社務所を作成するかです。

となるともう地形の作成からやる必要が有るかもしれません。

来週はGaea2で神社用のLandscapeを作成しますか。

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 先週の復習

CG Random Points with FloorsノードのInputにあるSeedに

Get Actor PropertyノードからSeedの値が取れるようにBP_BuildingのVariableにSeedを追加しました。

Seedの値に関しては何でも良いはずです。

777をセットしました。

最後に以下の様に繋ぎました。

もうErrorとかは起きません。

これでやっとSeedの問題から解放されました。

 2.2.2 Create Procedural Interiors With Full Room Separation | UE 5.4 P5 [1]の続きを実装する

2025-11-03のBlogでSeedを追加した後の実装を勉強していました。

今週はこれを実装します。

<15:15 - Set Density on Room Center Points>

PCG Graphを新しく作成しました。

PCG_SetDensityと名付けました。

PCG_BuildingにPCG_SetDensityノードを配置しました。

そしてPCG_SetDensityノードを開きました。

Outputノードを選択します。

設定を以下の様に変更しました。

InputノードのPinの設定も以下の様にしました。

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

Input Source1の値は$Densityに変更しました。

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

DivideノードのIn BにInputノードのNumber Of Pointsの値を繋げました。

Divideノードの以下の設定を

Force Op to DoubleをOnにします。

そして以下の様な実装にしました。

PCG Buildingに戻ります。

PCG Random Points with FloorsノードにAttribute Partitionノードを追加します。

Attribute Partitionノードの設定を以下の様に変更しました。

次にGet Property from Object Pathノードを追加しました。

Errorになってます。

うーん。

2025-11-03のBlogには何も書いて無いですね。

Tutorialを見直します。

ここからCopyして使用していました。

以下に示したPCG_RandomPointsWithFloors内に同様の実装がありました。

ここからCopyして以下の場所にPasteしました。

今度はErrorになりませんでした。

Get Property from Object Pathノードの設定の何処が違うのかだけ確認しておきます。

あ、Property NameがRoomSizeになっていました。

言われてみれば当然です。

PCG Set Densityノードを可視化しました。

結果です。

何も表示されません。

何で?

PCG Random Points with Floorsノードの時点で

Pointが生成されてませんでした。

うーん。

全部のMeshを消して確認しましたが、そもそも最初からPointが生成されていませんでした。

このBugを直すのは結構大変そうなので今週はここまでにします。

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 先週の復習

Animating with Control Rig [3]を勉強しました。

ここでLevel Sequence上でControl Rigの操作とそのControl Rigが管理してるStatic MeshのAnimationをLayerを使用して混合する方法を勉強しました。

これだけではよく分からないので更に調べたら

Unreal Engine - How To Edit Animations Non-Destructively with Control Rig [4]に

AnimationにLayered Control Rig Trackを使用してAnimationをControl Rigから編集する方法が説明されていました。

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

2.3.2 Unreal Engine - How To Edit Animations Non-Destructively with Control Rig [4]を勉強する

<Intro: 00:00>

Level Sequenceから以下のAnimationを作成していました。

このTutorialはUE5.6を使用して作成してるそうです。

<Character Set Up in Level Sequence: 00:18>

以下のSkeletal meshをLevelに追加しました。

こんな感じです。

今度は以下のAnimationをLevelに追加しました。

いや追加する前にLevel Sequenceを一個新たに作成しました。

名前はLS_HeadTurnとしています。

そしてLevel Sequenceを開きました。

Skeletal MeshをLevel Sequenceに追加しました。

Control Rigが自動で追加されました。

今度はAnimationの+を押して

先程選択したAnimationをここで追加しました。

以下の様になりました。

しかし実行してもAnimationは再現されません。

Animationが実行されるためには、このAnimationをControl RigにBakeする必要があるそうです。

しかし以下に示した様に既にControl Rigが存在してるので

これを消します。

そしたら

Mannequinが突然歩き始めました。

Control Rigが無くなったからです。

Level Sequenceの動画の終わりをこのAnimationの終わりに合わせました。

<Process 1 Edit and Bake Animations: 02:08>

ここからAnimationをBakeします。

上記のやり方でBakeするControl Rigを指定しまう。

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

DefaultのままCreateを押します。

Bakeされました。

Animationにセットされた歩くAnimationを消しても

Control RigにBakeされているので

歩くAnimationは実行されます。

ここでControl Rigの+を押し

Additiveを選択します。

新しいControl RigのLayerが追加されました。

ここにHeadを回転させるAnimationを追加します。

ここで細かいAnimationの設定方法の説明もしていますが、知ってる内容なのでここにまとめるのは止めておきます。

作成したAnimationをAnimation SequenceとしてBakeします。

これって絶対必要なんでしょうか?

後で確認します。

Walk_forward_headturnという名前にしてました。

なんとここでControl Rigを全部消してしまいます。

そしてAnimationに先程BakeしたAnimation Sequenceを指定します。

なんと頭を振りながら歩くAnimationが再生されました。

え?

さっきSaveしたAnimationは首を振るだけのAnimationだったんじゃないの?

確認します。

Skeletal MeshからBakeしてました。

だからControl Rigの全部のLayerのAnimationが一つになってSaveされたのか。

理解しました。

<Process 2 Create Linked Animations: 06:31>

次の方法です。

ここでLinked Animation Sequenceを使用します。

Level Sequenceの一番上のElement(この場合はSkeletal Mesh)を選択して以下のBoxを表示させ

Create Linked Animation Sequenceを選択します。

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

LinkVersion1と名付けてSaveします。

このLinkVersion1をLevel上に配置すると以下の様に

BakeしたAnimationと全く同じAnimationを再生します。

Skeletal MeshからまたControl Rigを追加します。

そしてAnimationをまた消します。

またControl RigのLayerを追加しました。

今度はBody_CtrlにAnimationを追加しました。

Saveします。

ここでSimulate Buttonから実行すると

先程作成したLinkVersion1のAnimationの方も

腰を回すようになりました!

ここでControl Rigを全部消します

その状態でまた再生すると

まだLinkVersion1のAnimationは腰をひねりながら歩くAnimationになっています。

うーん。

これはよく分からない。

先程の方法でAnimationを追加出来るなら今回の方法でAnimationを消せるのが筋だと思うんですが。

これは実装する時確認します。

この後、別なLinked Animation Sequenceを使用してSquatをするAnimationを作成してるんですが、もう混乱して頭に入って来ません。

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

来週は今まで勉強した内容を実装します。そして再来週に残りの部分を勉強する事にします。

3.AIの勉強

AIの勉強の目的ですが、

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

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

今週からCursor AIの勉強もする事にします。Vibe Codingというか、AIによるCodingを知っておく必要がありますので。

3.1 Cursor AIの勉強

3.1.1 Gemini 3 vs GPT 5.1 Simulation Challenge [5]を勉強する

流石にもうCursor AIの基礎を勉強する必要は無くなりました。それよりこの動画がPromptだけから3DのSimulationを作成していて凄いです。

こういうのをPromptから作成出来る人がこれからのAI社会で勝ち組になっていくんだと感じました。

ので今週はこれを勉強する事にします。

まずGemini3で以下のようなVoxel風の3D Imageを作成しています。

これについてなんも知りません。

Gemini3に質問します。

中々返事が返って来ません。

同様のをCPT5.1 Codex Max(Extra High)でも作成していました。

CPT5.1 Codex Max(Extra High)についても調べます。

ChatGPTの回答です。

これはどうやったら使用出来るのか具体的に教えてほしいですね。

理論的に可能。という事は普通は別な方法で使用するんでしょうか?

ああ、有料版だけ使用出来るって事か。

これはPendingです。

Gemini3の回答をCheckします。

要はこういうCodeを書いてとGemini3にお願いしたら出来たという事のようです。

これは結構重要な情報で、GoogleのいうWorld ModelがGoogleが主張する程完成していない事を占めています。

更にこれらのVoxel風の3Dを示すのにThree.jsを使用してるという事は、結局GPUに頼って作成してるという事で、言うほどTPU万能でも無いです。

更にGemini3はAntigravityを使用してこれらのVoxel風3Dを作成する方法についても以下の様に説明してくれました。

これだけ理解出来たら十分です。

動画の続きを見ます。

この動画では以下の2つのSimulationの作成をAIにお願いしています。

一つ目は鳥の群れが山を飛んでるSimulationです。

2つ目は街の中で車や人が移動してるSimulationです。

Bird Flockingは以下の条件を要求するそうです。

以下の機能を使用するそうです。

CLIって何でしょう?

ChatGPTに質問しました。

こんなのが有るのか。

始めて知った。

更に以下の解説が続きます。

当然、以下の疑問が湧きます。

CursorやVSCodeの様にIDEからCodexを使用するのとCLIのようにTerminalから使用するのではどんな違いがあるんですか?

質問します。

IDEの特長だそうです。

CLIから使用する場合の特長です。

結論です。

ようし。

一個新しい知識が増えた。

今度はGemini3にGemini3のCLIについて質問します。

それぞれの方法については今回は省略します。

どの方法を採用してもAPIキーをGoogle AI Studioから取得する必要があるみたいです。

いつものGoogle方式か。

条件付き無料というやつですね。

CLIが理解出来たので動画に戻ります。

更に条件を追加しています。

これらの事って全部、Antigravityでも出来そうですが?

敢えてCLIでやる必要ってあるんでしょうか?

Gemini3の結果です。

うーん。

単純に凄い!

CPT5.1 Codex Max(Extra High)の結果です。

こっちも凄い。

使用したPromptがDescriptionにありました。

訳です。

ChatGPTに訳して貰いました。

これをAntigravityで試したら似たようなSimulation作ってくれそうですね。

来週試してみます。

次はCityのSimulationをやっています。

Gemini3の結果です。

これはかなり凄いんじゃないでしょうか。

近づくと人が歩いていて、車が走っていました。

色々細かい問題点はあるそうですが、全体的には及第点な結果になったそうです。

それに対してCPT5.1 Codex Max(Extra High)の結果はダメダメだったそうです。

以下の結果を見ると

遠目にはそれなりに上手く作れてるように見えますが、

実際の結果は全然駄目だったそうです。

何度もやり直してやっと以下の様になったそうです。

CityのSimulationを作成するためのPromptは以下の様になってるそうです。

訳です。

これで両方ともCityの生成をしたそうです。

3.2 Practical Deep Learning for Coders 2022 [6]の勉強をする

3.2.1 前回の復習

2次関数、ax^2+bx+cのa,b,cをDeep Learningの手法を用いて計算する手法を復習しました。

これでやっとNeural Networkの計算方法を理解する事が出来ました。

しかし最初の計算式を実際のNeural Networkではどうやって思いつくんでしょうか?

これが分からなくてChatGPTに質問しています。

そして以下の回答を得ています。

なんとよく見る

こういう図は計算式でもあったんです。

これに値を入力して計算した結果がForward Passだったんです。

そして次の課題である、

このNeural Networkの計算方法をどうやってTitanicのDataに使用したのかを確認する。

を始めています。

まずこれを復習するに当たって2025-04-20のBlogHow does a neural net really work? [7]、

更にLesson 3: Practical Deep Learning for Coders 2022 [8]の内容も参考にします。

まず<43:18 ReLu: Rectified linear function>を復習しています。

ここの最初の文章で以下の様に書かれていますが、

この意味もやっと理解出来るようになりました。

そしてReLu関数を実装した以下の式を

実際に試してm は傾きを変え、b は「フック」が現れる位置を変える事を確認しました。

と書いて終わっていました。

これを今週はやります。

3.2.2 ReLu関数が非線形に式を変形する事を確認する

Gemini3が既にLimitを超えてしまっています。

ChatGPTに質問します。

これから説明するのか。

でも直線ですよね。

線形ではないの?

先程の説明でxと言ってたのはyの事です。

え。そうなの。

もしかして線形の定義を勘違いしてる?

線形の定義を確認します。

これもChatGPTに質問して確認してしまっていますが、まあ大丈夫でしょう。

ふええ。

これが線形の定義なのか。

知らんかった。

え。

そうなの!

Affine関数というが突然出て来ました。

うーん。つまりNeural Networkの言う線形って数学的には正しく無いのか。

しかしこれは問題の本質とは関係ないです。

今回は以下の

を理解する事が目的です。

もう直接ChatGPTに質問してしまいます。

ChatGPTの回答ですが、以下の順番で読むと最も理解しやすいので、

一寸だけ順番を変えてまとめます。

これは

つまり

である事を言っています。

この式では

複雑な形状を表す事は出来ません。

例えば

を再現する事は出来ません。

しかしReLu関数を挟んで式を以下のような

非線形!にすると

式を何個も組合す事で、

を再現する事が可能になります。

という事だそうです。

はい。

やっと

の意味が理解出来ました。

ここでChatGPTのLimitもMaxになってしまいました。

流石にここで今週のAIの勉強を終了するのは短すぎます。

Copilotに切り替えて続きを勉強します。

3.2.3 このNeural Networkの計算方法をどうやってTitanicのDataに使用したのかを確認する。の続きを勉強する1(How does a neural net really work? [7]の続きを復習)

<43:18 ReLu: Rectified linear function>の続きです。

でももうどう計算するのか大体想像つきますね。

を訳して貰います。

要は一個のNodeがmx+bになってると考えてReLu関数で変換して全部、足して複雑な関数を形成します。

これの損失関数を計算して、そこから逆伝播でGradを求めて、Gradから最適解を求めて完成です。

この時のそれぞれのNodeのmとbの値がWeightになるはずです。

How does a neural net really work? [7]の最後の章も読んでおきます。

<How to recognise an owl>です。

訳です。

これはこのTutorialの総括です。

Copilotの訳です。

これで終わっています。

あれ?

TitanicのDataの計算は?

2025-04-20のBlogを見て確認します。

分かりました。

この後は、Lesson 3: Practical Deep Learning for Coders 2022 [8]の勉強に戻っています。

そして

<49:21 A chart of all image models compared>

<52:11 Do I have enough data?>

<54:56 Interpret gradients in unit?>

<56:23 Learning rate>

<1:00:14 Matrix multiplication>

と勉強して

<1:04:22 Build a regression model in spreadsheet>

からTitanicのDataを使用したNeural Networkの計算を行っています。

つまり、今の復習の目的である

このNeural Networkの計算方法をどうやってTitanicのDataに使用したのかを確認する。

を理解するには、<1:04:22 Build a regression model in spreadsheet>を復習すれば良い訳です。

良い訳なんですが、

<49:21 A chart of all image models compared>から<1:00:14 Matrix multiplication>のまとめを今読み返すと、

良い感じて間違えていたり、意味が理解出来ないとはっきり書いてあったりしてます。

今ならLectureの言いたい事がはっきり理解出来るはずなので、この部分の復習もやる事にします。

ただしやるのは来週にします。

今週のAIの勉強はここまでです。

4.Nvidia Omniverseの勉強

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

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

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

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

2025年9月からIsaac Lab Documentation [9]の勉強に切り替えました。

4.1 先週の復習

Environment Design [10]を最後まで勉強しました。

全部の内容を覚えている訳ではありませんが、特に実装して何かをやる事は無かったはずです。

Walk Throughってそういうもんなんでしょうか?

4.2 Training the Jetbot: Ground Truth [11]を勉強する

そう言う訳で、次のWalk Throughを読む事にします。

今日は既にGemini3はLimitまで使用してしまったので、ChatGPTに訳して貰います。

はい。

<Expanding the Environment>

ChatGPTにおける訳です。

そして以下の実装が載っていました。

あ、実装してた。

やっぱりこれ実際に実装しないと駄目ですね。

まあいいや。

今週はこのTutorialを読む事にして、全部読んでから実装する事にします。

この実装について説明してもらいます。

うーん。

この関数の中身の理解はままいいや。

あんまり細かい所を追うと全体像が見えなくなってしまいます。

と思って先を読んだら、Commandの設定を行っていました。こっちはもっと複雑で、軽く読んだだけでは全然理解出来ません。

しまった。

今週はやっぱりこのVisualization用の実装のそれぞれのCodeを勉強する事にします。

VisualizationMarkersCfgに関してはこの実装の後の文章で以下の説明が追加されていました。

ChatGPTはこの文章の真意を以下の様に説明していました。

そういう意味で言ってたのか。

今度はConstant / VariableをImportしました。

Quaternionを使用してるって事は3D Graphicsの計算をここでするって事です。

この関数の定義のやり方は VisualizationMarkers 型の値を返す予定です。という型ヒントだそうです。

Pythonよく知らないのでChatGPTに解説してもらいました。

ChatGPTの解説によると

という事だそうです。

で以下の実装です。

これでForwardの矢印とCommandの矢印を可視化してるのか。

最後のReturn Valueの実装ですね。

このやり方に従ったら、USD Fileの形式になっていればどんな3D modelも可視化出来るって事でしょうか?

実装する時に試してみます。

次の文章です。

最初の文は既に訳していますが、ここでまとめて訳してもらいます。

ここでGPT5のLimitも超えてしまいました。

区切りも良いし今週のNvidia Omniverseの勉強はここまでにします。

で以下の疑問に関してだけ追加で調べる事にします。

仮想空間における強化学習において、この例のように トレーニングや推論中にポリシーが何をしているのかを簡単に理解できるように、可視化 (visualizations) を設定しておく のは普通に行われている事なのでしょうか?

昨日、Gemini3に仮想空間におけるRobotの強化学習に関してのTPUとGPUの優位性に関して質問した時の回答では、

そもそも描画する何てことは人間が確認する必要が無ければしないで良い。だからTPUで十分である。

とかなり強気の回答が返ってきたんですが、今回の勉強から推測すると人間が確認するための可視化って結構重要な感じがします。

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

次の日の朝です。

ちょっとだけ早起きしたので続きをやります。

Geminiに訳させます。

Fastを使用してますが、問題無いでしょう。

追加の実装です。

一つ一つを確認する前に、今までの_setup_scene()関数の実装がどうなってたのかについて調べます。

2025-11-16のBlogには以下の実装が載っていました。

成程。

self.visualization_markers = define_markers()

から下の実装が今回、新たに追加された実装なのか。

ではその部分のCodeの解説をGeminiにしてもらいます。

うん。

何でdefine_markers()関数の実装内容を知らないの?

あ、Fastの設定のままだった。

Gemini3に設定を変更して同じ質問をしました。

なんと、Gemini3は
マーカー定義と共通変数の準備を同じCategoryに入れてます。

self.visualization_markers = define_markers()

のdefine_markers()関数の実装内容については、こっちもよく知らないがと答えています。

共通変数の準備の説明を読みます。

self.up_dir の説明ですが、Isaac Simでは通常Z軸が上になってるそうです。

そうだったけ?

Fast Modeの説明も以下に示しておきます。

こっちはIsaac Simでは通常Z軸が上になってるとは言っていません。

ChatGPTで確認します。

これはあってますね。

やっぱりGemini3の性能が凄い事がこういう所に出て来てますね。

何度も何度も同じ説明を示していますが読み易いのでまた示しながらまとめます。

Gemini3のSelf.yawsの解説です。

Fast ModeのSelf.yawsの解説です。

言ってる内容は同じですが、Gemini3の方がしっかりした日本語になっています。

次は.cuda()関数の説明です。

Gemini3の説明です。

Fast Modeの説明です。

これはどっちも同じですね。

これくらいの解説だったらFast Modeでも関係ないのかもしれません。

というか、Cudaを直接使用するのはこれが初めてじゃないでしょうか?

これこそ、Gemini3にすべき質問でしょう。

最初の質問に対しての回答です。

だそうです。

これってDirectX12のUpload用のHeapとDefault用のHeapの概念に似ていますね。

ここではProのCodeはCPU/GPUと書く。と断言していますが今となってはこれは間違いでしょう。

.cude()と書いてGPU側で全部やるのが今のProの仕様なはずです。

ここで初めて生のCudaのCodeを使用した事になりますね。

はい。

これ重要ですね。ここからはGPU内で全部やるって事です。

ここでも同じ事が語られています。

一応、これも確認しておきます。

Gemini3の回答です。

そう言えば、PyTorchをInstallする時にCudaのVersionを気にしてました。

司令官・通訳・作業員の関係で説明するのか。

これはまあ、想像つきました。

そういう事なのか。

やっとPyTorchの仕組みを理解しました。

ホントはここで、PyTorchがCUDAを使用した場合としてない場合はどうやって見分けるのかとか、質問したかったんですが、

Gemini3のLimitが来てしまいました。

はー。

ChatGPTに質問してChatGPTをLimitまで使用するともう今日はどっちも使用出来なくなってしまいます。

そうだCopilotのGPT5で質問します。

物凄く丁寧に説明してくれました。

以下に結論だけまとめておきます。

具体的な方法です。

CUDAを使用してるかどうかを見分けます。

PyTorchがCUDAを使用するためには、明示的に指摘する必要があるそうです。

うーん。

もうCopilotだけでいいかもしれません。

そう言えばCopilotだけはLimitに達した事ないです。

実装の解説に戻ります。

移動Commandの生成と正規化についてです。

まずFast Modeの説明です。

Self.commandに何を代入してるのか不明ですね。

速度なんでしょうか?

Gemini3の説明です。

最初からFast Modeで謎だった、Self.commandに何を代入してるのかの解答を答えています。

Robotに進ませたい目標方向が、Self.commandに入ってるそうです。

残りの説明もこっちの方が断然分かり易いです。

Vectorの長さをNormで割ると正規化になるのか。この辺の計算はもう忘れてしまっています。こういう復習をサラッと出来るのも点数高いです。

次に行きます。

Command VectorからのYaw角の計算(逆三角関数による変換)

です。

まずFast Modeの説明を以下に載せます。

なんと、これCodeの部分が無いです。

のでどこを説明してるのか不明です。

Walk Throughを見ると

以下の部分の実装を説明してるようですが、非常に分かりにくいです。

でも背景の説明は重要ですね。

同じ部分のCodeの説明を今度はGemini3にしてもらいます。

要はここの実装はatan2()関数が使用出来たら一発で済むのを、使用出来ない前提で色々な計算をしてるという事ですね。

何でYaw角の計算をしないといけないのかはまだ理解していませんが、この部分のCodeがそれを計算してるという事は理解しました。

次のCodeの説明です。

Markerの位置と向きの初期化を行っています。

やっと最後の部分のCodeまで来ました。

まずFast Modeの解説を読みます。

はい。

これらの値をセットする必要が有るという事ですね。

これらの値の座標軸はWorldなんでしょうかそれともLocalなんでしょうか?

うーん。

これ質問したいけど、もうLimit超えちゃってるし、Copilotにこの部分のCodeまでを一々説明するのも大変だし。

これは無し。

Gemini3の説明を見ます。

あ、座標がRobotを中心としたLocal Coordinateになってるのがこの解説から分かります。

更にMarkerのための設定と言う事もこの説明では強調されていて、そうだったと思いました。

やっぱりGemini3は凄い。

別にFast Modeが駄目と言う訳では無いが、Gemini3はなんかつば抜けて優秀です。

全然進まなかったけど時間が無くなったのでここまでにします。

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の工程は以下の様になっています。

SOPでGeometryを作成しています。

そしてDOPnetでSimulationを作成します。DOPnet内にはSimulationを計算するSolverや重力の影響を追加するForceノードがあります。
Simulationが終わったら結果をSOP層に戻してGeometryとして可視化します。

先週まで勉強してたHoudini is HIP - Part 14: Flip Fluids I [12]ではFLIP方式で計算するSolverを採用しています。しかしSimulationが終わったら結果をSOP層に戻してGeometryとして可視化する方法は勉強しませんでした。

そして先週から勉強を始めたHoudini is HIP - Part 15: Sparkling Water Project [13]には最後の工程であるSimulationが終わったら結果をSOP層に戻してGeometryとして可視化する方法があります。

6.2 Houdini is HIP - Part 15: Sparkling Water Project [13]の実装をする

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

<00:00 Intro>

Version 20でProjectを作成します。

SparklingWater_1126と名付けました。

<01:30 Glass Setup>

Geometryノードを配置します。

名前をGLASSに変更します。

GLASSノードを開いて

CURVEノードを追加します。

Front Viewに切り替えます。

ここでCurveノードのCurveを作成するためのPointを追加するんですが追加できません。

Tutorialを見直したら以下のIcon(Show Handi)を選択してPointを追加していました。

Revolveノードを追加します。

結果です。

Revolveノードを可視化します。

青みがかっています。

これは裏側が表示されているからです。

以下の様になりました。

表側になりました。

ViewをProspectiveに変更すると以下の様になりました。

End CapsもEnableします。

ふたが閉じました。

UVは要らないので以下のCompute UVsは外します。

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

ふたの部分を選択して消します。

Polyextrudeノードを追加し

Distanceの値を変更する事で

以下の様に厚みを追加します。

更にOutput BackをEnableしました。

次にSubdivideノードを追加し

Depthの値を3にします。

結果です。

この時点でCurveノードを選択してCurveの形状を変化させます。

底の部分を平に変更しました。

この操作方法でPointを動かす方法は分かったんですが、新たにPointを追加する方法は分かりません。

これは後で調べます。

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

結果です。

Match Sizeノードを追加しました。

そしてJustify Yの値をMinに変更しました。

結果です。

Glassの底が原点に移動しました。

最後にNullノードを追加しました。

これで先週勉強した内容は完成です。

6.3 HoudiniのSOP Levelの操作方法が分らない

本当に信じられないLevelで操作方法が分らないです。

例えば、Objectを中心にしてViewを回転させる方法が分りません。

Copilotが正しい解答を返してくれました。

Space +G

で選択したObjectを中心にViewが回転するようになりました。

ChatGPTはUE5と同じFを押してもなる。と主張していますがなりませんでした。

SOP Levelの操作方法を理解する事でどんな形状の3Dでも作成出来るようになります。

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

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

今週もGoogleのAntigravityを試す事にします。

7.1 先週の復習

AntigravityをInstallして

以下の計算機を作成しました。

そこで生成されたCodeを自動でBrowserでテストするBrowser Extensionを追加しました。

その結果、AIが勝手にBrowserでTestするようになりました。

TerminalやEditorの色を変更する事も試しました。

最後に以下の事が書いてありました。

今週はこれのやり方を勉強します。

7.2 AntigravityのManager Viewの使い方を勉強する

もうGeminiに聞いてしまいましょう。

はい?

Antigravityが無い?

なんかヤベー位性能が落ちてないですか?

AntigravityのURLを教えたらやっと理解しました。

ここから具体的な使用方法の説明になります。

これの事ですね。

Clickしてみます。

以下のWindowが開きました。

あれ、ここに説明らしきものが載ってますね。

Nextを押しました。

ここになんか書き込んだらAgentが実行するんでしょうか?

実行しました。

画面が以下の様に変化しました。

よく分からないけどForkして実行するって事?

Acceptを押してみます。

DirectoryがEmptyって?

そんな事ないです。

いや、一端中止しましょう。

Rejectを押して

としました。

Manager Viewを閉じて先程のGeminiの回答の続きを読みます。

複数Agentの並列稼働が可能だそうですが、一個のTaskがすぐに終わってしまうので、2つ以上のTaskを試す事が出来ません。

先程のAgentの場合、どうも

Playgroundに作成されたようです。だからDirectory内にCalculatorの実装が無かったんです。

これを実際に試すにはAgentにTaskを実行させないといけません。

今度はFirstProject内から以下の命令を書きました。

Planningじゃなくて実行してもらいます。

Fastに変更しました。

実行しました。

おお、なんか作業しています。

結構時間がかかりますね。

一寸待ちます。

完成しました。

Fastの時はCodeを変更する時も一々承認を要求してこないですね。

Google Chromeが開いてTestしていました。

以下の様になっていました。

凄い。

でもArtifactはどこにあるんでしょうか?

以下のPreviewがArtifactなんでしょうか?

多分そうでしょう。

テストの映像を見たらSunsetしか試していませんね。

これも無いですね。

Fastでやったからでしょうか?

今度はPlanで試してみます。

実行します。

今度は以下のように承認を求めて来ました。

一応、確認しましたがよく分かりません。Proceedを押します。

やっぱしPlanにした場合は一々承認を求めて来ます。

以下の様になりました。

Calculatorの色を選択できる機能が消えてしまいました。

色の選択出来る機能を戻してとお願いしたところ凄い勢いで直し始めました。

しかし途中で

となってしまいました。

まあ、いいやここまでにしておきます。

うーん。

試しにSonet4.5(thinking)でやってみますか。
同じ質問を書いて実行しました。

正し今度はFastで実行しました。

なんと出来てました。

一応自分でも確認します。

出来てました。

複数のTaskを実行するのは試せていませんが、同じCodeを複数のAgentで弄ったら崩壊しそうです。

今回は止めておきます。

一応これでManager Viewも使いこなせるようになりました。

<追記>

試しにThree,jsでVoxel風の3Dの世界を作ってもらいました。

凄すぎます。

こんなの直ぐに作れちゃうの。

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 先週の復習

先週は、 Input Assembler | D3D12 Beginners Tutorial [D3D12Ez] [14]の続きを実装したんでした。

したんですが、単に実装しただけでその実装が何をしてるのかの復習は全然しませんでした。

ので今週は先々週のBlogを見て先週実装した内容の復習をする事にします。

2025-11-16のBlogの復習をします。

<Dynamic Binding>

そうだAssembly InputにおけるDataの管理方法には、静的設定と動的設定の2つがあると言う話から始まったんです。そして静的設定の英語が、Static Configurationに対して動的設定の英語がDynamic Bindingだったんだ。

そしてそのDynamic Bindingの仕組みをやっとここで勉強したんです。

ここでは以下の実装をしています。

CommandListのMethodであるIASetVertexBuffers()関数とIASetPrimitiveTopology()関数です。

この2つの関数の役割が分かりません。

2025-11-16のBlogに書いてありました。

え。

この関数がBindするの。

Dynamic Bindingつまり動的設定の実際の実装はIASetVertexBuffers()関数がやってたのか。

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

成程。

ただ、それぞれのParameterの役割まで読むと結構混乱します。機能の勉強は関数の役割ぐらいで留めておきます。

次のIASetPrimitiveTopology()関数の機能についてです。

どのようにVertexを繋げてPrimitiveを作成するのかを指定するのがこの関数の役割だそうです。

全く覚えていませんね。

でも、だから復習する価値があるとも言えます。

今度はIASetVertexBuffers()関数の三番目のParameterに使用したvbvを作成しました。

これの深堀はしません。

次はDrawInstanced()関数を追加しました。

このMethodの機能です。

2025-11-16のBlogではこの関数の機能にはあんまり注目して無くて、それよりもDraw()関数との違いに注目していました。

DrawInstanced()関数はInstanceを複数描画する時に便利って事です。

最後にRelease()関数でBufferをReleaseしてました。

これは別に調べる必要は無いです。

以上でした。

これでInput Assembler | D3D12 Beginners Tutorial [D3D12Ez] [14]の内容は全部実装しました。

8.1.2 Writing Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [15]を勉強する

今週から新しいTutorialを勉強するのか。

じゃあNotebookLMで要約しますか。

そうだ。

MindMapはあんまり役に立たないんだ。

ReportからBlog風のまとめを選択し実行しました。

これを読んで何を勉強するか考えます。

このReportが完成するまで以下の要約を読んでおきます。

このTutorialではHLSL Shaderの記述方法について勉強するのか。

Vertex ShaderではVertex DataをRasterizer用に変換するそうです。

うーん。そうだったけ?

そしてPixel ShaderではPixelの色を決定します。

この辺のまとめはあってるのか不安です。

ChatGPTで確認します。

Clip Spaceってなんだっけ?

あ、やっと思い出した。

Local CoordinateからWorld CoordinateそしてView Coordinateに変換した後、更にProjection Coordinateに変換するんだ。

この辺はOpenGLと全く同じですね。

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

成程。

これ見ると最終的にはRasterizerに出力してますね。

先程の説明ともマッチします。

お、Reportの生成が完了しました。

ふーん。

別にShaderに関してはOpenGLで散々やったんでそんな難しいとは思いませんが、続きを読んでいきます。

熱く語っています。

NotebookLMは名文家です。

う。

この辺の概念は初めて聞きました。

このTutorialの重要な概念ですね。HLSLではSemanticsによってDataが管理されている。という事でしょうか?

ここでは色々書かれていますが、Semanticsに関連する内容を以下にまとめます。

  • C++側のCodeとShader内の変数を結びつけるのりの役割
  • 引数の名前や型、順序はPiplineにとって無意味で、引数はSemanticにBindされる事で初めて意味を持つ

うーん。

はっきり言って意味分からん。

これをまず理解する必要があるのか。

Vertex Shaderは必ずSV_Positionを返す必要がある。という事です。

こっちの話は難しいですが、一応理解は出来ます。

さっきのSlideは全然何言ってるのか分かりませんでした。

Swizzlingという単語は初めて聞きましたが、この方法で記述するのは結構慣れています。

ふーん。

という感想しかないです。

最後の結論です。

いや、でも分かり易かった。

このTutorialが教える理論の部分は大体分かりました。

分からないのはSemanticsです。

これは来週、考える事にします。

今週のD3D12 Beginners Tutorial [D3D12Ez]の勉強はここまでです。

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

今年中に「Chapter 5 PolygonにTextureを貼り付ける」を終わらせる予定でした。

結構ギリギリですが、この予定は果たせるかもしれません。

8.2.1「5.12.3 Upload ResourceへのMap」を勉強する

最初から大問題です。

教科書の実装とSample Codeの実装が違います。

の最初の部分は同じですが、

この後の実装が全く違います。

教科書では

Std:copy_n(img->pixels, img->slicePitch, mapforImg);

と一行で終わっていますが、

Sample Codeではこの部分が

となっています。

何でFor Loopまで使用してるんでしょうか?

最後のCodeは

教科書もSample Codeも同じで

Unmapしています。

教科書をよく読んだら、「5.12.5 BarrierとFenceの設定」の最後でこの部分の実装を変更していました。詳しい説明は今は書きませんが、そこでSample Codeの実装に変更していました。

という事は今はこの教科書と同じ実装を勉強すれば良い訳です。

先に実装してしまいます。

まず実装先のProjectを間違えないように確認します。

Copilot凄すぎます。

最初の2行のCodeを貼ったら

Std:copy_n(img->pixels, img->slicePitch, mapforImg);

が次のCodeの候補として表示されました。

Tabを押してこのCodeを追加しました。

するとUnmap()関数もお勧めで表示されました。

これもTabを押して追加しました。

この実装について勉強します。

DirectX12の話なのでCopilotに質問します。

回答です。

ここでuint8_tにしてるですが、元の画像Dataがuint8_tじゃない場合は変える必要があるんでしょうか?

ま、いいや今この辺を深堀すると訳分からなくなりますので止めます。

次のCodeです。

この関数の役割はUpload BufferのMemoryをCPU側からAccess 出来るようにする事です。

具体的には先程作成したuint8_t型のVariableであるmapforImgeにCPUから直接書き込めるメモリアドレスがPointerとしてセットされます。

次のCodeです。

Upload用のHeapにTextureのDataをCopyしました。

これで何の問題もない気がしますが、後で問題になってSample Codeの実装に書き換えています。

最後にUnmapして終わっています。

以上です。

今年中に5章を終わらすには、次の節まで今日中にやる必要があります。

うーん。

無理。

やろうとすれば出来ますが、絶対に楽しくなくなります。

そして抜けの多い勉強になってしまい、結局やらない方が得だった結果になります。

今年中に5章を終わらせるのは諦めました。

今週のDirectX12の勉強はここまでにします。

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] Epic Games. (n.d.). Control Rig in Unreal Engine, from https://dev.epicgames.com/documentation/en-us/unreal-engine/control-rig-in-unreal-engine

[3] Epic Games. (n.d.). Animating with Control Rig. In Unreal Engine Documentation. Retrieved November 18, 2025, from https://dev.epicgames.com/documentation/en-us/unreal-engine/animating-with-control-rig-in-unreal-engine

[4] Motion Forge CG. (2024, January 15). Unreal Engine – How To Edit Animations Non-Destructively with Control Rig [Video]. YouTube. https://www.youtube.com/watch?v=nfz5H4PN2ys

[5] Simulation Sandbox. (2025, November 22). Gemini 3 vs GPT 5.1 Simulation Challenge [Video]. YouTube. https://www.youtube.com/watch?v=W7YrcdcqYsY

[6] Howard, J. (Instructor). (n.d.). Practical Deep Learning for Coders [Video playlist]. YouTube. https://www.youtube.com/playlist?list=PLfYUBJiXbdtSvpQjSnJJ_PmDQB_VyT5iU

[7] Howard, J. (n.d.). How does a neural net really work? Kaggle. Retrieved November 19, 2025, from https://www.kaggle.com/code/jhoward/how-does-a-neural-net-really-work

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

[9] Nvidia. (n.d.). Isaac Lab Documentation. Retrieved from https://isaac-sim.github.io/IsaacLab/main/index.html

[10] Isaac Lab Project Developers. (n.d.). Environment Design. Retrieved from https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/technical_env_design.html

[11] Isaac Lab Project Developers. (2025, November 25). Training the Jetbot: Ground Truth. In Isaac Lab Documentation — Walkthrough. https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/training_jetbot_gt.htm

[12] Nine Between. (2024, June 18). Houdini is HIP – Part 14: Flip Fluids I [Video]. YouTube. https://www.youtube.com/watch?v=DJfkTV3Pivc

[13] Nine Between. (2023, November 29). Houdini is HIP – Part 15: Sparkling Water Project [Video]. YouTube. https://www.youtube.com/watch?v=Xs2tHiVFKF0

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

[15] Lötwig Fusel. (2023, August 6). Writing Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [Video]. YouTube. https://www.youtube.com/watch?v=8MMRz9QMJI8

 

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 先週の復習

楼門の作成を始めました。

以下のAssetが有る事を知りました。

のでこれを使用して楼門の作成をする事にしました。

2.1.2 楼門の作成の続きを行う

こっちのModelの方が楼門っぽいですね。

楼門のPCGが完成するまで、これをそのまま使用する事にします。

2.1.3 楼門を追加する場所のPointをRemoveする

楼門を追加する方法はDo You Want to Remove Just One Side of Your Building? | UE 5.4 P4 [1]の<07:54 - Doors Setup>で勉強した方法を採用します。

この部分は2025-07-27のBlogで勉強していました。

まずはTriger BoxをLevel上に配置してその中にあるPointをRemoveするための実装を調べます。

Triger Boxを配置して以下の設定をしています。

同時にやって行きます。

以下の様にTrigger Boxを配置しました。

更にTrigger BoxのTagにRoumonとセットしました。

次の工程です。

Get Actor Dataノードを追加しました。

そして設定を以下の様に変更します。

更に以下の様にIntersectionノードを繋いで、

Intersectionノードを可視化すると

こんな風にTrigger Box内のPointが表示されていました。

これを実装します。

PCG_JapaneseShrine1内で実装します。

以下の場所で実装したら上手く行くはずです。

Get Actor Dataノードを配置しました。

設定を以下の様に変更しました。

以下の様に実装しました。

Intersectionノードの結果を可視化します。

Trigger Box内のBoxが表示されていました。

出来てます。

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

だそうです。

やってみます。

以下の様に繋ぎました。

Differenceノードの設定は2025-07-27のBlogには載ってなかったのでDefaultのままです。

結果です。

おお、ぱっくり瑞垣が切れています。

隙間に楼門のModelを配置してみました。

こんな感じです。

良いんじゃないでしょうか。

左右の塀の隙間は来週調整します。

今週の神社の作成はここまでにします。

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 先週の復習

先週も引き続きSeedについて調べています。

そもそもPCG Random Points with FloorsノードのInputにSeedがありますが、このInputにGet Actor Propertyノードから

Seedの値を得ていますが、このSeedの値がありません。

で、色々調べた結果、ここに

実際にSeedの値をInputで使用してるPCG_RandomPointsWithFloorsノード

内のAttribute Noiseノードの

SeedのDefault値である

-685710265のような値を指定すれば良いとの結論になりました。

2.2.2 Attribute NoiseノードのSeedの値について

Attribute NoiseノードのSeedの値についてChatGPTに質問して確認します。

でこの後も色々書いていますが、結論はよく分からないです。

一応、ChatGPTが調べた内容を以下にまとめておきます。

沢山報告して意味があるかのように述べていますが、結論はよく分かりませんでした。

という事です。

しかしInt32を使用して最大値/最小値が、INT32_MIN = -2,147,483,648 と INT32_MAX = 2,147,483,647になってる事は分かりました。

-685710265をそのまま使用しても問題ないでしょう。

2.2.3 Seedを作成する

BP_Buildingを開きます。

ここのVariableにSeedを追加します。

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

Int32を選択しようとしたらIntegerとInteger64しかありません。

多分IntegerがInt32でしょう。

Default値には-685710265ではなく、念のために小さい値をセットしました。

PCG_Buildingの設定です。

Get Actor Propertyノードは先程設定したSeedの値をRetrieveしています。

特にErrorとかは起きていません。

Seedに関してはこれ以上の情報を得る事は出来なかったので、これで完成とします。

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 先週の復習

Control Rig Component [3]を勉強しました。

勉強した内容を見たところ、とても実装出来る程の情報が無い事が判明しました。

ので勉強だけして実装は止めました。

こんな情報しかないのにControl Rig [2]を勉強する価値があるのか。と真剣に悩みましたがあるUE5で動画を作成するためのTutorialを見てたら、

UE5はそもそも動画を作成するためのEngineではないので、取りたい映像を作成するのは並大抵の努力では出来ない。

みたいな事を言っていました。

で、やっぱりControl Rig [2]の勉強は継続する事にしました。

しかし残りのTopicは以下のような内容で

今すぐ勉強しなくてはいけないものでは無いです。

こっちのAnimation with Control Rigの内容の方が勉強する価値がありそうです。

こっちを勉強します。

2.3.2 Animating with Control Rig [4]を勉強する

こっちが知りたい内容です。

<Prerequisites>

特に必要な事は無いです。

<Animating in Sequencer>

これはまあ常識Levelの話です。

以下の図がついていました。

これも知ってる内容です。

これで一からAnimationをLevel上で作成するんですね。

元からAnimationが有る場合の変更方向、しかも地面に対してCollusionを自動で追加する方法はまだ不明です。

追加でAnimationがついていました。

以下にそのAnimationのScreenshotを載せています。

これはQuick Startで既に勉強した内容です。

特に新しい情報では無いです。

<<Multiple Control Rigs>>

これは一個のSkeletal Meshに複数のControl Rigを追加出来ると言う意味では無く、複数のSkeletal MeshのそれぞれのControl Rigを同時に表示出来ると言う意味の様です。

<<Layered Control Rig Track>>

この後に以下のTipがあります。

この内容については後で検討します。

以下の図がついてました。

これは前の文章の説明を図で可視化してます。

こういうやり方もありますという事ですね。

次の文章です。

この後にAnimationでやり方を説明していました。

ここで追加したAnimationの編集をControl Rigから出来るかどうかを知りたいです。

こういうのは実際にやって見せてほしいです。

この説明だけでは、Layerが沢山あった時の順番をOrderの値によってどう処理するのかの具体的なImageが湧きません。

これはLayer化されてないSequencer TrackのOrderの値をLayerのOrderの値より大きくしておかないと、

Layer化されてないSequencer TrackのAnimationは全部無視されてしまう。という意味だと思います。

この説明よりもこの後にあるAnimationが凄いです。

以下の様に坂を歩いて登ってるAnimationを表示しています。

WeightをEnableします。

そしてWeightの値を0にすると

坂を無視して歩いています。

いや、Weightの使用方法は別にこれで良いんですが、最初に坂に沿って歩くAnimationをどうやって追加したんでしょう。

CR_SlopWarpで追加したはずですが、このSequenceの設定方法は全く説明してないです。

これが知りたかったのに。

これは豆知識的な何かですね。

<Animation Features>

ここでこの章にあるそれぞれのTutorialを簡単に説明しています。

以上です。

Layered Control Rig Trackに関するYouTubeのTutorialが2,3個あってそれらを軽く見た感じではこの機能を使用すれば、

Dragonの爪が地面にめり込んでしまうのを直せそうです。

ただしChatGPTに質問したら、どうもまだExperimentの段階で、けっこうBugがあるそうです。

Animation Mode [5]も今回勉強してしまおうと思ったんですが、これは来週やる事にします。

<追記>

Unreal Engine - How To Edit Animations Non-Destructively with Control Rig [6]にAnimationにLayered Control Rig Trackを使用してAnimationをControl Rigから編集する方法が説明されていました。

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

3. AIの勉強

AIの勉強の目的ですが、

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

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

今週からCursor AIの勉強もする事にします。Vibe Codingというか、AIによるCodingを知っておく必要がありますので。

3.1 Cursor AIの勉強

3.1.1 先週の復習

Cursor Vibe Coding Tutorial - For COMPLETE Beginners (No Experience Needed) [7]を勉強しています。

<Prompting Cursor (Code Generation)>まで勉強しました。

3.1.2 Cursor Vibe Coding Tutorial - For COMPLETE Beginners (No Experience Needed) [7]の続きを勉強する

<00:28:25 | Debugging Issues>

Cursor AIが直したCodeをAcceptします。

そしてIndex.htmlを実行すると

以下の様になりました。

これをScreenshotにとりCousor AIの質問するところに張り付け、

こんな感じになった。

と説明しました。

Cursor AIが直します。その結果をAcceptしてまたIndex.htmlを実行すると

以下の様になりました。

今度はBrowserのInspectを開き、Errorの表示を確認しました。

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

これをCursor AIに伝えます。

Cursor AIがこのErrorを直しました。

その結果をAcceptしてまたIndex.htmlを実行すると

今度は別のErrorが表示されました。

これも同様に直してもらいます。

結果です。

おお、今度はかなり綺麗になりました。

赤いSquareは左右には動きますが、Jumpは出来ません。

更に別のErrorも表示されていました。

Cursor AIにこれらの事を伝えて直してもらいます。

何回か繰り返しましたがJump出来るようになりません。

以下に示した+を押してChatを新しくしました。

そしてModelを以下の様に変更しました。

Modelを変更してもう一回試します。

またErrorになりました。

何回かの試行錯誤の後、以下の様になりましたが、

まだJumpは出来るようになっていません。

ここで初めて実際のCodeを見て問題を特定する事にしています。

JumpをCodeから探します。

ありました。

そしてCodeの間にここにPrintするCodeを生成して。とCursor AIに命令しました。

こんな事も出来るのか!

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

テストします。

Space Keyを押すと以下の様にJumpingが表示されました。

しかしJumpはしません。

この新たな情報をCursor AIに伝えて、Jump出来るようにCodeを直すように命令しました。

更に以下のCodeを選択して

Add to Chatを押します。

これでこのCodeが先程の命令に追加されました。

しかしJump出来るようにはなりませんでした。

ここでこの節が終わりました。

今週はここまでにしておきます。

続きは来週やる事にしました。

3.2 Practical Deep Learning for Coders 2022 [8]の勉強をする

3.2.1 前回の復習

Linear Model、Neural Network ModelそしてRandom Forestの具体的な手順をまとめ直す事にしたんですが、

復習を始めると

実はLecture3で勉強した2層の非常に単純なNeural Networkの計算方法と、

Lecture5で勉強したLinear ModelとNeural Networkモデルの計算方法、

そしてRandom Forestの計算方法を勉強してるだけだという事が判明しました。

なので

2025-04-06のBlogからLecture3、 Lesson 3: Practical Deep Learning for Coders 2022 [9]の復習をする事にしました。

Lecture3の前半ではDeep Learningの手法を使用して

以下のバラつきのあるDataから

最適な2次関数、ax^2+bx+cのa,b,cを求める方法を勉強しました。

このabcを求める計算方法が、Neural Networkの手法なんですが、今読み直すと、あんまり綺麗にまとまっていません。

もうChatGPTに質問してしまいましょう。

はい。

なんと、これは単なる関数近似の話でした。

これを理解する事でDeep Learningの本質、Parameter、a,b,cをDataから学習する事を理解出来るようにする。そうです。

更に詳しく以下の様に解説してくれました。

だそうです。

層が無いからNeural Networkでは無いのか。

おお、こういう事だったのか。

Neural Networkの手順を以下の様に説明しています。

成程。

これなら納得です。

ああ、そして先週のBlogの意味が分からない理由も分かりました。

Step2でLossを計算していますが、この時のabcのそれぞれの値をLearning Rateでどう変化させるのかの具体的な手順がまったくまとめられていませんでした。

Abcそれぞれのgradを計算してそれにLearning Rateをかけていました。

やっと理解出来た。

これを順伝播、損失計算、逆伝播、そしてParameter更新の観点から説明すると

以下の様になるそうです。

成程。やっと点と線が繋がりました。

しかしこれで逆に新たな謎が出て来ました。

順伝播でax^2+bx+cの式はどうやって思いつくんでしょうか?

ChatGPTに質問してみます。

そもそもDeep Learningでは式は作成しないのか。

でここから詳しく解説してくれているんですが、

ここでCNNとかTransformerが出て来ました。

やっとこれらの話が繋がって来ました。

で順伝播の定義は以下の様になります。

成程ね。

今、気が付いたんですが、Deep LearningはNeural Networkの一部です。

何でChatGPTはLecture3の最小形態を敢えて、Deep Learningの最小形態といってるんでしょうか?

Neural Networkの最小形態という事ですね。

はい、理解しました。

3.2.3 このNeural Networkの最小形態をどうやってTitanicのDataに使用したのかを確認する

 Lesson 3: Practical Deep Learning for Coders 2022 [9]の後半ではこのやり方を実際のData、Titanicの顧客のDataに対して使用しています。

どのように使用したのかを確認します。

2025-04-20のBlogで勉強していました。これをまとめます。

更にHow does a neural net really work? [10]とLesson 3: Practical Deep Learning for Coders 2022 [9]の内容も参考にします。

<43:18 ReLu: Rectified linear function>

をもう一回勉強します。

ReLu関数は今まで勉強した式を推測する手法をNeural Networkの手法に拡張するための重要な関数です。

もう一度基礎から勉強し直します。

ここでは、

How does a neural net really work? [10]の<<How a neural network approximates any given function>>を勉強しています。

この章を先に読んでおきます。

やっとこの文章の意味が理解出来るようになりました。

そしてReLu関数を以下の様に作成しました。

同じ関数をrelu(x)を使用して作成しています。

どっち使っても同じという事です。

この

m は傾きを変え、b は「フック」が現れる位置を変える事を確認するのが大変でした。
まずKaggleにある実装ではmとbのSliderを動かしてもGraphの結果が変化しません。

Copyして自分のProjectとして実行したら、Errorになりました。

ChatGPTにErrorの原因を直してもらうと、別なErrorが発生しました。

最終的には以下のようなGraphになりました。

これでやっと確認出来ました。

ここでChatGPTがLimitを迎えてしまいました。

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

続きは来週します。

来週はReLu関数を使用すると

  • 線形変換(行列掛け)を重ねただけでは「単一の線形関数」に還元されてしまう(線形×線形=線形)。
  • したがって、非線形性(活性化関数)を挟むことが必須。これがネットワークを「深く」しても表現力を上げる理由。

となる事も調査します。

これ言ってる事は理解してますが、具体的に簡単は計算で証明するのを実際に見た事は無いんですね。それをやります。

4. Nvidia Omniverseの勉強

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

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

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

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

2025年9月からIsaac Lab Documentation [11]の勉強に切り替えました。

4.1 先週の復習

 Environment Design [12]の続きを勉強しています。

以下のReward関数の実装まで勉強しました。

先週の最後に

keepdim=Trueの意味は

次元が消えるという意味だそうだが、このTensorの考え方がよく分かりません。

これについて今週は深堀する。と書いて終わっています。

しかし、今復習すると

これって単に表記を以下の様に変えてるだけで

そんなに深堀する価値あるとは思えません。

今週は素直に続きをやる事にします。

4.2 Environment Design [12]の続きを勉強する

昨日(一昨日?)にGemini Pro3が公開されました。

無料版でもThinkingで使用出来るみたいです。(後、Google Antigravityで期間限定ですがSonet4.5が無料で使用出来るみたいです。これも後で試してみます。)

今回はGemini 3を使用して勉強する事にします。

以下の文章の訳からお願いしました。

Gemini3の訳です。

特に問題は無いです。

Googleの翻訳はChatGPTなどと比較すると落ちるImageが有ったんですが、これ見る限りでは同じ位優秀ですね。

更に訳した内容の解説もしてくれました。

分かり易い。

ArticulationDataはそういうDataを管理してるのか。

これを読んで理解出来ました。

更に以下のCommentもありました!

絶対、私のBlogを読んで回答しています!

ArticulationとArticulation Dataの違いについて理解した内容があってるか確認します。

けっこう、回答に時間がかかります。

この辺はまだChatGPTの方が良いかもしれないです。

更に以下の様に詳しく解説してくれました。

Fontが読みにくい。

読みにくいは言い過ぎですが、ChatGPTのFontの方が満足感は高いですね。

Copilotと比較すると同じ位の満足感ですね。

それぞれのRobotの速度は違う訳で、速度からRewardを計算するには、それぞれのRobotの速度のDataを持ってるArticulation Dataの情報を参照する必要が有ると言う訳ですか。
納得です。

次の文章にいきます。

Gemini3の訳です。

もう私が訳の間違いを指定出来るLevelでは無いです。

Apply ActionがArticulationのMethodを呼び出し、ObservationではArticulation DataのMethodを呼び出すのは理解しています。

その後の、PolicyはPolicy Modelのための観測値を定義し、Criticは評価のための観測値を指定するとありますが、これは知らなかったです。

UE5のLearning Agents (5.5)のPolicyとCriticもそうなってたのかな?

これは後で確認します。

更に以下の解説がありました。

NvidiaのAcceleration Computingの一端がこういう実装から見れますね。

凄い!

Articulation Dataを使用する事によってBody Frameを使用出来るMeritがあると言う事らしいです。

PolicyとCriticを生徒と先生に例えて説明してるのは分かり易いです。

やっぱりここは重要なPointなのか。

一寸、UE5のLearning Agents (5.5)のPolicyとCriticについてどんな勉強をしたのか復習します。

2025-06-22のBlogで勉強していました。

これ以上の理解はしてません。

でもこれ見るとRewardとどう違うのかが分からないですね。

この辺をGemini3に質問しますか。

以下の質問をしました。

Gemini3の回答です。

逆だそうです。

Rewardの結果に基づいて、CriticがどれくらいRewardを貰えるのかを予測するそうです。

ふーん。

更に詳しく解説してくれました。

まずRewardについてです。

そう。誰が決めるのかが重要です。

Rewardは私が決めています。それに対してさっき復習したUE5のLearning Agents (5.5)は何をCriticするのかの指定をする箇所が見つからなかったです。

今度はCriticの説明です。

こんな事をCriticはしていたのか。

Criticの役割をやっと理解する事が出来ました。

今度はCriticの役割を先程の先生と生徒に例えて説明しています。

これは前の例ほど俊逸では無いですね。

ここまで例えるなら塾の先生がその予測によってどう教え方を変えるのかまで説明してほしかったです。

ふーん。

Reinforcement Learningでは偶然上手く行った事に対しての補正が大切のようです。

Policyの学習方法を指定するところでも、偶然上手く行った事に対しての補正をする手法を選択した記憶があります。

ありますがこれはBlogを探しても見つかりませんでした。

Gemini3に質問したら一瞬で答えを教えてくれました。

凄すぎる。

次の文章です。

間違えてChatGPTの方に貼ってしまいました。

せっかくなので両方の訳を比較してみます。

ChatGPTの訳です。

Gemini3の訳です。

「we will make the reward the magnitude of the linear velocity of the Jetbot in the body frame.」の訳ですが、

ChatGPTが

Jetbot のボディ座標系における線形速度の大きさ を報酬とします。

と訳したのに対して

Gemini3は

報酬を「ボディ座標系におけるJetbotの線形速度の大きさ(ノルム)」とすることにします。

と訳しました。

ボディ座標系におけるをJetbotにかけたGemini3の方が訳が自然です。

Gemini3凄いです。

place holderって仮って意味なんでしょうか?

これはChatGPTにだけ質問しておきます。

あってました。

Gemini3は訳の後に以下の解説もしてくれました。

そして以下の例を説明しています。

これは本筋には関係ないかもしれませんが、面白い話です。

そして次の内容についても簡単に説明してくれてます。

今度は以下の実装について勉強します。

確かにTerminationとResettingの実装です。

Gemini3の解説です。

特に疑問は無いです。

ChatGPTより説明が易しい感じがします。

Return ValueにFalseを入れると失敗無しになるのは理解出来ますが、なんか逆の方がしっくりします。

次は環境のResetについてです。

それぞれのCodeの説明はたったの一行ですね。

でもこれくらいの方が分かり易いですね。

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

そう、Env_originsを足すのだけ納得いかなかったんです。

そこをPin Pointで説明してくれるのはありがたいです。

説明読みました。

なんだ。こんな理由だったのか。

理解しました。

残りの文章も訳してもらいましょう。

全部一気に訳してもらいます。

ここは_get_dones Methodの説明ですね。

こっちは_reset_idx Methodに関しての説明です。

なんかあんまりピンと来ません。

もう集中力が切れて来たのかもしれません。

Gemini3は更に以下の説明をしてくれました。

これは理解しています。

別に親Classを呼び出す事が凄いんじゃなくて、親Classを呼び出す以外に、TimerをResetする方法が無いだけでしょう。

ここ以外にSuperを呼び出す事は出来ない。とか言われると親Classを呼び出す事自体が偉いように聞こえます。

おお、ここでLimitに達しました。

明日の朝の6時まで使えないのか。

結構長いな。

この辺はChatGPTと同じですね。

ChatGPTとGemini3の両方を使用して勉強するのが一番お得という感じです。

丁度、Tutorialもここで終わりました。

今週のOmniverseの勉強はここまでとします。

4.3 Gemini3を使用した感想

圧巻の一言です。

3つの主な理由をまとめておきます。

<理由1>

先週のBlogにkeepdim=Trueの意味は次元が消えるという意味だそうだが、このTensorの考え方がよく分かりません。これを来週(つまり今週)は勉強します。と書いておきました。

Gemini3に

と書いただけで、

なんと以下のようなCommentが追加されていました。

これは確実に私が書いたBlogを読んだ上で回答しています。

凄いです。

<理由2>

翻訳がChatGPTより僅かだが上回った。

今までのGoogleの翻訳はChatGPTと比較するとかなり劣っていました。明らかに間違った訳をしてる場合もありました。

それが今回、文章の質まで考慮するとChatGPTより上の訳をしてる箇所がありました。

凄いです。

<理由3>

簡潔な解説です。ただ短いだけじゃなく、本質をビシッと捉えた上で簡潔にまとめています。

読んでて非常に分かり易かったです。

ただまだ複雑な定義の説明を試してはいませんので、その辺も簡潔かつ要点を捉えた説明が出来るかどうかは分かりません。

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

今週は別な予定が入ったのでGaeaのTutorialは中止します。

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 [13]の復習の続きです。

Houdini is HIP - Part 14: Flip Fluids I [13]の実装は終わったんですが、その中身を全然理解していません。

ので中身を理解するための復習をする事にしました。

先週はGridとParticleそれぞれの実装をどうやったのかを復習しました。

そしたらChatGPTが、GridもParticleも別に分けないで以下の手順で実装してるよ。

と教えてくれました。

のでこの工程に従って、今までの実装を復習すると

SOP Levelでの実装、

DOPnetでの実装、

ForceノードなどでSimulationに影響を追加、

のように基礎の部分はTutorialの最初で既に作成されている事が確認出来ました。

最後のSOP Levelに戻して結果の可視化の部分は確認していません。

そしてGridとParticleの実装に関しては

SOP層では以下に示したFlip Sourceノードが

ParticleやGridの情報を生成し

DOPnet層では、

Flip solverノードが

ParticleとGridの両方の Simulationの計算をしている事が判明しました。

6.2 Houdini is HIP - Part 15: Sparkling Water Project [14]を勉強する

もう復習する内容も無いので次のTutorialを勉強する事にします。

今度のTutorialはSimulationの結果をSOP層に戻して、Photo-Realisticな液体のRenderingの方法も勉強出来るでしょう。

<00:00 Intro>

今回のTutorialはVersion 20でやってます。

<01:30 Glass Setup>

Glassを作成します。

Obj層にGeometryノードを配置します。

名前をGLASSに変更します。

GLASSノードを開いて

Curveノードを追加します。

SOP levelのSOPの意味を確認しておきます。

ChatGPTに聞きました。

なんか、返事が冷たいです。

ひょっとして機能Gemini3を使用して勉強したからでしょうか?

Front Viewに変更して

以下のようなDrawをします。

Revolveノードを追加します。

Revolveノードの解説です。

DOP Levelノードって解説されてます。

そうなの?

Geometryノード内で使用するNodeは全部SOPだと思っていました。

一応、ChatGPTで確認します。

だそうです。

やっぱり最初の解釈であってるわ。

ChatGPTのお陰で、Tutorialのミスから混乱する事を防ぐ事が可能になりました。

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

Revolveノードを可視化したら以下の様になりました。

Prospective Modeに戻りました。

表面の色が青みが買っていますが、これは裏側が表示されているからだそうです。

表裏が逆になってるという事です。

直します。

RevolveノードのPropertyにあるReverse Cross SectionsをEnableします。

結果です。

青みが無くなりました。

裏表が直りました。

End CapsもEnableしました。

Topに表面が追加されました。

ここには映って無いですが、Buttonにも表面が追加されたそうです。

UVは要らないので以下のCompute UVsは外します。

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

BlastノードのGroupの矢印を選択し

先程作成されたTopの表面を選択します。

選択した表面をBlast Awayします。

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

おお、SOP Levelのノードに関しては結構知ってるNodeが多くなって来ました。

Poly ExtrudeノードのDistanceの値を上げました。

結果です。

更にOutput BackをEnableします。

結果です。

内側にもSurfaceが生成されました。

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

結果です。

SubdivideノードのDepthの値を3まで上げました。

結果です。

これで完成ですかね。

なんとこの時点でもCurveノードを選択してCurveの形状を変化させる事が出来ます。

Proceduralの特長を存分に発揮していますね。

Glassの底が原点より下に来ています。そしてGlassの大きさは1m以上あります。

これらを直します。

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

Glassの大きさはせいぜい20cmでしょう。

Uniform Scaleの値を0.2にしました。

結果です。

大体20cm位の大きさになりました。

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

このNodeは初めて使用する気がします。

このNodeはきちんとSOP Levelであると説明されています。

Match SizeノードのJustify Yの値をMinに変更しました。

結果です。

Glassの底が原点に移動しました。

最後にNullノードを追加しました。

名前はGLASS_OUTにしていました。

ここで<01:30 Glass Setup>が終わっています。

まだ5分程度しかTutorialの勉強をやっていませんが、既に結構な量を実装しています。

今週のHoudiniの勉強はここまでにして、来週、今週勉強した範囲を実装する事にします。

6.3 Houdiniの仕組みについて

Houdiniの勉強を始めたのは、2023-01-01のBlogからです。

もう2025年も終わりますので、約3年前になります。

やっとHoudiniの構造が理解出来るようになって来ました。

今回、TutorialにはRevolveノードの解説で、DOP Levelで使用すると書いてありましたが、これは間違いです。

RevolveノードはSOP LevelのNodeである事をChatGPTの助けを借りながらですが突き止めました。

基本的にSOP LevelではGeometryを作成します。

それぞれの層は以下の様になっています。

更にMaterialの設定やRenderingの設定をするLevelもあります。

Houdiniではそれぞれの設定をする場所をLevelで分割して管理しています。

そしてそれぞれのLevelをOperatorと呼んでいます。例えばGeometryを管理するLevel(Operator)はSurface Operator、SOP、という感じです。

UE5がそれぞれの設定をBP内で管理してるのと原理的には同じ事をしてるんですが、形状は全く違います。

結局、3D Graphics Engineである事は同じなので、管理する内容はほとんど同じになります。しかし管理の形状がそれぞれのEngineによって大分違っているんです。

Houdiniの使用方法を理解するには、このLevelによってそれぞれの設定を管理してる事を理解する必要があったんです。

3年も費やしてやっとHoudiniの仕組みが分かったわ。

最初からHoudiniは3D Graphicsのそれぞれの設定をLevelに分けて管理しています。と言ってそれぞれのLevelの学習方法を提示すべきでしょう。

学習者にこんな遠回りな勉強させてHoudiniの連中は何がしたいの?

ホント、怒りで爆発したい気持ちでいっぱいです。

もうCGIで作成する時代は終わりを迎えています。これからはAIがCGIを作成するようになるでしょう。

Houdiniの唱えるProceduralな手法によるGeometryの作成もたった2~3年でその覇権を奪われてしまいました。

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

今週はGoogleのAntigravityを試す事にします。

7.1 AntigravityをInstallする

流石にAntigravityの詳しいInstallationを説明したTutorialはまだなかったです。

行き当たりばったりでやってしまいます。

https://antigravity.google/

を開きました。

URLはあってますね。

Download for WindowsをClickします。

X64をDownloadします。

を起動させます。

が開きました。

同意するを選択して次へを押します。

Install先はDefaultのままにしておきます。

次へを押します。

Start menu Folderって何でしょう?

ChatGPTに聞いたらDefaultで良い。って言ってます。

次へを押します。

追加するTaskについて聞いてきました。

Desktop上にIconの表示はしてほしいです。

更にExplorerのFile Context MenuにもAntigravityの表示は欲しいです。

次へを押します。

Installを押します。

Installが始まりました。

これで完了です。

Systemへの変更を許可しますか

とかは聞かれませんでしたね。

完了を押します。

Antigravityが起動しました。

設定をここでする必要があるのか。

ううん。

設定という設定ってないんです。

VS Codeにも無いしCursorにも無いです。これらのIDE全然使ってないですし。

Start Freshを選択します。

こんなのは何時でも変えられるはずです。

Tokyo Nightでも選択しておきます。

Agent-driven developmentを試したいんですが、RecommendedはAgent-assisted developmentですね。

全部このままにしておきますか。

細かい意味は後で調べます。

これもDefaultのままで良いです。

はい。

Login出来ました。

おお、そうだ。Gemini3にこの文章を訳してもらいます。

はい。

Data Exfiltrationってどんな意味かよく分からないと思ったらそれも説明してくれてました。

簡単に言うと以下の3つに気を付けてと言う事らしいです。

はい。

理解しました。

おお、Antigravityが始まりました。

用事があるので、ここで一端停止します。

7.2 YouTubeのTutorialを見る

用事が済んだので続きをやります。

一応AntigravityのInstallが終わったので、YouTubeのTutorialに沿って何か試してみます。

さっき見た時は2,3個しかTutorialが無かったのに。

凄い増えてます!

こういう公式の奴ってあんまり役に立たないんだけど。13分と短いので一応見ておきます。

ああ、Settingの説明からやってた!

しかもDefault Light Modernを選択しています。

私も白い方が使いやすいんです。

なんで、Proは黒いの使うみたいな風潮があるんですかね。

白人は暗い所でも良く見える傾向があるんです。一緒に映画館とか行くと、こっちは真っ暗で何も見えないのに、彼らは普通に見えてたりします。

そのせいか、Monitorの白が強すぎると感じる傾向があります。

アジア人には関係ない話です。白で良いんです白で!

後で白に直します!

この後の説明は何やってるのかよく分からないです。

画面もなんか違うし。

ああ、Macでやってるのと画面が白いから物凄く違って見えるんだ。

うーん。

白くするのは無し。

なんか説明聞いても今の時点ではピンと来ません。

他のTutorialを見ます。

これ見てたら、

以下のExtensionを追加する事で

Antigravityが直接、Chromeを操作して作成したProgrammingのテストを自動でする。みたいな事を言ってます。

へえー!

そんな事出来るの?

他にどんな事が出来るのかGemini3に聞いてみました。

Manager Viewと言うのが有るのか。

これも後から勉強する事にします。

報告書、Artifactsも作成してくれるのね。

当然、Gemini3 Proが使用できると。

更に以下のCommentをしてくれました。

成程。

この辺の使い方を理解するのが重要なのか。

今回は、まあ最低限の使用方法を理解したら十分とします。

IDEの形状が少し違う気がします。

24時間以内に作成されたTutorialに限定してみる事にします。

これは簡単で分かり易かった。

一応勉強の候補に入れておきます。

このTutorialは今回はBrowser ExtensionとかManager viewとかは試さないと宣言してました。

それはそれでありですね。

Data ScientistのKrish Nalk氏のTutorialです。この人のTutorialは昔よく見ました。

AntigravityのHomepageの説明の解説をしていました。

Installの設定の説明もしっかりしていました。

ああ、これで勉強しよう。

最後まで見ましたが、一寸やってる内容が初心者向けではありませんでした。

Terminalとか使用しています。

今回は別なTutorialで勉強します。

こっちかな。

これならInstallの設定から簡単なCodeの生成方法まで説明していました。

しかもたった8分のTutorialです。

これで試してみます。

7.3 MASTER Google Antigravity AI Code Editor (Full Tutorial For Beginners) [15]を勉強する

やっぱりこっちにします。

そもそもAIを使用したIDEの操作だってまだよく分かってないんです。

普通の人より簡単なTutorialから始める必要があります。

一緒にやっていきます。

まずAntigravityを開きました。

一番最初にWorkspaceをSaveしています。

これがよく分かりません。

まず最初にSaveするためのFolderを作るべきと思うんですが?

Desktopに以下の名前でSaveしてました。

ああ、そういう事か。

Antigravity用のProjectを保存するためのFolderを作成してその中に1121というFolderを作成してそこにSaveしました。

今度はWorkspaceにFolderを追加するそうです。

え?

さっきのWorkspaceと今度作成するWorkspace用のFolderって用途が違うの?

ChatGPTに聞いたら、WorkspaceだけではFolderが無いので管理出来ないからFolderを追加すると言っていました。

この仕組みはVS Codeとかといっしょだそうです。

あんまり深く考える必要はなさそうです。

さっき作成したFolderを指定しました。

Yesを押します。

FirstProjectが開いています。

更にFolderの名前が表示されています。

何これ?

1121は絶対に間違った名前だわ。

Explorerを開いたら以下の様になっていました。

1121のFolder内に別のFolderを作成してFirstProjectと名付けるべきでした。

まあいいや。

Index.htmlを追加しました。

以下の命令を出しています。

うーん。

日本語でやってみよう。

色々やってます。

出来たみたいです。

まず日本語に変えてもらいます。

更にCSSJavaScriptに関しての計画も追加してもらいます。

実行するのでProceedを押します。

出来たんですが、index.htmlしかありません。

作り直してもらいます。

今度は3つに分けて作成しました。

TutorialだとここでSetupが表示されて

Browser Setup用のBrowser画面が開いてるんですが、

私の画面では

となってるだけです。

取りあえずAccept Allを押します。

その後は何も変化しません。

ので以下の質問をしました。

結果、

が表示されました。

おお、Browser Setupが開きました。

ExtensionをInstallします。

Installが終わったら以下の画面が開きました

自動でテストしています。

そして

凄い。

Walkthrough.mdを開いたらTestの記録を録画した動画が載っていました。

すっごい!

一応、今日やりたい事は出来たのか。

Tutorialの続きを見ます。

をしています。

Configから色を変更する方法も説明していました。

はは、白に戻してやったぞ。

更にTerminalの使用方法も説明していました。

Tutorialと同じ質問したらErrorになりました。

他のCommandは動いているのでTerminal自体は正常に動いていると思われます。

TutorialのTerminalはPowerShellの表示があります。

PowerShellに変更する事も可能のようです。

これは後で調べます。

以下の質問をしてみました。

こういう質問をしても大丈夫なようです。

下向きの矢印?からPowerShellの選択も出来るみたいです。

何も表示されませんね。

テストしてみます。

ChatGPTによると

だそうです。

試してみます。

おお、正常に動いています。

これでTutorialはお終いです。

一応出来たことにします。

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

来週は以下のManager Viewが出来るようにします。

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 Input Assembler | D3D12 Beginners Tutorial [D3D12Ez] [16]の続きを実装する

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

<Dynamic Binding>

以下の場所に2つのCodeを追加しました。

先週のBlogでは一個ずつ追加していますが、面倒なので両方一辺に追加しています。

そしてIASetVertexBuffers()関数の三番目のArgumentであるvbvを以下の場所に作成しました。

IAのErrorが消えました。

そして今までTO DO Drawがあった位置に以下の実装を追加します。

そして以下の場所にClose、つまりVertexBufferとUploadBufferのRelease()関数を追加しました。

ここで試しに実行してみます。

Tutorialと同じErrorが出るでしょうか?

出てます。

先週勉強した内容は全部実装出来ました。

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

今年中に「Chapter 5 PolygonにTextureを貼り付ける」を終わらせる予定でした。

結構ギリギリですが、この予定は果たせるかもしれません。

8.2.1「5.12.2 Copy先Resourceの作成」を勉強する

勉強してその後で実装してたら間に合いません。

一辺にやって行きます。

Copy先のHeapつまりGPUが読み取るためのHeapを作成します。

教科書のまとめ方は逆なんです。

まず以下に示したCreateCommittedResource()関数をGPU用のHeapを作成するために実装します。

このParameterの2番目に使用してるStructを以下の実装で作成します。

次にParameterの4番目にあるStructを以下の実装で作成します。

最後にResultの値がS_OKになってるか確認します。

以上です。

8.2.2「5.12.2 Copy先Resourceの作成」を実装する

では実装も今してしまいましょう。

実装用のProjectを起動させます。

今あるTexture Buffer用のCreateCommittedResource()関数の実装を確認します。

変更する必要があるのは4番目のParameterだけですね。

直しました。

今度はTexHeapPropの設定を確認します。

今の設定です。

Typeは当然Default用のHeapの設定に変更する必要があります。

CPUPagePropertyとMemoryPoolPreferenceの値も変えていますね。

直しました。

次はResDescの設定です。

SampleDescの設定とかFlagの設定とかしてないですね。

だだしSample Codeは別な箇所で

という設定をしています。

これらを見るとSampleDescの設定とかFlagの設定とかはそのまま残しておいても問題ない気がします。

これで完成とします。

テストします。

Errorになりました。

2回ResDesc[]をDefineしてるって?

Upload用のHeapの作成で使用してました。

宣言消しました。

もう一回テストします。

CreateCommitedResource()関数の結果は

S_OKになっていました。

出来てます。

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

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] Epic Games. (n.d.). Control Rig in Unreal Engine, from https://dev.epicgames.com/documentation/en-us/unreal-engine/control-rig-in-unreal-engine

[3] Epic Games. (n.d.). Control Rig in Blueprints in Unreal Engine. November 4, 2025, from https://dev.epicgames.com/documentation/en-us/unreal-engine/control-rig-in-blueprints-in-unreal-engine

[4] Epic Games. (n.d.). Animating with Control Rig. In Unreal Engine Documentation. Retrieved November 18, 2025, from https://dev.epicgames.com/documentation/en-us/unreal-engine/animating-with-control-rig-in-unreal-engine

[5] Epic Games. (n.d.). Animation Mode. In Unreal Engine 5.7 Documentation (Unreal Editor Mode: Animation Editor Mode). Retrieved November 18, 2025, from https://dev.epicgames.com/documentation/en-us/unreal-engine/animation-editor-mode-in-unreal-engine

[6] Motion Forge CG. (2024, January 15). Unreal Engine – How To Edit Animations Non-Destructively with Control Rig [Video]. YouTube. https://www.youtube.com/watch?v=nfz5H4PN2ys

[7] Tech With Tim. (2025, January 12). Cursor Vibe Coding Tutorial – For COMPLETE Beginners (No Experience Needed) [Video]. YouTube. https://www.youtube.com/watch?v=8AWEPx5cHWQ

[8] Howard, J. (Instructor). (n.d.). Practical Deep Learning for Coders [Video playlist]. YouTube. https://www.youtube.com/playlist?list=PLfYUBJiXbdtSvpQjSnJJ_PmDQB_VyT5iU

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

[10] Howard, J. (n.d.). How does a neural net really work? Kaggle. Retrieved November 19, 2025, from https://www.kaggle.com/code/jhoward/how-does-a-neural-net-really-work

[11] Nvidia. (n.d.). Isaac Lab Documentation. Retrieved from https://isaac-sim.github.io/IsaacLab/main/index.html

[12] Isaac Lab Project Developers. (n.d.). Environment Design. Retrieved from https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/technical_env_design.html

[13] Nine Between. (2024, June 18). Houdini is HIP – Part 14: Flip Fluids I [Video]. YouTube. https://www.youtube.com/watch?v=DJfkTV3Pivc

[14] Nine Between. (2023, November 29). Houdini is HIP – Part 15: Sparkling Water Project [Video]. YouTube. https://www.youtube.com/watch?v=Xs2tHiVFKF0

[15] N-Educate. (2025, November 20). MASTER Google Antigravity AI Code Editor (Full Tutorial For Beginners) [Video]. YouTube. https://www.youtube.com/watch?v=S5wf4Y2DKkg

[16] Lötwig Fusel. (2023, August 1). Input Assembler | D3D12 Beginners Tutorial [D3D12Ez] [Video]. YouTube. https://www.youtube.com/watch?v=qmT98sWHe6o