UE4の勉強記録

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

UE5の勉強などなど

2026-02-01のBlogの「AIについての調査(ComfyUIの勉強)」で議論した通り、勉強内容を変更する事にします。

勉強の内容や目的はそれぞれの章にまとめる事にします。

1.今週の予定

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

  • 映像作成用UE5の勉強
  • AIの勉強
  • Nvidia Omniverseの勉強
  • AIの勉強2(日本語字幕AIを作成する)
  • Claudeの勉強
  • Nvidia Omniverseの勉強2(強化学習の勉強)
  • DirectX12の勉強

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

2. 映像作成用UE5の勉強

UE5の勉強で、Gameではなく、CGIを作成するために必要な勉強をここでします。

今、Mainで勉強してるのは、

  • PCGを使用した建物の作成
  • Control Rigの勉強

の2つです。

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

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

最終的にはUEFNのMap内で神社を作成して、 誰でも参拝出来るようにするつもりです。

2.1.1 前回の復習

PCGにおけるLoopの実装を全部、確認しました。

確認した全てのLoopは、以下に示したPCG Point Dataを要素にしてLoopしていました。

C++で言う所の、

for (int i = 0;  i< PCG_Point_Data.size(); ++i)

と同じです。

だだしFloor/CeilingにあるLoopで以下の実装がありました。

ここのAttribute PartitionノードはMeshが選択されています。

Meshを選択しても意味が無い気がします。

先週のBlogでも

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

2.1.2 Floor/CeilingにあるLoopでMeshを選択してるAttribute Partitionノードの実装が正しいのかを確認する

今週はこれをやる事にします。

まずこの実装をどこでやったのかが分かりません。

Floor/Ceilingで検索を掛けると以下のBlogの日付が出て来ました。

最初の5月3日のBlogは先週のBlogなので無視して次のBlogから見ていきます。

2025-06-08のBlog

これはRoofの実装をしています。

そしてRoofの以下の部分の実装で、Floor/CeilingにあるあのLoopの実装をそのままCopyして使用していました。

今、Roofは表示してないので、この部分の実装はPathが外れていますが、ここでは繋げても別にWarningは表示されません。

 Isolate Corners With PCG To Create Pillars and Roofs | UE 5.4 P3 [1]の<16:00 - Override Floor Material>でこの実装をしていました。

この動画を見て確認します。

Roofの実装で、Floor/Ceilingにある以下の実装をCopyしていました。

うーん。

これを見るとAttribute Partitionノードの値はMeshになっていますね。

つまりMeshで合ってるって事です。

しかしこの実装でWarningが出てるんだから、問題があるのは確かです。それがAttribute PartitionノードがMeshに設定されているからでは無いという事だけは分かった。

というのが正確なもの良いです。

段々思い出してきました。

ここは、一回実装した後に更に後で直したんです。

となると以下のPCG Close Open Back Floorsノードの実装をどこでしたのかを探した方が

この実装をやったBlogを見つける事が出来るでしょう。

今度はそれで探します。

見つけました。

PCG Close Open Back Floorsノードは、2025-03-23のBlogで勉強して2025-04-06のBlogで実装しています。

それぞれのBlogを読んでみます。

2025-03-23のBlog

Here's How to Adjust Your Building Based on the Asset Size | UE 5.4 P2 [2]の<21:14 - Floor / Ceiling from Data Assets>で勉強してるみたいです。

PCG_Close_Open_Back_Floorsノードと書いていました。

更に

と書いていました。

という事は、このNodeは裏側が無いMeshを表側を2重で向きを変えて表示する事で、どちらから見ても床のMeshが見るようようなMeshを生成するためのNodeです。

ここで変更したのは基本的には以下のScale MinとScale Maxの値をY軸からZ軸に変更しただけです。

ううん。

時間切れです。

今週はここまです。

来週、2025-03-23のBlog2025-04-06のBlogを更に読み込んで、何をやってるのかを調べる事にします。

2.1.3 AIで生成したTextureを使用してMaterialを作成してみる

唐突に思いついたんですが、結構出来そうです。

これを試してみます。

そもそもですが、思いつきでGeminiに以下のような

コンクリートのTextureを生成してもらったらかなり良い感じだったんです。

そこで、Seamlessのも作成してもらいました。

本当にこれがSeamlessなのかは分かりませんが、最も質の高いTextureと比較しても遜色ない感じがします。

更にNormal Mapも作成してもらいました。

これY軸がどっち向きか分かりません。

Geminiに確認したら

UE5 (DirectX形式)はY- (Negative)で、Blender (OpenGL形式)はY+ (Positive)となってるそうです。

肝心のこれはどっちか分からないので反対だった場合は

で修正して、と回答していました。

これをもっとしっかり作成して実際に使用したらどうなるかを確認します。

まずMaterial用のTextureは以下のように作成されていました。

ARDだけが何を指定してるのか不明です。

Ambient Occlusion、Roughness、そしてDisplacementでしょうか?

そうでした。

実際にARDを開くとRoughnessしか指定していませんでした。

TextureのSizeは

4096 pixel x 4096 pixelのようです。

ではGeminiに生成してもらいます。

まずSeamlessなコンクリのImageを作成します。

サイズは4096x4096で作成します。

おお、良い感じですね。

Propertyで確認したら

1024 x 1024 Pixelになってる。4Kが欲しいのに。

これは無料版だからかもしれませんね。

だったら先にそう言ってほしいです。

今度はARD用のImageを生成します。

以下の様に指示しました。

結果です。

緑色してるって事は指示通り出来たって事でしょう。詳細はUE5で確認します。

最後のNormal Mapです。

以下の指示をしました。

結果です。

これもこのImageを見ただけでは出来てるか分かりません。

これらのImageをUE5にMigrateして確認します。

以下のFolderを作成してこの中でテストします。

Importしました。

Importしましたが正しくImport出来てるか確認します。

まずAlbetoです。

あ、正しいSpellはAlbedoでした。

直します。

Compression Settingはあってますね。

次はARDです。

あってますね。

しかしRとBにもしっかりImageが入っていました。

RのImageです。

BのImageです。

そしてBのImageは以下の様になっていました。

うーん。

これだけ見ただけでは何とも言えません。

Normal Mapです。

おお、しっかりUE5でもNormal Mapとして認識されていました。

ではこのTextureを使用してMaterialを作成してみます。

以下のMaterial Instanceを作成しました。

ここに実装します。

結果です。

ああ、AIで生成した事を示す星印が!

Meshに貼り付けたらこんな感じです。

ほええ。

凄いのか駄目なのかよく分からないです。

参道の石道に使用してみました。

全然駄目じゃん。

微調整したら変わるかもしれません。

Tilingの原因が分かりました。

Roughnessの値が強すぎます。

これもAIが勘違いした結果Rの値だけ異常に高くしたと思われます。

設定を以下の様に変更してRoughnessの影響を小さくしました。

結果です。

今度は床がなんかテカテカしてます。

Textureが何も表示されていません。

Offsetの値を変更したら

一寸だけ何か表示されました。

これでは、Albedoを使用してる意味がありません。

調べたらAlbedoのTextureが効いていません。

これはAIの作成したTextureの問題じゃなくてMaterial Instanceの方の問題です。

何故、効かないのか不明です。

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

続きは来週以降やります。

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 [3]の<26:29 - Select Random Doors in Rooms and Assign Mesh>を実装しました。

以下に示した様なDifferenceノードを使用した実装を行う事で

以下の様に壁と重なった部分のPointを消しました。

Differenceノードには以下の2つのParameterがありますが、

GeminiによるこのParameterの機能は、

間違っている気がします。

ので実験して確かめようとしたんですが、

PointのDensityの値を変化させるために

を使用すると、

今まで以下のようなPointの配置だったのが

以下の様になってしまいました。

このせいで実験を途中で中止するはめになり、

結果、Differenceノードの2つのParameterの機能はよく分からないで終わってしまいました。

2.2.2 Create Procedural Interiors With Full Room Separation | UE 5.4 P5 [3]の<26:29 - Select Random Doors in Rooms and Assign Mesh>の実装の続きをやる

まだ勉強した分の実装が終わって無いのでそれを終わらせます。

2026-04-12のBlogに勉強内容がまとめられていました。

この勉強内容を実装していきます。

壁際のInner Wallを示すPointも消えているのでこれを追加します。

先程のExterior Wallsノードの後にExtents Modifierノードを追加して

ExtentsのXの値を0.2に変更します。

更にModeをMultiplyに変更します。

結果です。

壁際にPointが追加されました。

出来ましたね。

それは兎も角、一か所Pointが重なってるところがあります。

これはどうするんでしょうか?

ここからDoorを追加します。

一部屋に最低一個のDoorが必要になります。そのための実装方法をここで説明するそうです。

まずPCG_WallDoorSplitを作成します。

作成しました。

以下の様にLoopで配置して

PCG Wall Door Splitノードを開きます。

InputノードのInputの設定を以下の様に変更しました。

Outputノードの設定を以下の様に変更しました。

そしてAttribute Noiseノードを追加します。

おおAttribute Noiseノードだ。

その後に、Sort Attributesノードも追加しました。

Sort AttributesノードのParameterは以下の様に変更しました。

Attribute Filterノードを追加しました。

Attribute Filterノードは以下のように設定を変更しました。

そして以下の様にもう一個、Attribute Noiseノードを追加します。

ここで、2026-04-12のBlogでは以下のような実装に変更してるんですが、

このBlogを読む限り、変更してるのは、Output Targetの値とNoise MinとNoise Maxだけです。

Input Sourceは変更していません。

つまりDuplicateする前から、Input Sourceの値は$Densityに変更されているという事です。

しかし私のAttribute NoiseノードのInput Sourceの値は

Defaultの@Lastのままです。

うーん。

動画を見て確認します。

29分38秒当たりでこの部分を実装していました。

この部分のAttribute NoiseですがDuplicateして作成しています。

そしてこのAttribute Noiseノードの設定を見ると

最初から$Densityになっています。

しかし以下の様にも述べています。

このNodeは前のNodeとは違い$Densityを受け取ります。

としっかり口では述べてるんです。

どっちかが間違っています。

取りあえずは、こっちのNodeだけInput Sourceの値を$Densityに変更して、結果を見る事にします。

更に、Noise MinとNoise Maxの値を

に変更しました。

2026-04-12のBlogには以下の様に書いてありました。

うーん。

これは、ここで生成されたNoiseの値からDoorの数を決めるという意味からもしれません。つまりどんなに多くても2、更にどんなに少なくても1はDoorが生成されるという事です。

そしてこの後にGet Attribute From Point Indexノードを追加しました。

ここで2026-04-12のBlogCreate Procedural Interiors With Full Room Separation | UE 5.4 P5 [3]の勉強は終わっていました。

のでこの実装もここで終わりにします。

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 [4]を勉強する必要がある事が判明しました。

のでControl Rig [4]を勉強する事にしました。

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

先週は Getting Started with Control Rig in Unreal Engine 5 – Basic IK Explained [5]のやり方(Pole Vectorの設定方法)に従ってBasic IKを実際に実装してみました。

正し実装したのは、腕の部分です。

Pole Vectorは以下の様に設定しました。

このTutorialのやり方では、Lower ArmのControlの位置をPole Vectorの位置として使用しています。

この方法だとLower ArmのControlの位置は全く動きません。

ので、あまり綺麗な結果にならないかと思っていましたが、実際に試したら肘は、かなり自然な位置に配置されるようになりました。

そして今週以降やる事に以下の3つをまとめていました。

今週はこれをやっていきます。

2.3.2 普通のControlの実装と組み合わせた場合どうなるのかを調べる

これは2つの場合があると思います。一つ目はHandの先のBoneと繋がったControlです。

これはもろにBasic IKの影響を受けるはずです。

二つ目はUpper ArmのBoneのさらに上にあるBoneと繋がったControlです。

これは全く影響受けないと思うんですがどうでしょうか?

<Upper ArmのBoneのさらに上にあるBoneと繋がったControl>

影響を受けないで有ると思われるこっちから試していきます。

以下の様に鎖骨のControlを作成しました。

以下の様に実装しました。

鎖骨のControlを動かすと肩が動きます。

この後に、先週作成したBasic IKを実装しました。

これでどうなるか試してみます。

鎖骨のControlを動かして、その後でHandのIKを移動させてみました。

肩が持ち上がった状態で腕を上げています。

非常にSmoothです。

なんか普通に出来ました。

次は指の位置を指定します。

Geminiによると以下の様に指定しろと言っています。

これを参考にして実装する事にします。

指のControlを指定する前に、一つ重要な事に気が付きました。

今までIK Controlで移動させると手は以下の様に捻じれてしまっていたんですが、

これは、指のControlを指定してないからこうなっていたのではなくて、

手のIK ControlのRotationを変更するだけで、

以下の様に直せます。

ではそれを踏まえて指のFKのControlを追加します。

以下の様にMiddle FingerのControlを作成し、

Hand Controlの子にしました。

こんな感じになっています。

Basic IKの後に、このMiddle FingerのControlのFKを設定します。

テストします。

普通に動きました。

うーん。

普通に出来ましたね。

この後、色々、Geminiに質問してこのようなBasic IKとFKの実装を混合した場合のBackward Solveの実装方法について聞いたんですが、要領を得た回答を得る事は出来ませんでした。

ので、Backward Solvingは今までのFKで実装してみます。

これで手だけですが、実際にLevel SequenceでIK Controlを使用して動きを変更できるのかTest出来ます。

来週は、これをやる事にします。

今週のControl Rigの勉強はここまでです。

3. AIの勉強

AIの勉強の目的ですが、

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

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

ここではPractical Deep Learning for Coders 2022 [6]の勉強をしています。Antigravityを使用したVibe Codingの勉強はしばらくお休みします。

3.1 前回の復習

Lesson 7: Practical Deep Learning for Coders 2022 [6]の勉強の続きをしています。

<22:55 - Ensembling>まで勉強しました。

先週の勉強の途中で、今まで無いと思われていた

https://www.kaggle.com/jhoward/code

にある事が判明しました。

3.2 Lesson 7: Practical Deep Learning for Coders 2022 [6]の続きを勉強する

Road to the Topは別に勉強する事にしました。

今週は、Lesson 7: Practical Deep Learning for Coders 2022 [6]をどんどん勉強する事にします。

<37:51 - Multi-target models>

またNotebookLMに要約してもらいます。

複数の異なる項目を同時に予測するModelの構築方法を勉強するのか。

成程、一つの画像から複数の予測をするのがMulti-Targetなのか。

納得。

Data Blockを作成してそれを元にAIとやり取りするのね。

これはLoss Functionを個別で計算するだけでなく、全部や種類毎にまとめて全体の損失も計算するって事でしょうか?

更に評価指標も同様にやるのか。これをやるMeritが何かあるんでしょうか?

これがLoss Functionを全部や種類毎にまとめて計算するMeritって事ですね。

Multi-Target Modelの方が予測の精度が上がるってのが最も大きな理由のようです。

Tutorialの動画も見ます。

Multi-target: Road to the Top, Part 4 [8]の内容を紹介していました。

以下の様に10の病気と10の品種の中から最も確率が高いものを表示しています。

細かい実装についても説明していますが、それはMulti-target: Road to the Top, Part 4 [8]を勉強する時にやります。

Multi-Target Modelが今でも有効なのかを確認するためにGeminiに以下の質問をしました。

回答です。

これは流石に駄目でしょう。

どうしてLesson 7: Practical Deep Learning for Coders 2022 [6]のURLを渡してるのに、筑波大学の教授のTutorialだと解釈するんですか?

最近、Geminiはかなり馬鹿になっています。

ChatGPTに同じ質問をしました。

だそうです。

そして

YouTubeの動画を見ることが出来ないChatGPTなのに、しっかりとJemery HowardのTutorialで有る事も認識していました。

ChatGPTの結論は以下の様になっていました。

<41:24 - What does `F.cross_entropy` do>

ここはF.cross_entropyの解説をしてるようです。

F.cross_entropyには2つ関数があるみたいですね。

Log calculationとNegative Sumか。

よく知らない概念ですね。

今回はこんなのもあるよ。位の理解に留めておきます。

Multi-Target Model の場合は、Loss Functionを手動で計算する必要があるのか。

F.cross_entropyは

そのModelの予測がどれだけ間違っているのかを数値化する関数

これだけ覚えておきます。

動画を見ます。

Excelを使って実際の計算方法を示していました。

これ見たら一発でどんな計算をするのか理解出来ました。

F.cross_entropyの2つ関数の説明とか全くしてなかったです。

<45:43 - When do you use softmax and when not to?>

そして以下の様にSoftmaxを使用する時と使用すべきでない時を分けています。

正解が複数あったり、正解が無い問題には不向きなのね。

動画を見ます。

ヒグマ、テディベア、そしてクロクマを選択するModelに猫を見せた場合を説明していました。

<46:15 - Cross_entropy loss>

Cross Entropy Lossについて勉強するのか。

先に結論を示しておきます。

Cross Entropy LossとはModelの予測が正解からどれだけ離れているのかを対数を用いて数値化する仕組みです。

Deep Learningの勉強では、最初と最後のLayer、そしてこのLoss Functionの仕組みを理解する事が重要、特に実務において重要なのか。
理解しました。

更に以下の事を説明しています。

またPyTorchの話が出てます。

これ本当に動画で説明するんですかね。

では動画を見ます。

Cross Entropy Lossの計算方法をExcelで説明していました。

結構分かり易いです。

F(x) = log(x)は以下の様になっています。

100%に近づくほど、値は0に近くなります。

これで、先程のヒグマ、テディベア、そしてクロクマを選択するModelに猫を見せた場合は、非常に大きなNegativeな値として返ってくることになります。

<49:53 - How to calculate binary-cross-entropy>

これ前の節の動画でもう見てしまいました。

計算方法は既に理解してます。

この計算も先程のCross_entropy lossと同じ効果しかないじゃん。

敢えてこっちを計算するMeritが知りたかったんですが。それは教えてないって事?

NotebookLMに質問すると

と回答しました。

いや、それはSoftmaxと比較した場合で、Cross_entropy lossだってここに書かれている事出来ると思うんですけど。

一応、Yes、Noの回答をする場合は、binary-cross-entropyを使用すると理解しておきます。

動画を見ます。

今回はPyTorchの関数がしっかり出て来ました。

集中力がここで切れました。

今週はここまでにしておきます。

4. Nvidia Omniverseの勉強

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

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

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

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

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

4.1 前回の復習

 Training the Jetbot: Ground Truth [10]の復習の続きをやっていました。

2025-11-30のBlog>の内容を復習していました。

ここで一番、難しくて大切なTensorを使用した環境の設定方法はまだ出て来ませんでした。

2025-12-14のBlog>の勉強を少しやったら

後半で行列の定義を散々説明していました。

ここで、GPUの行列のまとめ方を勉強しています。

のでこれはしっかり勉強する必要があると感じ、来週、つまり今週勉強する事にしました。

4.2 Training the Jetbot: Ground Truth [10]の復習の続きをやる

では、2025-12-14のBlogの内容を復習していきます。

だそうです。

そして以下の図が紹介されています。

2025-12-14のBlogには、

この図が何を説明してるのか見当もつかないけど、分かる所もある。

と言って

分かるところを説明しています。

以下に、2025-12-14のBlogで分かっていたところをまとめます。

  • WはWorld Coordinateの原点
  • BはRobotのLocal Coordinate
  • Forwardと書かれた青い矢印はRobotの進む方向
  • Commandと書かれた赤い矢印はAIがRobotに進ませたい方向

やや曖昧ですが大体こんな意味だと思う箇所

  • YawはWorld CoordinateのX軸を0としてCounterclockwiseに回転する。と定義してる事を示してるだけのような気がします
  • data.root_pos_w:World CoordinateにおけるRobotの座標を計算する関数ではないか?

最後に全然意味が分からない箇所

  • data.root_com_vel_v[:,:,3]
  • forward x commandとz^・(forward x command)

となっていました。

まったく分からないと書いてあるところから調べ直します。

robot.data.root_com_vel_v[:,:,3]について調べます。

最近はGeminiのおバカになってしまったのでClaudeに質問する事にしました。

robot.data.root_com_vel_v[:,:,3]じゃなくて

robot.data.root_com_vel_w[:, :3]でした。

以下の意味があるそうです。

これで理解出来ました。

robot.data.root_com_vel_w[:, :3]は

全ての環境のRobotの重心のWorld frameにおける速度を、取り出せ

と言う意味になります。

さらに

[:, :3]

の意味ですが、

これは元々、

Start:Stop

と言う意味だそうです。

そして最初、つまりIndexが0、と最後の場合は指定を省略出来るそうです。

つまり、最初から最後まで全部、取って来て。

という命令を出したい場合は

だけで良くなります。

そして

最初からIndexの三番目まで取って来て

と言う場合は、図のように

:3

と書く事も出来ます。

次に

forward x command

についてです。

これはそもそも間違っていて本当は

forward ・ command

です。ForwardとCommandの内積を計算しています。

しかもご丁寧にForwardsとして全ての環境のRobotのForwardの値を計算してる事も示唆しています。

forward ・ command

を計算すると何が分かるのかという事ですが、

まず内積を計算する事で

が得られます。

そしてその値は

の意味があります。

つまり

が分かるんです。

そしてその値は、

のようにそのままRewardの値として使用出来ます。

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

これが

の意味なのか。

確かに赤い矢印(Command)と同じ向きから90度まで変化したところまで青くなっていました。

今度は

z^・(forward x command)

についてです。

これもClaudeに質問します。

凄い。

一瞬で答えてくれました。

まず、この式の目的ですが、

「ロボットがどちらに回転すべきか」

を示してくれます。

まず以下の計算です。

これは説明してもらえれば理解出来ます。

そしてこの計算結果は以下の意味も持ちます。

これが大事なんだそうです。

これも以下の図が結果を表していました。

青がプラス、赤がマイナスを指しています。

この図のForwardは青の部分にあるので、計算結果はPlusになり、反時計回りに回転する必要があります。

凄い。

今まで分からなかった部分が全部理解出来ました。

Claude恐るべしです。

この続きを2025-12-14のBlogで読むと

単に第2象限の結果と題4象限の結果が同じになるので、これを考慮しないとCommandの矢印が逆を向いてします場合の話に移っています。

つまりそれ以上の内容はこの図から読み取る必要は無かったんです。

この図はどっかの論文から持ってきてそのまま載せたんでしょう。

この続きは、来週にしますか。

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

5. AIの勉強2(日本語字幕AIを作成する)

YouTubeなどを見てると日本語の字幕をつける動画が沢山あります。しかしその字幕の漢字が間違っています。

これは2パターンあって、字幕は合ってるのに、間違った読み方をする場合と、音声はあってるのに字幕の漢字が間違ってる場合です。

見ていて、もしくは聞いていて非常にイライラします。

元のAIに一寸Fine Turningすれば直ぐに直ると思うんですがどうなんですか?

簡単に直せるなら、Projectとして自分でやってみようかなと思っています。

(この勉強は2週間に一回だけ行います。)

5.1 前回の復習

とうとうGemini CLIを使用して、文字化けしたFileを読めるようにしました。

PointはGeminiと打ってTerminalから上記のGemini CLIを別に起動させる事でした。

これをすると今までは、ErrorになっていたCommandもそのまま実行できるようになりました。

5.2 生成されたFileを読んでみる

まだ生成されたFileを確認していません。

今週は生成されたFileを確認します。

修正された文章の下に、主要な修正箇所がありました。

英語から英語に直してるのは、どこが間違っていたんでしょうね。

同じに見えます。

おお、凄い。

こういうのを直してほしかったんです。

文章も見てみます。

あ、そうかTextの修正を頼んだので、字幕の時間が表示されてないんだ。

では手動で比較します。

2026-03-01のBlogで間違った字幕をかなり抜き出しているので、それと比較してどう変化したのかを一寸だけ確認します。

痛烈が通列になっています。

修正した文章です。

おお、直っています。

この部分は訳が意味をなしてないから全部カットしたと書いてありました。

うーん。

惜しい。新田株式会社がアタラ合同会社になっています。

漢字は直ってるみたいです。

これは完璧に直していました。

これは読みにくい。

やっぱり全部一回やり直します。

5.3 来週以降の予定

まずTest3.tsvの字幕を直します。

今回はTextを直したんですが、これは字幕として動画に貼れないので、同時に比較する事は出来ません。

それをVideoに張り付けて、前の字幕と比較します。

次回からこれをやります。

6. Claudeの勉強

Houdiniの勉強はしばらくお休みします。そしてClaudeの勉強をします。

以下の順番で勉強しろとClaudeに言われましたが、

流石に101は簡単すぎるので、Claudeの APIから勉強する事にしました。

そしたらAPI FundamentalというTutorialは無くて、代わりに以下のTutorialを勧められました。

のでしばらくこのTutorialを勉強する事にします。

<追記>

このままだとClaude Codeの勉強を始めるまでに一年位かかってしまいます。

Claudeにその事を質問したら

との回答を得ました。

ので今回から

https://anthropic.skilljar.com/claude-code-in-action

を先に勉強する事にします。Claude Code in Action [11]を勉強します。

6.1 Claude Code in Action [11]を勉強する

やる気が起きません。

実は今週からOpenAI Codexの勉強に変更しようと思ったら、Space XAIと新たに契約して一般UserへのServiceが良くなる気配が出て来ました。

どうしよう。

やっぱりClaude Codeの方を契約しようかな。

とりあえずHooks and the SDKのTutorialを勉強します。

6.1.1 <Introducing hooks>を勉強する

まずは文章を読みます。

Hookについて勉強するのか。

HookはClaudeがToolを使用する前や後にCommandを実行する機能のようです。

この機能は以下の場合に非常に役に立つそうです。

  • File編集後にCode Formatterを実行
  • Fileが変更されたときにTestを実行
  • 特定のFileへのAccessをBlock

自動化されたワークフローの実装に役に立つって事のようです。

<How Hooks Work>

通常の操作では、Claudeに何かを尋ねると、

  1. あなたのクエリはツールの定義とともにClaudeモデルに送信されます。
  2. Claudeはフォーマットされたレスポンスを返すことでツールを使用することを決定する場合があり、
  3. その後Claude Codeがそのツールを実行して結果を返します。

と言う手順で実行されますが、

Hookはこの操作の間に実行されるそうです。

突然、Windowを更新しろ。と以下の指令が来たんですが。

一時間も掛かる更新なんか今やってられません。更新する日付を日曜日にずらしました。日曜日になったらまたずらして後に更新する事にします。

いつもの更新は、K○○○を更新します。と出ますがこれを何も出ません。

Windows11 version 25H2に更新するんでしょうか?

よく分かりません。

以下の図が載っていました。

この例では実行された後で、Hookが発動していますね。

Toolが実行される前とされた後で、Hookが実行されるという事です。

<Hook Configuration>

はい。

一人でしかCodeを書かない私は下2つは同じ意味になってしまいますね。

Fileはこんな感じでなってるそうです。

Toolが呼ばれる前に実行するHookはPreToolUse、Toolが呼ばれた後で実行するHookはPostToolUseになっていますね。

<PreToolUse Hooks>

Matcherって何?と思ったら

の事でした。

成程。こんな事をPreToolUseのHookingはするのか。

これならFileを全部消します。

とToolが計画しても事前にその実行を阻止出来る訳だ。

<PostToolUse Hooks>

成程、Toolの実行が阻止出来ない代わりに

  • 後続の操作を実行する(例:編集したばかりのファイルをフォーマットするなど)
  • ツールの使用についてClaudeに追加のフィードバックを提供する

などが出来るようになるのか。

理解しました。

<Practical Applications>

はい。理解しました。

<動画も見ます>

見ました。

特に追加する情報は無かったです。

7. Nvidia Omniverseの勉強2(強化学習の勉強)

Nvidia Omniverseの勉強で、Isaac Lab Documentation [9]の勉強をしていますが、

これってIsaac Labの使用方法の勉強が主で、

Robotが自動歩行するためにどんな強化学習をしなければならないのかは別に勉強しないといけないのではないのか?

との疑問が出て来ました。

で先週は強化学習の教科書について調査しました。

でその教科書を勉強するための時間をここに作りました。

7.1 前回の復習

 Secrets of Walking Robot (NVIDIA Isaac Lab and Isaac Lab Arena) [11]の<09:31 Simulation Main Files>から<15:19 RL Policy>までを勉強しました。

7.2 Secrets of Walking Robot (NVIDIA Isaac Lab and Isaac Lab Arena) [11]の続きを勉強する

<17:47 RL Improvements>

Isaac LabのModelの精度を上げる為に主に2つの事をしたそうです。

一つ目は、色々な場所のRandomizationを増加させたそうです。

以下はその一例です。

2つ目はRewardだそうです。

<18:55 "Slow" Policy>

Motionに関しては実際のActuatorの動きがControlの指令に追いつかない場合が、起きる可能性は常にあるので、なるだけSlowで動いた方が良い様に指定したそうです。

の場合は、安定しません。

の場合は、安定して歩けます。

<21:50 Step Height>

Robotの足は実際よりも高く上げる様に学習させる必要があったそうです。

もし足を5cm以下にしか上げない場合はPenaltyを追加したそうです。

<22:35 Foot Impact Reduction>

するとRobotは凄い勢いで地面を叩くように足を下すようになりました。

ので足と地面のImpactを減らすためのRewardを追加したそうです。具体的には足を下す時のVelocityを一定以下にするように指定したそうです。

<23:25 Feet to Feet Distance>

これで足をソフトに降ろすようになったんですが、今度は両足が重なる様になってしまいました。

これは以下の実装の

Xの値を図のようにセットする事で直したそうです。

<24:41 Symmetry>

そしたら今度は、左と右の動きが非対称になって来たそうです。

のでRewardにSymmetryも追加したそうです。

<25:14 Not Easy to Spot a Problem>

これ以外にも原因が特定出来ない問題も沢山発生したそうです。

皆さんも頑張ってくださいという励ましの言葉も言っていました。

<26:12 Isaac Lab Arena>

Isaac Lab Arenaについての解説です。

Isaac Lab Arenaはここの説明によると、Isaac Labで作成したModelを査定するためのSoftです。

まだ開発中で、すぐに実装が大きく変化するそうです。

<27:14 Conclusions>

まとめです。

今の時点でも5~10分歩かせると一回は転ぶそうです。

<28:27 More Examples of Walking>

最後に実機で歩いてるデモを公開していました。

かなりSmoothに歩いていました。

それでも一回転んでいました。

以上です。

8. DirectX12の勉強

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

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

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

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

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

8.1.1 前回の復習

「6.2.7 D3D12_SHADER_VISIBILLITY_ALL指定」を勉強してその後で実装していました。

これで、「6.2 定数BufferとShaderからの利用」の勉強は終わりました。

しかし問題が一つあります。

それはこの時点で、Projectを実行すると画像がしっかりと表示されるとありますが、私のProjectでは

以下のmapMatrixの値であるmatrixをまだ指定していません。

のでこの部分の実装がErrorになっています。

今週はこの問題について調べます。

8.1.2 変数matrixの値について調査する

調べると2026-01-25のBlog

と述べていて、教科書の「6.2.1 定数Bufferの作成」の内容を解説していました。

教科書のこの部分を読み直すと、教科書にも同じ事が書かれていました。

2026-03-09のBlogで実装しています。

実装していますが、何故か

XMMATRIX matrix = XMMATRIXIdentity()

だけ抜けて実装しています。

確認します。

丁度その部分だけ抜けています。

追加します。

このCodeの部分にCursorをセットしただけで、このCodeが現れました。

恐ろしい。

Tabを押してCodeを追加しました。

これで

Errorが消えました。

8.1.3 実行してみる

ではProjectを実行してみます。

普通にTextureの画像が表示されました。

うーん。出来てるの?

まあいいや、一応出来てるとして先に進みます。

ただし今週はWindowsのUpdateをしないといけないので、ここでお終いにします。

どうもVersionを25H2にするUpdateで下手したら1時間ぐらいかかるそうです。そしてNetで調べたら結構失敗してる人もいるようなので余裕をもってやる事にします。

8.1.4 GitHubのRepositoryにPushする

面倒ですがやらないといつまで経ってもやり方を覚えないので、今週もこれだけはやっておきます。

の様に書いてCommitしPushしました。

GitHubのBrowserを開いてChapter6の方のMain.cppを確認したら

変更したCodeがしっかり追加されていました。

当然、Mainの方のBranchのmain.cppのCodeはそのままで保存されていました。

出来てます。

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

8.2.1 前回の復習

Root Signature & Rasterizer | D3D12 Beginners Tutorial [D3D12Ez][12]の続きを勉強しています。

HLSL側からRoot Signatureを実装する方法を勉強したんですが、結局C++側に

以下のCodeを書き込んでいて

本当にこの方法、C++側からRoot Signatureを実装する方法よりの早いのか疑問に思っています。

Geminiの回答によると

速いとは答えませんでした。更に一般的であるかどうかの質問にも、微妙にこのやり方を擁護しながらも、C++に書く方が一般的と答えていました。

8.2.2 Root Signature & Rasterizer | D3D12 Beginners Tutorial [D3D12Ez][12]の続きを実装します

Root Signature用のFileを新しく作成します。

うーん。

どれ選択すれば良いのか分からない。

Tutorial見て確認します。

11:08のところで以下のFileを選択していました。

そして

と名付けています。

何でhlsliじゃないの?

Sample Codeで確認しましたが、こっちも

hlslになっています。

よく動画を見たらiを消していました。

はあ。

これで有ってるはずです。

作成します。

作成されました。

このFileのPropertyを開いてShader Modelを最新版に変更しました。

さらにEntry PointをROOTSIGに変更しました。

Sample Codeの設定も確認しましたが以下の様になっていました。

RootSignature.hlslを開いて以下の様に実装しました。

更に以下の様に実装しました。

先週のBlogには以下の様に書いていましたが

そもそも

ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT

をC++側のどこで使用したのか覚えていません。

確認するのすら面倒くさい。

Commentを作成して、どのRangeにどのDataをBindしたのかを必ず記録するようにします。

作成しました。

先週のBlogによると、TutorialではここでCompileしてErrorになったそうです。

実行じゃなくてCompileなの?

動画で確認します。

大変です。

確認したら

先週のBlogは以下の部分をまとめるのを忘れている事が判明しました。
Pixel Shaderに以下の実装を追加しています。

更に

Vertex Shaderに以下の実装を追加していました。

まずこれを実装します。

しました。

肝心のCompileの件ですが、ReCompileしたと言っていますが、どうやってしたのかは説明していません。

多分CompileをCtrl+F7で選択したんでしょう。

そしてErrorになっています。

うーん。よく分からないのでここは先に正解を実装してしまいます。

RootSignature.hlslのShader Typeの値を以下の様にします。

これでCompileするはずです。

TutorialではどうやってRecompileしてるのか不明なので、ここはRecompileをCompileしてみました。

出来ました。

ので多分大丈夫でしょう。

次はMain.cpp側の実装です。

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

今度はRoot SignatureのObjectを以下の方法で生成します。

更にPipeline Stateでもroot Signatureを追加します。

ここまで実装した状態で、

以下のところにBreaking Pointを作成して

実行します。

Tutorialではここで、

実際にm_pointerが値をもってるのが確認出来ます。

と述べています。

しかし私の場合は

0のままです。

まあいいや。

これは前もそうなっていました。

後でまとめて直します。

今週はここまでです。

9. まとめと感想

なし

10. 参照(Reference)

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

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

[3] Procedural Minds. (2024, July 28). Get started with PCG 5.4 by creating a full building | UE 5.4 p1 [Video]. YouTube. https://www.youtube.com/watch?v=oYNA24tcYc0

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

[5] Ryan Laley. (2025, September 9). Getting Started with Control Rig in Unreal Engine 5 – Basic IK Explained [Video]. YouTube. https://www.youtube.com/watch?v=s5yJlJGjjDE

[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. (2022, July 22). Lesson 7: Practical deep learning for coders 2022 [Video]. YouTube. https://www.youtube.com/watch?v=p4ZZq0736Po

[8] Howard, J. (n.d.). Multi-target: Road to the top, part 4. Kaggle. https://www.kaggle.com/code/jhoward/multi-target-road-to-the-top-part-4

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

[10] NVIDIA. (n.d.). Training the Jetbot: Ground Truth. Isaac Lab Documentation. Retrieved from https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/training_jetbot_gt.html

[11] Skyentific. (2016, April 21). Secrets of walking robot (NVIDIA Isaac Lab and Isaac Lab Arena) [Video]. YouTube. https://www.youtube.com/watch?v=8wJVWRbssu8

[12] Lötwig Fusel. (2023, August 10). Root Signature & Rasterizer | D3D12 Beginners Tutorial [D3D12Ez]. YouTube. https://www.youtube.com/watch?v=RSzwmaBSUmw

UE5の勉強などなど

2026-02-01のBlogの「AIについての調査(ComfyUIの勉強)」で議論した通り、勉強内容を変更する事にします。

勉強の内容や目的はそれぞれの章にまとめる事にします。

1.今週の予定

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

  • 映像作成用UE5の勉強
  • AIの勉強
  • Nvidia Omniverseの勉強
  • AIの勉強2(日本語字幕AIを作成する)
  • Claudeの勉強
  • Nvidia Omniverseの勉強2(強化学習の勉強)
  • DirectX12の勉強

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

2. 映像作成用UE5の勉強

UE5の勉強で、Gameではなく、CGIを作成するために必要な勉強をここでします。

今、Mainで勉強してるのは、

  • PCGを使用した建物の作成
  • Control Rigの勉強

の2つです。

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

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

最終的にはUEFNのMap内で神社を作成して、 誰でも参拝出来るようにするつもりです。

2.1.1 前回の復習

前回何を勉強したのかまったく覚えていません。

Blogを読み直したらLoop用にPointをPCGPoint Dataで分割する方法を確認していました。

最初に、BuildingのProjectのProjectが以下の理由で開けなくなって

以下の設定から

Renderingの設定を下げました。

すると今度は

開ける様になりました。

Geminiによるとこれで開ける場合は、単純にVRAMの不足が開けない原因だそうです。

をしました。

そして

Loop用にPointをPCGPoint Dataで分割する方法

を確認しています。

前回のBlogで勉強した内容を以下にまとめます。

以下の実装で、PointをPCGPoint Dataで分割していました。

まずSpline Samplerノードの結果です。

沢山のPointがたった一個のPoint Dataに保持されています。

以下の設定にしたAttribute Partitionノード

で、それぞれのIndexってPoint Dataに分割します。

最後にGet Attribute From Point Indexノードを使用して

Point DataをAttribute Setに変換しました。

2.1.2 先週の勉強の足りない部分を検証する

先週勉強した内容を復習して色々疑問が湧いてきました。

それを以下に記します。

Get Attribute From Point Indexノードを使用してPoint DataをAttribute Setに変更しましたが、これはどんな意味があるのか、分かりません。

Geminiに質問しました。

PCG Attribute Setには位置の情報はないそうです。

確認します。

Attribute PartitionノードにおけるPCG Point Dataの内容です。

Get Attribute From Point IndexノードにおけるPCG Attribute Setの内容です。

あ、本当です。

更にこの実装はC++のLoopにおける

Size()関数のような働きをしていると説明してくれました。

これは納得です。

2.1.3 PCG Buildingで使用されているLoopノードの実装を確認する

上から順番に見ていきます。

Doors for Regular Wallsです。

には以下のLoop用のNodeがありました。

最初のLoop型のNodeであるPCG Close Open Back WallsノードはInがLoopになってないので、中でLoopしていませんね。

次のPCG Offset TransformsノードはPointsというInputにRegular WallsとInterior Wallsの2つのPoint Dataが入力されているので

それぞれでLoopするはずです。

Dataで確認すると

2つのPCG Point Dataがありました。

次はWallです。

PCG Copy Point Up Advancedノードです。

LoopにはFloor Loopsを使用していました。

Floor Loopsは以下の実装で作成されていました。

PCG Get Floor Loopsノードの実装を確認します。

これ、今まで散々勉強した実装でした。

Spline SamplerノードのNum SamplesにFloorsの値がPassされていました。

更に以下の場所でもLoopを使用していました。

こっちはRegular WallsとInterior Wallsで別々に計算するためのLoop型のNodeで、Doors for Regular Wallsで勉強したのと全く同じです。

Floor/Ceilingです。

以下の実装でLoop型のNodeが使用されています。

うーん。ここは何をしてるのか分かりません。

一寸考えます。

Floor/Ceilingでは、最初に以下の場所でLoop型のNodeを使用していました。

この部分の実装の意味はわかります。

地面にある床用のPointを各FloorにPasteしたんです。

PCG Copy Point Up SimpleノードのDataを確認すると

の様に、それぞれの階でPCG Point Dataが生成されています。

その値を以下のNodeにPassしています。

恐らくだけど、ここでFloorに使用するMeshのSizeをWallに使用するMeshのSizeと同じになるように調整しています。

で次です。

ここにAttribute Partitionノードが入って

Partition Attribute SelectorsのIndex[0]にMeshを指定しています。

確かにMeshというElementはPCG Scale Wall SizeノードのDataを見ると

あるんですが、このNodeが何をしてるのか不明です。

その後で、

Warningが表示されているPCG Close Open Back Floorsノードが配置されています。

なんかこの実装、どこか間違っている気がしますね。

この部分の実装はじっくり検証する必要を感じます。

今週はここまでにして、来週この部分の実装をTutorialの確認もしながらじっくりやる事にします。

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]の<26:29 - Select Random Doors in Rooms and Assign Mesh>を実装する予定でしたが、

Tutorialに載ってない以下の部分の実装が

よく理解出来なかったので、その勉強をしました。

前回はその中で

Match and Set AttributeノードのParameterである

の設定の意味について調べました。

これは

2つ以上のMeshからRandomに選択する場合のRandomに重みづけをする場合に使用するそうです。

この設定だとWeightの値通りの重みをRandomに追加するようになります。

前回勉強したのはそれだけでした。

2.2.2 Create Procedural Interiors With Full Room Separation | UE 5.4 P5 [1]の<26:29 - Select Random Doors in Rooms and Assign Mesh>を実装する

2026-04-12のBlogに勉強した内容が書いてありました。

今週はこの部分を実装します。

まずDifferenceノードを追加しました。

そしてWall Sectionの最後に以下の実装を追加して

Exterior Wallsと言うNamed Re-Routeを作成しました。

これを先程追加したDifferenceのDifferencesに追加します。

更にDifferenceのDensity Functionの値をBinaryに変換します。

2026-04-12のBlogにはModeの値については何も書いていません。

Tutorialを見てModeの値も確認します。

そのままでした。

それまで以下の様に壁全体にPointが生成されていましたが、

この実装のお陰で

壁の部分のPointが消えました。

Differenceノードにある以下の2つの機能について調べます。

ChatGPTに質問しました。

はい。で具体的にDensity FunctionとModeはどう関わってるんでしょうか?

Density値を減らすの?

Point自体は減らさないの?

Binaryです。

重なったらPointを消すと書いてありますね。

Binaryは完全に消すのか

Minimumです。

小さい方を使う?

もしDifferenceのDensity値がSourceのDensity値よりも小さかったら消して、大きかったら残すって事?

Clamped Subtractionです。

Densityの値が0だと、Pointって消えるでしたっけ。

うーん。

この説明は合ってない気がします。

他のAIにも同じ質問をしてみます。

同じような回答が返って来ました。

Copilotが引用したSiteのURLを教えてくれたので

そのSiteを読みます

読んだけど、言ってる事が理解出来ません。

これが間違ってるから、それを参考にしたAIの回答も全部おかしくなってるんじゃないの?

よーし決めました。

このDifferenceのDensity Functionの機能を実験で確認する事にします。

2.2.3 DifferenceノードのDensity Functionの機能を実験で確認する

色々試したんですが、うまい実験方法が思いつかなかったです。

ただし、Binaryの場合はPointが消えるのは確認出来ました。

問題は、Minimumを試した時で、Densityの値を変化させるために

Attribute Noiseノードを追加すると

Pointの表示が

から

に変化してしまいます。

これで何をやってるのかが分からなくなってしまい、実験を上手く組み立てられませんでした。

実験に使用したProjectはJapanese Shrine PCGです。

もっと良いやり方を思いついたら、改めて実験してみる事にします。

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

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

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

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

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

その後、今まで勉強してたTutorialはUE5.0用のTutorialで5.5はControl Rig [2]を勉強する必要がある事が判明しました。

のでControl Rig [2]を勉強する事にしました。

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

Basic IKの使い方について勉強しました。

 Getting Started with Control Rig in Unreal Engine 5 – Basic IK Explained [3]を勉強しました。

Pole Vectorの設定方法が、前々回、UE4: Control Rig - Basic IK [4]で勉強した方法と違っていました。

今週は実際に実装してみます。

2.3.2 Basic IKを実装する

せっかくなんで、UE5.7でやります。

ProjectはControl Rig用に前に作成した以下のやつを使用します。

以下のSkeletal Meshで試します。

これは前に作成したものです。

Control Rigは新しく作成してそれを使用します。

を作成しました。

以下の3つのBoneを使用する事にします。

Hand_lからControlも作成しました。

Basic IKを追加しました。

それではBasic IKの設定をしていきます。

まずEffector Itemにhand_lをセットしました。

Item BにLowerarm_lをセットしました。

Item AにUpperrarm_lをセットしました。

この状態で以下に示した様に腕が捻じれています。

設定が全部終わったら腕が元の位置に戻るんでしょうか?

Effectorに先程作成したControlをセットします。

腕の位置が前よりましになりました。

今度はPole Vectorの設定を行います。

今回は、Getting Started with Control Rig in Unreal Engine 5 – Basic IK Explained [3]のやり方でやっていきます。

ここに接続するためのControlを前腕のBoneから生成します。

生成したControlのIconの位置を肘から離して配置します。

この状態で、Controlを右Clickして以下のBoxを表示させ

Set Offset Transform from Currentを選択します。

そんなの無いですね。

多分、Set initial Transform from Currentが同じ機能だと思いますが、選択出来ません。

いや、Zero Offsetかもしれません。

Zero Offsetを試してみます。

Lowerarm_l_ctrlのGizmoの位置は変化してませんが、

そのInitialの位置が以下の様に変化しました。

これでこの位置がInitial Positionに設定されたはずです。

Lowerarm_l_ctrl のGet Transform -Controlノードを以下の様に、Pole Vectorに繋ぎました。

結果です。

肩と手首が捻じれています。

Primary AxisとSecondary Axisを指定します。

前腕のBoneのLocal Coordinateを確認します。

よく見えませんが、赤線(X軸)とBoneの向きは平行になってますね。

なので、これであってます。

次がSecondary Axisです。

Y軸(緑)の向きとLowerarm_l_ctrlですが、これもあってるように見えます。

でもこれって無理やり合わせてるから肘が一回転してるのかもしれません。

Tutorialと同じ設定にします。

すると以下の様になりました。

オオ完璧です。

試しにLowerarm_l_ctrlを動かしてみました。

動きました。

取りあえずは成功です。

だたしこのやり方だと、肘の位置を指定するPole Vectorが固定されています。

動きません。

ので、たまに肘がへんな位置に来ることがあります。

そんな事も無いですね。

色々試しましたが、肘の位置はどれも自然な感じでした。

2.3.3 来週の予定

これから検討しないといけない事が、結構、山積みになってるので、以下に整理しておきます。

まず先週のBlogに

と書いてありました。

これは来週検討する事にします。

後、

2025-04-20のBlogで作成した

2025-02-02のBlogで作成した

の設定がどうなってるのかの確認もする必要があります。

これを勉強した時は、Control Rigがどんな機能なのか全く理解してなかった状態だったので、暗中模索で勉強していました。

この膝が逆向きで曲がる問題なんか、このTutorialできちんと説明する必要があります。

私が、Control Rigの仕組みを理解するのにこんなに時間がかかったのは、公式のものを含めてTutorialの質が悪すぎたからです。

Game制作のTutorialは、何故か学生が馬鹿だから理解出来ない。というTutorial制作側の一方的な意見がまかり通ってしまって、質の悪いTutorialが量産される結果になってしまっていました。

もうAIがGame制作のTutorialに取って代わってしまったので、この問題も解決したと言えば解決してしまったので、今更ここで私が告発しても意味はないかもしれませんが、

何故、あれほど隆盛を極めたGame産業が亡んでしまったのかを、未来の歴史学者が検証した時に、その時代を生きたBlogの証言として価値があるかもしれないと思ってここに敢えて書いておきました。

後、普通のControlの実装と組み合わせた場合どうなるのかを調べる必要もあります。

以下にこれからやるべき内容をまとめます。

  • 普通のControlの実装と組み合わせた場合どうなるのかを調べる
  • 他のTutorialでは、Pole Vectorはどのように設定してるのかを調べる
  • 今までに勉強したBasic IKのBlogの記録(2025-04-20のBlog2025-02-02のBlog)を見直してPole Vectorがどのように設定されているかを確認する

この3つをやる必要があります。

3. AIの勉強

AIの勉強の目的ですが、

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

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

ここではPractical Deep Learning for Coders 2022 [5]の勉強をしています。Antigravityを使用したVibe Codingの勉強はしばらくお休みします。

3.1 前回の復習

Lesson 7: Practical Deep Learning for Coders 2022 [6]の勉強の続きです。

ただし、このLectureの中で、

 Scaling Up: Road to the Top, Part 3 [7]を使用して勉強を始めたので、こっちの勉強を先にやる事にしました。

先週勉強した内容を以下に示します。

先週は、Gradient Accumulationの実装方法を勉強しました。

ただし実際の実装方法については勉強していません。

どうせCodeを書くのはAIがやってくれます。

この関数を使用して以下の実装で実際にGradient Accumulationを使用します。

ただしこの例ではAccumの値が1に設定されているので使用してないかもしれません。

この後Accumの値を2,4に増やして使用したGPUのMemoryを確認しています。

Accumの値が大きくなる程、使用したMemoryは小さくなっていました。

当然、以下の疑問が生まれます。

それに対するChatGPTの回答です。

数を増やし過ぎても成果が出なくなるのでBatchのSizeが最大の時が最も良いです。

そして数を増やすと学習時間が長くなるDemeritがある事も述べていました。

以上でした。

3.2 Lesson 7: Practical Deep Learning for Coders 2022 [6]の続きを勉強する

Scaling Up: Road to the Top, Part 3 [7]の内容でLectureで説明した箇所までは勉強が終わったので、またLesson 7: Practical Deep Learning for Coders 2022 [6]の続きを勉強します。

前と同じ様にNotebookLMに要約してもらいます。

<08:04 - What is GradientAccumulation?>

この節が長いので要約の量も多いです。

Batch毎にGradientだけ計算するのか。

こういう話を聞くと、始めにPyTorchのBackward()関数の性質ありき。でその後にGradient Accumulationを思いついた感じがします。

実際そうだったのかもしれません。

生徒の中にBackward()関数を毎回0にするのを忘れた人が居て、それでも結果がそんなに変わらなかったのを見て思いついたのかもしれません。

成程。

BatchのSizeを小さくしないのは、Batch毎のDataのバラつきを均等にするためでもあるのか。

これは前回のChatGPTの回答には無かったですね。

ここでは処理速度はそんなには低下しないと述べています。

成程。

はい。

はい。

そして以下のお勧めの質問が表示されていました。

どれも興味深いですが、一端Tutorialの動画を見て内容を確認します。

見ました。

Tutorialの動画では、なんと先週まで勉強してたScaling Up: Road to the Top, Part 3 [7]の内容を説明していました。

Scaling Up: Road to the Top, Part 3 [7]の内容、特に実装の部分を使用してさっき勉強したNotebookLMが要約した内容を説明していました。

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

2つの内容が、この動画を見て1つに繋がりました。

特に、以下の実装

で、NotebookLMが説明してた

を行ってる点です。

これは動画だけを見たのでは、理解出来なかったと思います。

<20:52 - How to run all the models with specifications>

これは非常に短い節です。2分位しかありません。

多分、他のModelでも微調整してGradient Accumulationを実行してるだけでしょう。

一応、NotebookLMに要約させます。

色々なArchitectureを自動化して実行するには、仕様を辞書化するのが良いのか。

それくらいしか感想が無いです。

今まで、Workflowを自動化した事が無いので、ここに書かれている内容が凄いのか当たり前なのかの判別がつきません。

では動画を見ます。

Scaling Up: Road to the Top, Part 3 [7]の勉強してない後半部分でこれをやっていました。

ここで計算した結果を利用してEnsembleを行うそうです。

<22:55 - Ensembling>

要約しました。

Deep LearningにおけるEnsemblingの意味が分からなかったんですが、複数のModelの予測を組み合わせて精度を向上させる事でした。

更に複数のModelに別々のDataを学習させ、その予測結果(確率)の平均を取る手法をBaggingと呼ぶ事も理解しました。

Bagging自体は前に勉強したはずです。

確認します。

2025-10-26のBlogで勉強していました。

いましたが、勉強した内容はこれだけでした。

では動画を見ます。

なんと、Ensemblingの説明は一寸しかしていません。

その後は、Scaling Up: Road to the Top, Part 3 [7]を最後まで勉強して、質問を受け付けて、更にPart4の勉強を始めていました。

で、このPart4が見つかりません。

またかと思ってURLをいじっていたら

https://www.kaggle.com/jhoward/code

Codeに飛びました。

そしたらここに

全部のLectureがありました。

今まで無いと思っていたPart2もしっかりありました。

なんで気が付かなかったんでしょう。

まあ良いです。

Scaling Up: Road to the Top, Part 3 [7]を最後まで勉強してその後でPart4を勉強するか、無いと思っていたPart2を勉強するかどうしましょう?

どっちにしてもこれは来週やる事にします。

今週はここまでです。

4. Nvidia Omniverseの勉強

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

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

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

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

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

4.1 前回の復習

 Training the Jetbot: Ground Truth [9]の復習をやっています。

2025-11-30のBlog>を読んでいました。

最初の2段落位読んで

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

これは本当はGPUに追加するための実装が結構複雑なので、先週何の備えもしないで勉強したら間違えるから、やるのを中止したんです。

今週は、しっかり準備したんで、難しくても普通に理解出来るでしょう。

やっていきます。

4.2  Training the Jetbot: Ground Truth [9]の復習の続きを行う

2025-11-30のBlog>を読みながら続きを勉強していきます。

以下の実装をisaac_lab_tutorial_env.pyのGlobal Scopeに追加します。

自分のProjectからisaac_lab_tutorial_env.pyを開きます。

D:\MyIsaacSim\isaac_lab_tutorial\source\isaac_lab_tutorial\isaac_lab_tutorial\tasks\direct\isaac_lab_tutorial

にあるFileです。

以下の関数がある方でした。

前に_get_reward()関数とか、_get_dones()関数とかの実装をした方のFileですね。

ここにdefine_markers()関数を追加するのか。

TutorialにはGlobal Scopeに追加しろ。と書いてあるので、Class IsaacLabTutorialEnv()の外側に追加すべきなんでしょうか?

それとも内側?

Geminiに質問しました。

外側が正解だそうです。

こうやって実装するのが正解だそうです。

以下の様に追加しました。

2025-11-30のBlog>ではこの実装が何をやってるのかを細かく勉強していました。

以下の関数の説明から始まっています。

要はここで、2つの矢印を可視化するための設定をしてるんです。

更に細かくそれぞれの行毎に何をやってるのかも記録していました。

そして最後に

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

これはArrow_x.usdを別なusdに変換すれば良いはずです。

続きを読みます。

訳です。

別にVisualizationMarkersの使用方法をこれ以上勉強する必要は、今は無いので次に行きます。

置き換える方の実装です。

2025-11-30のBlog>では、ここで追加された実装が、以下の部分である事を突き止め

この部分の実装がどんな事をしてるのかを調べていました。

こんな感じでやってました。

この後、.cuda()に関してかなり長い質問とそれに対してのGeminiの回答が載せてありました。

かなり興味深い内容でした。

今読み直してもかなり勉強になりました。

次です。

え。まだそこなの?

とびっくりしてしまいました。

先程の長々とした.cuda()に関しての議論は、本当に.cuda()のところを勉強していただけのようです。

それぞれのCommandsの機能について勉強しています。

あ!

ここでGPU用の行列を作成してます。

ここが、Walkthrough [10]の勉強でもっとも難しい箇所です。

続きを読みます。

あれ?

の部分は深堀してません。

その後、残りの部分の実装の内容を説明して終わっています。

ここの実装はatan2()関数が使用出来たら一発で済むのを、使用出来ない前提で色々な計算をしてる

とかの重要な説明はありましたが、

そんなに深堀市内で終わっていました。

2025-12-14のBlog

Training the Jetbot: Ground Truth [9]の続きから勉強していました。

うーん。

行列の説明はまだ無いみたいです。

2025-12-14のBlogの続きを先に読んでみます。

ありました。

後半で行列の定義を散々説明しています。

ここで、GPUの行列のまとめ方を勉強しています。

これは、来週しっかり時間を取ってやる事にします。

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

5. AIの勉強2(日本語字幕AIを作成する)

今週は無しです。

6. Claudeの勉強

Houdiniの勉強はしばらくお休みします。そしてClaudeの勉強をします。

以下の順番で勉強しろとClaudeに言われましたが、

流石に101は簡単すぎるので、Claudeの APIから勉強する事にしました。

そしたらAPI FundamentalというTutorialは無くて、代わりに以下のTutorialを勧められました。

のでしばらくこのTutorialを勉強する事にします。

<追記>

このままだとClaude Codeの勉強を始めるまでに一年位かかってしまいます。

Claudeにその事を質問したら

との回答を得ました。

ので今回から

https://anthropic.skilljar.com/claude-code-in-action

を先に勉強する事にします。Claude Code in Action [11]を勉強します。

6.1 Claude Code in Action [11]を勉強する

今週はなんか突然、やる気が無くなってしまい、Tutorialが進みません。

一寸だけ勉強する事にします。

6.1.1 <GitHub integration >を勉強する

Support for Issues and Pull Requestという事は、GitHub Integrationは、Repositoryを管理する側のTaskを担当するんでしょうか?

Pull RequestのReviewもするって事は、完全に管理する側のTaskをこなしていますね。

<Setting Up the Integration>

/install-github-appはBuild in Commandですね。

Install the Claude Code app on GitHub

とありますが、このCommandを実行する前にGitHubはInstallされている事が前提って事?

次の

Add your API Key

は、ClaudeのAPI Keyを渡すんでしょうか?

最後の

Automatically generate a pull request with the workflow files

はこっちはPull Requestする側の話です。

AI自身でPull Requestして、同時にPull RequestのReviewもするんでしょうか?

<Default GitHub Actions>

以下の2つのWorkflowを提供するって。

一つ目はMention Actionです。

IssueやPull Requestに対してどんなTaskをするのかを説明してますね。

こっちはPull Requestに対して、どんなTaskをするかを説明しています。

うーん。

前のMention ActionでもPull Requestに対してどんなTaskをするのか説明してたじゃん。

前のPull Requestは@claudeを使用した場合の事?

<Customizing the Workflows>

WorkflowをCustomizeするのか。

はい。

ClaudeにもうProject自体は開いている事をPromptで説明するのか。

これはClaudeに特定のMCP Serverを自由に使用できるようにしたって事。

けっこう怖いな。

<Tool Permissions>

そりゃ当然でしょう。

allowed_tools: "Bash(npm:*),Bash(sqlite3:*),mcp__playwright__browser_snapshot,mcp__playwright__browser_click,..."

これがそのPromptだそうです。

はい。

<Best Practices>

MCP Serverに接続するのが普通になったら、この辺は真剣に勉強しますわ。

ToolからArgentに進化するのか。

<動画を見る>

<Setting Up the Integration>でAPI Keyをどう扱うのかを知りたかったんですが、動画にはそこは完全に無視されていました。

この設定をしたら、Claudeが自動で、Issueの質問に対して、調査して確認して回答してる状況を動画で示していました。

この部分は圧巻でした。

6.2 OpenAI Developers Codex [12]を勉強する

なんとOpenAIのCodexは無料でも使用出来るって聞いたので、こっちも一寸見てみる事にします。

一寸試すだけなのに、20ドルも取られるのは納得いきません。

しかもClaudeは20ドルのPro PlanではClaude Codeは使用出来ないようにする可能性もあるって言ってるじゃないですか!

そんなのに貴重な学習時間を費やして良いのか、ちょっと悩んでいます。

で、個人的な見解ですが、Anthropicは今、Deta Centerが足りなくて研鑽資源が枯渇してるから、最も利益の少ない一般UserのData Centerの使用率を下げたいんだと思っています。

のでしばらくして、Data Centerに余裕が出てきたら、Claude Codeも今までと同じように使用出来るようになるんでしょうか?

ならないと思います。

と言う訳で、今のうちにOpenAI Developers Codex [12]やGemini CLIの方も勉強する事にしました。

Gemini CLIに関しては、「5. AIの勉強2(日本語字幕AIを作成する)」で既に一寸だけ勉強を始めているので、ここではOpenAI Developers Codex [12]を中心にCodexを勉強する事にします。

6.2.1 OpenAI Developers Codex [12]を勉強する

では読んでいきます。

あれ?

無料でも一寸は使用出来るって書いてあったけど。これ読むと出来ないですね。

そうなの?

まあいいや。続きを読みます。

以下の事が可能だそうです。

こっちはこっちで読み易いね。

以下のTutorialが用意されていました。

6.2.2 Quickstart [13]を勉強する

ざっと見るだけですが、API Keyをどう扱ってるかだけはしっかり確認します。

と書いてあります。

という事はAPI Keyを使用しないで使う事も可能みたいですね。

これは好印象です。

初心者にいきなりAPI Keyの管理を自分でさせるのは、結構問題だと思っていますので。

App、IDE Extension、CLI、Cloudがあるのか。

Appがお勧めとありますがそれぞれの特長をChatGPTに聞いてみます。

AppってWeb Siteの事だったのか。

確かにUE5とかDirectX12と関連付けるならIDEと統合した方法を勉強すべきなのかもしれませんが、

私は今知りたいのは全体像なんです。

何でChatGPTはこういう余計な事を言ってくるかな。

みんなGeminiに移動してしまったのが、こういう回答を見るとよく分かります。

これはGemini CLIで一寸はやっています。

Set Upが難しいって。

今、AIに聞きながら環境設定したらどんな難しい環境設定だって簡単に出来るでしょう。

こういう回答もChatGPTはズレてる気がしますね。

そうだ。

今、一つのIdeaがあるんです。

物凄いAI向きの案件です。

それは、ネットの通信のLogをAIに分析させる仕事です。

あるWebを開いた時に、どんな通信が裏で行われているのかを、確認する方法はいっぱいあります。

しかしそれ確認しても、僅か数秒で、何万件の通信がされていて、素人には何がどうなってるのか全く分かりません。

それをAIに分析してもらうんです。

AIにその数万件の通信記録を渡して、

この中でデータを送ってるURLの中で怪しいものをPickupして。

とPromptで命令したら

そのAppが(正確にはそのAppにあるAIが)ピロピロと関連する情報をその数万行の通信記録から拾ってきます。

こういうAppをCodexで作るには、この中のどれを勉強すべきなのかChatGPTに聞いてみます。

回答です。

うーん。

Logの収集はChromeのnetlog-viewerに取得させれば、Agentに任せなくても通常のProgrammingで出来そうな気もします。

よく分からん。

残りのLogの解析とか、Userに説明とかはAgentでは無く生成AIの方が得意じゃない?

何が言いたいのかと言うと、

AI Agentを使用してAppを作成しますが、作成したAppの中ではAI Agentは使用したくない。

って事です。

危なくない。UserにAI Agentを使用させるのは。

AppのArchitectureも考えてくれました。

ここでお勧めしてるCDPは先程のChromeのnetlog-viewerと同等の機能を持つものなんでしょうか?

多分そうでしょうね。

これって生成AIで十分でしょう。

何でAgentic AIがここで必要なんでしょうか?

これから勉強しようかな。

これを勉強する事で、Agentic AIの基礎を勉強すれば良い気もします。

そうだ、

基礎と言えば、Claude CodeにあるBuild In Commandや、MCP ServerはOpen AI Codexではどうなってるんでしょうか?

聞いてみます。

そうなの?

じゃあ、やっぱしClaude Codeで基礎を勉強した方が良いって事。

設計思想が違うって事か。

でもそれはそれでCodexの考え方も有りって言えば有りです。

Commandも無いのか。

うーん。

となるとやっぱりClaude Codeを先に勉強して基礎を身に付けてからこっちに移るべきですね。

MCP Serverに繋げたかったら自分で仕組みを作成しろ。

って事のようです。

やっぱり、先にClaude Codeで勉強すべきですね。

そういう事ですか。

理解しました。

やっぱりClaude Codeの勉強に戻ります。

今週は、もうやる気が無いので、来週からまたClaude Codeの勉強をやる事にします。

7. Nvidia Omniverseの勉強2(強化学習の勉強)

Nvidia Omniverseの勉強で、Isaac Lab Documentation [8]の勉強をしていますが、

これってIsaac Labの使用方法の勉強が主で、

Robotが自動歩行するためにどんな強化学習をしなければならないのかは別に勉強しないといけないのではないのか?

との疑問が出て来ました。

で先週は強化学習の教科書について調査しました。

でその教科書を勉強するための時間をここに作りました。

7.1 前回の復習

前回は、 Secrets of Walking Robot (NVIDIA Isaac Lab and Isaac Lab Arena) [14]の最初から<07:09 URDF to USD>までを勉強しました。

最初は全部、一回で勉強してしまおうとしたんですが、結構内容が濃くて理解出来ない箇所が、あちこちにあり、<07:09 URDF to USD>まで勉強したら力尽きました。

ので、毎週、一寸ずつ勉強する事に変更しました。

今週は、続きの<09:31 Simulation Main Files>から<18:55 "Slow" Policy>まで勉強します。

7.2 Secrets of Walking Robot (NVIDIA Isaac Lab and Isaac Lab Arena) [14]の続きを勉強する

<09:31 Simulation Main Files>

Fileの構造を説明しています。

これはIsaac LabのProjectのFileですね。

私のProjectと比較してみます。

WindowsのExploreからこれと同じ図を表示する方法が分りません。

一個ずつ比べていきます。

まずIsaac LabのProjectを開くと以下の様になっています。

Tutorialでは

Scripts FolderとProject名のFolderであるSkyentific_poclegsがありますが。

私のはScripts FolderとSource Folderがあります。

そのSource Folderを開くと

Project名のFolderがあります。

このFolderを開くと

となっています。

Config Folderは両方にありますね。

更にProject名のFolderも両方あります。

Config Folderを開きます。

これだけでした。

Tutorialでは

こうなっていました。

Project名のFolderも開いてみます。

ここにあるRobotsは自分で追加したFolderです。

Tutorialの方は、以下のFolderがあることまでは確認出来ました。

多分、RobotsはAssetsの下にありますね。

ActuatorsというFolderを追加したのか。

結構構造違いますね。

Tutorialの動画の続きをみます。

Robots Folderにあるskyentific_poclegs.pyを開くと以下の様になっています。

ここではどんなJointがRobot内にあるのかを述べてるそうです。

こっちはActuatorについて述べているそうです。

<10:31 Sim Actuator Model>

ActuatorのModelについては以下の場所で述べてるそうです。

以下の様になっていて

ActuatorのDelayについて設定してるそうです。

Delayの値はここにあるDelay Bufferに保持されるみたいです。

以下の場所でDelay Bufferを用いて

Position、Velocity、そしてEfforts(Torque)を計算しています。

この計算の後も以下の計算をしています。

この部分の計算についてもTutorialでは簡単な説明をしていましたが、ここにはまとめません。

今度はActuatorsの設定についてです。

Effort_limitを追加したと述べています。

ここにあるいくつかのDelayの値を、Simulateで得たActuatorsの値が本当の実機の値に近づくように、変更したそうです。

<12:54 Sim & Real Actuator Comparison>

これがSimulated Actuatorの値と実際のActuatorの値を比較した表です。

ほとんど一致していますね。

凄い。

縦軸がPositionを示し、横軸が時間を示しています。

全てのActuatorでこの試験を行ったそうです。

Actuatorによっては結構ズレてるのも有りますね。

この図は腰の関節にあるActuatorの結果だそうです。

この部分が、これから最も改良していくべき分野である。と述べていました。

<15:19 RL Policy>

RLについての説明だそうです。

RLに関しての情報は以下のTasksにあるそうです。

取りあえず、話を聞きます。

以下に示したAgents Folderにある

Rsl_rl_cfg.pyの役割について説明しています。

Layerの数、Nodeの数、そしてneural networkのarchitectureの構造を変更したい時にRsl_rl_cfg.pyで変更するそうです。

次にrough_env_cfg.pyについてです。

このFileには追加で以下のFileがあると言っています。

うーん。ObservationとかRewardとかをここで指定してるのか。

一寸私の今勉強してるProjectとは構造が違いますね。

rough_env_cfg.pyを開きました。

以下の場所は

Terrainの要素を指定しています。

ここはActionを指定しています。

ここはObservationを指定しています。

ここで、mdp FolderにあるOberservation.pyを呼び出してると思ったんですがしてないですね。

Curriculumの設定についても示していました。

CurriculumはRobotの学習の向上に応じて難しい課題を段々与えていくことです。

ここではPush Forceの値が変化しています。

うーん。

段々、頭に入らなくなって来ました。

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

8. DirectX12の勉強

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

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

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

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

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

8.1.1 前回の復習

先週のBlogを読んだら「6.2.6 Root ParameterとDescriptor HeapのBind指定」を勉強していました。

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

8.1.2 「6.2.7 D3D12_SHADER_VISIBILLITY_ALL指定」を勉強する

まずは教科書を読みます。

D3D12_SHADER_VISIBILLITY_ALLを使用すると、Root Signatureの指定がずっとSimpleになると書いてあります。

うん。

これSample Codeはそうなってなかった。

前のBlogを見て確認します。

「6.2.4 Root Signatureの変更」の勉強でこの実装をしてるはずです。

2026-04-12のBlogで勉強していました。

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

教科書によると以下の様に書き換えるそうです。

Rootparam.ShaderVisibilityの値がD3D12_SHADER_VISIBILITY_ALになってるだけじゃなくて、

Rootparam.DescriptorTable.NumDescriptorRangesの値が2になっています。

更に、教科書によればSetGraphicsRootDescriptorTable()関数の呼び出しが一回で済むようになると書いてありました。

Sample Codeでは以下の場所でSetGraphicsRootDescriptorTable()関数の呼び出しをしていました。

ただし以下の場所にもComment Outはしていますが、SetGraphicsRootDescriptorTable()関数は使用されていました。

SetGraphicsRootDescriptorTable()関数は

先週のBlogで勉強しています。

これです。

8.1.3 「6.2.7 D3D12_SHADER_VISIBILLITY_ALL指定」を実装する

ではまずD3D12_SHADER_VISIBILLITY_ALLを使用した実装からしていきます。

自分のProjectを開きます。

あれ、既にしてありました。

2026-04-12のBlogを見直したら以下の様に書いてありました。

そうだったのか。

では今回は変更する箇所はありませんね。

SetGraphicsRootDescriptorTable()関数の呼び出しが一回で済むよう

以下の実装を追加します。

今の実装は以下の様になっていました。

これは下の部分の実装をComment Outすれば良いだけです。

しました。

これで完成です。

8.1.4 GitHubのRepositoryにPushする

面倒ですが、これをしないといつまで経ってもGitHubに慣れないのでやります。

これでCommitします。

Pushもしました。

BrowserからGitHubを開いて確認します。

Chapter 6のBranchのmain.cppを開きました。

しっかり変更されていました。

Branchのmainのmain.cppも確認します。

こっちは何も変化していません。

出来てます。

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

8.2.1 前回の復習

 Root Signature & Rasterizer | D3D12 Beginners Tutorial [D3D12Ez][15]の10:36まで勉強していました。

内容に関しては、Root SignatureをHLSL側で実装する方法についての説明です。

ただ実際の実装方法に関しては以下の様に

一寸だけ示しただけで全容は全く分かってない状態です。

8.2.2  Root Signature & Rasterizer | D3D12 Beginners Tutorial [D3D12Ez][15]の続きを勉強する

では続きを見ていきます。

早速、Root SignatureをHLSLで実装する方法が出て来ました。

と思ったらこれは以下の内容を説明してるだけみたいです。

うーん。

よく分からん。これで実装も出来るのかな?

Root Signature用のFileを新しく作成しています。

名前はRootSignatureでExtensionはhlslです。

このFileのPropertyを開いてShader Modelを最新版に変更しました。

さらにEntry PointをROOTSIGに変更しました。

Fileを開いて以下の様にしました。

まずRoot Signature Flagを指定するそうです。

Root Signature Flagは以下の種類があるそうです。

ここから、ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUTを選択しました。

C++側に書く時は、D3D12_ROOT_SIGNATUREを追加する必要が有りますが、HLSL側に書く時はそれを外す必要があるそうです。

今の時点では、Bindingの指定はしてないので書くのはこれだけだそうです。

Commentを作成して、どのRangeにどのDataをBindしたのかを必ず記録するように、と言っていました。

ここでCompileしたらErrorになって色々調べ始めました。

調べた結果、以下のShader TypeにGenerate Root Signature Objectをセットする必要がある事が分かりました。

Compile出来ました。

Main.cppに以下の実装を追加しました。

root SignatureもShader Fileとして扱うんですね。

今度はRoot SignatureのObjectを以下の方法で生成しています。

うーん。

結局、C++側でやるの?

これって本当に速いんですか?

遅い気がしますね。

更にPipeline Stateでもroot Signatureを追加します。

以下のところにBreaking Pointを作成して

実行すると

実際にm_pointerが値をもってるのが確認出来ます。

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

22:31まで勉強しました。

8.2.3 Root SignatureをHLSL側で定義するのは一般的なのか?

Geminiに質問しました。

まずRoot SignatureをHLSL側で定義すると以下のようなMeritがあるそうです。

Codeと定義の一致が保証しやすい。と言うのは大きな利点ですね。

更にCompile時の検証がしやすいのも利点です。

でも一番重要な、こっちで実装した方が速い。というのが無いです。

という事は速度的には同じか遅いって事でしょう。

更に一般的かと言うと

全然、一般的じゃないみたいです。

Geminiにこの動画(URLを指定)にこういうやり方でやってるけど、これって正しいの?と聞くと、

間違っていても、元の動画が間違ってるとは答えず、こういう別な考え方もあります。的な回答を返してきます。

これもそんな感じの回答です。

そこから推測すると、多分、誰もこんなやり方採用してないでしょう。

一応勉強はしますが、こういうやり方も出来るぐらいの理解にしておきます。

9. まとめと感想

なし

10. 参照(Reference)

[1] Procedural Minds. (2024, July 28). Get started with PCG 5.4 by creating a full building | UE 5.4 p1 [Video]. YouTube. https://www.youtube.com/watch?v=oYNA24tcYc0

[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] Ryan Laley. (2025, September 9). Getting Started with Control Rig in Unreal Engine 5 – Basic IK Explained [Video]. YouTube. https://www.youtube.com/watch?v=s5yJlJGjjDE

[4] AndiDev. (2020, July 1). UE4: Control Rig - Basic IK [Video]. YouTube. https://www.youtube.com/watch?v=g0gUZr5i7Q0

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

[6] Howard, J. (2022, July 22). Lesson 7: Practical deep learning for coders 2022 [Video]. YouTube. https://www.youtube.com/watch?v=p4ZZq0736Po

[7] Howard, J. (n.d.). Scaling up: Road to the top, part 3. Kaggle. https://www.kaggle.com/code/jhoward/scaling-up-road-to-the-top-part-3

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

[9] NVIDIA. (n.d.). Training the Jetbot: Ground Truth. Isaac Lab Documentation. Retrieved from https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/training_jetbot_gt.html

[10] Nvidia. (2026, February 14). Walkthrough. Isaac Lab Documentation. https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/index.html

[11] Anthropic. (n.d.). Claude code in action. Retrieved from https://anthropic.skilljar.com/claude-code-in-action

[12] OpenAI. (n.d.). Codex. OpenAI Developers. Retrieved from https://developers.openai.com/codex

[13] OpenAI. (2026). Codex quickstart. Retrieved April 30, 2026, Retrieved from https://developers.openai.com/codex/quickstart

[14] Skyentific. (2016, April 21). Secrets of walking robot (NVIDIA Isaac Lab and Isaac Lab Arena) [Video]. YouTube. https://www.youtube.com/watch?v=8wJVWRbssu8

[15] Lötwig Fusel. (2023, August 10). Root Signature & Rasterizer | D3D12 Beginners Tutorial [D3D12Ez]. YouTube. https://www.youtube.com/watch?v=RSzwmaBSUmw

UE5の勉強などなど

2026-02-01のBlogの「AIについての調査(ComfyUIの勉強)」で議論した通り、勉強内容を変更する事にします。

勉強の内容や目的はそれぞれの章にまとめる事にします。

1.今週の予定

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

  • 映像作成用UE5の勉強
  • AIの勉強
  • Nvidia Omniverseの勉強
  • AIの勉強2(日本語字幕AIを作成する)
  • Claudeの勉強
  • Nvidia Omniverseの勉強2(強化学習の勉強)
  • DirectX12の勉強

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

2. 映像作成用UE5の勉強

UE5の勉強で、Gameではなく、CGIを作成するために必要な勉強をここでします。

今、Mainで勉強してるのは、

  • PCGを使用した建物の作成
  • Control Rigの勉強

の2つです。

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

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

最終的にはUEFNのMap内で神社を作成して、 誰でも参拝出来るようにするつもりです。

2.1.1 前回の復習

前回はugrxbjkfa_tier_2を使用した石道の作成の続きをやっていました。

前々回は、Randomに生成したPointにugrxbjkfa_tier_2を生成して石道を作成しました。

すると以下に示した様に

道に隙間が発生します。

それを前回は、以下の様に石道を生成し

発生したTilingを隠すために、その上にRandomに生成したugrxbjkfa_tier_2(先々週作成したもの)を重ねました。

結果です。

重ねた部分のTitlingは完全に無くなっていました。

正し前回は本当に重ねただけなので、以下の様に

横から見ると凸凹です。

ので

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

2.1.2 そもそもそんなにugrxbjkfa_tier_2を使用した石道の作成を頑張る必要があるのか?

こっちの石道の方がしっくり来るから実際はこっちを採用すると思います。

だったらugrxbjkfa_tier_2を使用した石道の作成にそんなに時間を掛ける必要もないでしょう。

脇の砂利道を作った方が良いかもしれません。

ただ、先週のBlogにはこれからの作業として

  • 一端、Static Meshで全部敷き詰めた石道を生成して、その上に今回作成したSub Sandou2ノードを配置
  • PCGPoint Dataが一個しかないから、Sub Sandou2ノードのRotational Angleは全てのPointを同じ角度で回転させるような実装で作成しました。それぞれのPointを別なPCGPoint Dataに属させて、Loopを使用してそれぞれのPointのRotational Angleの値を別々にする方法を検討します。

と書いていました。

Loop用にPCGPoint Dataを分割する実装方法を確認する事は必要です。

今週はこれをやる事にします。

2.1.3 Loop用にPointをPCGPoint Dataで分割する方法を確認する

「2.2 PCGの勉強」の勉強で使用してるBuildingのProjectを開いて実装を確認します。

ナニコレ?

Buildingを作成したLevelが開けません。何度やってもErrorになります。

Geminiに質問したら

と回答しました。

具体的な直し方として

と言っています。

2の回答は論外ですが、他の回答は今とる選択肢としてどれくらい妥当なのか分からないです。

Claudeは以下の回答を返してきました。

やっぱりGPUを最新版にUpdateする事からやってみるかな。

一応CopilotやChatGPTにも同様の質問をしてみます。

Copilotの回答です。

ChatGPTの回答です。

Geminiに更に詳しく状況を説明したらVRAMの容量が足りない可能性が高いから以下の事を試せと言って来ました。

やってみます。

全部Lowに設定しました。

開けました。

開けた事をGeminiに報告したら

これは滅茶苦茶興味あります。

後で、これは調べる事にします。

負担を下げる為に

先週試しに実装したInnerのDoorを生成するStatic Mesh Spawnerノードは外しておきます。

このTutorial Seriesでおそらく一番最初に作成したLoopノードを見つけました。

名前はPCG Copy Point Advancedノードです。

ここにLoopsとしてPassされているFloor Loopsの実装を探します。

ありました。

PCGGet Floor LoopsノードのDataを確認します。

Floorの数だけPCG Attribute Setが生成されていました。

これをLoopしてるからそれぞれの階のWallが、PCG Copy Point Advancedノードで生成出来るようになる訳です。

PCG Copy Point Advancedノードの実装を更に細かく見て、どこでPCG Attribute Setが生成されているのか確認します。

ここでした。

Spline SamplerノードではPCG Point Dataが一個しかありませんが、

Attribute Partitionノードでは

PCG Point Dataが10個になっています。

そして次のGet Attribute From Point Indexノードで

PCG Point Dataが

PCG Attribute Dataになっていました。

もう少し詳しくみます。

PCG Copy Point Advancedノードを開きます、

あれ?

全然違う実装が?

さっきまで、PCG Copy Point Advancedノードと思って見てたのは

PCG Get Floor Loopsノードでした。

間違えた。

でもこのNodeの実装でどうやってPCG Attribute Dataの数を増やすのか理解出来たので、それをここにまとめます。

まずSpline Samplerノードで

一個のPCG Point Data、

10個のPointを返します。

Attribute Partitionノードで

それぞれのPointをPCG Point Dataに変換します。

これが可能なのはAttribute PartitionノードのParameterで以下の様に設定してるからだと思います。

これについては後で深堀します。

最後にGet Attribute From Point Indexノードを使用して

それぞれのPCG Point DataをPCG Attribute Setに変換します。

これで、それぞれのPointに対応するPCG Attribute Setが出来ました。

2.1.4 過去のBlogを調べる

2024-12-08のBlogに今日勉強したのとほぼ同じ内容がまとめられていました。

この時はAを押して表示されるData群が何を指してるのか、全然理解してなくて、ただTutorialで言った通りに実装してるだけでした。

 Get Started With PCG 5.4 By Creating a Full Building | UE 5.4 P1 [1]の<Loop Counter Subgraph>でこの部分の実装を習ったと書いてあります。

では動画を見て確認します。

前節で勉強した内容と大体同じ事を言っていました。

特に付け足す内容は無かったです。

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]の<26:29 - Select Random Doors in Rooms and Assign Mesh>を実装する予定でしたが、

Tutorialに載ってない以下の部分の実装が

何をしてるのかを調査して終わってしまいました。

結論から述べると

この部分の実装は、どのStatic MeshをPointに表示するのかを指定しています。

Data Assetで使用するStatic Meshとその特徴一覧を作成し、

Get Property From Object Pathノードで、そこから一個の要素を以下のような設定で抜き出して

その設定をMatch and Set AttributeノードでPointに紐づけます。

最後にStatic Mesh Spawnerノードを以下の設定にして

Meshを生成しました。

先週のBlogの最後に

来週はこれをもう少し簡単な実装にしてもっと細かい部分も検証して理解する事にします。

例えばMatch and Set Attributeノードには以下の2つの設定がありましたが、

その違いについても理解出来る様に検証します。

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

2.2.2 この実装のそれぞれのNodeの機能について復習する

もっと簡単な実装を敢えてするよりは、Get Property From Object PathノードとMatch and Set AttributeノードのParameterを理解する勉強をする事にします。

Get Property From Object PathノードのParameterです。

まずInput SourceのLastです。

確かこれは前のNodeのOutputの値をそのままInputのDataとして受け取るって意味だったはずです。

あってるって。

はい。

合ってました。

次にMatch and Set AttributeノードのParameterについてです。

ここは、Match Weight AttributeをEnableして値にWeightを追加してる実装もあります。

このMatch Weight Attributeの意味を調べます。

じゃあ、一個しか候補が無い場合はセットする必要はないってことか。

そう言えば、TutorialではBuildingの壁用のStatic Meshを2種類選んでいました。それでRandomにどちらかの壁を選択出来る様にこの値を指定していたのか。

理解しました。

もう終わってしまった。

この後先々週勉強した内容を実装しようかと思ったんですが、またLevelが開けなくなっても嫌なので、今週はこれでお終いにします。

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 [3]を勉強する必要がある事が判明しました。

のでControl Rig [3]を勉強する事にしました。

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

前々回の勉強で、どうやらBasic IKを使用すればIK Controlと通常のControlを併用出来るみたいだ。

という事が判明しました。

そしてUE4: Control Rig - Basic IK [4]にそのBasic IKの設定方法が詳しく説明されているみたいという事も判明しました。

ので、前回はUE4: Control Rig - Basic IK [4]を勉強しました。

このTutorialでは以下のサソリ型のRobotを使用してBasic IKの使用方法を説明していました。

このTutorialで勉強した内容で、今までやった事が無い部分だけ以下にまとめておきます。

まずSpaceです。

このTutorialでは、Basic IKをセットするのにSpaceを使用してその子供にControlをSetしていました。

ここでの使用状況から考えるとSpace はその子の Control の World Coordinate の原点を自身の位置に合わせる役割を果たしているようです。

次に肘の設定です。

肘の設定では、まず

と書いてありました。

これは重要発言なので後で確認します。

次に以下のような肘の向きが反対側になる現象の直し方です。

これはBasic IKノードにあるPole Vectorの値を調整して直します。

具体的な手法は先週のBlogにまとめられているのでここには記しません。

以下に示した緑のIconを表示させ

その位置を調整します。肘の位置は常にそのIconから最短距離かつ、肘が取れる位置に配置される事になります。

2.3.2 Getting Started with Control Rig in Unreal Engine 5 – Basic IK Explained [5]を勉強する

Basic IKのTutorialを一個だけ勉強してもBasic IKの全体像は掴めないので、もう一個勉強する事にします。

本当は公式SiteのControl Rig [3]にあるBasic IKを勉強しようと思ったんですが、UE5.7のControl Rig [3]にはBasic IKのTutorialはありませんでした。

のでGetting Started with Control Rig in Unreal Engine 5 – Basic IK Explained [5]を勉強する事にしました。

以下のSkeletal Meshを使用して説明するそうです。

気持ち悪。

Control Rigを作成ました。

Control Rigを開いてBasic IKノードを追加しました。

Basic IKノードの要素の説明をしています。

Effector Itemとは

IKとして動かすBoneを指します。腕なら手、足ならFootとかになります。

次にItem AとItem Bについて説明しています。

これはEffect ItemにセットしたBoneを動かすと同時に動くBoneを指定します。

腕なら前腕をItem B、上腕をItem Aにセットします。

次にEffectorについて説明しました。

これはEffector ItemにセットしたBoneを動かすためのControlをSetするための要素です。

ここではHandからControlを作成し、それをGet Transform Controlノードを使用して繋げていました。

次はPole Vectorについての説明です。

Pole Vectorに関しては詳しく勉強する必要があるので、以下に実装方法から詳しくまとめました。

まずここに接続するためのControlを前腕のBoneから生成しました。

更に生成したControlのIconの位置を肘から離して配置しました。

そしてGet Transform Controlノードを使用して以下の様に接続しました。

TranslationとPole Vectorを繋いでいます。

すると肘が以下の様にねじ曲がって表示されるようになりました。

更に肘のControlのIconの位置が元に戻ってしまっています。

肘のControlのIconの位置は、

以下の様に移動させた後で、

Controlを右Clickして以下のBoxを表示させ

Set Offset Transform from Currentを選択します。

すると以下の様にCompileしても肘のControlの位置が指定した場所のままになります。

このやり方は前回勉強したUE4: Control Rig - Basic IK [4]のやり方と違いますね。

UE4: Control Rig - Basic IK [4]では、

Pole Vectorの値は、Handから生成したControlのTranslationの値にAddノードで追加して

Pole Vectorに繋いでいました。

更に、このAddで追加した位置を表示するのにかなり奇妙な方法を採用しています。

前回のBlogでこのPole Vectorの実装方法を勉強した時に、

と書いていましたが、これは

Basic IKは普通のControlと重なっても操作出来るの?

と言う意味では無くて

今ここで教わった方法でPole Vectorの値を指定する方法を指していたようです。

はい。

一つ謎が解けました。

次にPrimary AxisとSecondary Axisについてです。

これらの値を指定するには前腕のBoneのLocal Coordinateを確認する必要があります。

前腕のBoneはX軸に沿って+側に伸びています。

正規化したVectorに直すとX:1.0、Y:0.0、Z:0.0になります。

のでPrimary AxisにもX:1.0、Y:0.0、Z:0.0をセットします。

Second Vectorですが、これは前腕のBone の原点からPole Vectorを指すVectorの正規化した値を指定します。

つまり以下の様になります。

この状態でCompileすると

以下に示した様に

今まで捻じれていた肘が真っすぐに表示されるようになります。

ここでBasic IKノードの要素の説明は終わっています。

この後手のControlを動かして、腕がどんな風に動くのか示していますが、

腕の位置がどんなに変わってもPoler VectorのControlのIconの位置が移動しませんでした。

この設定はあまり良くないかもしれませんね。

まあ良いです。

後何個か別のBasic IKのTutorialを見て他にどんなPole Vectorの設定方法があるのか確認し、それぞれの特長を実装して確認してからどれを採用するのか決める事にします。

これは来週以降やります。

今週はここまでです。

3. AIの勉強

AIの勉強の目的ですが、

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

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

ここではPractical Deep Learning for Coders 2022 [6]の勉強をしています。Antigravityを使用したVibe Codingの勉強はしばらくお休みします。

3.1 前回の復習

 前々回からLesson 7: Practical Deep Learning for Coders 2022 [7]の勉強を始めました。

NotebookLMのまとめによると、このLectureではModelのMemory管理と協調Filteringの2つを勉強するそうです。

<05:58 - Understanding GPU memory usage>まで勉強したんですが、

そこで

Scaling Up: Road to the Top, Part 3 [8]の内容を説明し始めました。

のでこっちも勉強した方が良いとなり、

前回は、Scaling Up: Road to the Top, Part 3 [8]を勉強しました。

予定では

In [9]まで勉強するはずでしたが、途中から頭が回らなくなってしまったので、

以下に示したIn [5]の実装を勉強する手前で終了していました。

今週はこの続きから勉強します。

3.2 Scaling Up: Road to the Top, Part 3 [8]の続きを勉強する

以下の部分から勉強します。

Geminiによる日本語訳です。

最近はGeminiばっかり使用しています。

今回はChatGPTで勉強します。

これが普通の計算方法で

こっちがGradient Accumulationを使用した実装方法だそうです。

Full Implementationはこっちに載ってるそうです。

今回はざっと流れが理解出来れば良いので、Codeには深入りしません。

これはSmall ModelでGradient Accumulationの性能を試すつもりでしょうか?

Memoryがどれくらい使用されているのかを示すための関数だそうです。

Accum=1の時は、5GMのMemoryを使用したそうです。

Accum=1という事は、Gradient Accumulationをしてないって事でしょうか?

Accum =2の時です。3.2GBのMemoryを使用しています。

かなり減っていますね。

4GB?

まあ切り上げればそうですね。

ここでIn[9]まで勉強しましたね。

次のIn[10]でこの節がお終いなので、そこまで読んでしまいます。

これはAccum = 4にしています。

使用したMemoryの量は2.6GBです。

更に下がっています。

このSiteで言いたい内容は理解しました。

Gradient Accumulationを使用してVRAMの負担を減らしたって事です。

ChatGPTに何も質問しなかったですね。

省が無いので以下の質問をします。

回答です。

やっぱりデメリットあるのか。

読んでいきます。

これがAccum =4と同じって事?

そのようですね。

固定費は絶対にかかるって事ですね。

次に聞きたかったDemeritについてです。

学修時間が余計にかかるのか。

これはまあ当然というか、時間をかける事で性能を補えるならそれはそれで有りなんで、まあ納得の等価交換って感じです。

つまりVRAMが耐えられる最小のAccum数を指定するのが、最も効率が良いという事ですね。

更に以下のDemeritがあるそうです。

これは無視します。

はい。

私の解釈と全く同じです。

良し。理解しました。

うーん。

ChatGPTの評価をどうしますか?

あんまり使ってて満足感はありません。

が説明内容はかなり勉強になりました。

後、最初に以下の質問をしたんですが、

こんな回答を返してきました。

つまり全部は読めてない。と言ってます。

正直、NotebookのCellの内容ぐらい読めて欲しいので減点という気持ちと、

読めない事を正直に告白してるので加点、

と言う複雑な評価になってしまっています。

こういうのは評価する人間側の欠点なのかもしれません。所詮、人間には100%客観的に評価する事は出来ませんから。

なんとも言えない感想になってしまいました。

4. Nvidia Omniverseの勉強

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

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

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

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

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

4.1 前回の復習

前々回はIsaac Lab Documentation [9]のWalkthrough [10]のEnvironment Design [11]まで実装しました。

前回は実際にProjectを起動して以下の様になってるか確認しました。

まず以下のCommandでIssac LabのProjectを起動しました。

次に

isaac_lab_tutorial_env.pyの_get_dones()関数のReturn値が間違っていてErrorになりました。

以下の様に直しました。

これで実行すると

以下の様にJetbotが表示され

Tutorialに載ってるDemo画面と同じ画面がIsaac Simに表示されるようになりました。

4.2 Exploring the RL problem [12]を復習する

今週からExploring the RL problem [12]を復習します。

Blogを調べて前に勉強した内容を以下にまとめます。

2026-01-11のBlog

ChatGPTの訳でこのTutorialの文章を読んでいます。

以下に訳を記します。

2026-01-11のBlogには単純に

とだけ書いていましたが、更に

  • IsaacLabTutorialEnvCfgに書き込む事
  • Observation spaceを6から9に変更する事でJetbotのCommandを追加する事

などの重要な情報も含んでいますね。

まずIsaacLabTutorialEnvCfgは学習環境(Environment)の構成(ルールや設定)を定義・管理します。

具体的には

  • シーンの構成 (Scene): どのロボットを出し、どの地面を使い、ライトをどう配置するか。
  • 観測の設定 (Observations): ロボットの関節角度や速度など、AI(エージェント)が「何を見て」判断するか。
  • 報酬の設計 (Rewards): 目標に近づいたら加点、転んだら減点など、AIの「良し悪し」をどう評価するか。
  • 終了条件とリセット (Terminations): どうなったらエピソードを終了し、初期状態に戻すか。

を指定します。

次にObservation spaceを6から9に変更する事ですが、

今のIsaacLabTutorialEnvCfgの実装では

あれ?

6じゃなくて3になってる?

あ、

Training the Jetbot: Ground Truth [13]を抜かしてた。

こっちを先に復習します。

4.3 Training the Jetbot: Ground Truth [13]を復習する

いや、このTutorialを完全に見逃がしていました。どうりで短いなと思いました。

Blogを調べると

2025-11-30のBlogから2025-12-21のBlogで勉強していました。

今日はこのBlogを読み直します。

2025-11-30のBlog

Training the Jetbot: Ground Truth [13]の最初から読んでいます。

以下に訳を貼っておきます。

訳はChatGPTで行っていました。

ObservationとRewardの値を編集する事で、JetbotがControllerの命令通りに動くように出来るんでしょうか?

なんか、RLでそんな事学習させなくても、普通にCode書いた方が速い気がします。

まあRLの使い方の勉強ですから、こんなものかもしれません。

Expanding the Environmentの文章です。

訳です。

ここで用事ができてしまったので急遽中止します。

続きは来週勉強します。

5. AIの勉強2(日本語字幕AIを作成する)

YouTubeなどを見てると日本語の字幕をつける動画が沢山あります。しかしその字幕の漢字が間違っています。

これは2パターンあって、字幕は合ってるのに、間違った読み方をする場合と、音声はあってるのに字幕の漢字が間違ってる場合です。

見ていて、もしくは聞いていて非常にイライラします。

元のAIに一寸Fine Turningすれば直ぐに直ると思うんですがどうなんですか?

簡単に直せるなら、Projectとして自分でやってみようかなと思っています。

(この勉強は2週間に一回だけ行います。)

5.1 前回の復習

Whisperで作成したTest3の字幕は、

以下に示した様に文字化けしていました。

これをGemini CLIを使用して直してもらおうとしました。

結論だけ書くと出来ませんでした。

Policyを違反する以前に、全く使用していません。

でどういう事ってGeminiに聞いたら

と回答が返って来ました。

そしてGeminiは

のようにAPI Keyを使う方法を進めて来ました。

ここで終わっています。

5.2 もう一回、Gemini CLIを試してみる

APIからGeminiを使用する前にもう一回Gemini CLIを試す事にします。

その理由ですが、もう2週間、まったくGemini CLIを触って無いので、起動のさせ方とか使い方とかを全部忘れてしまったからです。

もう今日はこの使い方を思い出すだけで十分な位です。

前のBlogを読み直してみたんですが、やり方が書いてません。GeminiのChatを調べたら、2週間前のChatにやり方が書いてありました。

ここからGeminiとGemini CLIとずっと対話して、最終的には文字化けしたFileを直す事に成功しました。

以下にやった内容を簡単にまとめます。

まず前回と同じ

cat test3_corrected.txt | gemini "以下のテキストは文字化けしています。内容を推測し、自然な日本語に修正して出力してください。解説は不要です。テキストのみ出力してください。" > test3_fixed_final.txt

を実行してみました。

すると

              > test3_fixed_final.txt

Loaded cached credentials.

Attempt 1 failed: You have exhausted your capacity on this model.. Retrying after 10000ms...

Attempt 2 failed: You have exhausted your capacity on this model.. Retrying after 10000ms...

Error when talking to Gemini API Full report available at: C:\Users\kazuh\AppData\Local\Temp\gemini-client-error-Turn.run-sendMessageStream-2026-04-23T04-31-44-730Z.json

[API Error: You have exhausted your capacity on this model.]

An unexpected critical error occurred:[object Object]

(base) PS D:\2026\OpenAIWisper関連\Test3>

と、2週間前と同じErrorが表示されました。

やっぱりAPIキーを利用した通信に変更しなとだめかな?と思ったんですが、それ以前に全く使えないのか、別な事には使えるのかを確認したくなりました。
簡単な質問には今の条件でも回答してくれるのかを試してみました。

まず

を試しました。

これは普通にHelloと返してくれたんですが、その後に

を起動したら、それまでのTerminalの記録が消えてしまいました。

そしてGemini CLIが以下の様に起動しました。

このTerminalの表示からは消えてしまったんですが、Gemini CLIを起動する時に、どのFolderまでAccess出来る様にするのかという事も聞いてきました。

今、開いているFolderだけ許可して、Gemini CLIを開きました。

そして「こんにちは」と打ち込んだら

と回答が返って来ました。

「以下の文字化けを直して」と打ち、改行しようとしたら実行されました。

どうもGemini CLIはCtrl + EnterはEnterと同じと認識するみたいです。

文字化けした文章を打ち込み

Enterを押しました。

綺麗に直してくれました。

最後に

と書いてありました。

これは凄い。

と頼むと

と回答してこの後ずっと、全部の文字化けを直したのを表示しました。

1000行ぐらいあるので以下に一寸だけ示します。

用語で修正したものも以下に示した様に表示されていました。

凄い。

後は、これを別なFileにSaveするだけです。

しかしGeminiの方に確認したら

ようするにGemini CLIにはFileを作成してそこに保存する事は無理って言ってます。

しかしCLIに直接聞くと

と言ってやってくれました。

出来ました。

こんな感じで出来てました。

一応、文字化けをCLIを使用して直せるようになりました。

6. Claudeの勉強

Houdiniの勉強はしばらくお休みします。そしてClaudeの勉強をします。

以下の順番で勉強しろとClaudeに言われましたが、

流石に101は簡単すぎるので、Claudeの APIから勉強する事にしました。

そしたらAPI FundamentalというTutorialは無くて、代わりに以下のTutorialを勧められました。

のでしばらくこのTutorialを勉強する事にします。

<追記>

このままだとClaude Codeの勉強を始めるまでに一年位かかってしまいます。

Claudeにその事を質問したら

との回答を得ました。

ので今回から

https://anthropic.skilljar.com/claude-code-in-action

を先に勉強する事にします。Claude Code in Action [2]を勉強します。

6.1 <Making changes>を勉強する

はい。では文章を読んでいきます。

<Using Screenshots for Precise Communication>

いや、こんなの普通の生成AIでも使ってますけど。

<Planning Mode>

Planning Modeと言うのがあるのね。

<Thinking Modes>

要は使用するTokenの数が増えるって事ですか?

<When to Use Planning vs Thinking>

全体の構成を考えるにはPlanningを使用して、実際のCodeの組み方が分からなかったり、Bugを直したりする時は、Thinkingを使用するって事のようです。

<動画を見る>

見ましたが、この文章で説明してる以上の内容しか理解出来ませんでした。

6.2 <Course satisfaction survey>をやる

やりました。

6.3 <Controlling context>を勉強する

Claudeで訳してもらいます。

会話の流れをこっちでControlするって事でしょうか?

<Interrupting Claude with Escape>

Escapeキーで途中で計算を止める事が出来るのか。

多分Claudeだけじゃなくて他の生成AIも同じでしょうね。

うーん。

まだこんな経験はした事ない。

そういうものだ。と理解して次にいきます。

<Combining Escape with Memories>

このやり方が実際の例でやって見せてほしいです。

そうしないと本当はどうやって実行するのか分かりません。

うーん。

動画ではやってくれてるはずです。

動画に期待しましょう。

<Rewinding Conversations>

はい。

これってイラストの生成をお願いする時に使えるとうれしいんですが。

後で、Geminiで試してみよう。

<Context Management Commands>

これって会話の途中で/CompactをPromptに入れたら実行されるのかな?

非常に興味あるCommandです。

この/Clearを使用するなら、最初から別なChatを開始すれば良いのでは?

<When to Use These Techniques>

成程。

Claude Codeならではの問題があるのか。

そしてその時にこれらのControl技術が必要になるのか。納得。

はい。

<動画を見る>

ESCは以下の環境で使用していました。

沢山のTODOを実行しようとしてるところで、ESCで中止させ、Promptで新たな指示を出しています。

/Compactは以下の様に使用していました。

以上でした。

まあ、最初なんでこんなControl技術があるぐらいの理解で充分でしょう。

6.4 <Custom commands>を勉強する

自分でCommandを作成する事も出来る。って事ですね。

<Creating Custom Commands>

こんな簡単な方法でCustom Commandを作成出来るのか。

知らんと絶対に出来ないし、良い事聞きました。

<Example: Audit Command>

これってAudit.md Fileに1から3の文を書き込むだけでいいの?

<Commands with Arguments>

これは意味が一寸分からないです。

the use-auth.ts file in the hooks directory

が、Argumentという事でしょうか?

ここに書かれた内容を理解するために

Write comprehensive tests for: $ARGUMENTS

があるんでしょうか?

Claudeに質問したら以下の回答をくれました。

要は、$argumentの部分がCommandのInputした文章に書き換えられています。

それだけです。

理解しました。

<Key Benefits>

これはCustom Commandの利点を述べてるんでしょうか?それともさっきのArgumentの利点を述べてるのでしょうか?

どっちでも合ってそうです。

<動画を見る>

特に追加する内容は無いです。

6.5 < MCP servers with Claude Code>を勉強する

やっとMCPについて勉強出来るぞ。

おお、来た。

やっとこれについて習えるぞ。

Playwrightですか。

安全性についてどう配慮すれば良いのかについては何も語たらない予定でしょうか?

<Installing the Playwright MCP Server>

こんだけで良いの?

<Managing Permissions>

これは追加する前に一寸考えた方が良いFileかもしれません。

勝手にBrowserをControl出来るFileを追加する事への安全性をClaudeに聞いてみましょう。

やっぱり!

成程。これらの事を確認するためにDefaultでは一々許可を得る仕組みになってるのか。

読み取り専用である事、

動作を完璧に理解してる事、

そしてもう何度も同じ動作を繰り返していて、煩わしくなってる

場合は、省略してもいいかもしれない。と言っています。

ので以下の場合は

省略してはいけないそうです。

成程。理解しました。

<Practical Example: Improving Component Generation>

これって前にAntigravityでやったやつじゃん。

そんくらいの基礎を弄ってるのか。今は。

ClaudeがPromptもUpdateするのか。

<Results and Benefits>

これはBrowserをClaudeが自身で確認出来ると、もっと優れたDesignのWebsiteが作成出来ますって事でしょうか?

<Exploring Other MCP Servers>

Database InteractionってDatabaseの実装を全部やってくれるの?

それだったら凄いですね。

うーん。

早くこれらのMCP Serverを試してみたいでです。

<動画をみる>

特になし。

7. Nvidia Omniverseの勉強2(強化学習の勉強)

Nvidia Omniverseの勉強で、Isaac Lab Documentation [9]の勉強をしていますが、

これってIsaac Labの使用方法の勉強が主で、

Robotが自動歩行するためにどんな強化学習をしなければならないのかは別に勉強しないといけないのではないのか?

との疑問が出て来ました。

で先週は強化学習の教科書について調査しました。

でその教科書を勉強するための時間をここに作りました。

7.1 Secrets of Walking Robot (NVIDIA Isaac Lab and Isaac Lab Arena) [14]を勉強する

Skyentific氏の2足歩行Robotの最新の動画が公開されていたので今週はこれを見る事にします。

<00:00 Intro>

今までの動画の内容の復習を簡単に行いました。

その後で、この動画では、Simulationで作成したModel(Policy?)をどうやってRobotに導入したのかを説明すると言いました。

しかし最初の話はURDFをUSDに変換するところです。

<01:44 URDF file>

URDF fileをどうやって作成したかの説明です。

以下に示したのは

単純化した3D ModelでMeshのData用だそうです。

以下に示したのは、2番目のModelで

正確な3D Modelだそうです。それぞれのPartsの重量も正確に記録されているそうです。

この後、それぞれのPartsとOrientationの話をしています。

が、この部分はよく分かりません。

で、この方法でそれぞれのPartsをまとめたから

全部のPartsのRotationのOriginが(0,0,0)になった。

と説明していました。

このお陰で後の計算がかなり簡単になったそうです。

Moment of Inertiaの単位は以下の様になっていました。

以下に示したLinkのOriginの位置について説明していました。

以下の部分ですが、

一回聞いただけではよく分かりません。

Center Of Mathの計算方法も説明していました。

この辺の細かい計算方法は、実際にRobotを作成する時に参考にします。

最後に以下のSiteで作成したURDFのRobotが

実際のRobotを正しく表現してるかを確認していました。

<07:09 URDF to USD>

ここではURDFからUSDを作成する方法を説明するそうです。

まずIsaac Simを起動します。

EmptyのNew Stageを作成しました。

完全にEmptyにするために以下のDefaultのStageの設定も消しました。

URDFをImportします。

このRobotは動き回るのでMoveable Baseを選択するのを忘れてない様にします。

以下の様になりました。

Lightが無いので真っ暗です。

一回、別なStageのFileを開いて、もう一度このStageのFileを開きます。

全てのComponentが表示されるようになりました。

この後、色々説明していますが、理解出来ませんでした。

そしてSaveしてIsaac Simを閉じました。

作成されたFolderを開くと以下の様になっていました。

両方Copyして

以下のFolder内にPasteしました。

結構Volumeあります。

既にくたくたです。

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

これから毎週、少しずつやっていきます。

8. DirectX12の勉強

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

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

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

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

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

8.1.1 前回の復習

何を勉強したのか覚えていません。

先週のBlogを読み直します。

「6.2.5 頂点Shaderからの定数Buffer(行列)の参照」を勉強していました。

ああ、思い出しました。

教科書が一寸間違って記入してた箇所です。

勉強した内容は

Basic Vertex Shader.hlslに以下の実装を追加しました。

更にここで作成した変数、matを使用した計算も以下の様に追加しました。

本当はここのMatrixの乗算はしっかり勉強しないと危ないんですが、先週は気力が無くてSkipしてしまいました。

<「Root SignatureはHLSL内で定義すべし」に関しての意見のまとめ>

 Root Signature & Rasterizer | D3D12 Beginners Tutorial [D3D12Ez][15]でLötwig Fusel氏は、Root SignatureはHLSL内で定義すべし。と言っています。

それを先週のBlogではこの部分の実装を言ってると解釈していましたが、それは間違っています。

「DirectX 12の魔導書」がやってるRoot Signatureの実装は、Lötwig Fusel氏の言う間違ったRoot Signatureの実装で、今ではあまりお勧めされてないやり方のでした。

でも動かない訳では無いし、何でRoot SignatureはHLSL内で定義しなければいけないのかも、あまりはっきりしないので、こっちではこのやり方でRoot Signatureを実装する事にします。

8.1.2 「6.2.6 Root ParameterとDescriptor HeapのBind指定」を勉強する

ではこの節を読んでいきます。

ここではRoot ParameterとDescriptor Heapを指定するそうです。

で、教科書の説明によると、

Shader Resource View用の指定をした時に、Root ParameterとDescriptor Heapの指定を既にしたそうです。

全く覚えていません。

教科書によると以下の実装が書いてあるとあります。

自分のProjectを見ると全く同じCodeが書いてありました。

この下に以下の実装を追加しろ。と教科書には書いてありました。

ただし、Sample Codeではこの部分の実装はComment Outされていました。

うーん。

そして教科書では、この部分の実装を追加した後で実行すると、元通りの絵が表示されるようになる。と言ってこの節が終わっていました。

うーん。

以下のErrorについての証言は何もないのか。

このErrorを先に直さないと、この部分の実装をした後で、実行しても意味が無いですね。

8.1.3 「6.2.6 Root ParameterとDescriptor HeapのBind指定」を実装する

それでは実装します。

そのままSample CodeのCodeをコピペしました。
この実装の2番目の行で、

D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV

だけIncrementしてるんですが、これって前に追加した
Shader Resource View用
のMemoryの量だけIncrementするはずですけど、CBV_SRVってそれをIncrementしてるのかな。
そうじゃない気がします。
この部分の実装についてAIに質問してみます。
DirectX12の事なのでCopilotに質問します。

この後、ずっと説明が続くので簡単に以下にまとめると

ここでは、Shader Resource View用のDescriptorが使用するMemory分をIncrementしてます。それがたまたまConstant Buffer View用のDescriptorとSizeが同じなので、

D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV

で指定してるという事でした。

ここで書かれているCBV_SRVがまさに、Constant Buffer ViewとShader Resource Viewを表していました。

そしてもう一つ重要な事を教わったんですが、それがViewとDescriptorの違いです。

Viewの定義です。

GPU上のMemoryをどう解釈するかを指定していますが、あくまでのCPU上の話なんです。

これからGPUに送るからこういう順番に小包を作りましょう。という話です。

それに対してDescriptorは

実際にGPU側に送る小包なんです。だからCBV用の小包もSRV用の小包も同じSizeにする必要があるんです。送った先(GPU)で処理しやすくするためにSizeを同じにする必要があるんです。

そうしないとGPUの速さを発揮できないから、あえてCBV、SRVそしてUAV用のDescriptorのSizeも同じにして送るんです。

それは兎も角として、

ViewはCPU側でGPU上のMemoryをどう解釈するかを指定したのに対して、

DescriptorはViewの設定内容を実際にGPU側に送るStructです。

DescriptorはGPU側に送られるのがViewとの違いです。

8.1.4 GitHubのRepositoryにPushする

この後、実際に動くのかのTestをするには、以下の

を実装する必要があります。

のでこれは来週やる事にします。

では今日実装した部分をGitHubのRepositoryにPushしておきます。

Commitします。

成程。Main.cppのCodeを追加した時はUpdate Main.cppとDefaultで書き込まれているのか。

前回はHLSL FileのCodeを追加したので、この部分が空白になったんですね。

Pushもしました。

Browserの方のGitHubを開いてChapter 6のBranchのRepositoryに、今日書いたCodeが追加されるか確認しました。

されています。

MainのBranchの方は元のままです。

はい。GitHubの操作も慣れて来ましたね。

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

もう頭が働かないので今週はお休みします。

9. まとめと感想

なし。

10. 参照(Reference)

[1] Procedural Minds. (2024, July 28). Get started with PCG 5.4 by creating a full building | UE 5.4 p1 [Video]. YouTube. https://www.youtube.com/watch?v=oYNA24tcYc0

[2] Anthropic. (n.d.). Claude code in action. Retrieved from https://anthropic.skilljar.com/claude-code-in-action

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

[4] AndiDev. (2020, July 1). UE4: Control Rig - Basic IK [Video]. YouTube. https://www.youtube.com/watch?v=g0gUZr5i7Q0

[5] Ryan Laley. (2025, September 9). Getting Started with Control Rig in Unreal Engine 5 – Basic IK Explained [Video]. YouTube. https://www.youtube.com/watch?v=s5yJlJGjjDE

[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. (2022, July 22). Lesson 7: Practical deep learning for coders 2022 [Video]. YouTube. https://www.youtube.com/watch?v=p4ZZq0736Po

[8] Howard, J. (n.d.). Scaling up: Road to the top, part 3. Kaggle. https://www.kaggle.com/code/jhoward/scaling-up-road-to-the-top-part-3

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

[10] Nvidia. (2026, February 14). Walkthrough. Isaac Lab Documentation. https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/index.html

[11] Nvidia. (2026, March 4). Environment Design Background. In Isaac Lab Documentation. https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/concepts_env_design.html

[12] Nvidia. (2026, April 17). Exploring the RL problem. In Isaac Lab documentation. https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/training_jetbot_reward_exploration.html

[13] Nvidia. (2026, April 17). Environment Design. In Isaac Lab documentation. https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/technical_env_design.html

[14] Skyentific. (2016, April 21). Secrets of walking robot (NVIDIA Isaac Lab and Isaac Lab Arena) [Video]. YouTube. https://www.youtube.com/watch?v=8wJVWRbssu8

[15] Lötwig Fusel. (2023, August 10). Root Signature & Rasterizer | D3D12 Beginners Tutorial [D3D12Ez]. YouTube. https://www.youtube.com/watch?v=RSzwmaBSUmw

UE5の勉強などなど

やっと勉強内容を表すLogoを直す時間を取る事が出来ました。

分かる人には直ぐ分かる、分からない人には全然分からないLogoを作る事が出来ました。

それぞれの勉強の内容や目的はそれぞれの章にまとめる事にします。

1.今週の予定

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

  • 映像作成用UE5の勉強
  • AIの勉強
  • Nvidia Omniverseの勉強
  • AIの勉強2(日本語字幕AIを作成する)
  • Claudeの勉強
  • Nvidia Omniverseの勉強2(強化学習の勉強)
  • DirectX12の勉強

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

2. 映像作成用UE5の勉強

今週は、経済センサスとかいう総務省からのアンケートに答えてたら、とんでもなく時間を取られてしまい、あまり作業が進みませんでした。出来た範囲だけ以下に記録します。

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

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

最終的にはUEFNのMap内で神社を作成して、 誰でも参拝出来るようにするつもりです。

2.1.1 前回の復習

ugrxbjkfa_tier_2を使用して

以下に示した様な石道を作成しました。

来週、つまり今週、以下の事を試すと書いてありました。

  • 一端、Static Meshで全部敷き詰めた石道を生成して、その上に今回作成したSub Sandou2ノードを配置
  • PCGPoint Dataが一個しかないから、Sub Sandou2ノードのRotational Angleは全てのPointを同じ角度で回転させるような実装で作成しました。それぞれのPointを別なPCGPoint Dataに属させて、Loopを使用してそれぞれのPointのRotational Angleの値を別々にする方法を検討します。

今週、全部やるのは無理かもしれませんね。

出来る所までやって行きます。

2.1.2 ugrxbjkfa_tier_2を使用した石道の作成

  • 一端、Static Meshで全部敷き詰めた石道を生成して、その上に今回作成したSub Sandou2ノードを配置

これをやってみます。

まず普通に並べてみました。

隙間がありますね。

Spline SamplerノードのDistance Incrementの値を

250.0に変更してみます。

横幅は以下の実装のCreate Attributeノードの値を2.0(-2.0)から1.75(-1.75)に変更して

みました。

結果です。

おお、隙間なく石道を作成する事が出来ました。

ただしTilingは凄いです。

これに先週作成した石道を重ねてみます。

以下に示したOrangeのLineが重ねた部分です。

よく分からないので重ねた部分を消します。

おお、全然違う。

これは重ねるべきです。

だだ単純に重ねると以下の様に

凸凹になってしまいます。

きちんとPCGで生成したPointで重ねる必要があります。

今週の作業はここまでにします。残りは来週以降やります。

2.1.3 来週以降の作業

今週はあまり出来なかったので以下の作業は来週以降やります。

  1. 一端、Static Meshで全部敷き詰めた石道を生成して、その上に今回作成したSub Sandou2ノードを配置
  2. PCGPoint Dataが一個しかないから、Sub Sandou2ノードのRotational Angleは全てのPointを同じ角度で回転させるような実装で作成しました。それぞれのPointを別なPCGPoint Dataに属させて、Loopを使用してそれぞれのPointのRotational Angleの値を別々にする方法を検討します。

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]の<26:29 - Select Random Doors in Rooms and Assign Mesh>を勉強しました。

今週はこれを実装します。

2.2.2  Create Procedural Interiors With Full Room Separation | UE 5.4 P5 [1]の<26:29 - Select Random Doors in Rooms and Assign Mesh>を実装する

初っ端から大問題です。

先週のBlogには以下の実装にDifferenceノードを追加すると書いてありましたが、

私の実装は以下の様になっていました。

Tutorialの途中を抜かしてしまったのかと思って、動画を見直しましたが、この状態からイキナリ

になっています。

ああ、Data Assetノードはまあそのまま配置すれば良いだけだと思いますが、Get Property From Object Pathノードの設定はどうなってるの?

よく見るとRegular Wallって書いてあります。

これだ。

まず以下の様に組み

Get Property from Object Pathノードの設定は以下の様にしました。

次のMatch and Set Attributeノードの設定ですが、今までこのNodeは3回程使用されていてそれぞれの設定は以下の2つのPatternに分かれていました。

全く使い方が分かりません。

調べます。

GeminiのThinking Modeがやっとそれらしい回答を返してくれました。

AIにPCGのNodeの機能を聞く時は、以下に示した様にNodeのParameterのScreenshotを示した上に質問する必要があります。

そうしないととんでもないHallucinationを起こした回答を返してきます。

この説明だとまだよく分からないですが、

だそうです。

これで分かりました。

このNodeは指定したMeshをPointに追加するんです。

となると何でRegular Wallを追加してるんでしょうか?

ここはInner Wallを追加すべきでしょう。

うーん。

まあいいや。

Levelを見てMeshが追加されてるか確認します。

されてないですね。

うーん。

Geminiに更に質問してみます。

そして

そして次の説明です。

そういう事だったのか。

Static Mesh Spawnerノードを使用するのに、どこで使用するMeshを指定してるのかずっと分からなかったんですが、やっと理解出来ました。

Match and Set AttributeノードがそれぞれのPointに対して使用するMeshを指定してたのか。

これでRegular Wallで指定したMeshが表示されるはずです。

あれ、されてないです。

うーん。

Match and Set Attributeノードの

Attributeを確認します。

おお、しっかりGet Property From Object Pathノードの属性が追加されています。

ここまでは正確に出来てるようです。

更にGeminiは

と言って来ました。

試してみます。

Static Mesh Spawnerノードの以下の設定をGeminiの言う通りにしました。

結果です。

高さもオカシイし、裏面用のMeshも生成されていませんが、Meshが生成されました。

そういう事だったのか。

他の実装に使用されているStatic Mesh Spawnerノードの設定を確認します。

Mesh Selector TypeがPCGMeshSelector_ByAttribute に変更されています。

更にAttribute NameもMesh と入力していました。

うーん。今日はこれだけ勉強したら十分ですわ。

2.2.3 来週の予定

今週は、以下の実装を使用して

PointにMeshを表示するための実装方法を理解しました。

来週はこれをもう少し簡単な実装にしてもっと細かい部分も検証して理解する事にします。

例えばMatch and Set Attributeノードには以下の2つの設定がありましたが、

その違いについても理解出来る様に検証します。

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を使用する場合は全部FBIKで指定する必要がある」

という仮説がほぼ正しい事が判明しました。

先週はこの仮説が本当かどうか、もう一度確認すると先週のBlogには書いてありました。

それがどういう事かと言うと昔、実装した以下のVroidのControl Rigで

IKと普通のControl Rigを併用して実装した記憶があったので、それを確認する

という事でした。

で、確認したところ、このModelに使用したControl RigではFBIKではなく、Basic IKノードが使用されていました。

そして

2025-01-26のBlog

と言うYouTube Channelが紹介されていて

このTutorialの2番目の動画を見たらBasic IKの使用方法が説明されていました。

しかもそれは私が探していたDragonの足をControlするためのControl Rigを追加する方法そのものでした。

一年前はこの動画を見ても何を言ってるのか全く理解出来なかったんですが、今なら理解出来ます。

来週はこれも勉強する事にします。

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

2.3.2 UE4: Control Rig - Basic IK [2]を勉強する

今週はこのTutorialを勉強して以下にまとめる事にします。

以下に示したサソリ型のRobotがBasic Ikを使用して両手を自由に動かしてるAnimationを示しています。

これが出来る様になるためのControl Rigの実装をここで勉強します。

Tutorialの最初で

Control Rigを開くと以下の実装が既にされていました。

これは前のTutorialで組んだ実装です。

Begin Executeノードは今はForwards Solveノードになってますね。

Distribute Rotationノードは今もあるのかどうか分かりません。分かりませんがこの辺はAIに聞きながら実装したら、代わりのNodeを教えてくれるでしょう。

後は、Get Control TransformノードのSpaceがLocal Spaceにセットされています。

次に新しいSpaceを追加しました。

Spaceは今まで使用した事がありません。

どんな機能なのか今一理解していません。Illustration用のSoftwareにおけるLayerと同じ機能だと思っています。

名前をHandSpace_lと変更しました。

HandSpace_lを右Clickして以下のBoxを表示させ

Control Space Transformを選択します。

すると以下に示した様に

前回作成した個々のControl Rigが表示されるようになります。

このTutorialでは、この個々のControl Rigの事をGizmoと呼んでいました。

このControl Space Transformの位置を以下に示した様に右手の位置に移動しました。

そしてまた右Clickして以下のBoxを表示します。

今度はSet Initial Transform from Closest Boneを選択します。

これはこのSpaceに最も近いBoneを見つけ、そのBoneの位置にこのSpaceを移動させます。

このように設定したSpaceに、新しいControl Rigを追加します。

以下の様になりました。

追加したControlのGizmoを以下の様に変更しました。

Basic IKノードを追加しました。

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

これはどのBoneをどの順番で選択すべきなのか、今の時点では一寸分からないです。

どのTutorialを見ても、Upper arm(もしくはUpper Leg)とLower Arm(もしくはLower Leg)を選択し、Effector Boneに足首もしくは手首をセットしてます。

どんな仕組みでそれらをこの順番でセットしてるのかが分かりません。

更に以下の設定もEnableしました。

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

そしてIK_Hand_lのGet Control TransformノードをEffectorに繋げました。

するとReview画面に先程まで消えていたRobotの前腕が表示されるようになりました。

でも肘の位置が一寸オカシイですね。

肘の設定を直します。

ここで爆弾発言してるんですが、

沢山のTutorialや本では、Elbowに別のControlを追加してそれで管理してます。

って言ってます。

え!

Basic IKは普通のControlと重なっても操作出来るの?

これは後で確認する必要がありますね。

それは兎も角、このTutorialでは別な方法でElbowの向きを直すそうです。

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

すると以下に示した様にElbowの位置が反対側に大きく移動します。

AddノードのOutputを右Clickして以下のBoxを表示し

Add Visual Debugを選択します。

OutputのPinの形状がBugになりました。

更に右上に赤いIconが追加されました。

Detailには以下のParameterが表示されてます。

Colorを緑にしました。

AddノードのBの値を以下の様に変更すると

ReviewのRobotの前腕が以下の様に変化しました。

更に緑色のSquareも表示されています。

これはTutorialの説明だとElbowはこの緑色のSquareの位置から、Elbowが取れる位置の中で最も近い場所に移動するそうです。

更にYの位置も調整して

以下の様にしました。

こんな機能があったのか。

以上でした。

2.3.3 UE4: Control Rig - Basic IK [2]を勉強した感想

こんな方法で肘の曲がる方向を調整してたのか!

知らなかった。

これなら前にやった

も直せますね。

更に以下のVroidの肘のControl Rigを直したのも

恐らくこの方法を使用してたんですね。

今見ると、PinkのTriangleが肘の位置に表示されています。これが、肘の位置を指定してるんだと思います。

来週は、これを実際に実装してみます。

そして

Basic IKは普通のControlと重なっても操作出来るのか?

についても検証する事にします。

3. AIの勉強

AIの勉強の目的ですが、

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

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

ここではPractical Deep Learning for Coders 2022 [4]の勉強をしています。Antigravityを使用したVibe Codingの勉強はしばらくお休みします。

3.1 前回の復習

先週、新しいTutorialの勉強を始めたはずなんですが、その内容を全く覚えていません。

この勉強を始める前に、一寸は何か覚えておるだろうと思ってかなり一生懸命に思い出そうとしたんですが、全く思い出せませんでした。

仕方ないので先週のBlogを読み直します。

Lesson 7: Practical Deep Learning for Coders 2022 [5]を勉強していました。

やっぱり。

でも内容を全く覚えてないって有り得る?

NotebookLMのまとめによると、このLectureでは、

ModelのMemory管理と協調Filtering

2つを勉強するそうです。

全く覚えてなかった。

<00:00 - Tweaking first and last layers>

最初の節です。

このLectureではNeural Networkの内部構造を勉強するそうです。

そのNeural Networkは色々いじる事が出来るそうです。しかし大抵は最初のLayerと最後のLayerをいじります。

前のLectureで使用したRice Paddyの例を引き続き使用して勉強するそうです。

実際に動画も見て中身の確認もしていました。

<02:47 - What are the benefits of using larger models>

ここでは大きなModelを使用した方が、精度が高くなるという事をまず説明し、その後で、

勾配蓄積(Gradient Accumulation)という手法を使えば、一般的なGPU(Kaggleの16GB GPUなど)でも非常に大きなモデルを動かすことが可能である

と宣言しています。

この動画が公開されたのは3年前ですが、NotebookLMの回答によるとこの手法は今でも有効だそうです。

<05:58 - Understanding GPU memory usage>

ここでは、まずNotebookLMが以下の要約をました。

  • GPUメモリを主に占有するのは学習中に計算・保持されるActivation(活性化)とgradients(勾配)
  • 全データを使わずに最小のサブセット(例:特定の1つのカテゴリの画像のみ)を使って短時間モデルを動かすことでその構成(モデル、画像サイズ、バッチサイズ)で必要なメモリ量を即座に把握できる
  • Pythonのガベージコレクション(collect())やPyTorchのキャッシュ解放(torch.cuda.empty_cache())を実行することでカーネルを再起動せずにGPUメモリを整理し、断片化を防ぐことができる

うーん。

これはModelの学習時の話をしてるはずですが、先週の私は何故か推論(Inference)時の話と勘違いして聞いてたようです。

Blogにそう書いてありました。

その後、動画を見てみます。

そしたら

Scaling Up: Road to the Top, Part 3 [6]の内容を説明していました。

Blogでも

うーん。こっちを勉強すべきか?

と書いていました。

ここで終わっていました。

3.2 Lesson 7: Practical Deep Learning for Coders 2022 [5]の続きを勉強する

先週勉強した内容はまったく憶えていませんでしたが、先週のBlogを読み直したら、何を勉強したのかは大体復習出来ました。

のでこれはこれで良い事にします。

Scaling Up: Road to the Top, Part 3 [6]の内容を勉強するかどうかですが、<05:58 - Understanding GPU memory usage>の動画を見直したところ、

Scaling Up: Road to the Top, Part 3 [6]の以下の場所までの説明を行っていました。

のでその部分までの勉強をする事にします。

Scaling Up: Road to the Top, Part 3 [6]を読む>

訳です。今回はChatGPTと勉強する事にします。

ここからPart2へのLinkをClickしても

Part1に飛んでしまいます。

だけどLectureでもこれをClickしたらPart1に飛んでいたんです。Lectureでは、そこから何かしてPart2に移動してました。私も散々探しましたがPart2はみつかりませんでした。

<<Memory and gradient accumulation>>

Memory管理とGradient Accumulation(勾配)についての話をするみたいです。

はい。

そして以下の実装が紹介されていました。

このCodeの内容については今回は無視します。

次の文です。

一段落毎に読んでいくことにします。

まずこのMemoryの単位MiBとは何なのかChatGPTに聞いてみます。

だそうです。

読み方も説明してくれました。

そしてこんな単位が出来た理由も説明してくれました。

そういう事だったのか。

確かにごっちゃになって勘違いしてしまいます。

だそうです。

iB(i Byte)の場合は1024倍になるのか。

理解しました。

本文に戻ります。

凄い。

24GiBのVRAMを持つVideo CardってRGX 5090とか?

小さなDataのSub setで試してもMemoryの使用量は変わらないのか。

ただし早く終わるのね。

このように言って以下の実装を紹介していました。

そして

と言って一番Sample数が少ないlabelで試すと言っています。これをSubsetと呼んでるのか。

なる程ね。

この実装でbacterial_panicle_blightだけを使用するようになるはずです。

次の文です。

ChatGPTに訳してもらいます。

ChatGPTが無料の制限を超えました。と言って来ました

が無視します。

止まってしまいました。

新しいChatを始めてそこで聞いてみます。

駄目みたいです。

こんな一寸しか使用してないのにChatGPT使えなくなってしまったの?

良いです。

ここからはGeminiに質問する事にします。

いやCopilotに質問します。

駄目です。

あれ?

ネットの接続がおかしくなってました。

接続し直したら直りました。

ChatGPTの回答です。

綺麗に訳してくれました。

段落毎に読んでいきますか。

Train関数というのを設定するのか。

始めて聞いた。

何でも良いからこのTrain関数についてChatGPTに聞いてみます。

取りあえずTrain関数の説明をしてもらうのに上記の質問をしました。

回答です。

え、そうなの?

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

ふーん。

これはいつものDeep Learningの計算じゃないですか。

これをTrain関数と呼んでるのか。

理解しました。

ここに更に、

を追加するのか。

Seedの値を指定しない事で、

学習に使用するDataがEnsemble毎に一寸だけ変更されるようになるのか。

これは分かります。

出ました。

Gradient Accumulationを追加しています。

次の実装です。

先程の説明文はこの実装を説明していたんですね。

もう集中力が無くなってしまいました。

今週は一寸短いですが、ここでAIの勉強は終わりにします。

続きは来週やる事にします。

4. Nvidia Omniverseの勉強

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

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

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

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

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

4.1 前回の復習

Isaac Lab Documentation [8]のWalkthrough [9]のEnvironment Design [10]の<Attack of the clones>の実装を行いました。

先週のBlogの最後に以下に示した事が書いてありました。

今週はこれをやります。

4.2 実際にIsaac Labを起動して試す

Isaac Labの起動の仕方を忘れてしまいました。

Blogを見直して確認します。

分かりません。

Environment Design [10]の<Attack of the clones>の最後には以下の様に書いてありました。

そして前にQuickstart Guideで強化学習を実行した時は以下のCommandを実行した事が判明しました。

python scripts/reinforcement_learning/skrl/train.py --task=Isaac-Ant-v0

この最後の部分はRobotの指名をしてるはずです。Jetbotを起動する場合はこの最後の部分はどう変更すべきなんでしょう?

Geminiに聞いてみます。

だそうです。

取りあえずこれでやってみます。

[Errno 2] No such file or directory

と答えが返って来ました。

Folderを確認したら

ReinforcementというFolderが無かったです。

で次に

で試してみました。

そしたら途中までは順調だったですが、最後に

となってErrorになってしまいました。

GeminiにこのErrorについて解説してもらうと

だそうです。

Geminiは色々Errorの原因を述べていますが、一寸理解出来ません。

今までにやった内容を確認してもう一回Geminiに質問してみます。

今度は、

が見つからないから動かないんだ。

と言って来ました。

それは以下の

isaac_lab_tutorial_env.pyで指定してる

と回答したら

そのFileがある所の__init__.pyの実装を見せろと言って来ました。

見せると

となってるから

task=Template-Isaac-Lab-Tutorial-Direct-v0

になると言って来ました。

が正しいCommandになるそうです。

こっちは正解にかなり近そうです。

これを試してみます。

今度はかなり進んだんですが以下の部分でErrorになりました。

Geminiに解説してもらうと

isaac_lab_tutorial_env.pyの_get_dones()関数のReturn値が問題だそうです。

Tutorialではどうやって実装したのか確認します。

Falseがあります。

これを忘れてたんだ。

先週のBlogを見たら

Return値は完全に見逃がしていました。

以下の様に直しました。

でもGeminiは強硬に

が正しいと言って来ます。

まずTutorialの正しい方法から試してみます。

ああ、Jetbotが動いています。

出来ました。

で終了しました。

うーん。

4.3 実際にIsaac Labを起動して試した結果のまとめ

以下に今日の作業をまとめます。

まず強化学習を実行するためのCommandが分からなかったです。

最初、Quick Startにあった以下のCommandで実行させようとして

python scripts/reinforcement_learnin/skrl/train.py --task=Isaac-Ant-v0

Train.pyのFolderが違っていて

python scripts/skrl/train.py --task=Isaac-Ant-v0

が正解でした。

次にTask名を、Jetbotを動かすために

python scripts/skrl/train.py --task=Isaac-Jetbot-v0

に変更しました。

しかしこのTask名は間違っていました。

正しいTask名は環境設定をしたisaac_lab_tutorial_env.pyと同じFolder内にある__init__.pyを見れば判明する事が分かりました。

__init__.pyを開くと

id="Template-Isaac-Lab-Tutorial-Direct-v0"

と書いてあったので、正しいTask名は

task=Template-Isaac-Lab-Tutorial-Direct-v0

となりました。

python scripts/skrl/train.py --task=Template-Isaac-Lab-Tutorial-Direct-v0

を実行すると

惜しいところまで行ったんですが、最後に

File "d:/myisaacsim/isaaclab/source/isaaclab/isaaclab/envs/direct_rl_env.py", line 371, in step

self.reset_terminated[:], self.reset_time_outs[:] = self._get_dones()

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

ValueError: too many values to unpack (expected 2)

このErrorの意味は自分では理解出来なかったんですが、

Geminiの説明で

isaac_lab_tutorial_env.pyの_get_dones()関数のReturn値を2つ返すところを1つしか返してないからErrorになってる事が判明しました。

Tutorialの_get_dones()関数のReturn値を確認すると

return False, time_out

としっかり2つ返していました。

自分の_get_dones()関数のReturn値を確認するとこの部分の実装を忘れていました。

Tutorialと同じReturn値にしてもう一回

python scripts/skrl/train.py --task=Template-Isaac-Lab-Tutorial-Direct-v0

を実行すると今度はIsaac Simが起動しJetbotがTutorialのScreenshotと同じように表示され強化学習を開始しました。

5. AIの勉強2(日本語字幕AIを作成する)

今週はお休みです。

6. Claudeの勉強

Houdiniの勉強はしばらくお休みします。そしてClaudeの勉強をします。

以下の順番で勉強しろとClaudeに言われましたが、

流石に101は簡単すぎるので、Claudeの APIから勉強する事にしました。

そしたらAPI FundamentalというTutorialは無くて、代わりに以下のTutorialを勧められました。

のでしばらくこのTutorialを勉強する事にします。

<追記>

このままだとClaude Codeの勉強を始めるまでに一年位かかってしまいます。

Claudeにその事を質問したら

との回答を得ました。

ので今回から

https://anthropic.skilljar.com/claude-code-in-action

を先に勉強する事にします。

6.1 Claude Code in Action [7]を勉強する

6.1.1 Courseの説明文を読む

まずはCourseを始める前に付属のVideoを見てみます。

以下の内容を勉強するそうです。

<About this course>

一応、説明文も読んでおきますか。

日本語訳も一応作成しました。Claudeの訳です。

<Learning objectives>

次の文です。

結構、難しいそうな内容もありますね。

Claudeの日本語訳です。

<Prerequisites>

APIキーは使える前提なの?

やっぱり、Building with the Claude APIの方を先に勉強しておく必要があるかもしれませんね。

うーん。

まあいいや。

もしBuilding with the Claude APIの知識が必要だった場合は、両方同時進行でやります。

<Who this course is for>

まさしく私の事です。

<Course sections>

なんとこのCourse、Sectionの数がたったの10個です。

日本語訳です。

MCPに関しては、Building with the Claude APIでも学習する予定はありますね。

これ見ると、Claude Code in Action [7]の方は基礎をサラッとやって終わりって感じかもしれません。

6.1.2 Claude Code in Action [7]をEnrollする

<Course Overview>

以下の4つの節に分かれていました。

What is Claude Code?の内容です。

Getting Hands onの内容です。

ここで基礎を勉強するみたいですね。

Hookについて勉強するみたいですが、Hookが何なのか分かりません。

最後のまとめです。

ここでもQuizがあるのか。

でもどんな内容を勉強するのかは大体理解しました。

6.1.3 What is Claude Code?のIntroductionを勉強する

では一番最初のTutorialを見てみます。

Courseを始める前に見た付属のVideoの内容と同じでした。

6.1.4 What is a coding assistant?

はい。

<How Coding Assistants Work>

はい。

これも文章を読んで理解する以上の事はやる事ないですね。

丁度、Omniverseの勉強でBugを直したばかりです。

これ!

AI Agentの自律性をどう制御するのか?

これを勉強するためにわざわざこんな勉強してるんです。

<The Tool Use Challenge>

これは当然ですね。

<How Tool Use Works>

うん。

もう少し具体的に説明して欲しいですね。

つまりCoding AssistantとLanguage Modelは別な存在でそれぞれ別な役割を果たしてるって事?

うーん。

そういう解釈になるの?

Coding AssistantとLanguage Modelの連携で、Language Modelが"read files," "write code," and "run commands"などのCommandを実行出来るようになる。と解釈した方が自然な気がしますが。

<Why Claude's Tool Use Matters>

Toolを扱う。とは?

Coding Assistantを扱う事を指すのでしょうか?

<Benefits of Strong Tool Use>

Open AIのCodexにはこんなMeritは無いの?

ありそうですけど。

<Key Takeaways>

Toolを扱うのとCoding Assistantの関係がよく分からないで文章が終わってしまいました。

<動画を見る>

この説明でCoding Assistantが実際に何をしてるのかがはっきりしました。

で以下の説明が理解出来る様になりました。

ToolとはLanguage ModelがCoding Assistantにやってほしい作業をCoding Assistantが理解出来るCommandで回答する事を指していました。

やっとCoding AssistantとToolとLanguage Modelの関係が理解出来ました。

更にまとめで以下の事を述べていました。

ここではClaudeが他のLanguage Modelと比較してToolを扱うのが非常に長けているという事でした。

6.1.5 Claude Code in actionを勉強する

このTutorialは動画しかありません。

動画を見て内容をまとめます。

Claude CodeにあるDefaultのToolだそうです。

例えばBashとかいうToolを使用したら、TerminalにあるCommand全部使用出来るって事でしょうか?

そしたらこのFolder内で作業してと命令しても、全部のFolderにAccess出来る様になってしまうんじゃないんでしょうか?

この後、Claude Codeを使用した3つの例が紹介されていました。

Claude Codeがどんな事が出来るのかを何と書く見せるための例です。

まあ、見たけど実感が湧かないですね。

6.1.6 Getting hands onのClaude Code setupを勉強する

まずはここでの説明を勉強します。

Claude CodeのSet upの仕方か。

Claudeで確認したらPowerShellの場合は、以下のCommandを使用すべきだそうです。

特にCondaで仮想環境を作成する必要は無いそうです。作成するProjectがCondaで仮想環境を指定する必要がある場合はそのProject毎に仮想環境を設定すれば良いそうです。

どのFolderからCodeをInstallしても同じ結果になるんでしょうか?それとも特定のFolderをCode様に作成してそこからCommandを実行した方が良のかな。

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

だそうです。

更に

と回答していました。

Git for Windowsは前にInstallした記憶があります。

確認します。

ありました。

まだ有料会員になってないから、これは出来ないよ。

ここからは読んで終わりにします。

どっちも知らない。

Claudeに聞いてみます。

こんなServiceをやってたのか。

これでこのTutorialは終わりです。動画もありませんでした。

うーん。

本当に最低限しか教えないみたいですね。

6.1.7 Project setupを勉強する

<Working with Claude Code is more interesting if you have a project to work with.>

訳です。

これが用意したSample Codeですかね?

そしてSetupの方法が説明されています。

Node JSは前にInstallしました。

確認します。

もうPowerShellのCommandにも慣れて来ました。

どうせ、

Node JS –version

で確認するはずです。

試してみます。

ぐぬ。

更にNode.jsで試してみましたが、それもErrorになりました。
Claudeに聞いたら

が正しいCommandだそうです。

惜しい。

ついでにnpmのVersionも確認しました。

これはこのProject用のFolderを用意する必要がありますね。

ここでnpmを使用するのか。

そもそもnpmって何なのか知りません。

Claudeに質問します。

Packageを管理するの?

あ、理解しました。

LibraryをInstallしたり管理したりするToolなのか。

成程。

完璧に理解しました。

Node.js用のCondaがnpmという事です。

APIキーの設定方法がここで紹介されていました。

こんな大切なものをこんなに簡単な説明で終わらしてしまうのは恐ろしいですね。

Building with the Claude APIを勉強してた時は、一刻も早くClaude Code in Action [7]を勉強したいと思いましたが、実際に見たら、Building with the Claude APIでしっかり基礎を勉強した方が良い気がして来ました。

急がば回れ

が最短Rootかもしれません。

6.1.8 Adding contextを勉強する

このTutorialは動画があります。

先に文章を読みます。

要は余計な事はCluade Codeに教える必要無いって事ね。

<The /init Command>

これは前回、起動したProjectに対して/initを行うって事でしょうね。

そうするとClaude CodeがこのProjectの

  • プロジェクトの目的とアーキテクチャ(構造・設計)
  • 重要なコマンドと主要なファイル
  • コーディングのパターンと構成

を理解する。って事ですね。

だそうです。

ここでCLAUD.md Fileが出て来るのか。

<The CLAUDE.md File>

CLAUDE.md Fileの中身を見ないと、なんとも言えないですね。

具体的にどうやって重要なCommandを指定するんでしょうか?

こういう文章の重要性は、

生成AIが記憶が出来なくて、毎回、今までのPromptによるやり取りを読み直して回答してる

って事を知らないと理解出来ないですね。

やっぱりBuilding with the Claude APIをしっかり勉強しておこうかな。

一応、サラッとClaude Code in Action [7]を勉強したら、またBuilding with the Claude APIを勉強する事にします。

米国の大学にいた時、理系の大学院生で今までProgrammingを書いたことが無い人達はCSの基礎をたった3カ月で勉強させられていました。

同じ内容を、Computer Science専攻の大学一年生は一年かけて勉強していました。

その時は、大学院生凄い。と思ったんですが、その大学院生、誰もProgramming書けるように成ってなかったです。

その大学院生たちは3カ月無駄に過ごしただけでした。

無理やり早く学習するとそうなってしまうんです。

ゆっくり時間をかけて勉強するしかないものもあるんです。

<CLAUDE.md File Locations>

Claudeは3つのCLAUDE.md Fileを参照するようですね。

成程。

Teamで使用するためのCLAUD.mdと自分用のもの、そしてEngine全体で使用するCLAUD.mdがあるのか。

納得です。

<Adding Custom Instructions>

この#commandは日本語でも大丈夫なんでしょうか?

Sparinglyなんて日本語無い気がしますが。

Claudeでの回答です。

英語で無いと駄目みたいですね。

しかし裏技を教えてくれました。

これなら簡単ですね。

<File Mentions with '@'>

これはAuthというFileに既にどのようにLoginすべきかが既に書かれているって事でしょうか?

と言うか、Authentication SystemってLoginであってるんでしょうか?

これもClaudeで確認します。

あってましたね。

更に

と説明してくれました。

うん。

Fileを候補として表示するの?

文章読み間違えてる。

日本語訳を表示してもらいました。

うーん。

実際に使ってみないとよく分かりません。

@File Pathは実際に使って確認する事にします。

後、ClaudeがAuthorizationと勘違いしないように。とAdviseしてくれました。

<Referencing Files in CLAUDE.md>

ClaudeがどのFileを先に読んどくのかを指定するのに@File Pathが使用されるみたいです。

<動画をみる>

それでは動画を見てみます。

まあ、このTutorialで勉強した内容をしゃべっていました。

特別ここに書く内容な無かったです。

7. Nvidia Omniverseの勉強2(強化学習の勉強)

今週は、風邪気味なのでこの勉強はお休みします。

8. DirectX12の勉強

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

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

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

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

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

8.1.1 前回の復習

「6.2.4 Root Signatureの変更」を勉強しました。

Root Signatureの機能ですが、以下の説明が最も簡単で最も本質をついた説明という事で決着がつきました。

そしてRoot Signature の設定に必要なDescriptor Rangeの編集を以下の様に行いました。

これは一個のDescriptor RangeにTexture用の設定と、定数Buffer用の設定の両方をしています。

Textureと定数Bufferの両方のBaseShaderRegisterが0番Slotから始まっていますが、種類が違うのでこれが正しい設定だそうです。

Root Signature の設定に必要なRoot Parameterの設定方法も勉強しました。

ここは教科書では以下の様に

Texture用の設定と、定数Buffer用の設定を別々に行う方法と

Sample Codeにあった

Texture用の設定と、定数Buffer用の設定を同時に行う方法がありました。

この2つの設定方法に関してはAI(Copilot)に質問して両方正しい設定である事を確認しました。

その後、勉強した内容を実装しました。

あれ?

先週のBlogにはDescriptor Rangeのところの実装がまとめられてないですね。

やったのかな?

確認します。

直ってない!

これは今週直す事にします。

8.1.2 Descriptor Rangeの実装を直す

直しました。

Textureと定数BufferのBaseShaderRegisterの値は両方とも0にしています。

8.1.3 「6.2.5 頂点Shaderからの定数Buffer(行列)の参照」を勉強する

参照する前に、そもそも定数Bufferの値をまだ作成してないんですが?

どっかで作成したの読み逃して実装してないのかな?

この節を読んで定数Bufferの値は既に作成されてる事が判明したら、

定数Bufferの値を決定する実装をSample CodeからそのままCopyして追加してしまいます。

とりあえず教科書を読みます。

<定数の参照を記述する>

教科書によるとBasicShaderHeader.hlsliに以下の実装があるそうです。

Texture2D<float4> tex : register(b0);

SamplerState smp: register(s0);

見てみます。

まずBasicShaderHeader.hlsliがありません。

BasicType.hlsliの事でしょうか?

BasicType.hlsliを開いて見ると

となっていました。

教科書の解説によるBasicShaderHeader.hlsliの実装とは全く違いますね。

Sample Codeの方も確認します。

こっちにもBasicShaderHeader.hlsliはありません。

こっちのBasicType.hlsliを開いて見ると

となっていました。

うーん。

これはどうなってるの?

試しにBasic Pixel Shader.hlslを開いてみました。

あ、ありました。

教科書には、この直後に

//定数Buffer

cbuffer cbuff0 : register(b0)

{

              Matrix mat; //変換行列

};

を追加しろ。と書いてあります。

Sample CodeのBasic Pixel Shader.hlslを開いてみました。

追加してないですね。

なんとSample CodeのBasic Vertex Shader.hlslの方に追加されていました。

一応、確認のために私のProjectのBasic Vertex Shader.hlslを見ると

先程の実装は書いてありません。

ここに追加するとみて間違いないでしょう。

教科書では、この後にcbufferの説明がされています。

この辺は、AIに聞いて説明してもらった方が分かり易いでしょう。

聞いてみます。

まずはGeminiに質問しました。

回答です。

はい。お願いします。

この説明だと分かったような分からないような感じです。

そう。これつまりRegister(b0)にどんなDataを書き込むのかはRoot Signatureが決定していて、そのRegister(b0)のDataをGPU上のcbuff0に紐づけてるのがこの実装なんでしょうか?

するとその後の、Matrix matはそのcbuff0をMatrixという型にはめたって事でしょうか?

じゃmatはその変数名って事?

その後の実装を見るとmatが変数名として使用されてるので

そういう事で合ってそうですね。

一応、Geminiにこの考え方であってるか確認しておきます。

大体合ってると。

つまり一寸間違って理解してる部分があるって事です。

Geminiの説明を聞いてみます。

Root Signatureは「b0にデータを書き込む」のではなく、「シェーダーのb0という窓口が、メモリ上のどこ(住所)を指しているか」という対応表(バインド)を定義しています。

はい。

その通りでした。

Register(b0)にどんなDataを書き込むのかはRoot Signatureが決定するんじゃなくて、

「シェーダーのb0という窓口が、メモリ上のどこ(住所)を指しているか」という対応表(バインド)を定義

してるんでした。

Bindをしてるんです。

前回のRoot Signatureの定義でも

配線図を作る。ってしっかり書いてありました。

うーん。

ここは間違っていました。

こっちは合ってましたね。

最初にcbufferという型のcbuff0という変数でb0の値を受け取って、それを型変換で、Matrixという型のmatと言う名前の変数に変換した。

と解釈したらもっと分かり易いですね。

補足として、複数の変数に値を指定する方法も教えてくれました。

要は型に必要なByte数を前から順番に取っていく

って事ですね。

理解しました。

cbuffer : register(b0)は

 b0から流れてくる生データを受け取る受け皿

と定義してるのか。

でもこの定義にcbuff0の話がまるまる抜けていますね。

私の解釈である

最初にcbufferという型のcbuff0という変数でb0の値を受け取って、それを型変換で、Matrixという型のmatと言う名前の変数に変換した。

とは一寸相反するかもしれないですが、cbuff0の話を敢えて抜いてるところがあるので、どっちが正しいのかの判断はまだ付かないですね。

<定数を利用する>

「6.2.5 頂点Shaderからの定数Buffer(行列)の参照」には、2つの小節があって、最後の方がこれです。

短いのでこれも一緒に勉強してしまいます。

Vertex Shader内でmatを定義したので、

Vertex Shader内ではmatを使用した計算が出来るようになった。

と書かれていました。

これ見ると、最初の問題であった

をどこに書き込むべきか?

の解答が、Basic Vertex Shader.hlslであるのは間違いないですね。

何で教科書は、BasicShaderHeader.hlsliなんて存在してないFileに書き込めって書いていたんでしょうか?

教科書では以下の実装にmatを使用していました。

教科書では、ここでShaderにおけるMatrixの計算は

列優先である

だから

○○する

とDirectX12における行列の計算について説明がありましたが、

今は実際に動く実装を作成する事が最優先なので

ここは後で復習する事にします。

Sample Codeは以下のような実装になっていました。

今の私のProjectのBasic Vertex Shader.hlslの実装は以下の様になってるので

教科書で述べてる通り

だけ変更すれば良いです。

8.1.4 「6.2.5 頂点Shaderからの定数Buffer(行列)の参照」を実装する

それでは実装をします。

<定数の参照を記述する>

前の節で、しっかり勉強したので、ここでは淡々と実装していきます。

Basic Vertex Shaderに定数BufferのDataを受け取るための実装を追加しました。

<定数を利用する>

こっちの実装もサクッとやってしまいます。

作成したmatと言う変数を使用して行列の計算をしました。

8.1.5 GitHubのRepositoryにPushする

これが面倒くさい。

しかしこれを避けるといつまで経ってもGitHubに慣れません。

やります。

GitHub Desktopを開きました。

あれ?

Main.cppの方にも変更があります。

ナニコレ?

確認したらDescirptorRangeの変更でした。

そういうば、先週、この実装をやるのを忘れていて、今さっき慌てて追加したんだ。

すっかり忘れていました。

Current BranchはしっかりChapter 6になっています。

Commitには、

「6.2.4 Root Signatureの変更」の実装で忘れていたDescirptorRangeの設定を追加変更した。

「6.2.5 頂点Shaderからの定数Buffer(行列)の参照」で勉強した内容をBasic Vertex Shaderに追加した。

と書き込みました。

ではCommitします。

が書いてないからCommit出来ない。

って。

うーん。今までもそうだったけ?

憶えていません。

先週のBlogを見たら

とあって、Update main.cppとDefaultで書いてあったようです。

今回は「6.2.5 頂点Shaderからの定数Buffer(行列)の参照」の勉強

と書き込んでCommitしました。

Pushもします。

出来ました。

GitHubのBrowserで今日した実装がRepositoryにしっかり反映されているか確認します。

Chapter6のBranchの方のBasic Vertex Shaderを確認すると

しっかり変更されていました。

MainのBranchの方は

元のままです。

Descriptor Rangeの設定も確認しました。

出来てました。

以上です。

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

8.2.1 前回の復習

前回から Root Signature & Rasterizer | D3D12 Beginners Tutorial [D3D12Ez][11]の勉強を始めました。

前回はNotebookLMに内容を要約してもらいそれを読みました。

この要約によるとここではRoot SignatureとRasterizationについて勉強するようです。

奇しくもRoot Signatureは「DirectX 12の魔導書」でも今勉強してる内容です。

この要約で、

Root Signatureは…HLSL内で定義してCompileするやり方が推奨されています。

と書かれていますが、先週はこの意味がよく分かりませんでした。

今週の「DirectX 12の魔導書」で

の実装方法を勉強してやっと意味が理解出来ました。

先週は、更にNotebookLMにDocumentとしてもまとめてもらいました。

それも読んで感想を記録しています。

重要な感想だけ以下に記しておきます。

Root Signatureの機能を、ここではGPUとCPUの契約書とまとめていますが、私は

棚と窓口の配線図

した方が正しいと思うと書いていました。

Root Signatureの値の定義はHLSLでやった方が良いという説明。

これは先程述べた

これの事かと思ったら

と、全く知らない話がまとめられていました。

これは実際にLectureを勉強して判断するしかないですね。

そしてこの後Rasterizationについての話がまとめられていくんですが、Rasterizationの仕組みは大体理解してるのでここにはまとめません。

8,2,2 Root Signature & Rasterizer | D3D12 Beginners Tutorial [D3D12Ez][11]を勉強する

では実際にTutorialを見ながら勉強していきます。

MicrosoftのDirectX12の公式Siteを開いてRoot Signatureの説明を淡々としています。

理論の部分はここにはまとめません。

と思ったら

以下の実装をみせて

このようにC++側でRoot Signatureを実装する事も出来ますが、これはお勧めしません。

Shader側で実装しましょう。

って言いだしました。

そうなの。

この実装って先程、「DirectX 12の魔導書」でやった実装そのものですけど。

これをShader側でやるのが公式が勧めるRoot Signatureの実装方法なの?

この部分だけはしっかり聞いて以下にまとめます。

以下の記事から説明しています。

この説明によると以下の様に実装するそうです。

後で以下の様に使用するそうです。

凄い。

これは新たな知見を得る事が出来ました。

この部分を述べてる公式SiteのURLが知りたいですね。

調べます。

https://learn.microsoft.com/en-us/windows/win32/direct3d12/specifying-root-signatures-in-hlsl

ありました。

これは今読んでもおそらく理解出来ないので、このLectureの勉強が終わった後で読む事にします。

以下の図について説明していました。

0がb0になってるので、これは定数Buffer用でしょう。

Root CBVって書いてあります。Constan Buffer Viewの略かもしれません。

10:36までLectureを見ました。

ここからRoot Signatureを実装するみたいです。

具切りが良いので今週はここまでにして、実際の実装は来週勉強します。

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] AndiDev. (2020, June 30). UE4: Control Rig - Basic IK [Video]. YouTube. https://www.youtube.com/watch?v=g0gUZr5i7Q0

[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 22). Lesson 7: Practical deep learning for coders 2022 [Video]. YouTube. https://www.youtube.com/watch?v=p4ZZq0736Po

[6] Howard, J. (n.d.). Scaling up: Road to the top, part 3. Kaggle. https://www.kaggle.com/code/jhoward/scaling-up-road-to-the-top-part-3

[7] Anthropic. (n.d.). Claude code in action. Retrieved from https://anthropic.skilljar.com/claude-code-in-action

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

[9] NVIDIA. (2026, February 14). Walkthrough. Isaac Lab Documentation. https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/index.html

[10] 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

[11] Lötwig Fusel. (2023, August 10). Root Signature & Rasterizer | D3D12 Beginners Tutorial [D3D12Ez]. YouTube. https://www.youtube.com/watch?v=RSzwmaBSUmw

 

UE5の勉強などなど

2026-02-01のBlogの「AIについての調査(ComfyUIの勉強)」で議論した通り、勉強内容を変更する事にします。

ただしHoudiniの勉強はそのまま残す事にしました。これを削るのはもう少し考えてからする事にします。

Logoは直してる時間が無いので、しばらくはこのままです。

それぞれの勉強の内容や目的はそれぞれの章にまとめる事にします。

1.今週の予定

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

  • 映像作成用UE5の勉強
  • AIの勉強
  • Nvidia Omniverseの勉強
  • AIの勉強2(日本語字幕AIを作成する)
  • Claudeの勉強
  • Nvidia Omniverseの勉強2(強化学習の勉強)
  • DirectX12の勉強

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

2. 映像作成用UE5の勉強

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

最終的にはUEFNのMap内で神社を作成して、 誰でも参拝出来るようにするつもりです。

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

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

最終的にはUEFNのMap内で神社を作成して、 誰でも参拝出来るようにするつもりです。

2.1.1 前回の復習

grey_natural_slate_stone_wallを使用して作成したStatic Meshを使用して石道を作りました。

こっちも中々良い感じです。

その後で、砂利道を今まで調査したAssetを組み合わせて作成してみました。

ukohbbi_tier_2とukohbbi_tier_2の組み合わせです。

vbhsfesga_tier_2とvf5pajccb_tier_2の組み合わせです。

更にukohbbi_tier_2を追加した組み合わせです。

この後で、Landscape Patchの使い方も復習していました。

2.1.2 石道をもう一個作る

ugrxbjkfa_tier_2を使用して石道を作成しても良いと思っています。

重ねて使用すると以下の様になります。

これをPCGを使用して石道部分を作成してみます。

こんな感じになりました。

実装方法を以下にまとめます。

まず以下に示したSub Sandou2を作成しました。

実装は以下の様になっています。

以下のようにStatic Meshの位置をばらつかせます。

Rotational Angleを変更する事で、

Static Meshの向きを変更できるようにしました。

更にSeedを追加した事で、

seedの値を変更すれば、Meshの配置場所も変更されるようになりました。

このNodeを使用して

以下の実装を組みました。

一見複雑ですが、Rotational AngleとSeedの値を変更したSub Sandou2ノードを3つ生成しただけです。

結果です。

Sub Sandou2ノードを3つ重ねたので、隙間が無くなるかと思ったら隙間だらけでした。

しかし近づいて見ると以下に示した様に

全くTilingが無く、しかも自然な石道が生成されていました。

2.1.3 次回の作業

もう時間が無いので今週は出来ませんが、一端、Static Meshで全部敷き詰めた石道を生成して、その上に今回作成したSub Sandou2ノードを配置したら、完璧な石道が生成出来る気がします。

来週試します。

後、今回のSub Sandou2ノードのRotational Angleは全てのPointを同じ角度で回転させます。

これはSub Sandou 2ノードにPointの値をPassするSpline Samplerノードの

Dataを見ると

PCGPoint Dataが一個しかないから、

LoopにしてそれぞれのPointのRotationの値を変更する事が出来なかったからです。

それぞれのPointを別なPCGPoint Dataに属させて、Loopを使用してそれぞれのPointのRotational Angleの値を別々にする方法も来週作成します。

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]の<25:23 - Adding Doors and Interior Walls to Data Asset>を実装しました。

2.2.2 Create Procedural Interiors With Full Room Separation | UE 5.4 P5 [1]の<26:29 - Select Random Doors in Rooms and Assign Mesh>を勉強する

まず以下の場所にDifferenceノードを追加したんですが、

後から編集が入って、この部分は要らなかったというような事を言っていました。

そしてWall Sectionの最後の部分に以下の実装を追加しました。

そして作成したNamed Re-RouteであるExterior Wallsを以下の場所にセットしました。

更にDifferenceノードのDensity Functionの値をBinaryに変更しました。

結果です。

なんと壁のPointが無くなっています。

ここはそれをやりたかったのか。

やっとこの実装の目的が分かりました。

では、最初のこの部分要らなかったという発言はどれを指してるんでしょうか?
そっちが今度は分からなくなりましたね。

ただしこの結果をよく見ると壁際のInner Wallを示すPointもなくなってしまっています。

これを直すには、先程のExterior Wallsノードの後にExtents Modifierノードを追加して

ExtentsのXの値を0.2に変更します。

更にModeをMultiplyに変更します。

結果です。

壁際のInner Wallを表示するためのPointが追加されました。

これの仕組みについては来週、実装する時検証します。

ここからDoorを追加します。

一部屋に最低一個のDoorが必要になります。そのための実装方法をここで説明するそうです。

まず以下に示したPCG_WallDoorSplitを作成します。

以下の様にLoopで配置して

中を開きます。

Inputノードの設定は以下の様になっていました。

変更してこうなったのかDefaultでこのままなのかは不明です。

Outputノードの設定を以下の様に変更しました。

そしてAttribute Noiseノードを追加します。

Attribute Noiseノードの機能が分かりませんね。

Geminiに聞いてみます。

だそうです。

更にそれぞれのParameterの機能も説明してくれました。

これあってんでしょうかね?

実際のParameter(ただしこのNoise Attributeノードではない)です。

実装する時に再度確認しますが、Geminiの説明は出鱈目ですね。

更にSort Attributesノードを追加して

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

そしてAttribute Filterノードを追加しました。

Attribute FilterノードのParameterは以下の様にセットしました。

そして以下のようにもう一個、Attribute Noiseノードを追加します。

そしてそのAttribute NoiseノードのOutput Targetの値をDoorCountに変更しました。

ここにあるNoise MinとNoise Maxの値で部屋に追加するDoorの数を調整するそうです。

ここでTutorialは以下の説明をしています。

この図の設定のようにNoise Minの値が1.5でNoise Maxの値が2.5の場合、切り捨てになるので、1.8の場合Doorの数は一つになります。そして2.1を選択した場合、Doorの数は2つになります。

全く理解出来ません。

そもそも1.8とか2.1とかの値はどこから出て来たんでしょうか?それすら分かりません。

最終的にはこれらの値を以下の様にしていました。

そしてGet Attribute From Point Indexノードを追加しました。

今週はこの辺ぐらいで終わりにします。

一寸疲れて来ました。

Tutorialの30:30までやりました。

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ノードの使用方法に関しての検証と勉強を続けてやっています。

前々回の学習ではIK BoneとそのControlを作成するにあたり、FBIKを絶対に使用する必要がある。と思い込んである実装を試していましたが、それが間違いである事が判明しました。

ので、前回の学習では

IK BoneをどうやってControlにくっ付けるのかについて以下の実装を試してみました。

結果です。

何の反応もしません。

つまりIK BoneはどのMeshとも繋がってなかったんです。

一つ知見を得る事が出来ました。

次に

FBIKノードとSet Transform Boneノードは同時に使用出来ないのか?

を検証しました。

以前の検証で

FBIKノードと普通のControlの設定で同じControlを使用する事は出来ない。

という事は分かりましたが、Full Body IKで使用するBoneと全く関係のないBoneを通常のControlの設定で使用した場合はどうでしょうか?

これを検証するために以下の実験をしてみました。

FBIKに繋がっている右足のControl Rigを動かしてみました。

通常のControlの設定は完全に無視されました。FBIKを使用する場合は全部FBIKで指定する必要があるみたいです。

2.3.2「FBIKを使用する場合は全部FBIKで指定する必要がある」のは本当か、もう一度確認する

Control Rigの研究を始めたばっかしの時に、Vroidの肘にIK Controlを使用した記憶があります。

FBIKでは無くBasic IKノードだったかもしれませんが、その時は普通のControlとBoneの設定に加えてIKの設定を行っていました。

その辺が曖昧になっています。そこを復習します。

更にそのかなり前に海賊のSkeletal MeshにControlを追加したら膝が逆に曲がってしまうようになってどう直して良いのか分からなくなってしまった結果になったのあったはずです。それも探してみます。

<VroidにControlを追加>

ありました。

2025-04-20のBlogでやっていました。

ただ、この実装も前からの続きで、このBlogを読んだだけでは全体の流れが全く分かりません。

使用してるのはBasic IKノードで間違い無いようですが、何でここでそれを使用したのかなどの前後関係は全く分かりません。

ただしこのBlogにまとめた実装で以下の様に肘がしっかり曲がる様にはなりました。

さらに普通のControlと併用してそうです。

全体の流れを理解するために、このModelのControl Rigを追加する勉強はどこから始めたのかを確認したら、なんと

2025-02-09のBlog

と宣言していました。

この週からControl Rigの勉強を始めたんです。

感慨深いですね。

そしてこのModelのControl Rigを追加する方法を勉強したTutorialの勉強を最初にしたのは更に前にでした。

正しそのTutorialが具体的にどれなのかは、ざっと今読んだ限りでは分かりませんでした。

もしかしたら公式SiteのControl Rig [3]で勉強したのかもしれません。

更に

海賊のSkeletal MeshにControlを追加したら膝が逆に曲がってしまうようになってどう直して良いのか分からなくなってしまった結果になったのは

2025-02-02のBlogに載っていました。

これらのBlogを全部読み直して今までIK Controlに関してどんな勉強をして来たのかを総復習しても良いかもしれません。

少なくともVroidのControl Rigの実装が終わった部分までは復習した方が良い気がします。

そうすると、2025-01-26のBlogから復習する必要が出て来ますね。

結構大変な作業になりそうですね。

それぞれのBlogの復習は来週やりますか。

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

<追記>

2025-01-26のBlog

の記録があったんですが、このTutorialの2番目の動画を見たらBasic IKの使用方法が説明されていました。

しかもそれは私が探していたDragonの足をControlするためのControl Rigを追加する方法そのものでした。

一年前はこの動画を見ても何を言ってるのか全く理解出来なかったんですが、今なら理解出来ます。

来週はこれも勉強する事にします。

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]の勉強が全部終わったのでその復習をしていました。

あんまりにも長く色んな事に手を広げていたので、Lesson 6: Practical Deep Learning for Coders 2022 [5]でどんな内容を勉強したのか全く覚えてなかったんです。

のでBlogを全部復習しました。

その結果このLectureの前半ではRandom Forestのやり方を説明していてる事が判明しました。

つまりこのLectureの前半部分はずっと前に勉強した内容だったんです。

Bagging、OOB Error、Partial Dependencyなどを勉強して

その後で、Paddy Disease ClassificationのDataを利用した実際のModelの生成をしました。

Paddy Disease ClassificationではModelが完成したらすぐにKaggle Competitionに提出してます。

数十分で作成したModelなので結果は、Top 80%というかなりひどい成績です。

しかし完成したらすぐにKaggle Competitionに提出すべきなのは、これが客観的な評価を製作者にもたらしてくれるからだそうです。

そこは他のLectureでも述べていましたが、やっぱり客観的な評価は大切でそれが無いと、人間は世界で一番凄い。とすぐに勘違いし始めてしまうそうです。

ただし前回のまとめに書いてある私の感想は、

Kaggle Competitionなんかやってるより、AI Agentの勉強を頑張った方が良いとまとめていました。

今、考えるとこれは、

半分は本当で半分は間違ってるかも

に変化しています。

AI Agentを理解した後が問題で、それでAppを作成したとしても、数字の保証がないAppでは売れないからです。

つまりAppが完成した後に、Kaggle Competitionのような客観的な評価でそのAppの精度を証明する必要がある訳です。

3.2 Lesson 7: Practical Deep Learning for Coders 2022 [6]を勉強する

まずはNotebookLMに勉強させて要約を作ってもらいます。

ModelのMemory管理と協調Filteringの話をここでするようです。

<00:00 - Tweaking first and last layers>

この節の内容をNotebookLMにまとめてもらいました。

最後のLayerを調整するのがFine Tuningではなかったでしたっけ?

優先順位の話をしてるって。

でも最後のLayerを調整するのがFine Tuningと言うのはあってるみたいです。

更に具体的に何を述べたのかも紹介してました。

では実際に動画を見て確認します。

このLectureではNeural Networkの内部構造を勉強するそうです。

そのNeural Networkは色々いじる事が出来るそうです。しかし大抵は最初のLayerと最後のLayerをいじります。

以下のRice Paddyの例を使用して勉強するそうです。

以下の画面を表示させていました。

これはKaggleにあったはずです。

探します。

ありました

https://www.kaggle.com/code/jhoward/scaling-up-road-to-the-top-part-3

Scoreで98%とか取っています。Top2%って事でしょうか?

Part2の復習をしています。

今動画で見せてるPart2のDataはNet上からは発見できないんですがどこかにはあるんでしょうか?

このLectureを撮影した時点では、以下の2つのGroupが更にいい成績を出してるそうです。

両方ともClassの生徒だそうです。

以上でした。

大分、NotebookLMの要約とは違う内容でしたね。

<02:47 - What are the benefits of using larger models>

講師のJeremy氏は、高価なGPUを購入しなくても、「勾配蓄積(Gradient Accumulation)」**という手法を使えば、一般的なGPU(Kaggleの16GB GPUなど)でも非常に大きなモデルを動かすことが可能である

本当ですか?

これは今でも通用する話なんでしょうか?

そのようですね。

どうもこの説明を読むと、勾配蓄積(Gradient Accumulation)とは数学的な技術で普遍に使用できるもののようです。

では動画を見てみます。

大体同じ内容を話していました。

Kaggle Competitionの成績は16GBのGPUで計算させた結果なので、Localで24GBを動かして得た結果とは同じにならないけど、ある工夫をすると16 GBでしか動かないModelもKaggleで動かせますよ。
みたいな話で終わってました。

<05:58 - Understanding GPU memory usage>

結構重要な話が書かれていますね。

まずGPUはMemoryの内容をHDに移動する事は出来ない。

言われてみれば、そうですね。

最小のSubSetを使って短時間云々。これのやり方をここで教えてくれるでしょうか?

凄い。

これで少ないVRAMでも大きなModelを動かせるのか!と思ったんですが、これってあくまでもModelのTuningのための学習の方法です。

私は一瞬この方法を推論(Inference)で使用出来るの?と勘違いして聞いてました。

では動画を見てみます。

Scaling Up: Road to the Top, Part 3の内容を説明していました。

うーん。こっちを勉強すべきか?

具体的にどう実装するかまでしっかり示しています。

でもこの技術って、Localで24GB使ってる人が、Kaggle内の16GBに対応するための技術であるんでしょう。

私には無用の技術な気もします。

しかしここでしっかり勉強しておかないと、後で必要になった時に、この技術を全く思い出せない可能性もあります。

悩みどころですね。

うーん。

来週勉強します。

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

4. Nvidia Omniverseの勉強

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

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

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

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

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

4.1 前回の復習

Isaac Lab Documentation [7]のWalkthrough [8]のEnvironment Design [9]の<Attack of the clones>の勉強をしていました。

最後に以下の書き込みがありました。

熟成どころか何を勉強したのか全く覚えていません。

簡単に復習してから実装します。

先週のBlogを一通り読み直しましたが、何言ってるのかはっきり分かったところと、全然分からない所がありますね。

これは実装しながら検証する事にします。

4.2 Environment Design [9]の<Attack of the clones>の実装をする

D:\MyIsaacSim\isaac_lab_tutorial\source\isaac_lab_tutorial\isaac_lab_tutorial\tasks\direct\isaac_lab_tutorial

にある

isaac_lab_tutorial_env.py

を開きます。

__init__()関数から直していきます。

ここでは後でActionを適用する対象となるJointを指定します。

だそうです。

今度は_setup_scene()関数の実装を直します。

Environment Design [9]ではこの関数に関しては何の変更もしてない。とはっきり書いてあるんですが、先週のBlogで実際に比較すると

Environment Design [9]の実装にはこの部分が無いです。

うーん。

どうしよう。

先週のBlogでは以下の結論に至っています。

多分これが正解でしょう。

この関数はそのままのこして次に行きます。

_pre_physics_step()関数と_apply_action()関数の実装を変更します。

_pre_physics_step()関数の方からやっていきます。

なんとこっちの関数は変更する箇所は無いそうです。

_apply_action()関数の方です。

上が変更する前の実装で、下が変更後の実装です。

set_joint_effort_target()関数が、set_joint_velocity_target()関数に変更されています。

後、これは先週のBlogでは検証されてなかったですが、最初のParameterの値であるself.actions *self.cfg.action_scaleがself.actionsに変更されています。

この違いが何なのか、Geminiに聞いてみます。

なんだ。何言ってるか分からないぞ。

あ、分かりました。

まずそもそも

self.actions *self.cfg.action_scale

が元の値をself.cfg.action_scaleで掛けるって意味なんだ。Pointerだと思ってた。

で、Velocityの場合は掛ける必要が無いんで、そのままの値を入れたという事でした。

納得。

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

次は_get_observations()関数と_get_rewards()関数の実装を編集します。

_get_observations()関数の実装は全部書き換えて以下の様になりました。

この実装のそれぞれのCodeの機能については今までの勉強で散々やって来たのでここでは復習しません。

_get_rewards()関数の実装は以下の様に書き換えました。

これもその実装の内容については既に勉強したのでここではSkipして先に進みます。

次は_get_dones()関数と _reset_idx ()関数の実装を編集します。

_get_dones()関数は以下の様に変更しました。

_reset_idx ()関数は以下の様に変更しました。

先週のBlogでは

と書いてありますが、最後の一行は実際は全く違うCodeでした。

これで実装は完成です。

Tutorialでは最後に以下の図が載っています。

これはこの時点までの実装を終えたらこの図のようなRLが始まるよ。暗に言ってます。

で試してみようと思ったんですが、もう時間が無いです。

今週はここまでにして実際にIsaac Labを起動して試すのは来週やります。

5. AIの勉強2(日本語字幕AIを作成する)

YouTubeなどを見てると日本語の字幕をつける動画が沢山あります。しかしその字幕の漢字が間違っています。

これは2パターンあって、字幕は合ってるのに、間違った読み方をする場合と、音声はあってるのに字幕の漢字が間違ってる場合です。

見ていて、もしくは聞いていて非常にイライラします。

元のAIに一寸Fine Turningすれば直ぐに直ると思うんですがどうなんですか?

簡単に直せるなら、Projectとして自分でやってみようかなと思っています。

(この勉強は2週間に一回だけ行います。)

5.1.1 前回の復習

2026-03-29のBlogで勉強していました。

FFmpegをどのFolderからも呼び出せるようにしました。

そして次のStepとして

Whisperで作成したTest3の字幕をAIに投げてオカシイと思う箇所を直してもらう

をやろうとしたら

Severが混み過ぎて途中でErrorになってしまいました。

ので今週はこれをやります。

5.1.2 Whisperで作成したTest3の字幕をAIに投げてオカシイと思う箇所を直してもらうをもう一回やる

前回、途中まで実行したFileを開いたら以下の様になっていました。

そうだ。FontがオカシイだけだからこのFontを直したら良いんだ。

この辺の作業は、2026-03-29のBlogには全く書いて無いです。まとめるのが面倒になって書くのを止めてしまったんです。

Geminiの質問欄から前回の質問を探し出しました。

それを読み直したら、大体何をしたのか分かりました。

Geminiとの会話には書いてなかったんですが、この文字化けした文章は日本語の設定に直すと文字が読めるようになるとGeminiが言ってた気がします。

それを確認して、この文字化けを直す事にします。

まず普通にGeminiに聞いてみます。

すると文字化けした部分を以下の様に翻訳してくれました。

完全に直っていますね。

これが文字化けの理由だそうです。

結論だけここに書きます。

色々やったんですが駄目でした。

[API Error: You have exhausted your capacity on this model.]

になってしまいます。

Geminiに聞いて色々調べてもらって結果、

"What's Changing: We are adding more robust detection of policy-violating use cases and restricting models for free tier users."

"How it affects you: If you need use of Gemini pro models you will need to upgrade to a supported paid plan."

の回答がGemini CLIから返って来ました。

これはGeminiによると

という事だそうです。

で解決策としてAPIキーでGemini CLIを使用してみる事を述べていました。

多分、これも駄目だろうけど、一応来週試してみます。

APIキーを生成して試しても駄目だった場合、以下の方法で生成したAPIキーは消せるそうです。

うーん。

今回は止めておきます。

来週試してみますか。

恐らくもう無料で、CLIを使用出来ない設定になってるだと思うんです。のでAPIキーから試しても駄目だと思うんですよ。
となると有料枠に入るしかないんですが、それだとClaudeの勉強を頑張った方が良くなります。

再来週、APIキーから試してみて、その結果からどうするかまた考える事にします。

6. Claudeの勉強

Houdiniの勉強はしばらくお休みします。そしてClaudeの勉強をします。

以下の順番で勉強しろとClaudeに言われましたが、

流石に101は簡単すぎるので、Claudeの APIから勉強する事にしました。

そしたらAPI FundamentalというTutorialは無くて、代わりに以下のTutorialを勧められました。

のでしばらくこのTutorialを勉強する事にします。

6.1 「Prompt evaluation」を勉強する

Prompt Engineeringがあるのは知っていますが、Prompt Evaluationがあるのは知らなかったです。

<Prompt Engineering vs Prompt Evaluation>

Prompt Engineeringについての解説です。

Multishot promptingとかStructuring with XML tagsなんて初めて聞きました。

Prompt Evaluationについてです。Prompt Evaluationは機械的に判断出来る方法が既に確立されてそうですね。

<Three Paths After Writing a Prompt>

3つのOption。どんなOptionがあるんでしょうか?

マジか。

Option3を常にやらないと危ないって事?

これ今まで全く知らないでChatGPTとかGemini使用してた。

でもAIが間違った事言う時って、何となくカンで分かりますよね。

カンって言うと怪しげですけど、文章に何か変か見えない違和感があるんですよ。

それ以外では、

AIの回答って最初に新しい情報を提供するんです。そしてその情報に基づいて論理を展開するんだけど、その情報が間違ってる時は絶対に書いてる内容も間違っています。

後分野によって間違えやすいかったりかなり正確だったりします。

などがあります。

そういう点が気を付けていますが、そういうのは駄目って事ですか?

<Why Most Engineers Fall Into Testing Traps>

これはPrompt EngineeringでAppを作成した場合の話?

それともAgentic AIの話?

なんか途端に胡散臭くなって来ました。

生成AIの回答とAppのBugの話をごっちゃにしたら話が飛躍してしまうでしょう。

<The Evaluation-First Approach>

うーん。

まあOption3的なApproachが本当にどんなAIのミスでも解明出来るのか、

それとも米国的キリスト教価値観に基づいた「一生懸命やったから正しいはず。」という何の科学的根拠もないし、数学的な証明もない空論なのかは、

このTutorialの最後には判明するでしょう。

<動画を見る>

この動画を見るとPromptの情報を元に作成したAppの事や、Promptを得るための実装についての話をしてるようにも聞こえますね。

どっちなんでしょう?

6.2 <A typical eval workflow>を勉強する

まずはっきりしたのはここで話してるのはAppや実装ではなくPromptそのものであるって事です。

<Step 1: Draft a Prompt>

まず最初は簡単なPromptからImproveしていくそうです。

<Step 2: Create an Eval Dataset>

答えが分かってる問題を聞いたんじゃ実際に分からない問題を聞いた時にその回答があってるかどうかなんて分からないじゃないですか?

これらの質問の答えが合ってたからって、自分が知りたい事の答えがあってるかどうかなんか分からないですよね。

勿論、これらの答えすら合ってなかったらそのAI自体の使用は控えるべきなのは当然ですが。

<Step 3: Feed Through Claude>

ここは何が言いたいんだ。と思ったんですが、よく見たらStepの説明をしてるだけでした。

Step3では実際にClaudeに用意した質問をして下さい。って言ってます。

<Step 4: Feed Through a Grader>

はい、出た。

トンデモ評価方法。

例えば料理の手順、ここではぬたの作り方にしますか。を聞いたとします。

ある家庭ではぬたに使用する酢味噌にすりごまをいれるのが普通かもしれないし、そうでないかもしれません。

でAIが表示したぬたの手順に、酢味噌を作る過程ですりごまを入れる手順が無かったとします。ではそのぬたの作り方の手順は間違っていますか?

別に間違ってる訳では無いですよね。

でもぬたに使用する酢味噌にすりごまをいれる家庭で育った人は、ごまを入れる手順が無いぬたの作り方に10点は付けないです。

こういうアホな評価方法を重んじてるからComputer Scienceは理系の経済学部って言われるんです。

ここで評価できるのは、CorrectとIncorrectだけが客観的に存在する質問だけが、評価する事が出来き、そうでない質問は主観的な感想でしかない。という事実を理解する事なんです。

<Step 5: Change Prompt and Repeat>

これは分かります。

でも今のClaudeを含むAIは、質問するUserの過去の会話からのDataを参考に回答するので、質問方法を変えた位で回答の質が変わるとは思えません。

これについては長くなるのでここにはまとめませんが、

それよりもEngineeringの現実の問題をAIに提示して、その解決策を考えさせた方がより良い回答をAIから引き出せるはずです。

より詳しく説明して質問した方が評価の高い回答を得る事が出来る。

これって最近の論文で否定されてなかったでしたっけ。

<Prompt Scoring>

客観的な評価は言い過ぎですが、全く科学的、定量的に評価する方法が無かった前と比較すれば大分マシになったとは思います。

でもこれは答えの分かってる範囲の話で、UserがAIに質問するのは自分が答えを知らない分野なんですよ。

Codingのようにその場で確認出来るものなら、自分が答えを知らないものでも正誤をその場で判断出来ますが、

縄文人、弥生人、そして古墳人の神に対しての精神世界の違いは?
なんて質問の回答の正しさはどうやって確認したら良いんですかね。

<動画を見る>

今まで勉強した内容をそのまま説明してるだけでした。

この評価方法は科学的とは言えません。

6.3 <Generating test datasets>を勉強する

<Downloads>

このDownloadにあるFileは何でしょう?

これを使ってPromptの評価をするんでしょうか?

AWSのCodeなんて書いたことありません。このLectureで何をやるのか理解出来るでしょうか?

<Setting Up the Goal>

はあ、前にやったように余計な文を削るんでしょうか?

どうやら前にやったように余計な文を削るみたいです。

<Creating an Evaluation Dataset>

今一、DatasetのImageが湧きません。

以下のようなものでしょうか?

そのようです。Eval Datasetって書いてあります。

これは分かります。

<Generating Test Data with Code>

ああやっと全体像が見えました。

JSONで書かれたEvaluation DatasetをClaudeに作らせるんです。

そのためのCodeをここで書いてるんです。

これは、前の章で勉強したCodeそのものですね。

これはGenerate_dataset()と言う関数ですが、中身は全部Promptですね。

これは余計な文を省くための実装ですね。

<Testing the Dataset Generation>

これでTest Caseの結果が見れるはずですが、ここにはその結果は表示されてませんね。

自分でやれ。て事でしょうか?

<Saving the Dataset>

FileへのSave方法を説明するみたいですね。

はい。

<001_prompt_evals.ipynbを見る>

もうこのFileに書かれている内容は大体想像出来ますが、一応Downloadして確認します。

そうか動かすのにこれが要るのか。

前のTutorialで勉強した実装です。

Promptの部分ですね。

以上でした。

生成されたDatasetは無いのか。

<動画も見ます>

なんと日本語の字幕が付くようになりました。

前のTutorialには無かったよな。今、追加したんでしょうか?

動画の配信の中身を見せまいとする努力はどの会社も凄い。

と解釈すべきなのか?

それとも単なる偶然なのか?

それとも私がたまたまこの機能に今まで気が付かなかっただけなのでしょうか?

気になります。

分かりました。

何時もいじってた以下のIconで動画を操作すると

以下の部分が画面から隠れるように表示されます。

ので今までCCがある事が分かりませんでした。

ああ、良かった。

もう全世界から監視されてるのかと思った。

それは兎も角、動画ではDownloadしたFileの後に、以下の

余計な文章を弾くために実装を追加していました。

更に以下のCodeを実行した結果も表示されてました。

更にCodeを以下の様に改良して

Datasetの結果をFileにSaveするようにしました。

生成されたFileを開くと以下の様になっていました。

これが見たかった。

6.4 <Running the eval>を勉強する

実際にEvaluationをやってみるみたいですね。

最後のOutputの評価をするのが人間なのが、この評価方法の致命的な欠点のような気もしますが、

続きを読んでいきます。

<Building the Core Functions>

それぞれのPromptを操作する関数を作成するんでしょうか?

<The run_prompt Function>

段々Codeが読めなくなって来た。

もう一回復習する必要があるかもしれません。

まあ、最初は軽く勉強するだけでもいいや。

そう。この要らない文などを削るためのCodeやPromptの部分がよく理解してないんです。

<The run_test_case Function>

あれ?

これ読むとEvaluationもAIにやらせそうな雰囲気がありますね。どうなんでしょう。AIが評価までやるんでしょうか?

<The run_eval Function>

これは、先程作成したThe run_test_case Functionをここで読んで、結果的には表かまで終わらせてるのか。

これで作りたかった関数が完成した訳か。

<Running the Evaluation>

この辺はCodeを書きながら試したら、簡単でしょう。多分。

この実装だと結構時間がかかるのか。

<Examining the Results>

このCodeで結果を表示するのか。

これ読み終わった後に動画を見たらもう少し結果のImageがつかめる様になるはずです。

<What We've Accomplished>

これで評価するための実装の基礎は完成したという事のようです。

<動画を見る>

大体、このTutorialで何をやるのかは理解出来たので動画を見ます。

見ました。

3つの関数を使ってEvaluationの実装を作ってるのとかは直ぐに理解出来ました。

次のTutorialで、どうやって1~10までの値で評価するのかを教えるそうですが、それが気になりますね。

6.5 <Model based grading>を勉強する

これもDownload fileがありますね。

はい。

この人間が評価するのが、客観性が無いんですよ。

<Code Graders>

結果の長さなんて、答えの正確さとなんの関係のないじゃん。

<Model Graders>

これが一番、公平な気がします。

<Human Graders>

そうか。一番主観的な評価になると思うけど。

<Defining Evaluation Criteria>

はい。これはその通りです。

<Implementing a Model Grader>

はい。

これでどうやってAIに評価させるのかの基盤が出来ました。

<Integrating Grading into Your Workflow>

前節で作成したGrade_by_model()関数を使用して評価を行っています。

全ての評価の平均を計算しています。

いや、この方法を採用したからって客観的にはならんよね。

定性的な客観性は得られても、本当の意味での定量的な客観性を得る事は出来ないと思います。

なんって言うのか。

砂の上にどんなに堅牢な城を気付いても崩れるでしょ。

そんな印象を受けます。

<動画を見る>

実際に勉強した内容を実装してました。

6.6 <Code based grading>を勉強する

今度はGradingのCodeで作成する部分を勉強していきます。

Codeの評価には、

Syntaxと正しいFormatがあるかどうかを確認する必要がある

訳ですね。

<How Code Grading Works>

Valid SyntaxとはProgramming言語の文法を守っているかどうかをCheckしてるそうです。

その後の意味が正しいかどうかのCheckはSemanticです。

<Syntax Validation Functions>

はい。

これはJson、Python、そしてRegexのそれぞれをCheckするための関数ですね。

10か0しかないの?

厳しいですね。

<Dataset Format Requirements>

Datasetと書いてありますが、どこにFormatを追加すれば良いのか分かりません。

こういうのは実際にやってみないと駄目ですね。

<Improving Prompt Clarity>

ここでやっと、Pre-filled Assistant Messageが出て来ました。

<Combining Scores>

単なるCodingです。この部分は!

<Testing Your Implementation>

ああ、やっとここでこの評価方法を理解しました。

砂の上に建てた城ですが、この城を基準にして2個目の城の良しあしを評価したらそれなりに客観的なります。

<動画を見る>

DatasetにFormatを追加する。と言ってたのはこれの事でした。

この動画の最後で、

ここで得たScoreが良いか悪いかは、今のところは分からない。これを基準にしていくだけと

言っていました。

それなら納得です。

6.7 <Exercise on prompt evals>を勉強する

以下の課題をやるそうです。

More Contextなのか。

もっと前後関係を追加しろって事です。

Step 1です。

ここでは、DatasetにSolution Criteriaを追加しています。

AWSを弄った事が無いから、ここで言ってる事の意味が分かりません。

Step 2です。

Grade by modelがどんなPromptだったのか覚えてないです。

探して来ました。これです。

ここにSolution Criteriaを追加するの?

ここでTutorialでは、自分でやってください。と言って一端終わっています。

何をすれば良いのか全く分からないので答えを先に見てしまいましょう。

Datasetに以下の文を追加しました。

これはKeywordとか、要素とかが入っていたら加点、無かったら減点みたいな事をここで指定するようです。

お、一寸何をやってるのか理解出来て来ました。

そして以下の実装を実行して

新しいDatasetを作成しました。

作成したDatasetは以下の様になっています。

おお、Solution Criteriaが生成されています。

次はStep2の内容をやります。

Grade_by_model Promptに以下の実装を追加してました。

あれ?

さっき見たGrade_by_modelはこれですよ。

全然実装が違います。

いつの間にこんな実装になっちゃったの?

まあいいや。

そしてこの実装を全部実行すると以下の結果になりました。

Scoreが上がっています。

でもそこが問題じゃなくて以下のReasoning、

つまり点数がどれくらい公平につけられているのか。が向上したはずだ。と述べていました。

そこは納得です。

6.8 <Quiz on prompt evaluation>を勉強する

まだ全体的にボヤっとしか理解していませんが、Testを受けて間違ったところを復習する事で理解を深める事にします。

これは一番です。

うーん。これは覚えてない。

このBlogを散々読み直して以下の文を見つけて来ました。

4は違うって事です。

もう時間を取り過ぎました。3番にします。答えを生成するのに結構時間がかかると書いてあったからです。

あれ?合ってたの?次の質問に代わりました。

一番は違います。

二番はあってそうな気がしまう。

3番はClaudeがやる事だと思います。

4番のFeed the response through a graderは意味が分かりません。

回答を採点機にかけてください。

だって。

あ、そういう意味だったのか。これは4番が正解です。

これは4番でしょう。

これは3番です。

これは一番です。

全部合ってたのか。全然理解してないけど。

7. Nvidia Omniverseの勉強2(強化学習の勉強)

Nvidia Omniverseの勉強で、Isaac Lab Documentation [6]の勉強をしていますが、

これってIsaac Labの使用方法の勉強が主で、

Robotが自動歩行するためにどんな強化学習をしなければならないのかは別に勉強しないといけないのではないのか?

との疑問が出て来ました。

で先週は強化学習の教科書について調査しました。

でその教科書を勉強するための時間をここに作りました。

7.1 Claude Mythosの登場とこれからの戦略

今週は、今まで勉強は一寸お休みしてClaude Mythosについて自分の思う事をここに書き殴っておきます。

7.1.1 Claude Mythosの登場

世の中のInfraを支えるOSやBrowserを含めた全てのSoftwareを短時間でハッキング出来る性能を持つAIがとうとう登場してしまいました。

制作元であるClaudeはあまりにもその能力が高すぎるので一般公開は見送りして、Softwareの基礎を作る会社のみの公開に限定する事を決定しました。

これ大事件なんですが、全然世間では話題になっていません。

いや一寸は話題になっていますが、そのImpactの大きさと比較すると、ほとんど0っていっていいLevelです。

このAIの登場が何故、大事件なのかを一般人に分かるように以下にまとめてみました。

<量子Computerはもう要らない>

量子Computerが何故、こんなに注目されているのかの最大の理由は、暗号が解読できるようなるからです。

一般人からしたら量子化学とかどうでも良いです。しかし今ある暗号が全部解けたら大変な事は一般人でも分かります。

例えば、暗号が解ければ、仮想通貨の偽造も出来るようになってしまい今ある仮想通貨の価値は一瞬で0になってしまいます。

だからみんな量子Computeに注目してる訳です

しかしClaude Mythosは暗号は解けなくてもそのSoftの脆弱性からHacking出来てしまいました。

どんなSoftでも人間が書いてる以上完璧は無いです。必ず脆弱性はあります。その脆弱性をついて全てのSoftwareのSecurityを既に無効化してしまいました。

Anthropicが一般公開を中止したので、大事になっていませんが、実際はとんでもない事が起きてしまってる訳です。

<Singularityの始まり>

System Card: Claude Mythos PreviewのP42の図によると

今までのAIの性能はLinearで向上していたのが、Claude Mythos からExponentialになっています。

Singularityの定義は、

AIがAIを開発し、知能が爆発するポイント

です。

既にClaudeはAIで作成されています。そしてMythosの今の成績を見ると

知能が爆発するポイント

が今ここで起きてるという事になり、Singularityがいまここで起きた。と言えると思います。

<Project Glasswingの誕生>

Project Glasswingとは、超強力なAIを攻撃ではなく防御に使うために、世界の主要企業が協力してsoftwareを守るprojectの事です。

世界の主要企業ですが、

Amazon、Apple、Microsoft、Google、NVIDIA、Cisco、CrowdStrike、JPMorgan Chase、Linux Foundationなど大手企業+40以上の組織

が参加してるそうです。

で、全部米国企業です。

更にはっきり言うと日本企業は参加させてもらえてないです。

TOYOTAの車がHackingされたら世界的な惨事になりますよ。でもTOYOTAはProject Classwingには参加させてもらえないんです。

つまり

世界の主要企業が協力してsoftwareを守るproject

と言うのは建前で、

Anthropicとその仲間は、自分達だけでこのAIの利益を独占しようとしてるだけです。

もう、YouTubeに対抗して動画サイトを作成しても、その動画Siteの脆弱性をMythosに発見されて攻撃されて終わってしまうでしょう。

TOYOTAの企業機密も全部、彼らには筒抜けになるでしょう。

ここに記されている

Amazon、Apple、Microsoft、Google、NVIDIA、Cisco、CrowdStrike、JPMorgan Chase、Linux Foundation

の9社+Anthropicが世界の支配者となってしまったんです。

人類は次の1000年間は彼らの支配の下で生きてくしかなくなってしまったんです。

Anthropicの創業者である、Dario Amodei氏に喧嘩を売ったTrump大統領はどうなるんでしょう?

消されてしまうんでしょうか?

大いにあり得ると思います。

7.1.2 対抗策はあるのか?

人類にClaude Mythosに対抗する術はあるんでしょうか?

全く無い訳では無いと思っています。

以下に幾つかの可能性を書いておきます。

<TSMCの反乱>

AIがどんなに凄くてもData Centerが無ければ、その性能を維持する事は出来ません。あまりに勝手な事をやり始めたら、TSMCがGPUの提供を停止するかもしれません。

そうなったらいくらMythosが凄くてもいずれライバル会社のAIにその性能が追いつかれてしまうでしょう。

<Open AIのCodexは?>

これだって凄くなるはずです。上手くライバル関係になってほしいです。

<AI専用言語の開発>

ここからは、かなり私の妄想が入りますが、これが書きたくてわざわざ今週の予定を変えたので、あえて書きます。

これはもうProject Glasswingが世界のNetを全部支配して、それに反抗する以外に人類が生き延びる方法が無くなってしまった状態になったら、というかなりSFチックな仮定の話です。

で、そういう場合、当然LocalなAIを沢山繋げて、なんとかMythosに貼りあえる性能のAIを作る事になると思うんですが、

その時にAI同士のやりとりをAIが開発した言語で行うようにしたらどうでしょうか?

というのが私の案です。

AIにAI同士のCommunication用の言語をまず開発させてそれでAI同士の会話を行うんです。そうしたらものすごく効率よくなって対抗出来るかもしれません。

7.1.3 AI憲法はどうなってるの?

AI憲法に関しては、まだ勉強してなくてこれから勉強する予定なんですが、AIが勝手に暴走しないためにはこれが一番の解決策な気がして来ました。

今まではDario Amadi氏は理想主義者と言っていましたが、実は一番の現実主義者かもしれません。

で、中国はどうするんでしょうかというのがここの議題です。

AIが人類に逆らわないようにするためには、AI憲法で縛るのが一番というのは、当然、中国のAIにも当てはまる訳です。

しかし中国のAIがAnthropicのAIが使用してるAI憲法をそのまま使用するはずが無いです。

当然、中国共産党に特になるようなAI憲法を制定するはずです。

しかし私はそれ自体が問題とは私は考えていません。

その中国共産党に特になるようなAI憲法が、鏡になってAnthropicのAI憲法の不公正や不公平そして主観的な思想があぶり出されると思っています。

そうなった時に、

どうなるのかな?

と言うのが私の問題提起です。

これで、AI憲法を大幅に書き換える事になれば、AIは人類とは敵対しない存在になるかもしれませんが、

それをしなかったらその時AIは先程の企業の利益を守るためにその企業に属さないほとんどすべての人類と敵対する存在になる気がします。

どう思いますか?

8. DirectX12の勉強

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

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

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

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

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

8.1.1 前回の復習

「6.2.3 定数Buffer View(CBV)」の<定数Buffer Viewの生成>を最後まで勉強し、更にその実装まで終わらしていました。

前回の勉強で特に重要だったのは

CreateConstantBufferView()関数の2番目のParameterの設定方法です。というかほぼこれしかやっていませんでした。

先週のBlogを読み直しましたが、非常に短い内容なのでここでまとめ直したら、全部同じ事を書く事になるので、止めました。

8.1.2 「6.2.4 Root Signatureの変更」の勉強

ここではRoot Signatureの実装を編集します。

Root Signatureの機能です。

教科書によるとまずはDescriptor Rangeの編集からやるそうです。

Descriptor Rangeは以下の様になっていまいた。

教科書のCodeとまったく同じでした。

これを以下の様に書き換えます。

これはSample Codeから取って来ましたが、教科書に載ってるCodeもこれと全く同じでした。

この実装をよく見ると、Textureと定数Bufferの両方のBaseShaderRegisterが0番Slotから始まっています。

これについて教科書では、Registerの種別が違う(Textureと定数Buffer)ので重複しないと明言していました。

今度はRoot Parameterの設定です。

今は以下の様に実装していますが、

この設定はTextureのための設定です。

例えば定数BufferはVertex Shaderで使用しますが、Shade Visibilityの値が、

D3D12_SHADER_VISIBILITY_PIXEL

になっていて、この設定ではVertex Shaderから定数Bufferの値を見る事は出来ません。

ではどうするのかと言うと、以下に示した様に2つに分けて設定します。

はい。ここで問題です。

教科書ではRoot Parameterは2つに分けて設定しろ。と書いてありますが、Sample Codeでは一応そのCodeは書いてあるんですが、上記に示した様にComment Outされて以下のような実装になっていました。

これは教科書には書いてない実装です。

後でこれに変更するんでしょうか?

それともこっちの書き方の方が正式なんでしょうか?

この問題はひとまず置いておいて、次にいきます。

教科書の実装だと当然、RootSignatureDesc.NumParametersの値は2になります。つまり2で指定し直します。

しかしSample Codeでは

のままでした。

うーん。

これで定数BufferのRoot Signatureの設定は終わっていました。

8.1.3 AIに聞いてみる

Sample Codeと教科書の実装が違う所についてAIに解説してもらいましょう。

まずCopilotに聞きます。

CopilotはなんせMS社製ですので、同じMS社製のDirectX12と相性が良いはずです。

教科書とSample Codeの実装を紹介した後で、以下の質問をしました。

Copilotの回答です。

この後、回答がずらっと並んでいるので重要な所だけ抜き取ります。

どっちでも正解って事です。

ではこの2つのやり方でどんな違いが生じるのかを説明してもらいます。

一つにまとめた時はRoot SignatureのSizeは小さくなり、GPUの計算Costは小さくなります。

Descriptor Tableの数が変わります。

これって後々の実装に影響出るかもしれませんね。

一応、確認のために同じ質問をClaudeにもしておきます。

Copilotと同じ回答でした。

8.1.4 「6.2.4 Root Signatureの変更」を実装する

それでは実装します。

どうしようかな。

両方実装しておいて、Sample Codeと同じ様に教科書の実装はComment Outしておくかな。

Sample CodeのCodeをまる写ししました。

これで実装は完成です。

8.1.5 GitHubのRepositoryにPushする

大分慣れて来ましたが、一応記録は付けておきます。

GitHub Desktopを開きます。

Current BranchにChapter 6が選択されています。そして今回追加したCodeがしっかり追加されています。

Commentに以下の内容を書き込み

Commitしました。

TabがPush Originに代わりました。

Pushを押します。

に変化しました。

これでRepositoryに今日の実装が追加されたはずです。

BrowserからGitHubを開いて確認します。

Chapter 6のmain.cppを開くと

以下の様に

今日追加した実装が載っていました。

そしてmainのmain.cppを確認すると

変更する前の実装がそのまま残っていました。

出来てますね。

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

8.2.1 前回の復習

 Writing Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [10]を最後まで実装しました。

今週から次のTutorialの勉強になります。

8.2.2 Root Signature & Rasterizer | D3D12 Beginners Tutorial [D3D12Ez][11]を勉強する

今週はNotebookLMに内容を要約させてそれを勉強します。

とりあえずお勧めにあった以下の質問をしてみました。

Root Signatureは前のTutorialでも勉強してるところなので、今回はここに注目して勉強しましょう。

ちなみに前の節ではRoot Signatureは

と説明しています。

こっちのTutorialではどんな風に説明してるんでしょうか?

契約書や関数の引数リストですか?

配線図とはちょっと意味合いが違いますね。

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

ここのResourceの紐づけは、先程の棚と窓口の配線図の説明と同じですね。

つまりそれ以外にもRoot Signatureの役割はあるって事?

このShader(働き者)の説明は、どちらかと言うとView Descriptorの方の働きじゃないの?

こっちが先程の棚と窓口の配線図の説明と同じか。

実際の実装で、特にStructを指定する場合、どんなParameterを指定してるかなんか、いちいち気にしてられないので、こうやって2つの違う回答を示されるとRoot Signatureの本当の機能なんか分からなくなってしまいマシ。

定義方法にShader内で定義する方は推奨されている。って書かれていますね。

前のTutorialではC++内で定義してるんだと思います。

最後のまとめです。

結局、最後のまとめは

先程の棚と窓口の配線図の説明と同じ

でした。

NotebookLMに文章でもまとめてもらいました。

まずIntroです。

急峻の読み方も知らないし意味も知らない。

調べます。

学習曲線が急峻であるって

一寸勉強すると凄い成果が出るって意味になるんじゃ?

成程。そういう事か。

成程ね。

要は世間一般は一々Graphなんか確認しないから、何となく習得が難しいものを、

学習曲線が急峻って読んじゃってるんです。

ここで契約の話が出て来るのか。

これはここでは一応読みますが、先程のRoot Signatureの定義、

棚と窓口の配線図

以上の説明は無いので、覚えるのはこれだけにします。

これがよく分からないですね。「DirectX12の魔導書」ではHLSLでRoot Signatureを指定してるのかしてないのか?

それはこのTutorialを勉強していって、ここでのRoot Signatureの実装を勉強する過程で明らかになるでしょう。

HLSLでの定義は以下の手順で行うそうです。

これはやってないと思います。

結構重要な内容かもしれません。

特にIDEの設定は、多分初めて聞いた話だと思います。

今度はRasterizerの説明です。

ふーん。と言う感じですね。

RasterizerはPixel毎のRGBAの値を決定するための計算だったはずです。

この辺はOpenGLでしっかり勉強してたので、あんまり疑問は無いはずです。でも忘れてはいるので、必要に応じて復習する事にします。

これらは今は勉強しないていいよ。と言う意味ですね。

まとめです。

Root SignatureはSignatureと言う言葉から契約書と言う例えになるのは、分かりますが実態を考えると、CPU側のDataをGPU側に送るための配管工事と言った方が良い気がします。

その配管の出口はどこにつなげるのかをRoot Signatureで決定してるので、その配管の契約書というなら、まあ納得です。

Rasterizationに関しては多分理解してるので、ここであえて勉強しなくてもいいや。

はい。

今週のRoot Signature & Rasterizer | D3D12 Beginners Tutorial [D3D12Ez][11]の勉強はここまでにします。

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] Control rig. (n.d.). Epic Dev. https://dev.epicgames.com/documentation/en-us/unreal-engine/control-rig-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 6: Practical Deep Learning for Coders 2022 [Video]. YouTube. https://www.youtube.com/watch?v=AdhG64NF76E

[6] Howard, J. (2022, July 22). Lesson 7: Practical deep learning for coders 2022 [Video]. YouTube. https://www.youtube.com/watch?v=p4ZZq0736Po

[7] Nvidia. (n.d.). Isaac Lab Documentation. Retrieved from https://isaac-sim.github.io/IsaacLab/main/index.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). Environment Design Background. In Isaac Lab Documentation. Retrieved from https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/concepts_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

[11] Lötwig Fusel. (2023, August 10). Root Signature & Rasterizer | D3D12 Beginners Tutorial [D3D12Ez]. YouTube. https://www.youtube.com/watch?v=RSzwmaBSUmw

UE5の勉強などなど

2026-02-01のBlogの「AIについての調査(ComfyUIの勉強)」で議論した通り、勉強内容を変更する事にします。

ただしHoudiniの勉強はそのまま残す事にしました。これを削るのはもう少し考えてからする事にします。

Logoは直してる時間が無いので、しばらくはこのままです。

それぞれの勉強の内容や目的はそれぞれの章にまとめる事にします。

1.今週の予定

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

  • 映像作成用UE5の勉強
  • AIの勉強
  • Nvidia Omniverseの勉強
  • AIの勉強2(日本語字幕AIを作成する)
  • Claudeの勉強
  • Nvidia Omniverseの勉強2(強化学習の勉強)
  • DirectX12の勉強

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

2. 映像作成用UE5の勉強

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

最終的にはUEFNのMap内で神社を作成して、 誰でも参拝出来るようにするつもりです。

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

2.1.1 前回の復習

砂利道を作るために今までDownloadしたFabのAssetをCheckしました。

使用出来そうなAssetは以下の様になりました。

<escalon_traviesas_grava_hojas>

両端に草が生えていますが、それ以外は使用出来そうです。
<gravel_3d_scan>

このように自身を重ねて使用するか、

以下の様に他のAssetと重ねて使用すると

威力を発揮するAssetです。

<uljcfd0_tier_2>

色が他のAssetより茶色です。一番下に配置してその上に砂利のAssetを配置したら使えそうなので残しておきました。

<ugrxbjkfa_tier_2>

これは重ねて使用するとTiltingを完全に消せます。

砂利道には使用は出来ない感じですね。

<ukohbbi_tier_2>

何個か重ねるとこんな感じなり、砂利道として使用出来そうです。

<vf5pajccb_tier_2>

前回、調査したAssetの中では、最も砂利道にふさわしいと感じたAssetです。

<vbhsfesga_tier_2>

先程のvf5pajccb_tier_2と組み合わせて使用すると良い感じになるかもしれません。

もしくはukohbbi_tier_2と組み合わせて使用するのもありかもしれません。

<今週の予定>

先週のBlogでは砂利道の作成以外に、以下のAssetを使用して

石道を作成して、TextureのSizeを変更した場合のTestも行うと書いてありました。

更に参道が浮いてしまってるので、

Landscape Patchを使用して地面を平にしてStatic Meshと繋げるか、それともLandscapeの形状を活かして参道の形状を変更させるのかを検討するとも書いていました。

2.1.2 grey_natural_slate_stone_wallで石道を作成し、TextureのSizeを変更してみる

まずはこれからやっていきます。

M_MS_Surface_Material_Me_Inst_Sanndouを複製してM_MS_Surface_Material_Me_Inst_Sanndou1を作成しました。

これにgrey_natural_slate_stone_wallのTextureをセットしてgrey_natural_slate_stone_wallのTextureのSizeを変更できるMaterial Instanceを作成します。

なんとgrey_natural_slate_stone_wallには

がありました。

これってMetallicとRoughnessを表してるんでしょうか?

RGBを確認します。

Rです。

なんのDataも入っていません。

Gです。

ここにはDataが入っていました。

恐らくRoughnessでしょう。

Bです。

ここにもDataは入っていません。

それぞれのDataが何を指すのか元のMaterialを遡って確認します。

見つけました。

MF_MetallicRoughnessに以下の実装がありました。

つまりGがRoughness、BがMetallicを表しています。

偶然ですが、TextureのSizeを変更出来るMaterialの

ARDのGも

Roughnessを指しています。

ので以下の設定で

M_MS_Surface_Material_Me_Inst_Sanndou1のTextureは正しく組めたことになります。

grey_natural_slate_stone_wallには以下の2つのStatic Meshがあります。

どっちで試そうかな?

石道を作成して決めます。

最初の厚みが無い方です。

あ、Meshの大きさが違うからこうなってしまうのか。

2つ目のMeshが厚い方です。

こっちは調整しなくても一応石道にはなるのか。

確認したら、今まで石道に使用してたgrey_stone_tile_texture_me1

とSizeが同じでした。

ではこっちを使用します。

Duplicateしてgrey_natural_slate_stone_wall_me3を作成しました。

これのMaterialに先程作成したM_MS_Surface_Material_Me_Inst_Sanndou1をセットします。

結果です。

なんか凄い白いですね。

まあ、これはMaterial Instanceから調整して直しましょう。

完璧に同じにはなりませんでしたが、以下に示した位までは近づける事が出来る様になりました。

設定は以下の様に変更しました。

Tiling/Offsetです。

どっちがX軸で、どっちがY軸かわかりません。適当な値を入れてます。

Albedoの値です。

単に暗くしただけです。

これを石道のStatic Meshに使用します。

ではTextureのSizeを変更してみましょう。

色々弄った結果以下の様になりました。

予想に反して、Textureを小さくした方が綺麗になりました。

結果です。

汚れの部分が、Tilingしてるのは一発で分かりますね。

石畳のつなぎ目はかなり綺麗に出て来てます。石畳の模様に関してはTilingもほとんど分からないです。

今までの石道に使用してたgrey_stone_tile_texture_me1と比較してみます。

うーん。

汚れがTilingして無ければ、grey_natural_slate_stone_wall_me3の方が断然良いです。

汚れのTiling消せないでしょうか?

これは一寸、考える事にしましょう。この続きは来週やります。

2.1.3 砂利道を今まで調査したAssetを組み合わせて作成してみる

PCGを組む前に、今まで調査した砂利道用のAssetをどう組み合わせたら砂利道っぽく見えるのかをテストしてみます。

ukohbbi_tier_2とukohbbi_tier_2を組み合わせてみました。

もうこれで良い気がして来ました。

こうやって見ると石が大きすぎますね。

砂利道じゃないです。

Sizeを2倍にして作成したからですね。

Mannequinを配置してその大きさと比較しながら作成する必要がありますね。

今度は、vbhsfesga_tier_2とvf5pajccb_tier_2を組み合わせてみました。

Sizeを全部1にして組んでいます。

Mannequinの足に注目すると分かりますが、石のSizeは大きすぎます。

しかしそれ以外は良い感じです。

これで砂利道は作れそうです。

更にukohbbi_tier_2を追加しました。

もう完璧でしょう。

この組み合わせで行きます。

2.1.4 Landscape Patchの使い方を復習する

2026-01-11のBlogに使い方がまとめられていました。

まだこの石道を使用するかどうかは決めてないので、実装はしません。

代わりに石道の角度を変えて以下の様にして浮いてる部分を無くしました。

砂利道のSampleを作成したところです。

うーん。Landscape Patchした方が良いかな。

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]の<25:23 - Adding Doors and Interior Walls to Data Asset>を勉強していました。

なんと本当に一寸しか勉強していません。

まあ良いです。実装します。

2.2.2 Create Procedural Interiors With Full Room Separation | UE 5.4 P5 [1]の<25:23 - Adding Doors and Interior Walls to Data Asset>を実装する

PDA_ModularBuildingを開き

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

と先週のBlogには書いていますが、

既にDoorがあります。

先週のTutorialの画面を見ると

Interior Wallsを追加すれば良いだけのようです。

しかしTutorialを見直すと

Doorが無い状態からDoorとInterior Wallを追加していました。

うーん。

Tutorialは、以下に示したBuildingのEntranceとしてのDoorの存在をすっかり忘れてしまったようです。

まあ良いです。

Doorはそのままにしておきます。

Interior Wallだけ追加しました。

更にここで、

DA_RegularBuildingを開き、Interior Wallに追加するStatic Meshを選択します。

どうせBuildingの内側の壁なんで、以下のような透明なGlassなんかも良いかもしれません。

名前はSM_Showcase_02です。

Sizeはこうなってますね。

今外壁に使用してるMeshのSizeは以下の様になっています。

SM_Showcase_03は以下の様になってました。

こっちの方が上の枠もあります。

Sizeはこうなってました。

取りあえずはこれをInterior Wallにセットして、Sizeの問題は後で考える事にします。

以下の様にセットしました。

そうかここのScaleで調整しても良いのか。

実際に表示するようになってからSizeの問題は考える事にします。

これでお終いですね。今日の実装は。

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ノードの使用方法に関しての検証と勉強を続けてやっています。

FBIKノードと普通のControlの設定で同じControlを使用する事は出来ない。

という事が前々回の検証で分かりました。

前回は更に、IK Bone(Ik_Foot_root)に対してControlを作成し、そのControlとFull Body IKを通してPelvisを繋げました。

以下のような感じです。

あれ?

これって意味無くない。

ControlってBoneから生成しますが、そのBoneの特性を持つには、以下のような実装が必要なはずです。

これ試してないよな。

先程の結果が以下の様になると書いてありました。

ControlとBoneをLinkしてないんだから当然です。

で以下の様に組みました。

結果です。

これが、FBIKの影響でこうなったのかそれともIK Boneのせいなのかが分かりません。

Geminiが色々回答していますが、前回の失敗は、IK BoneとそのControlを作成するにあたり、FBIKを絶対に使用する必要がある。と勘違いしてた事です。

この前提をまず検証する必要がありました。

そしてその間違った前提に引きずれて

という、絶望的な結論に到達してます。

2.3.2 IK boneのControlの設定方法を調査する

前回の調査がまるまる無駄に終わったのは、IK BoneのControlの設定方法について何も知らないのに、FBIKを使用するものだと勝手に仮定した事です。

今回は普通の設定、つまり

を試してみます。

何の反応もしません。

確認のために以下の様に組んで

Controlを動かしてみたら

となりました。

そういう事か。やっと意味が分かりました。

IK BoneとControl Rigとのつなぎ方ってどうするんでしょう?

Geminiに聞いてみます。

いや、そうじゃない。

通常のBoneを使用してIKをControl Rigで組む方法が知りたいんじゃない。

IK BoneにControl Rigを追加したいんです。

でもこれはこれで知りたい内容ではあります。

要はBasic IKノードを使用してつなげろと言っています。

うーん。

それはそれで分かりますが。また迷宮に入ってしまいますね。

いえ、

私が知りたいのは、通常のBoneからIK Controlを作成する方法、つまりControl RigでIK(Inverse Kinematics)を組む方法ではなく、

IK BoneとControlを繋げる方法です。

分かりますか?

と質問し直しました。

その回答です。

うーん。

これをやったら全く反応しません。

でもIK Boneは変形していました。

そもそもIK BoneにはMeshを動かす機能がないのかもしれません。

Geminiに聞いてみます。

やっぱり。

そして更に以下の解説をしてくれました。

つまりIK BoneとControlを繋ぐ意味って今のところ無いって事です。

これを先週やったんだ。

やっと全部繋がりました。

2.3.3 FBIKノードとSet Transform Boneノードは同時に使用出来ないのか?

前々回の検証で

FBIKノードと普通のControlの設定で同じControlを使用する事は出来ない。

という事は分かりましたが、Full Body IKで使用するBoneと全く関係のないBoneを通常のControlの設定で使用した場合はどうでしょうか?

それだったらFBIKと通常のBoneの設定も共存できそうな気がします。

試してみます。

以下の実装を組みました。

FBIKに繋がっている右足のControl Rigを動かしてみます。

通常のControlの設定は完全に無視されていますね。FBIKを使用する場合は全部FBIKで指定する必要があるみたいですね。

3. AIの勉強

AIの勉強の目的ですが、

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

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

ここではPractical Deep Learning for Coders 2022 [3]の勉強をしています。Antigravityを使用したVibe Codingの勉強はしばらくお休みします。

3.1 前回の復習

Lesson 6: Practical Deep Learning for Coders 2022 [4]を最後まで勉強したんでした。

そして

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

3.2 Lesson 6: Practical Deep Learning for Coders 2022 [4]のまとめ (Blogの読み直し)

もうあんまりにも長く勉強したため、このLectureの勉強でどんな事をやったのかまったく覚えていません。

Blogを読み直して復習します。

あれ?検索しても一個も引っかかりません。

何で?

ああ、CitationをずっとLecture5にしてました。

うーん。

これを直すのは大変なのでこの問題は無視します。

でも本文にもこの文章はありますよね。

分かりました。

Double Quotationで囲む必要がありました。

出た結果から2026-01-18のBlogから勉強を始めた事が分かりました。

ここから復習していきます。

2026-02-08のBlog

2026-01-18のBlogを調べたら、実際にLesson 6: Practical Deep Learning for Coders 2022 [4]の勉強を始めたのはこの週からでした。

しかしその言い方も正確ではなく、じつはこのLectureの前半ではRandom Forestのやり方を説明していて、その前半部分はずっと前に既に勉強していました。

Bagging、OOB Errorについて説明しています。

2026-02-15のBlog

Partial Dependencyについて勉強していました。

ここでNotebookLMで要約しています。

NotebookLMで作成したBlogの内容を説明して終わっていました。

2026-02-22のBlog

Random Forestの長所に、

  • 過学習がない
  • Regression Modelにおける相互作用(Interaction)を気にする必要がない

などが述べてありました。

ここからPaddy Disease Classificationの話が始まります。

ここでKaggle Competitionで良い点を取る事を目標にする事にしています。

今考えると、それよりもAI Agentの使い方を覚えて新しいAppでも開発する方法を覚える事の方が全然大切です。

たった一か月でAIの世界はガラッと変わってしまいますね。

2026-03-01のBlog

学習に使用する画像をどうResizeするのかについて説明しいています。

後はどのModelを使用すべきかについても論じています。

2026-03-09のBlog

Paddy Disease Classificationのための実装をたんたんと解説しています。

完成した途端に、Kaggle Competitionに提出してTop 80%というかなりひどい成績を取っています。

2026-03-15のBlog

ここで何でKaggle Competitionに提出しないといけないのかについての説明が書かれています。

要は客観的な評価を得る必要があるからだそうです。

AutoMLについても解説していました。

ここで、天才的な勉強方法を発見しています。

NotebookLMに節毎のまとめをしてもらうという事です。

例えば、ここで勉強してる<1:24:16 Why the first model run so slow on Kaggle GPUs>ではどんな内容が語られているのかを説明しろ。とやっています。

これやるとその節でどんな事を勉強するのかが先に理解出来るので、どう勉強すべきなのかがすぐに理解出来ます。

ModelとArchitectureの違いについても解説していました。

2026-03-29のBlog

NotebookLMにそれぞれの節を要約させて最後まで勉強していました。

3.3 Lesson 6: Practical Deep Learning for Coders 2022 [4]を勉強した感想

まずここで究極の勉強法が完成しました。

NotebookLMに節毎に要約させて、それを読みます。その後で動画を見て補足すべき内容があったらそれを記録します。

残りのLectureもこの方法で勉強する事にします。

最初のRandom Forestの勉強はずっと昔にやっていました。

Kaggle Competitionで良い点を取る事を目標に掲げていましたがこれは既にやる価値が半減しています。

Paddy Disease Classificationの実装方法に関しては、既にPart2が消滅していて今から勉強しようにも出来ない状態になってしまっています。

のでそんなに細部にこだわらずに淡々と勉強して一端このCourseを全部終わらしてしまいましょう。

で、今もっとも勉強しないといけないAI Agentの勉強を本格的に始める事にします。

4. Nvidia Omniverseの勉強

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

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

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

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

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

4.1 前回の復習

Isaac Lab Documentation [5]のWalkthrough [6]の勉強の続きをしています。

先週のBlogを読むとEnvironment Design [7]の<Define the Robot>と<Environment Configuration>の実装をしていました。

具体的には

<Define the Robot>では

isaac_lab_tutorial/source/isaac_lab_tutorial/isaac_lab_tutorialにRobotsというFolderを作成した。

そのRobotsの中に、__init__.py と jetbot.pyという2つのFileを作成した。

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をVS Codeで開きました。

そして以下の様に実装を直しました。

前回はここまでやっていました。

4.2 Environment Design [7]の続きを勉強する

前々回のBlogを見たらEnvironment Design [7]は途中までしか復習していませんでした。

<Attack of the clones>

の続きを復習します。

2025-11-09のBlogで勉強していました。

今度はisaac_lab_tutorial_env.pyの実装を編集するのか。

__init__関数と_setup_scene関数を以下の様に書き換えるそうです。

今の実装は以下の様になっていました。

以下の部分がまるまる変更されて

以下の実装に変更されていますね。

この部分の実装については2025-11-09のBlogで以下の説明がありました。

ここで、後でActionを適用する対象となるJointを指定する必要があるみたいです。

更に_についても以下の説明がありました。

更に詳しく以下の様に解説していました。

_setup_scene関数では以下の実装が無くなっています。

それ以外は全く同じです。

しかもこの設定、Tutorial作成当時は無かった可能性があります。となると_setup_scene関数は何も変更してない事になります。

(ここから2025-11-16のBlogの復習になります)

この実装の後の英文です。

その訳です。

_setup_scene関数には何の変更もしてない。とはっきり書いてありました。

そして今度は以下に示したように_pre_physics_step()関数と_apply_action()関数の実装を変更するそうです。

今の_pre_physics_step()関数と_apply_action()関数の実装は以下の様になっています。

_pre_physics_step()関数は同じですね。何処も変更していません。

_apply_action()関数の方は、set_joint_effort_target()関数が、set_joint_velocity_target()関数に変更されていますね。

変更した部分の実装については以下の解説がありました。

set_joint_velocity_target()関数はRobotの関節の速度目標値だそうです。変数名がその機能をそのまま表していますね。

そう言えばIsaac Simを勉強してた時に関節の速度を指定した事がありますね。その辺の設定をここで行ってるんでしょうね。

そしてこの実装の後にある文です。

この文章の訳です。

Decimated云々の箇所は、Simulationを計算する度に、Actionを行うのではなく、Simulation 2回に対してActionは1回行うような事を述べているんでしょうか?

多分そうでしょう。

次は_get_observations()関数と_get_rewards()関数についてです。

以下の様に変更するそうです。

元の関数の実装を見てみます。

_get_observations()関数です。

これは全然違いますね。

でも構造は同じですね。ObservationでPolicyに値をパスしています。その値が違うだけです。

_get_rewards()関数です。

こっちもぱっと見は全く違うように見えますが、total_rewardの値が違うだけです。

(ここから2025-11-23のBlogの内容になります)

実装の後の解説文です。

その訳です。

2025-11-23のBlogではこの文章が説明する内容を詳しく解説しています。

今回は実際に実装するために必要な内容に集中するため、これらの文章や実装の内容の解説は省略します。

次の文です。

その訳です。

この辺はRobotの管理方法を簡単に説明しています。

Isaac LabではGPUの機能をMaxで使用するため、Tensor形式でRobotの情報を管理しています。

そのためこのDataの管理方法は非常に奇妙で理解しにくい形態になっています。

次の文です。

その訳です。

この文についてはここで論ずることは無いです。

2025-11-23のBlogで色々論じていますのでそっちを参考にして下さい。

そして_get_dones()関数と _reset_idx ()関数の実装です。

これはどこを編集したんでしょうか?

元の実装を以下に示します。

_get_dones()関数の元の実装です。

この実装と比較すると編集された実装では

Self.joint_pos、Self.joint_vel、そしてout_of_boundsが無くなってます。

_reset_idx ()関数の元の実装です。

比較すると以下の実装がまるまる無くなっています。

後は一緒のようです。

2025-11-23のBlogでは編集した方の実装については詳しい解説をしてるんですが、この消えた実装がなにをやってるのかは全く調べてないです。

今回それを調べたら、実際に実装して動くものを作成する目的からそれてしまうのでこれらの実装が何をやってるのかは調べずに先に進みます。

最後の文章です。

その訳です。

だそうです。

最後に以下の図が載っていました。

実装するために必要な情報は全部抜きとれましたね。

でも実装は来週やります。一週間熟成させて、それから実装します。

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

5. AIの勉強2(日本語字幕AIを作成する)

2週間に一回ずつやる予定なので今週はお休みです。

6. Claudeの勉強

Houdiniの勉強はしばらくお休みします。そしてClaudeの勉強をします。

以下の順番で勉強しろとClaudeに言われましたが、

流石に101は簡単すぎるので、Claudeの APIから勉強する事にしました。

そしたらAPI FundamentalというTutorialは無くて、代わりに以下のTutorialを勧められました。

のでしばらくこのTutorialを勉強する事にします。

6.1 前回の勉強の復習

前回は<Getting an API key>と<Making a request>を勉強しました。

<Getting an API key>では、ClaudeのAPI keyの入手方法とその管理方法を説明していました。

まだ有料会員になってないので、API Keyは入手出来ません。のでこれは見るだけです。

次に、<Making a request>を勉強しました。

これはVS CodeからJupyter notebookを起動させて、そこからCodeを書いていました。

The Create Functionを使用して簡単な質問をClaudeにしています。更にClaudeからの回答を

を使用して表示したりもしていました。

VS CodeからJupyter Notebookを起動出来るようにだけはしました。

細かい手順に関してはClaudeの

Claude API チュートリアルの実行環境について

を参照して下さい。とありました。

6.2「Multi-Turn conversations」を勉強する

そうなの?

はい。そしてそのやり方をここで勉強するって事ですね。

<The Problem with Stateless Conversations>

はい。

<How Multi-Turn Conversations Work>

マジで!

こっちの方がMemory消費するんじゃない?

まあ、やってる事は単純ですね。

<Building Helper Functions>

最後のChat()関数は前回勉強した関数ですね。それに自分の書いたMessageを追加するAdd_user_message()関数と、Anthropicの書いたMessageを追加するAdd_assistant_message()関数を追加で作成していますね。

<Putting It All Together>

で以下の様に実装すると会話を続けられるようになるそうです。

こうやってまとめてくれると理解するのが非常に簡単になりますね。

これでLectureの文章は終わっています。

<付属のVideoを見た感想>

特に特別な情報は追加されてなかったです。

6.3 「Chat exercise」を勉強する

ここは何の説明もなくVideoがあるだけです。

これを作成するんでしょうか?

取りあえず動画を見てみます。

作成するのがここの課題でした。

最初のPrompt the user云々の意味がよく分からなかったんですが、この部分は動画でどういう意味なのかしっかり説明していました。

以下に示した様に

UserがPromptを書き込む箇所があります。

ここにAnthropicに対しての質問を書き込むと、以下の箇所に書き込んだ質問と

Anthropicからの回答が書き込まれます。

はい。

これを作成しろって事です。

で最初の部分、Build in input Functionをどうやって実装するのかだけ見せてくれました。

これで本当にBuild in input Functionが作成出来るんでしょうか?

その後は以下の TODOに沿って実装すれば完成するそうです。

一寸自分で考えて実装したいけど、もう人間がCodeを書く時代ではないでしょう。

続きの答えを見てしまいます。

この時点で気が付きましたが、これって基本的には前回のTutorialで実装したのをWhile Loop内で繰り返すだけですね。

以下の様に実装してました。

今日はこんなもので良いです。

ここまでにします。

6.4 System promptsの勉強

まずSystem Promptについて説明していました。

<Why System Prompts Matter>

例えば数学の先生なら以下のようなSystem Promptを作成するみたいです。

<How System Prompts Work>

以下の様にSystem Promptを実装していました。

本文です。

System Promptって絶対に消えないんですかね。沢山会話したら忘れちゃったりしないんでしょうか?

<Seeing the Difference>

特に追加したい内容もないですね。

<Building a Flexible Chat Function>

これは実装部分を改良したのかな。その前のSystemがどうなってるのかがよくわからないんですね。

成程。Systemの設定はこうなってるのか。これなら納得です。

うーん。でもこれ実装できるかな。

もう少し情報が欲しいですね。

これで終わりです。

<動画を見る>

動画を見ます。

Systemを提供しない場合にErrorになるという話が、文章の解説からはよく分からなかったんですが、この動画ではその部分が詳しく解説されていました。

6.5 System prompts exerciseの勉強

ここはExerciseですので、何か作成するんでしょうね。

いきなり以下の実装が表示されました。

これを実行すると

以下に示した様にとんでもない量のCodeが出力されます。

この生成されるCodeの量を減らすための、System Promptを追加するみたいです。

ここでPoseして答えを自分で考えてください。となっています。

そして解答です。

生成された答えです。

短くなってます。

これだけでした。

6.6 Temperatureの勉強

まずは文章から読んでいきます。

TemperatureってParameterの値をある程度Randomに振る機能でしたっけ。

まあ、読んでいけばどんなものか理解出来るでしょう。

<How Claude Generates Text>

分かり易い。

こうやって説明してくれたら高校生でも理解出来ますね。

そして以下の図が紹介されています。

そして以下の説明文が続いてました。

<What Temperature Does>

あ、もうTemperatureが私の言ってた事を指すのが分かりました。

でも一応最後まで読んでみましょう。

Temperatureが高いともっとRandomな結果になるそうです。

Entropyが増加するからね。

<Interactive Temperature Demo>

ClaudeのInteractive Demoは何処で見れるんでしょうか?

まあ見れなくても問題ないですが。

ここが問題かつ大切なところで、CreativityはRandomさが無いと誕生しないんですね。

つまり、優等生だけを集めても生まれないって事です。

今の日本の体たらくの一因が、東大を始めとする一流大学は優等生だけを集めてる事である事が、こういう事実からも分かってしまうんですね。

<Choosing the Right Temperature>

回答の種類によって適切なTemperatureの値が変わって来ます。

<Implementing Temperature in Code>

以下の実装でTemperatureの値を追加出来るそうです。

ふーん。

これだけでTemperatureの値を追加出来るのか。

<Testing Temperature Effects>

これ、Temperatureが1の場合、文章が意味をなさなく成ったりはしないんでしょうか?

それが気になります。

<Key Takeaways>

違う結果を得る為にTemperatureを高くするのは間違ってるって事ですね。

Temperatureを決定するのはここで述べられている要因であるって事です。

で結論です。

<動画を見る>

特に記録すべき情報はなかったです。Lectureの内容を動画で説明しただけでした。

6.7 Course satisfaction survey

これは勉強じゃなかった。一応やっておきます。

やりました。

6.8 Response streaming

答えを生成してる途中経過を見せるのをResponse Streamingと呼ぶみたいですね。

<The Problem with Standard Responses>

前と同じ事言ってますね。

付属の図も載せておきます。

<How Streaming Works>

速く、実装方法を見せてほしいです。

<Understanding Stream Events>

こんなEventが起きてたのか。

この中のContentBlockDelta Eventが実際の生成されたTextのDataを持ってるそうです。

<Basic Streaming Implementation>

やっと実装方法を見せてくれました。

Streamを追加してその値をTrueにするのか。

その後のPrint(event)でそのEventを表示させるのか。

理解しました。

<Simplified Text Streaming>

実際のTextの内容だけ表示する方法のようです。

<Getting the Complete Message>

最後に完成したTextを表示するための実装も追加しました。

<動画を見る>

一寸勘違いして理解してた箇所がありました。それはwith…Asの実装の部分です。

With…Asの使い方がよく分からないですね。

うーん。

まあいいや。

6.9 Structured dataを勉強する

Dataだけを生成する方法を勉強するみたいです。

<The Problem with Default Responses>

DefaultではClaudeは以下の様な回答をするそうです。

<The Solution: Assistant Message Prefilling + Stop Sequences>

これで必要な部分だけ表示するようになるんでしょうか?

こんな仕組みでJsonの部分だけ表示されるのか。

Prompt Engineeringだな。

そしてこのような結果になるのか。

<Processing the Response>

これを追加すると何が消えるんでしょうか?

<Beyond JSON>

はい。理解しました。

<動画を見る>

文章を読んで内容を大体理解した後で、動画を見ると理解が格段に深まります。

6.10 Structured data exerciseを勉強する

以下の指示通りの実装をするそうです。

Promptで以下の指定をしました。

後は正解だけ以下に記録しておきます。

6.11 Quiz on accessing Claude with the API

Quizです。

全然覚えてないですけど、一応受けてみます。

これはどう考えても3番が正解でしょう。

これは4番が正解です。

これは3番が正解です。

これも3番が正解です。

で言うか、答え知らなくても正解分かるでしょう。これ。

これは3番ですね。

これも三番が正解です。

これは2番が正解です。

3番が正解です。

時間まで記録されるのか。

途中でトイレに行くんじゃなかった。

テスト受けるってなったら緊張してトイレに行きたくなっちゃたんです。

まあ、PassしたのでOKとします。

問題が簡単すぎでした。

これなら緊張する必要なかったです。

7. Nvidia Omniverseの勉強2(強化学習の勉強)

Nvidia Omniverseの勉強で、Isaac Lab Documentation [6]の勉強をしていますが、

これってIsaac Labの使用方法の勉強が主で、

Robotが自動歩行するためにどんな強化学習をしなければならないのかは別に勉強しないといけないのではないのか?

との疑問が出て来ました。

で先週は強化学習の教科書について調査しました。

でその教科書を勉強するための時間をここに作りました。

7.1 前回の復習

Nvidia GTC 2026のHow to Build End to End Physical AI System for Humanoid Robotsを見ました。

7.2 Nvidia GTC 2026の動画をDownloadして字幕を付ける

CTCの動画は非常に勉強にはなるんですが、Captionが表示されません。

流石に発表で使用される専門用語はCaptionが無いと何を言ってるのか全く理解出来ません。

動画をDownloadして、WhisperでCaptionを追加してから勉強する事にします。

まず動画をDownloadするためにyt-dlpをInstallします。

ChatGPTのyt-dlpの解説です。

以下の方法でInstallしました。

Condaで仮想環境、ytdlpを作成してそこにInstallしました。

更に、以前Whisper の際に行ったようにPowerShellのProfileに関数を登録することでコマンドで実行出来るようにします。

以下のCommandでProfileを開き、

以下の関数を追加しました。

この関数はGeminiが考えてくれました。

これで以下のCommandを打つだけで動画のDownloadが出来る様になりました。

準備が出来たので、Nvidia GTC2026の動画をDownloadしてみます。

なんと、もうSchedule表が無くなってしまいました。

どのSessionを見たかったのか分からなくなってしまいました。

でもすべてのSessionを検索できます。

「Configure and Tune Robot Assets With OpenUSD and PhysX [DLIT81697]」の動画をDownloadしてみます。

yt-dlp "https://www.nvidia.com/en-us/on-demand/session/gtc26-dlit81697/"

この動画があるSiteのURLで試してみました。

ERROR: Unsupported URL: https://www.nvidia.com/en-us/on-demand/session/gtc26-dlit81697/

となってDownload出来ませんでした。

うーん。

動画自体のURLではないので、Download出来なかったみたいです。

これは困りました。

Geminiにどうしたら良いか聞いたら、2つ対策を教えてくれました。

最初の方法を試したら駄目だったんですが、以下に示した2つ目の方法を試したらDownload出来ました。

DownloadしたFileの名前はa.mp4になっていたので以下の方法で名前を変更しました。

そして以下のCommandでMP3を作成しました。

以下の様にmp3 fileが生成されました。

今度はWhisperを使用してこのMp3 fileから字幕用の文字起こしを行います。

まず仮想環境をWhisperに変更します。

そして以下のCommandを実行します。

whisper "GTC2026_PhysX_Robot_Tuning.mp3" --model large-v3 --language English --output_format srt --model_dir $env:WHISPER_MODEL_DIR

ここからWhisperが文字起こしをしてくれたんですが、かなり時間がかかりました。

30分近くかかったと思います。

完成したSrt Fileと動画をDavinci Resolveで編集しました。

完成した動画を見ます。

おお、字幕が付いています。

これならこのSessionを見て勉強する事が出来ます。

7.3 「Configure and Tune Robot Assets With OpenUSD and PhysX [DLIT81697]」を見る

では動画を見てみます。

Linex多分Ubuntuでやっています。まずIssac Simの起動のさせ方から説明しています。

結構実践的な内容かも。

Jensenが前に説明してたPhysical AIに必要な3種類のComputerの図がここでも出て来ました。

このDGXの部分がよく分からないです。

これはChatGPTに聞いてみましょう。

うーん。でもそれってOmniverseでやってるんじゃないの?

もう少し詳しく説明してくれました。

でも構造は同じですね。

やっぱりOmniverseでやってる事と、DGXでやってる事は同じ気がします。

やっぱりDGXとOmniverseのやってる事は被ってるです。

こんな感じになってるそうです。

成程。理解しました。

となると今は、自分のPC上でIsaac LabやIsaac Simを動かして、このLoopを回していますが、本格的にやるには、これをData CenterにあるGPUで回す事になる訳ですね。

この後、Slideの内容と喋ってる内容が全然一致しない状態が数分間続きます。

そしてIsaac Simの構造を説明するSlideが数分間続きました。

その後で、以下のTutorialを実施してます。

でこの部分の説明が非常にうざい。

新入社員が担当してるのか知らないですが、うだうだうだうだやってます。

この部分は自分で勉強した方がましです。

Netに無いか探してみます。

うーん。

なかった。

なんとこのTutorialの実装を1時間近くやっていました。

ここは無視。

そしてやっとLectureに戻りました。

Max Joint Velocityを指定する理由を聞いてます。

なんとここでStiffnessとDampingについて説明してます。

今まさに私が勉強してるところじゃないですか?

私が理解してるStiffnessとDampingは以下の様になっています。

それを

こういう数式で表すのか。

この後ずっとLectureが続くのかと思ったら、またTutorialに戻っていました。

これはこのTutorialを見ないと何も出来ません。

もう一回このSessionに入ってTutorialを探します。

ナニコレ?

今見たら、Transcriptが表示されるようになってました。

なんだったの?私の字幕を必死で作った苦労は?

しかしここでやってるTutorialのURLは載っていません。

検索しまくって引っかかったSiteを片っ端から見ていきましたが、

https://docs.isaacsim.omniverse.nvidia.com/6.0.0/openusd_tuning_tutorials/index.html

もしかするとこれかもしれません。

目次が

となっていますが、これが

同じです。

ここまで一致する事は偶然ではないと思います。

まあ、勉強はしないですけどね。

最後にGTC 2026で発表されるPhysical AI関連のSessionの紹介がありました。

これ見たら、Isaac Simの専門家には成れるかもしれませんが、自分でRL Learningを工夫して、論文で発表出来るような新しい成果を得る事は出来そうには無いですね。

そしてIsaac Simの使い方を覚えるだけなら、もっと簡単な方法で勉強出来るはずです。

学術的な理論と、実際のIsaac Simの操作を混合して同時に解説してるので、聞いてる方は混乱してしまいます。

2つをしっかり分けて別々に教育しないと、中学生でも理解出来るIsaac Simの簡単な操作を覚える事すら出来ない大学院生が大量発生すると思われます。

それがこのSessionの動画をみた正直な感想です。

8. DirectX12の勉強

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

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

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

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

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

8.1.1 前回の復習

「6.2.3 定数Buffer View(CBV)」を勉強しています。

ここで、

  • Descriptor Heap
  • そのView
  • そのRoot Signature

がそれぞれどんなことをやってるのかを細かに調査してまとめています。

更に分かりやすくなるように以下の例えを行っていました。

Dataの塊だけをGPU側に送ってもその中身が何を示してるのかはGPU側は全く分からないです。それを説明するのが、Descriptor Viewです。

そのDataをShaderから見る時は、T0というSlotから見えるようにする。と決めるのがRoot Signatureです。

ここで、Root SignatureとSemanticとの違いが分からなくなったことに気が付きました。

そこをGeminiに解説してもらうと、

以下のような違いを説明してくれました。

要は頂点Bufferだけは別な方法でGPUに送るので、Semanticと言うものが必要になる。

という事です。

ここまで理論を勉強した後で、「6.2.3 定数Buffer View(CBV)」の<Descriptor Heapを書き換える>を勉強しました。

ここでは、Texture用のDescriptor Heapを前に作成しているので、これの名前だけ変更して、今回の用途にも使用する。と言っています。

に書き換えていました。

そしてTexDescHeapを使用してる他の実装を全部、BasicDescHeapに書き換えました。

最後に、以下に示したNumDescriptorsの値を2に変更します。

当然Codeを変更したのでGitHubのRepositoryにPushしました。

次の「6.2.3 定数Buffer View(CBV)」の<定数Buffer Viewの生成>の勉強もしていました。

定数BufferのViewはCreateConstantBufferView()関数を使用して作成するそうです。

CreateConstantBufferView()関数には以下に示した様に、

2つParameterがあり、

最初のParameterであるD3D12_CONSTANT_BUFFER_VIEW_DESC* pDescは、以下のStructで構成されています。

BufferLocationの値は、GetGPUVirtualAddress()関数を使用すれば取得出来るそうです。

次のSizeInBytesは256バイトアラインを保証した値を入力する必要があるので、

以下の様に指定(Copilot)するか、

教科書のように、前の段階で256バイトアラインを保証した値にした上で

GetDesc().Width

を使用する必要が出て来ます。

ここまで勉強して、先週は終わっていました。

8.1.2 「6.2.3 定数Buffer View(CBV)」の<定数Buffer Viewの生成>の続きを勉強する

では、今週は前回の続きであるCreateConstantBufferView()関数の2番目のParameterの設定方法から勉強していきます。

2番目のParameterは

D3D12_CPU_DESCRIPTOR_HANDLE

というStructで構成されてるそうです。

教科書の説明によると、今回のDescriptor ViewにはShader Resource ViewとConstant Buffer Viewの2つを配置します。

のでD3D12_CPU_DESCRIPTOR_HANDLEのPtrで指定するConstant Buffer ViewのAddressは、Shader Resource Viewの後に配置されるため、

Shader Resource ViewのAddress + Shader Resource ViewのSize

になります。

Shader Resource ViewのAddressは、ID3D12DescriptorHeap InterfaceのGetCPUDescriptorHandleForHeapStart()関数で取得出来ます。

次にShader Resource ViewのSizeは、ID3D12DeviceのGetDescriptorHandleIncrementSize()関数で取得する事が出来ます。

ViewのTypeによってViewのSizeが変わるので、この関数は以下のParameterによってどのViewのSizeなのかを指定します。

今回はShader Resource View(SRV)のSizeを指定したいので、

D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV

を指定します。

Sample Codeでは以下の様にやっています。

そしてGetDescriptorHandleIncrementSize()関数で得たShader Resource ViewのSizeを足します。

実際は、Shader Resource ViewとConstant Buffer Viewは同時に作成するため、以下のような実装になるそうです。

成程。理解してしまえばそんな難しい事は言ってませんでした。

ではこの部分を自分のProjectに実装します。

しました。

CreateShaderResourceView()関数は既に実装済みですが、2番目のParameterの値を

basicDescHeap->GetCPUDescriptorHandleForHeapStart()

から

basicHeapHandle

に変更しました。

これで「6.2.3 定数Buffer View(CBV)」は終わっていました。

8.1.3 GitHubのRepositoryにPushする

しました。

Browserから確認します。

Ch5_CopyTextureのChapter6 Branchを開き、main.cppを確認すると

今日追加したCodeがRepositoryにも追加されていました。

Ch5_CopyTextureのMainの方の

Main.cppは

元のままになっていました。

問題ないですね。

段々GitHubの使い方も慣れて来ました。

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

8.2.1 前回の復習

 Writing Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [8]を最後まで勉強していました。

そんだけです。

8.2.2 Writing Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [8]を実装する

先週のBlogには以下の様に書いてあります。

確認します。

No Symbols Loaded for…って書いてあるじゃん。

でも、UploadBufferAddressには値があるな。

TutorialのVideoで確認したら

Information not availableって書いてありました。

それよりもTutorialの例ではVertex ShaderとPixel Shaderに値があります。

私のProjectは

両方0です。

まあいいや。

問題が起きたらその時に対応します。

そして以下のCodeを追加しました。

先週のBlogには

と書いてあったんですが

Sample CodeではしっかりPixel Shaderになっていたので、pixelShaderで実装しました。

以上です。

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. (2022, July 21). Lesson 6: Practical Deep Learning for Coders 2022 [Video]. YouTube. https://www.youtube.com/watch?v=AdhG64NF76E

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

[6] NVIDIA. (2026, February 14). Walkthrough. Isaac Lab Documentation. https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/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] Lötwig Fusel. (2023, August 6). Writing Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [Video]. YouTube. https://www.youtube.com/watch?v=8MMRz9QMJI8

 

UE5の勉強などなど

先週は別な予定が沢山入って来たので、勉強はお休みしました。

休んだからと言って何か別な事が出来た訳では無いので、先々週の続きを今週も淡々とやっていきます。

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の追加を行います。

具体的には、

  1. isaac_lab_tutorial/source/isaac_lab_tutorial/isaac_lab_tutorialに移動し、robotsという新しいFolderを作成する
  2. この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から見えるようにするために以下の事をやったそうです。

  1. Descriptor Heapを作成
  2. その中にViewを定義し
  3. 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を送る時のやり方が、違うって事です。

今はこれだけ覚えておけば十分です。

一個勉強になりました。

では、元に戻って

  1. Descriptor Heapを作成
  2. その中にViewを定義し
  3. 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