
先週は別な予定が沢山入って来たので、勉強はお休みしました。
休んだからと言って何か別な事が出来た訳では無いので、先々週の続きを今週も淡々とやっていきます。
2026-02-01のBlogの「AIについての調査(ComfyUIの勉強)」で議論した通り、勉強内容を変更する事にします。
ただしHoudiniの勉強はそのまま残す事にしました。これを削るのはもう少し考えてからする事にします。
Logoは直してる時間が無いので、しばらくはこのままです。
それぞれの勉強の内容や目的はそれぞれの章にまとめる事にします。
1. 今週の予定
今週からこの順序に従って勉強していきます。
- 映像作成用UE5の勉強
- AIの勉強
- Nvidia Omniverseの勉強
- AIの勉強2(日本語字幕AIを作成する)
- Houdiniの勉強
- Nvidia Omniverseの勉強2(強化学習の勉強)
- DirectX12の勉強
それぞれの勉強の最初にその勉強をする目的を一寸だけ書いておきます。
2. 映像作成用UE5の勉強
PCGで建物を作成する方法を勉強してるので、その応用としてPCGで神社を作成する事にしました。
最終的にはUEFNのMap内で神社を作成して、 誰でも参拝出来るようにするつもりです。
2.1.1 前回の復習
TextureのScaleを調整できる前に作成したMaterial Instanceを探しました。

それを今のProjectにMigrateし、以下の様に参道の石道部分に使用しました。

TextureのSizeを変更する事は出来ました。
ただしこれから調整が必要なようです。

今週はこの調整からやっていきます。
2.1.2 TextureのSizeを調整する
なんかUE5が開けなくなってる。
まずEpic Launcherですが、開いたらBoxが表示されProject Files not Associatedと表示され
Fix Now
No Thanks
と表示されてます。
Geminiに質問したら
Fix Nowを選択しろ
と回答されたのでFix Nowを選択しました。
それからJapanese ShrineのProjectを開いたら、30分位かかってやっと開きました。
しかも途中で2回ぐらいCrashしました。

やっと開けました。
ではMaterial Instanceの値を調整してTextureの大きさを調整します。

前回よりはいい結果ですね。
一応、Material Instanceの値を記録しておきます。

ここで用事が入ってしまったので一端中止します。
戻って来ました。
もう一回Projectを起動します。
今度は普通に動きました。
もう少しTextureを細くしてみました。

これもありですね。

もっと細くしました。


これは遠くから見たら変ですが、
以下に示した様にThird Personからの高さと距離で見た時は、綺麗に移ります。

石道を長くしました。

うーん。
まあ良いか。
とりあえずこれで完成です。
2.1.3 砂利道を作るためにMaterialをCheckする
今までDown lordしたMaterialを確認します。
dried_creek_bed_lidar_scanです。

Level上に配置するとこんな感じです。

これは後で相当加工しないと使用出来ないでしょう。
取りあえず×という事にします。
次です。

escalon_traviesas_grava_hojasです。
これもLevel上に配置してみます。

こんなに大きかったの?
Scaleを0.25倍しました。

これ行けそう。
これはOKにします。
次です。
gravel_3d_scanです。

Level上に配置しました。

ギャーデカすぎ。
10分の1のSizeに変更しました。

砂利の石が大き過ぎ。
隣のescalon_traviesas_grava_hojasの石の大きさと比較すると石がいかに大きいかが分かります。
でもこんな感じで、他のMaterialと組み合わせて使用したり

以下の様に重ねて使用するのは有りかもしれません。

一応、OKですね。
grey_natural_slate_stone_wallです。

なんか凄い大きい気がするんですが。
Levelに配置します。

やっぱり。デカすぎ。
100分の1にしました。

それでもデカすぎます。
0.0025倍して以下の大きさになりました。

なんとこのMesh、重ねたら

平じゃ無い事が判明しました。
これは使えません。
正しこのMeshのTextureは綺麗なので

何処かに使用したいです。
と思ったら、既に四角いStatic Meshを作成していました。

こんな感じです。

これは砂利道ではなく、石道の方に使用出来そうですね。
と思ったら2026-03-01のBlogで

実際にやってました。
2026-03-01のBlogのBlogでは、このTextureのSizeを変更する事が出来なくて、そこで使用を諦めていました。
そんな事があったのか。
すっかり忘れていました。
これは来週やる事にします。
次のMeshです。uljcfd0_tier_2と言う凄い名前でした。

あれ?
これ使えそうじゃない。
実際にLevel上に配置してみます。

結構小さいですね。
並べるとこんな感じです。

Titlingが凄すぎで、実用は無理か。
いや、使い方次第で化ける可能性があります。
これも候補に入れておきましょう。
次です。ugrxbjkfa_tier_2です。

うーん。
Level上に配置してみますか。

更に小さいのか。
重ねるとこんな感じになります。

これはTitlingを完全に消していますね。
こっちで石道作った方が良いかもしれません。
次です。
ukohbbi_tier_2です。

これは。
砂利道を作成するために作られたようなStatic Meshです。

小さい。
何個か重ねてみます。

うーん。
良い感じですね。
これも使用する事にします。
vf5pajccb_tier_2です。

Level上に配置してみました。

こちらの方が少し赤みが強いです。
後、Sizeが大きいので重ねる回数は少なくすみそうです。
vbhsfesga_tier_2です。

Level上に配置します。

結構小さいですね。
以下に示した様に他のMeshと重ねて使用する感じですかね。

vf5pajccb_tier_2と組み合わせています。
両方とも赤みがあるので、自然な感じで組み合いますね。
ukohbbi_tier_2とも組み合わせてみました。

こっちはこっちで砂利が強調されてありですね。
これでDownloadしたStatic Meshは全部確認したのかな。
何個か中身が無いAssetがあるんですが、これって最初のProjectが開けなかった影響なのでしょうか?

うーん。
まあ、今週はここまでですね。
2.1.4 来週の予定
忘れない内に来週やろうと思ってる事をまとめておきます。
まず、

を石道に使用してTextureのSizeを変更してみます。
次に砂利の部分ですが、

のように複数のStatic Meshを組み合わせてどんな感じになるのかを検証します。
後、参道が地面から浮いています。

地面をLandscape Patchを使用して平にしてStatic Meshと繋げるか、それとも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 前回の復習
Create Procedural Interiors With Full Room Separation | UE 5.4 P5 [1]の<18:20 - Grow Selection Based on Created Center Points>の続きを実装してました。
以下の実装をした事で、

SetノードのParameterの設定によって値がどう変わるのかの確認が出来る様になりました。
で、この設定では、
Setノードで、InputされたPointのAttributeのDensityの値が、Get Attribute From Point Indexの値で上書きされている事は
確認出来ました。
他の設定に変えた場合は試さなかったようです。
以下の虫のようなIconの意味が分からないと書いてありました。

そしてAIに聞いた結果、
それぞれのLoopの時にInputされるPointだと判明しました。
つまり、Loopのノードがどのような要素でLoopしてるのか、まだ理解してないって事です。
更に結果が、

のようになっていますが、Tutorialでは以下の様になっていて

どこかで間違ってる気がします。
ので最後に

と書いて終わっていました。
2.2.2 Loopの機能を確認する
PCGのLoop形式のPCGノードの機能がよく分かってなかったです。
それを確認します。
PCG_StudyのPCG_Buildingに以下の実装がありました。
丁度良いのでこれで確認します。

まずPCG Copy Point Up SimpleノードのDataです。

凄い色々な要素があります。
更に
PCGPoint Dataには以下のような要素がありました。

PCG_ExpandPointSelectionノードの中を調べます。

InputノードのDataを確認します。

PCGPoint Dataの要素が一個しかありません。
PCGPoint Dataの要素をLoopで回してるようです。
一応、Geminiにも聞いて確認してみましょう。
以下のような質問を作りました。

これだったらどっちの答えを私が望んでるとか、そういうカンニングは出来ないでしょう。
でGeminiの回答です。

やっぱり。
あってるわ。
更に詳しい解説もしてくれました。

残りはまあ知ってたらお得位です。

後、Attributeの定義についても確認しました。
これは以下のようなStructがあるとして

Transformなどのそれぞれの要素をAttributeと呼ぶ場合と、
このStructから生成したInstanceがもつそれぞれの要素の値を
Attributeと呼ぶ場合があるそうです。
2.2.3 Codeの確認をする
現状、以下の様になっていますが、

これが正しいのかどうかを確認します。
まずBuildingを大きくしてみました。

おお、部屋割りしてますね。
下の階の部屋割りも確認してみます。

お。上の階のPointと違う場所にPointが生成されています。
これだけ見ると今まで作成したCodeはあってそうですね。
あってる事にして次にいきます。
2.2.4 Create Procedural Interiors With Full Room Separation | UE 5.4 P5 [1]の<25:23 - Adding Doors and Interior Walls to Data Asset>を勉強する
Tutorialを見たら、<18:20 - Grow Selection Based on Created Center Points>は最後まで終わっていました。
ので次の節である<25:23 - Adding Doors and Interior Walls to Data Asset>を勉強します。
PDA_ModularBuildingを開き

VariableにDoorsやInteriorWallsを追加します。

そしてDA_RegularBuildingを開き

DoorsとInterior Wallsの設定を指定します。

DoorにFabにある以下のAssetを使用した場合は、

Pivotの位置を図の位置に変更しておくと結果を微調整しないで良いそうです。
以下の様に前後で複製した時に

Pivotの位置が丁度真ん中になるからでしょうか?
これでこの節は終わりです。
短いけどまあ、今週の作業としては十分か。
ここまでにします。
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の爪が地面にめり込んでしまう問題を直す事が出来る事が判明しました。
<追加>
2026-03-09のBlogで、判明したのですが、実は地面にめり込んでいたのはDragonの爪じゃなくて、Dragonの足でした。

しかも使用したDragonはSand Dragonではなく、Quadraped CreaturesにあるMountain Dragonでした。
つまり問題は
DragonをLandscape上の凸凹な地面の上をLevel Sequenceを使用してAnimationで歩かせると足が地面に潜りこんでしまう。
というのが正しかったんです。
2.3.1 前回の復習
前回はFBIKノードについて色々復習し、更にFull-Body IK [3]をもう一回勉強しました。
以下の様に組むと

Mannequinは、全体が移動してしまいます。

ので以下の様に組むと

以下に示した様にIKとして働くようになります。

ここまでは良かったんですが、この後で

のように普通のControlと一緒にFBIKノードを組んだら
そしたら普通のBoneの方はControlが効かなくなってしまいました。
Geminiに何故こうなるのか聞いたら

との回答でした。
前回はここで時間がなくなってしまい、終了しています。
2.3.2 FBIKノードの勉強の続き
前回のGeminiの回答を探してもう一回読み直しました。

だそうです。
つまりFBIKノードと普通のControlの設定の共存は無理という事です。
では以下のIk_Foot_rootとそのChildrenのBoneはどうでしょう。

これにControlを作成して試してみます。

Geminiに聞くと

と書いてあります。
作成しました。

結果です。

反応しませんね。
もう一回Geminiに質問します。



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

実装しました。
結果です。

このやり方は絶対正しく無いですね。
Genimiにもう一回質問します。

だそうです。
そしてその解決方法は

だそうです。
そして

とするそうです。
さっきの説明と反対ですね。
やってみます。

組みました。
あれ?Full Body IKのRootがFoot_lになっています。
前の実装では

を選択していますね。
これ実装の条件まちがえてやってしまったかも
以下の様に直しました。

結果です。

全く直ってない。
つまりIK Boneの指定はしてはいけない。という事のようです。
IK Boneに拘ったのは無駄骨だったようです。

回答です。




ここでPelvisも登録するのか。
この後もいろいろな説明が続きますが、
IK Boneに対してのControlの設定はどうすれば良いんですか?
を見ればその回答は読めるので、今ここにまとめるのは止めておきます。
今週はもう時間が無くなってしまったので、続きは来週やります。
今週はここまでにします。
3. AIの勉強
AIの勉強の目的ですが、
生成AIが凄いTrendになってるので、最低限の基礎は知っておくべきと思いこの勉強を始めたんでした。
のでこれを勉強してどうしたいというのは無いです。
ここではPractical Deep Learning for Coders 2022 [4]の勉強をしています。Antigravityを使用したVibe Codingの勉強はしばらくお休みします。
3.1 前回の復習
Lesson 6: Practical Deep Learning for Coders 2022 [5]の<1:31:10 How to iterate the model with padding>まで勉強していました。
特に記録すべき内容は無いです。続きを勉強します。
3.2 Lesson 6: Practical Deep Learning for Coders 2022 [5]の続きを勉強する
<1:32:01 What does our data augmentation do to images>
これもNoteBookLMに内容をまとめてもらいます。
以下の3つが語られているそうです。

data augmentationの事をData拡張と訳してるんでしょうか?

確認したらその通りでした。
更に

だそうです。
本文に戻ります。

これはさっきの説明と同じだ。
そして3つ目の内容です。

Test時に使用する画像にもData Augmentationを行うのか、Testに使用する画像を元にしてData Augmentationで生成した画像でも学習させてるのかこの文章からは判断出来ないですね。
NotebookLMに質問してみます。

Test用の画像をData Augmentationで沢山生成してそれぞれの画像に対してのTestの結果を測定し、その平均を取る事で、最終的な予測を導く方法のようです。
Test結果は通常のやり方より良くなるみたいですね。
最後に

となって終わっていました。
一応、動画も見て内容を確認します。
Data Augmentationの話をする前に以下のCodeを見せてました。

First Steps: Road to the Top, Part 2を見てるですが、そのSlideはもう残っていません。

Tta()関数について質問したら

と回答が返って来ました。
これは先程のNotebookLMの説明の以下の部分
![]()
を行う関数のようです。
これを使ってるのを見せて終わりでした。
Data Augmentationについての解説とか一切なかったです。
<1:34:12 How to iterate the model with larger images>
NotebookLMに要約させます。

更に詳しく以下の様に説明してくれました。

もう動画見るより、こっちで勉強した方が、理解が深まりますね。

そうなのか。やっぱりDataの方が大切なのか?
では動画を見て内容を確認します。
以下の方法で画像のSizeを変更していました。

確かにError Rateは2%なで下がっていました。

でもこれってIterationのせいじゃない?
この情報だけでは本当に画像のSizeを適切に調整すると12%から2%にさがるのか分からないですね。
更にtta()関数でテストすると

2%を切っていました。

お、ここで最初のError Rateの値を示していました。

確かに12%でした。
これなら
本当に画像のSizeを適切に調整すると12%から2%にさがる
と言えますね。
<1:36:08 pandas indexing>
NotebookLMに要約してもらいました。

うーん。
前に提出した時はMap()関数を使用したんでしたっけ。
Lectureを見たら具体的なやり方を見せていましたが、ここにはまとめません。
あんまり必要性を感じません。

今度はTop 25%に入っていますね。
凄いです。
<1:38:16 What data-augmentation does tta use?>
Lesson 6: Practical Deep Learning for Coders 2022 [5]の最後の節です。
NotebookLMに要約してもらいました。

だそうです。
一応、動画を見て内容を確認します。
質問に対しての回答をしていますが、Dataの画像のSizeについての質問や、Padした場合の黒い部分に関しての質問に回答していました。
一寸、Notebookの内容とは違いますね。
以下の2つの疑問が湧いてきました。
- tta()関数は今でも有効な手法なのか?
- Sampleの画像のSizeを一定にして学習するのは今でも同じなのか?
これらをGeminiに質問して確認します。
<tta()関数は今でも有効な手法なのか?>
有効だそうです。

その理由が説明してありました。

成程。
今の方法とぶつからないから、使用しても問題にならないんだ。
そしてある程度の効果も保障されているから、使用するのが当然と言う感じなのか。

ただし計算が遅くなる欠点もあるのか。
これには注意しておく必要がありますね。

理解しました。

はい。心得ておきます。
<Sampleの画像のSizeを一定にして学習するのは今でも同じなのか?>
色々なSizeの画像を敢えて統一せずにそのまま学習に使用した方が成果が出そうな気がします。
その辺を聞いてみました。

はい。

画像サイズがバラバラだと、一つの綺麗な行列(テンソル)としてまとめられません。
そうなの?
これGPU、あんまり効率的では無いですね。

グローバル・アベレージ・ポーリング(GAP)ですか。

成程。
やっぱり学習に使用する画像のSizeは統一した方が良いんですね。

つまり、私の予測である
色々なSizeの画像を敢えて統一せずにそのまま学習に使用した方が成果が出そうな気がします。
は間違ってるって事のようです。
理解しました。
3.3 Lesson 6: Practical Deep Learning for Coders 2022 [5]を勉強した感想
これは来週やります。
4. Nvidia Omniverseの勉強
Robotic AIの仮想空間におけるTrainingのための環境設定こそがこれからの3D Graphicsの専門家が生きる場所であると思っています。
のでその仮想空間でRobotic AIがどんなTrainingを行っているかをまず勉強する事にしました。
色々調べると、その部分はNvidiaのOmniverseの中のIsaac Simが担当している事が判明しました。
のでその辺りを勉強します。
2025年9月からIsaac Lab Documentation [6]の勉強に切り替えました。
4.1 前回の復習
Isaac Lab Documentation [6]のEnvironment Design [7]を勉強していました。
もう何を勉強したのか全く覚えていません。
前回のBlogを読んで確認します。
2025-11-03のBlogに載っていた以下の訳がまず貼られていました。

今まで勉強したWalkthrough [8]のTutorialは、Isaac LabのProjectの構造を理解するためのものですが、ここからは実際にJetbotというRobotを使用して強化学習を行うための実装方法を勉強していくって事です。
これ凄い重要な事なんですが、何故か前回の学習時にはこの事に気づいていませんでした。
<Define the Robot>では、Tutorial拡張にRobotsという新しいModuleの追加を行います。
具体的には、
- isaac_lab_tutorial/source/isaac_lab_tutorial/isaac_lab_tutorialに移動し、robotsという新しいFolderを作成する
- このFolder内にpyとjetbot.pyという2つのFileを作成する
と書いてありました。
当然、前回はこれをまとめただけで実際にはやっていません。
これは今週やる事にします。
この後は、Environment Design [7]で紹介されているJetbot.pyの実装の内容の解説がまとめられていました。
次の<Environment Configuration>では、
isaac_lab_tutorial/source/isaac_lab_tutorial/isaac_lab_tutorial/tasks/direct/isaac_lab_tutorial/isaac_lab_tutorial_env_cfg.py
の内容を編集しています。
isaac_lab_tutorial_env_cfg.pyは、前のTutorialであるClasses and Configs [9]で散々勉強しました。
非常に簡単にこのFileの機能を述べると、ここでは、
- Sim(Simulation)
- Scene
- Robot
の3つを指定します。
今回のReinforcement LearningではJetbotを使用するので、Jetbotをここで指定する必要があるはずです。
ところが最初に以下のような値を指定してます。

更に、Sim、Robot、Sceneの設定がそのままになっています。

何故、これで良いのかよく分からないと書いています。
確かにRobotの部分は変える必要がある気がします。それとも最初の<Define the Robot>でやった設定によって既に使用するRobotはJetbotになってるんでしょうか?
更に以下の事を気にしていました。

大体、こんな感じの勉強をしていました。
4.2 Environment Design [7]の<Define the Robot>と<Environment Configuration>を実装する
今週はこれをやります。
<Define the Robot>
isaac_lab_tutorialをどこに作成したのか忘れてしまいました。
調べます。
D:\MyIsaacSim\isaac_lab_tutorial
にありました。
2026-02-15のBlogによると、このProjectを作成するのにIsaaclab.batを起動させる必要があり、Isaaclab.batがあるFolderから作成させた。と書いてありました。
そういう事か。
Isaaclab.batもそうですが、FFmpegも同じFolder内からじゃなくても環境変数を指定すれば使用できるようになるはずです。
これは後で調べる事にします。
isaac_lab_tutorial/source/isaac_lab_tutorial/isaac_lab_tutorialに移動します。
以下のような構成になっていました。

今回はTerminalを使用してFolderを作成してみましょう。
以下のCommandでFolderの場所を移動しました。

D Driveに移動するためのCommandはD:でした。
こういうのはいつも忘れてしまいます。
LsでFolderの中身を確認します。

中身はさっきExplorerで確認したのと同じです。
では、ここにrobotsと言う名前のFolderを作成します。

Explorerから確認します。

出来てますね。
今度は__init__.py と jetbot.pyという2つのFileを作成します。

これもExplorerから確認します。

出来てますね。
ここで疑問なんですが、jetbot.pyの方の実装はTutorialに載っていますが、__init__.pyの方の実装は何を書けば良いのかTutorialにはまったく書いてないんですね。
Blankのままで放置して良いんでしょうか?
Geminiに質問しました。

今の時点ではBlankで問題無いみたいですね。
更に

と解説もしてくれました。
はい。
更に、Jetbot.pyを開いて以下の実装を追加しました。

これで完成ですね。
<Environment Configuration>
今度は、<Environment Configuration>の実装をやります。
こっちはExplorerからVS Codeを開いてやります。
isaac_lab_tutorial/source/isaac_lab_tutorial/isaac_lab_tutorial/tasks/direct/isaac_lab_tutorialに移動しました。

isaac_lab_tutorial_env_cfg.pyがありました。
VS Codeで開きます。
あれ?最初から以下の変数は指定してありました。

あ、でも値が微妙に違いますね。

最初から比較して違いを確認し、直していきます。

となっていますが、

に変更する必要がありますね。
うーん。
これ一個ずつ確認するのは骨が折れますね。
全部消して上書きしてしまいます。

しました。
これで完成です。
<Geminiからの注意点>
Isaac LabのImportのところで波線が出て来るのは以下の理由からだそうです。

これは後でやる事にします。
今週はここまで出来たら十分です。
5. AIの勉強2(日本語字幕AIを作成する)
ここでは日本語字幕用のAppを作成する事と、Claudeの勉強をする事です。
5.1 日本語字幕用のAppを作成する
YouTubeなどを見てると日本語の字幕をつける動画が沢山あります。しかしその字幕の漢字が間違っています。
これは2パターンあって、字幕は合ってるのに、間違った読み方をする場合と、音声はあってるのに字幕の漢字が間違ってる場合です。
見ていて、もしくは聞いていて非常にイライラします。
元のAIに一寸Fine Turningすれば直ぐに直ると思うんですがどうなんですか?
簡単に直せるなら、Projectとして自分でやってみようかなと思っています。
5.1.1 前回の復習
以下の動画の字幕をOpen AI Whisperを使用して作成し

全部の字幕が、実際の声と合っているかを確認しました。
そして

と書いて終わっていました。
更に、先週、英語の字幕をつけれるようにもしました。
FFmpegがあるFolderからしかWhisperを使用する事ができません。それも直します。
5.1.2 FFmpegをどのFolderからも呼び出せるようにする
Geminiに聞いたらやり方を教えてくれました。それにそってやってみます。

今の環境変数を確認します。

次に以下のCommandを行えば良いそうです。

しました。

一端、Terminalを閉じて開き直し、ffmegがどのFolderからも参照出来るのか確認しました。

出来てますね。
5.1.3 Whisperで作成したTest3の字幕をAIに投げてオカシイと思う箇所を直してもらう
Geminiに聞いたら以下の工程でやるのがBestだそうです。

では、まず最初のTxt FileをAIに渡して修正してもらう事から始めましょう。
AIはGemini CLIを使用します。
Prompt.txtを作成してそれをPassしてやってもらう事にします。
GeminiにPrompt.txtを作成してもらいます。

作ってもらいました。
で、Geminiの指示に従って修正したFileを作成しようとしたんですが、Severが混み過ぎて途中でErrorになってしまいました。
GeminiはAI Studioからやったら普通に出来ますよ。と言ってくれたんですが、今回はここまでにします。
5.2 Claudeの勉強
CodeやCoworkを勉強してAgentic AIも専門家になります。特にHarness Engineeringについて熟達する必要性を感じています。
Claudeに学習の順番を教えてと言ったら以下の順番で勉強しろ

というのでこれでしばらく勉強します。
で一寸考えてるんですが、無料で出来る範囲だけ実装して残りは勉強するだけにしても良いかなと思っています。
Claude 101は前回、見たんですが勉強する必要は無いです。
次のAPI Fundamentalsですが、

で勉強する事にしました。
5.2.1 前回の勉強の復習
Building with the Claude APIの最初のLectureであるAccessing the APIを勉強しました。
動画を録画して、それをWhisperで字幕に直して、更にその字幕をNotebookLMに読まして勉強したんですが、今Siteを見たら、動画の内容がPowerPointで説明されてました。

これ読んだら動画の内容を一々NotebookLMで分析しなくても大丈夫そうです。
あれ?勉強しないで終わってます。
前回のBlogではこの部分はHoudiniの勉強でやっていました。
そうか。じゃこれは明日やる事にします。
今日はここまでです。
6. Houdiniの勉強
Houdiniの勉強はしばらくお休みします。そしてClaudeの勉強をします。
6.1 Building with the Claude APIを勉強する
<Getting an API key>
私が勉強したいのは、Claude CodeとClaude Coworkでした。
ただClaudeがこの順番で勉強しろと言うのでClaude APIの勉強を先にやっています。
で、これらの勉強は程ほどにやる事にします。

このLectureはVideoもないし、API Keyを得るための手順を説明してるだけでした。
これ見て何してるのか分からない人はいないと思います。
のでここにはまとめません。
次のLectureを見ます。
<Making a request>
これはVideoがありました。

そしてその下に説明文があります。
こっちから先に勉強します。
<<Set up Your Environment>>

Jupyter notebookでやってます。
はあ。
これはLocalでやるべきなのかな?
とりあえず全部読んでしまいましょう。

.env Fileを作成してそこに前回作成したAPI Keyを記録しておきます。

だそうです。
この辺は常識ですね。
次です。

はい。もう分からなくなった。
これってJupyter Notebookに書いてるcodeなの?
<<The Create Function>>
と思ったらこの節でCreate()関数の説明をしてました。

これ見ると前の節の

が何をしてたのかよく分かります。

は何をしてるのか分かりませんね。
Claudeに聞きます。

だそうです。
理解しました。
<<Understanding Messages>>
ここは以下の

が何をしてるのかを説明しています。

<<Making Your First Request>>
以下の様にUser Messageを書くそうです。

ひええ、面倒くさ。
<<Extracting the Response>>
以下のCodeでAssistant Messageを表示するそうです。

<<Videoも視聴します>>

なんと、VS CodeからJupyter Notebookを起動させてました。
Claudeに確認すると以下の様に回答しました。

そうなの?
じゃこれで勉強しよう。
でも私がJupyter NotebookをInstallしたのはWSL2の方のはずだから、新たにJupyter NotebookをInstallする必要があるかもしれませんね。
と思ったら

だそうです。

そして.env Fileを作成して前回のTutorialで作成したAPI Keyを指定しています。

あれ、このTutorial、作成したAPI Keyをそのまま表示しちゃってます。大丈夫なんでしょうか?
今度はVS Codeに戻ってAPI KeyをLoadしてます。

後は、勉強した内容を単に実装しただけでした。
流石にこれで終わりにするには短すぎます。
最初の節である、Accessing Claude with the APIだけでも以下のLectureがあります。

いやその前にVS CodeからJupyter Notebookを使用出来るようにしましょう。
6.2 VS CodeからJupyter Notebookを使用出来るようにする
まずはJupyter Notebookを何時Installしたのかを調べます。
2025-01-19のBlogでJupyter Notebookを使用してるLectureを記録しています。

この頃は、(base)の表示が、Condaを使用してる事だという事すら分かって無くて、これLinuxじゃないの?とか書いてました。
しかもAIに質問してますが、英語で聞いてます。まだAIが実用化し始めたばかりの時のようです。のでAIに確認する事も出来てないですね。
以下の様に書いてありました。

段々確信に近づいてきました。
ここまで来たら、直接Claudeに聞いてしまいましょう。
Jupyter NotebookがどこにInstallされてるか確認したいです。確認するCommandを教えてください。と質問しました。

ここにあるそうです。
そしてClaudeの説明に従って、

VS CodeからJupyter Notebookを起動させる事に成功しました。
細かい手順は、
Claude API チュートリアルの実行環境について
に書いてあるのでここには書きません。
6.3 Claudeの勉強方針について
これは毎日一個ずつ勉強する事にします。
そしてここの記録には、何を勉強したのかを三行ぐらいで記入する事にします。
そしてHoudiniの勉強はもう完全に中止する事にします。
7. Nvidia Omniverseの勉強2(強化学習の勉強)
Nvidia Omniverseの勉強で、Isaac Lab Documentation [6]の勉強をしていますが、
これってIsaac Labの使用方法の勉強が主で、
Robotが自動歩行するためにどんな強化学習をしなければならないのかは別に勉強しないといけないのではないのか?
との疑問が出て来ました。
で先週は強化学習の教科書について調査しました。
でその教科書を勉強するための時間をここに作りました。
7.1 前回の復習
Nvidia GTCに登録しました。
そうだ、この登録した動画でまだ見てないのを今日は見る事にします。
7.2 An Introduction to Robot Simulationが見れない

一番、見たかった動画が見れません。
7.3 How to Build End to End Physical AI System for Humanoid Robotsを見る

日本語訳です。

では動画を見てみます。
付属のPDFも一緒に見ていきます。
1時間半もある動画なんで最後に感想を一寸だけ書いて終わりにしようと思ったんですが、凄い気になる事を述べていたのでそれだけは今記録しておきます。

3D Gaussian Splatを使用して3Dの仮想空間(Digital Twin?)を作成しその中でRobotをTrainingしています。
Isaac Lab3.0の特長としてPhysics Engineなどを切り替えて使用できる仕組みになった事を説明していました。

学習が完成した後に、すぐにSim to Realに取り掛かるのではなく、そのPolicyを評価するStepを挟むようにしたそうです。

一時間、講演して残りは質問回答でした。
うーん。
まあ、今のAI Robotが何をやってるのかを知るには良いかもしれないって感じです。
最後にRobotにリンゴを取りに行かせるデモを見せてましたけど、これって世界最先端の研究所がやるべき研究なんかな。って感じました。
絶対失敗するでしょうこんなの。
今、AI Robotで実用化してるのは小脳の部分だけです。何でいきなり大脳が作れると思ったんでしょうか?
LLMとAI Robotの小脳を組み合わせたら、今すぐ大脳の機能を持ったRobotが完成出来るって中学生Levelの発想ですよ。
勿論SFとしてそれを思考するのは良い事ですよ。
でも、実際に研究としてやるなら、そこに誰が聞いても凄いって感じる成功するLogicが無いと。
私はこの試みは失敗すると思いますね。
そして成功するのは、その中間。
つまり、仮想空間にいるRobotを、LLMを通して操作する事。
これをたっぷりやって、完璧に出来る様になって、現実空間における大脳の機能を持つAI Robotの実用化が出来ると考えています。
これ重要なIdeaなので、後で別途まとめる事にします。
今週のNvidia Omniverseの勉強2(強化学習の勉強)はこれで終わりです。
8. DirectX12の勉強
3D Graphicsを作成するのにOpenGLを使ってるとバカにされるからDirectX12の使い方も勉強しようとしたら、Windows 8ではDirectX12が使用出来なくてずっと勉強を我慢していました。
で新しいPCを買ってやっとDirectX12を勉強できる環境になったら、もうDirectX12を勉強する人がいなくなっちゃってたんです。
のでこれも出来たら何したいというのは無いですね。
ああ、昔MMDを自分で作りたいというのはありました。それを目的にします。
8.1 「DirectX 12の魔導書」を勉強する
8.1.1 前回の復習
前回のBlogを読んだら「6.1.2 Mapによる定数のCopy」を勉強していました。
何を勉強したのかは覚えていません。
Blogを読んで復習します。
まず、前に作成した以下の実装があります。

これはCreateCommittedResource()関数を使用して、GPU内に指定したBufferを確保しています。
それに以下のMap()関数を使用して

そのGPUのMemoryをCPUからAccess出来るようにAddressを作成します。(ここではmapMatrixがそのAddressを保持しています。)
最後にそのAddressにMatrixの値を指定します。
前回の勉強ではこのMap()関数の機能をかなりしっかり復習しました。
その内容も以下に記しておきます。

後、一か所、ByteがBitsになっていました。

これ間違っていますね。
BitsじゃなくてByteです。Bitsはビット、Byteはバイトです。
これ勘違いしてました。
8.1.2「6.2.3 定数Buffer View(CBV)」を勉強する
「6.1.2 Mapによる定数のCopy」のCodeは前回、既に実装していたので、今週から「6.2.3 定数Buffer View(CBV)」の勉強を開始します。
この節は長いので、何回かに分けて勉強します。
教科書によると、前章で、TextureをShaderから見えるようにするために以下の事をやったそうです。
- Descriptor Heapを作成
- その中にViewを定義し
- Slotの割り当てをRoot Signatureで定義
覚えてません。
教科書によると定数BufferをShaderから見える様にするためには、これと同じ事をする必要があるそうです。
Geminiに聞いて確認してみましょう。

そうか。非常に正確な記述なのか。
もう少し詳しく説明してもらおう。

まず3番目のStepでは何をやってるのかを説明してもらいました。
この説明には
思い出せないという3番目のステップは、簡単に言うと**「シェーダー側のレジスタ(t0など)と、メモリ上のデータの対応表(署名)を作る」**作業です。
とありますが、
この「メモリ上のデータ」はGPU上のMemoryを指してるんですか?
Geminiに聞いてみます。

その通りでした。
すると
既にGPUのMemoryにDataがあるのに、更にシェーダー側のレジスタ(t0など)との対応表を作成する必要がある事になります。
この理由が知りたいです。
Shaderは別にCompileして実行するからなんでしょうか?

GPUは描画中にTextureは何処にあるのかと探してる暇がないので、先にTextureなどの住所を渡しておく必要がある
んだそうです。
成程。
やっと理解しました。
もう一回、この3つのStepのそれぞれの役割をまとめると以下の様になります。

また三番目のStepの話になりますが、
「棚の〇番目にある付箋は、シェーダーの t0 スロットに送る」というルールを決めます。
って、Semanticの事じゃない?
Geminiに確認してみます。

全く違うものでした。
Root Signatureが担当するの通り道は以下の様になってるそうです。

Semanticが担当する通り道は以下の様になってるそうです。

こっちは頂点Bufferから頂点Shaderに一頂点毎の要素を渡すのに使用するそうです。
更に両者を比較すると

となってるそうです。

すると覚えてないけど前章でTextureをCPUからGPU側に送った時に両方やってるはずです。
この後、更に深堀してGeminiに聞いてたら、Geminiの回答がおかしくなってしまいました。
そうだ。
DirectXは、Microsoftが開発したものだから、Copilotに聞いてみようと、以下の質問を聞いてみました。

Copilotの回答だと以下の様になりました。

つまり、頂点BufferをShader側に送ると場合、Input AssemblerからVertex Shaderに送るから、他のDataとは通り道が違う。
って言ってます。

だそうです。
頂点BufferをShader側に送ると場合、Input AssemblerからVertex Shaderに送るから、他のDataとは通り道が違う。
これをGeminiでも同じように言うか確認します。

別Rootを通るの!
更に詳しく説明してもらいました。

はい。
理解しました。
つまり頂点BufferだけがCPUからGPUにDataを送る時のやり方が、違うって事です。
今はこれだけ覚えておけば十分です。
一個勉強になりました。
では、元に戻って
- Descriptor Heapを作成
- その中にViewを定義し
- Slotの割り当てをRoot Signatureで定義
の続きをやって行きましょう。
8.1.3「6.2.3 定数Buffer View(CBV)」の<Descriptor Heapを書き換える>を勉強する
Descriptor Heapは既にTextureのDataをGPUに送るときに作成しています。ので今回は新たに作成しないでそれを再利用するそうです。
教科書では、Texture用のDescriptor Heapがこのような実装になってるからそれを探せ。と書いてありました。
探します。
ありました。

一字一句、教科書の実装と同じです。
更にSample Codeの方を見たら

教科書が買い換えた後のCodeと一字一句同じになっていました。
ではこれを書き換えます。
まずTexDescHeapをBasicDescHeapに書き換えます。
そしてTexDescHeapを使用してる他の実装を全部、BasicDescHeapに書き換えます。
最後に、NumDescriptorsの値を2に変更します。

出来ました。
8.1.4 GitHubのRepositoryにPushする
今日は、これ以上Codeを編集する事は無いはずです。Repositoryに変更した分をPushしてしまいましょう。
GitHub Desktopを開き、Commentを書き、Commitし、その後Pushをしました。
Browserから確認します。

変更されてました。
あれ、前にPrivateに変更したはずのRepositoryがPublicのままになってます。

こっちを直すか。
と思ったらこれらは一個を除いてPrivateに変更出来ないRepositoryでした。どっかから引っ張て来たRepositoryはPrivateに変更出来ないからほっておいたんでした。
ほっときます。
8.1.5 「6.2.3 定数Buffer View(CBV)」の<定数Buffer Viewの生成>を勉強する
一寸だけ、次の節も勉強します。
その前にViewの復習をします。
今までの会話で、GeminiはView(Descriptor)に関して以下の説明をしています。

Descriptor Heapを棚と呼んでるのでその棚に付箋をつけて、その棚にある書類の解説をしてるという事です。

更に詳しく、その付箋には、そのデータの「先頭住所」や「サイズ」、「画像フォーマット」などが書きこまれている。と書いてあります。
では、この理解を元に<定数Buffer Viewの生成>を読んでみます。
教科書に、前にShader用のViewを作成した時の実装がある。と書いてありました。
ありました。

CreateShaderResourceView()関数を使用して作成してました。
それに対して定数BufferのViewはCreateConstantBufferView()関数を使用して作成します。

CreateConstantBufferView()関数はParameterが2つあり、
最初のParameterである
D3D12_CONSTANT_BUFFER_VIEW_DESC* pDesc
は、

となっています。
BufferLocationの値は、GetGPUVirtualAddress()関数を使用すれば取得出来るそうです。
Copilotでは以下のCodeを示していました。

教科書では、ID3D12Resource*にはconstBuffと名付けているので。

constantBufferでなく、constBuffになるはずです。
次のSizeInBytesは

で計算しろ。とCopilotは書いてました。
それに対して教科書では、
GetDesc().Width
で取得すれば良い。と書いて終わっています。
この部分は一寸深堀しようかな。
Copilotにこの違いを聞いたら、GetDesc().Widthでは

と返答して来ました。
つまり256バイトアラインを保証した値をここには入力する必要があるって事です。
そこで教科書はその部分は既に指定してる事を説明したら

となりました。

これで、CreateConstantBufferView()関数の最初のParameterは作成出来ます。
ところが、教科書の説明によるとこの最初のParameterの作成は簡単で、次のParameterの作成が大変らしいです。
ここで、時間が無くなってしまいました。
この続きは来週やる事にします。
8.2 Lötwig Fusel氏のD3D12 Beginners Tutorial [D3D12Ez]を勉強する
8.2.1 前回の復習
前回のBlogを見るとWriting Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [10]の続きを実装していました。
Shader.hに以下のinlineのGetterを追加したところで終わっていました。

今週はこの続きを勉強します。
8.2.2 Writing Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [10]の続きを勉強する
以下の場所にBreak Pointをつけて

以下の2つの変数に値が保持されている事を確認しています。

これは自分で試せるのか?
gfxPsod{}は、一応Main.cppにあるのかな。
Shaderは以下の様に整理していました。

絶対こっちの方が見やすいです。
更に以下の2つの実装を追加しました。

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

赤で囲った四角の中の実装の右辺は、VertexShaderじゃなくてPixelShaderだと思うんですが、この時点では直してないですね。
ここでLectureは終わっていました。
Lectureの残りはこのLectureで何を勉強したのかをまとめていました。
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] Full-Body IK. (n.d.). Unreal Engine. https://dev.epicgames.com/documentation/en-us/unreal-engine/control-rig-full-body-ik-in-unreal-engine
[4] Howard, J. (Instructor). (n.d.). Practical Deep Learning for Coders [Video playlist]. YouTube. https://www.youtube.com/playlist?list=PLfYUBJiXbdtSvpQjSnJJ_PmDQB_VyT5iU
[5] Howard, J. (2022, July 21). Lesson 5: Practical Deep Learning for Coders 2022 [Video]. YouTube. https://www.youtube.com/watch?v=_rXzeWq4C6w
[6] Nvidia. (n.d.). Isaac Lab Documentation. Retrieved from https://isaac-sim.github.io/IsaacLab/main/index.html
[7] Nvidia. (2026, March 4). Environment Design Background. In Isaac Lab Documentation. Retrieved from https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/concepts_env_design.html
[8] NVIDIA. (2026, February 14). Walkthrough. Isaac Lab Documentation. https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/index.html
[9] Nvidia. (2026, March 4). Classes and Configs. In Isaac Lab Documentation. Retrieved from https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/api_env_design.html
[10] Lötwig Fusel. (2023, August 6). Writing Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [Video]. YouTube. https://www.youtube.com/watch?v=8MMRz9QMJI8