UE4の勉強記録

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

UE5の勉強などなど

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

ただしHoudiniの勉強はそのまま残す事にしました。これを削るのはもう少し考えてからする事にします。

Logoは直してる時間が無いので、しばらくはこのままです。

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

1.今週の予定

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

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

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

2. 映像作成用UE5の勉強

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

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

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

2.1.1 先週の復習

神社の参道を作っています。

以下の様になりました。

今週はこれをもっと改良する事にします。

DefaultのMaterial Instanceだと、TextureのSizeを変更出来ない事が判明しました。

前に自作のMaterialでTextureのSize、向き、位置などを調整出来るMaterialを作成したのでそれを探してみます。

2.1.2 参道の改良をする

さすがにこれでは参道が細すぎます。

太さを3倍位にします。

これ見ると、幅を三倍にしても細いですね。

幅を6倍にします。

ChatGPTに

Splineの両脇にもPointを追加したいんです。 つまり3列でPointを生成したいです。 出来ますか?

と質問したら

TransformノードのOffsetを使って最後にMergeノードで合成すれば良い。と言ってました。

はい。

なんでこんな簡単な方法、自分で思い付かなかったんでしょう。

まあ、いいやAIが代わりに考えてくれたんだから。

Transform PointsノードのOffsetの値ですが、

以下のGet Actor PropertyノードからPassしたいです。

ここからPass出来れば、後で床のStatic Meshの大きさが変わっても調整出来るはずです。

でもこのNodeの使い方を忘れてしまいました。

ChatGPTに聞いてみました。

これだ。これを忘れていた。

BP_Sanndouに

StoneWidthを追加しました。

ここからどうやったかな。

TutorialのPCG Buildingを見たら以下の様に実装してました。

Offset MinとMaxを使う場合は、元のPointの座標は要らないみたいですね。

それだけ分かれば十分です。

以下の様に実装を組みました。

結果です。

うん。ナニコレ?

Meshを追加してみます。

ああ、大きさと向きがRandomになってるのか。

Transform Pointsノードの以下の設定を直しました。

結果です。

完璧じゃないですか。

反対側にも追加します。

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

PointをSplineの左側に生成したいのでGet Actor Propertyノードの値に-1を掛けてます。

結果です。

あれ?増えてないです。

何で?

Spline SamplerノードとTransform Pointsノードが繋がってなかったです。

繋げました。

結果です。

流石に3つ繋がるとTitlingが目立ってきますね。

はっきり言って汚いです。

Play画面です。

うーん。参道狭いです。

もっと広くても良い感じがします。

MeshのSizeを2倍にしてみますか?

これでPointのSizeが2倍になるはず。

そしてSpline SamplerのDistance Incrementの値を

200から倍の400に変更して

PointのOffsetの位置も2を掛けて2倍にして

結果です。

おお、大きくなってる。

こんな感じです。

これなら参道と言っても良い感じですね。

2.1.3 Scaleを変更できるMaterial Instanceの確認

前に作成したScaleを変更できるMaterial Instanceをいつ作成したのか確認します。

見つけました。

 Pwnisher氏のUnreal Engine Materials in 6 Levels of Complexity [1]の勉強で作成したMaterialです。

2024-05-26のBlogから勉強をしていました。

まあ2年前ぐらいですかね。

必要な事は、作ったAssetがどのProjectにあるかとどんな事をやったのかを一寸復習する事か。

来週だな。

来週からやる事にします。

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 [2]の<18:20 - Grow Selection Based on Created Center Points>の実装をやったんですが、

PCG Expand Point Selection Inner Loopノード内の実装の最後の部分は、

先々週のBlogには

とだけ書いて実際の実装方法はまとめないで置いたんです。

ので先週は、この最後の部分は自分で考えて実装したんですが、

以下のSetノードの設定に

以下のようにしたんですが、

正解は

これでした。

でそれぞれのParameterの機能を復習したら、結構間違えて憶えていた事が判明したんです。

まずそれぞれのParameterは以下の関係になっています。

そしてSetノードのInputは以下の様になっています。

SetノードのinAからPassされたAttribute Filter RangeノードのInside FilterのAttributeは、編集元Dataになります。

SetノードのInput Source2で@Lastとセットされてる事から、Attribute Filter RangeノードのInside FilterのAttributeの値は全てBaseにパスされます。

ここで、

Input Source1で指定した$Densityが関わって来ます。

これは、In Bの$Densityの値で、BaseのDensityの値を上書きしろ。といってます。

最後のOutput Targetの値は@Sourceになっていますが、

という意味です。

ここで重要なのは

@SourceというAttributeがあって、そこではPointの全てのAttributeの初期値を保持しています。

このOutput Targetに@Sourceをセットした場合、その@Sourceの値を今の変更した値で上書きしたという事です。

最後に2つこれからやるべき事が書いてありました。

一つ目は

これはこの先を勉強して、その後で実装した後の話で、今週やるのは無理です。

2つ目は

です。

ChatGPTとの会話は読まなかったけど、先週のBlogを読んだだけで全部確認出来ちゃったよ。

のでこれは無しにします。

2.2.2 Create Procedural Interiors With Full Room Separation | UE 5.4 P5 [2]の<18:20 - Grow Selection Based on Created Center Points>の続きを勉強する

実装が完成したPCG Expand Point SelectionノードのLoopをPCG Building内の以下の場所に配置します。

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

お、これでもうSetノードのParameterの設定によって値がどう変わるのかの確認が出来る様になりました。

PCG Expand Point SelectionノードのAttributeを見ると以下の様になっています。

要らないPointを整理するそうです。

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

そしてSelf Pruningノードの以下のParameterの値を変更しました。

以下の様になりました。

Self Pruningノードの結果は重要なので、Named Re Routeノードを追加し

Room Densitiesと名付けました。

そしてWallから以下の実装をCopyしてここに貼り付けました。

以下に示した様にExtraなPointが追加されました。

本来ならここは追加されたExtraなPointだけが表示されるはずですが、Bugのせいで両方表示されています。

ExtraなPointだけ表示させるためにTransform Pointsノードを追加しました。

以下のようになりました。

うーん。

凄い。

これで部屋を区切る壁用のPointが出来ましたね。

ここで、<18:20 - Grow Selection Based on Created Center Points>が終わっていました。

キリが良いのでここまでにします。

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の爪が地面にめり込んでしまう問題を直す事が出来る事が判明しました。

2.3.1 前回の復習

先週はまずこれからやる事の整理をしました。

これからやるべき事は別々な事が2つあり、どちらを優先させるのかを先に決定する必要があったからです。

一つ目のやるべき事は、FBIKノードの追加です。

FBIKノードの追加をする事で得られるMeritは、Level Sequenceで歩く動作を編集する時に非常に簡単になる事です。

ただし、FBIKノードからBakeしたAnimationは元のAnimationと全く同じにはならないそうです。

以下の工程でやる必要があります。

3カ月は最低でもかかると思われます。

しかしFBIKの調整には職人芸が求められるので、元のAnimationを再現出来るような高品質なFBIKを作れた場合、即商業化出来ます。

そこは凄いMeritです。

2つ目のやるべき事はFBIKを使用しないでDragonの爪の位置だけ調整する事です。

爪の位置だけ変更する事でSmoothなAnimationを表現出来るかどうかは不明ですが、FBIKノードの難しい設定を避ける事が出来るので、短い時間で完成させる事が出来ると思われます。

と思ったら

作成したControl RigのほとんどのControlのShapeがDefaultのままで、まず膨大な数のControlのShapeを変更する必要がありました。

ただし今回のTestでは、右前足の爪だけ直してどの程度改善出来るのか確認すれば良いので、ControlのShapeも右前足の爪だけ直せば良いだけになります。

以上の分析から、FBIKを使用しないでDragonの爪の位置だけ調整する事を先に試す事にしました。

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

Defaultのanimationでは、平地を歩く時は、爪が地面に食い込んでないので、逆に地面に食い込ませてみました。

最終的な結果です。

先週の結論として

となりました。

2.3.2 Dragonの爪が地面にめり込んでるLevel SequenceがあるProjectを探す

このLevel SequenceがあるProjectがどれなのか分からなくなってしまいました。探します。

これかな?
UE5.3で作成してますね。ぎりぎり開く事が出来ます。5.3以前のVersionは消してしまいました。

ありました。

爪が潜ってるFrameです。

うーん。

はっきり言ってこれは気になりません。

この程度なら無視した方が良いと思います。

そうだ、別なDragonで爪が地面にめり込んでるのがあったんだ。

これじゃないやつです。

そっちを探します。

うーん。見つからない。

確かGaussian Splattingを採用するより、HDなんとかを使用した方が壁がきれいに映るとかだったはず。

そうだ。動画にしたはずです。

確認します。

ありました。

HDRIでした。

2024-11-24のBlogでこの動画を作成していました。

ここで

と書いてありました。

理由は書いていませんが、この週あたりで、Dragonに近づいて撮影したらDragonの足が地面にめりこんでいたからだったはずです。

この動画を撮影したProjectを探します。

結構時間がかかりましたが見つける事が出来ました。

Test0909という名前のProjectでした。

以下の方法で探しました。

2024-11-24のBlogで作成されていたので、それ以前にしか更新した事のないProjectにはこのLevel Sequenceは含まれてないはずです。

そしてこのLevel Sequenceが含まれてるProjectにはHDRIが必ず含まれてるはずです。

一番最初のMyProjectを開きそのContent Folder内でHDRIがあるか検索しました。

ありました。

しかしMyProjectを開いたらDragonのLevel Sequenceは無かったです。
次にPCG_StudyのContent内にHDRIが無いか調べました。

これはMyProjectに含まれてたHDRIと同じです。という事はこのProjectは違うという事です。

残りのProjectのContent Folderを順に調べていきましたが、PCG_Studyと同じ結果でした。

Test0909のContent Folderを調べたら以下の結果になりました。

これは怪しい。となってProjectを開いたら、Dragonが火を吹いてるLevel Sequenceがありました。

近づくと分かりますが、Dragonの足が埋まっています。

これを直すために、Control Rigの勉強を始めたんでした。

ちなみに、このDragonはQuadraped CreaturesにあるMountain Dragonでした。

2.3.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の爪が地面にめり込んでしまう問題を直す事が出来る事が判明しました。

うーん。全部間違ってる訳じゃなくて、追加であたしく判明した事実を追加した方が、良いですね。

○○のBlog(今週のBlogの事)で、判明したのですが、実は地面にめり込んでいたのはDragonの爪じゃなくて、Dragonの足でした。

しかも使用したDragonはSand Dragonではなく、Quadraped CreaturesにあるMountain Dragonでした。

つまり問題は

DragonをLandscape上の凸凹な地面の上をLevel Sequenceを使用してAnimationで歩かせると足が地面に潜りこんでしまう。

というのが正しかったんです。

これからはこの問題をどうやったら解決出来るのかを調査する事にします。

2.3.4 Test用のProjectを作る

新しいProjectを作成して、そこでLandscape上にDragonを歩かせてみます。

これをControl RigのTest用のProjectにして来週からはこの上でControl Rigに関する全ての実験を行う事にします。

UE5.7を使用します。

Projectの名前はControlRigWithDragonにします。

よく考えたらUE5.7でProjectを作成するのは初めてです。

やっとProjectが出来ました。

あれ?

追加したDragonのAssetが表示されないですね。

もう一回試してみます。

今度は追加出来ました。

Landscape用に以下のAssetも追加しました。

これが結構凄いって聞いたので試してみます。

を開きました。

凄いけどこれは使えないです。

同じ名前の別なMapがありました。

こっちも開いてみます。

同じでした。

うーん。使えないか。

Gaea2で以下のLandscapeを作成しました。

全体像です。

Dragonを配置して

Animationを作成しました。

結構凄いです。

足は上手く隠しています。

結構普通に歩いています。

こんな感じで岩を配置してあえてAnimation通りだと岩を貫いてしまう場合、を作成しました。

今週はこんなもので良いでしょう。

来週、ここにControl Rigを映してAnimationを調整してみましょう。

3. AIの勉強

Iの勉強の目的ですが、

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

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

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

3.1 先週の復習

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

<1:10:22 Should we submit as soon as we can>の前の節まで勉強してました。

今週はこの続きを勉強します。

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

<1:10:22 Should we submit as soon as we can>

ss = pd.read_csv(path/'sample_submission.csv')

を実行しています。

pd.read_csv()関数は

だそうです。

具体的には以下のような作業をしてるそうです。

成程。
で結果です。

Labelが一個も無いですね。

get_image_files(...)で、Folder(test_images フォルダ)内にあるすべてのImage Fileを取得。

sorted()関数で取得したImageのFileをファイル名順に並べ替える。

だそうです。

次にtest_dl()関数を使用して、

学習時と同じ前処理を使用してテスト用DataLoaderを作ります。

DataLoaderは

の流れを全部やってるそうです。

ChatGPTによると

が重要だそうです。

それじゃSortedのところで言ってた

の提出Fileの順番についてもきちんと理解しておこう。

つまりID、Labelの順番の事か。

あれ?

この後の説明が列の順番が間違ってる例になってますね。

これChatGPTの説明間違ってない?

Claudeに聞いたら

sample_submission.csvに書かれた順番と一致させるためと言っていました。

あ、分かった。

行ってそういう意味で言ったんだ。

もう理解しました。

ChatGPTの回答は合ってました。

まず提出Fileですが、以下の様になってます。

0001.jpgは98%の確率で○〇である。という風になってます。

そしてTest画像の順番を以下の様にしてKaggle Competitionに送ったとします。

本来は0001.jpgの結果である0.98が、000.jpgの結果として処理されてしまいます。

これが提出Fileの順番という意味でした。

理解しました。

Predictionを計算しました。

ChatGPTによるとIdxsはModelが予測する正解を示すそうです。

以下の回答の場合、

最初のImageは7である確率が最も高い。2番目のImageは8である確率が最も高い。そして三番目のImageは6である確率が最も高いと言う意味になるそうです。

そういう事か。

番号ではそれぞれの稲の病気が何なのかは分かりません。

以下の実装でそれぞれの番号に対応する病気を表示させます。

以下の実装で番号を病気の名前に変換しました。

これでLabelの値が出来ました。

次は以下の実装でLabelの値をSSのLabelに追加します。

これを以下の実装でKaggle Competitionに提出しました。

結果です。

Top 80%だって。

でも最初だからこれでも良いか。

<1:15:15 How to automate the process of sharing kaggle notebooks>

なんかやる気が出ません。

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

4. Nvidia Omniverseの勉強

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

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

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

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

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

4.1 前回の復習

Walkthrough [7]のEnvironment Design Background [8]の復習をしました。

ここではApp、Sim、World、Stage、そしてSceneのそれぞれの定義を復習しました。

App、Sim、World、Stage、そしてSceneの階層はこのようになっています。

そしてEnvironment Design Background [8]に沿ってWorldを起点に説明すると、Worldは空間を原点やその原点からの距離などで定義します。

それだけではSimulationをする事は出来ないので、その上の階層であるSimで、物理法則やRendering頻度などを定義します。

更にそれ以外のUserからの干渉、Simulationの起動、Memoryの管理などをその上の階層であるApplicationで行います。これがApplicationです。

Worldの下の階層にあるStageはUSDを管理しています。

USDそのものと言っても良いです。

最後のSceneですが、Sceneは

Isaac Labで学習に使用するために必要なUSDのData、Sensor、そしてActuatorを保持するものです。

そして強化学習をGPU内で高速かつ並列(Vectorization)で行うために、SceneはそのDataを全てTensor化して保持しています。

4.2 Classes and Configs [9]を復習する

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

何を勉強したのかを確認するために軽く読んでみます。

Copilotと勉強してますね。

今読むと、結構理解出来ます。

Environmentの定義をするConfigurationの話をしています。

勉強した当時は、Environmentの定義をまだ理解してなかった時なので、結構訳分からない状態で勉強した感じがします。

と書かれていました。

SimとSceneは先週、復習したEnvironment Design Background [8]の5つの階層にありますが、Robotは無かったです。

Robotの部分は以下の説明がされていました。

Articulationの定義をしてるみたいですね。

DirectRLEnvで定義する場合は、Robotへの正規表現Pathを定義するとか、書いてあります。

この辺は前回勉強した時は???だったはずです。

今回しっかり勉強する事にします。

というか今してしまいましょう。

今回はClaudeに質問します。

まずは、DirectRLEnvについての質問です。

2025-10-05のBlogを見ると、新しいProjectを作成する時に、

Isaac Lab Workflowの設定をしていますが、

これと関係があるんでしょうか?

Claudeの回答です。

設定Classと環境Classという2つのWorkflowがあるのか。

それは兎も角、

となってるそうです。

つまり私の予想した通りという事ですね。

設定Classと環境Classについてはよく分かりません。Claudeに説明してもらいましょう。

なんか要領を得ない説明が返って来ました。

ので以下の質問をもう一回しました。

回答です。

で、環境Classに関しては次のTutorialで勉強します。と言っていました。

そういう事か。

納得です。

ではSimの定義から復習して

分からない所はどんどんClaudeに質問していきます。

ここは別に何の疑問も無いですね。

次のSceneです。

Replicate_physics = Trueになっていますが、この意味は説明して無いみたいですね。

Claudeの回答です。

更に詳しく解説してくれました。

replicate_physics=False の場合

各環境に別々のアセットを持たせることができます

と回答していますが、

それって環境毎にSceneの設定を変更出来るって事でしょうか?

例えば、ある環境では、Robotが平地を歩く学習をしてるのに、別な環境ではRobotが凸凹な地形の上を歩く学習をしてるみたいな?

聞いてみます。

つまり、Sceneの物性値の値の変更は出来るけど、Assetそのものは全部の環境で同じものを使用する必要があるそうです。

Randamzationにでも使用するための設定でしょうか?

実地とSimulationとのGapを補うための実装。

これも聞いてみます。

ホントでしょうか?

なんかClaudeは調子良い気がします。

一応、残り回答も載せておきます。

次はRobotの定義です。

そもそも、Robotの定義と言ってArticulationの定義をしています。

Articulationってどんな意味だったのかまた忘れてしまいました。

調べます。

2026-02-08のBlog

とまとめてありました。

Jointは分かりますがLinkは何を指してるんでしょう。

よく分からん。

もう一回聞くか。

なんと。途中で送信してしまいました。

しかしClaude頭いい。質問が途中で切れてる事に気が付いてます。

続きを送信しました。

で続きを書いてるうちに、そう言えば、昔、JointとLinkを使って台車を作った事を思い出しました。

多分それの事だ。と思ったんですが

一応、質問は最後まで書いて送信しました。

こういう事か。

Linkは物体で、Jointには物体が無い単なる曲がると言う機能を示す存在なんだ。

理解しました。

前に勉強した記憶を戻すためにその記録を書いたTutorialを探す事にします。

ただし後でやります。

次の質問である

ここのPrime_Pathが何を定義してるのかを先に調べます。

普通に考えると、これは単なるRobotのUSDのあるFolderを指定してるだけのように見えます。

でも今までの説明、

例えば、

DirectRLEnvを定義する時(つまり今の場合)はArticulationCfgの代わりにRobotへの正規表現パスを定義し、ベース設定内のPrim_path属性を置き換えると言う方法が取られます。

を読むと、LinkとJointを指定してるFileの事を指してる気もします。

Claude先生に聞いてみましょう。

なんと、LinkとJointのFileもUSDの中に入っていました。

一応、確認のために以下の質問をしたら

だって。

これがPrimだそうです。

え、じゃStageってUSDの事じゃないって事?

先週のStageの解釈は間違っていたって事?

そしてPrim_Pathは

だそうです。

StageとUSDの関係をもう一回勉強しないと

うーん。

どう違うの?

Claude先生、流石に私の事が分かってない。

Unityで説明されても全然、分かり易く無いです。

UE5で例えてもらいました。

理解した。

要はUSDは個々のAssetだからそれらをまとめて配置してる情報がStageなんだ。

この図ではLevelはEnvを指していますが、LabのStageはUE5のLevelとほぼ同じであると解釈して良いと思います。

今まで、USDはLightingの設定とかも保持できるから、USDだけでWorldの情報を全部持ってると思っていました。

うん。

でもClaudeの説明を鵜呑みにするのも危ないかもしれません。

ここはClaudeはこう説明してる位にしておきますか。

最後にClaude先生は今日の勉強内容をまとめてくれました。

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

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

2週間に一度なので今週は休みです。

6. Houdiniの勉強

用事が出来たので今週はお休みします。

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

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

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

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

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

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

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

7.1 前回の復習

 How to build Humanoid: NVIDIA Isaac Lab, how to walk [10]を全部見たんですが、Isaac Labで強化学習してRobotが歩けるようにする位までは、強化学習の教科書を勉強する必要はないかなって感じました。

それよりもIsaac LabのWalkthrough [7]の勉強をもっとしっかりやった方が良い気がしました。

ので今週はWalkthrough [7]の勉強の続きをやる事にします。

7.2 Classes and Configs [9]の続きを勉強する

The Environmentの復習をします。

調べたらこれも2025-10-19のBlogで勉強していました。

環境の設定はisaac_lab_tutorial_env.pyに書かれているそうです。

最初のClassのConstructorでDirectRLEnvを使用すると宣言してますね。

2025-10-19のBlogからClasses and Configs [9]の文の訳を持ってきました。

以下にClasses and Configs [9]に載ってるisaac_lab_tutorial_env.pyのCodeも示します。

ここに載ってるInterfaceがDirectRLEnvから継承したMember関数なんでしょうか?

後、_setup_scene()関数や、_pre_physics_step()関数は環境の設定という感じがしますが、_get_observations()関数や_get_rewards()関数はどちらかというと強化学習の設定って感じがしますね。
敢えて確認するほどの内容でないかもしれないけど、一応Claudeに聞いてみます。

だそうです。

そして

だそうです。

強化学習では

で環境になるそうです。

強化学習における環境の定義は物理世界の構築・更新だけでなく「報酬を返す」「観測を返す」という処理を含むんですね。

理解しました。

これは以下のInit()関数の説明をしてると思われます。

これってPythonなんでしょうか?
今一何をしてるのかよく分からないです。

Claudeに説明してもらいました。

こういう定義の仕方をするのか。

ここの説明は分かり易かったんですが、次のParameterの説明がありません。

これは敢えて質問して聞き直しました。

これは、render_modeがParameter名で、この変数の型はStrかNoneのどちらかである。という意味だそうです。

そしてDefaultではrender_modeの値はNoneになってると言う意味だそうです。

三番目のParameterは

辞書形式で追加引数を何でも受け取れるものだそうです。

これは無視していいや。

そして肝心のsuperですが、これは本文の説明にあったように

そうです。

となってるので

でるそうです。

つまりこのParameterの値を、親クラスのinit()関数にもぶち込んでるって事です。

そうする事で

となるそうです。

昔、子クラスから親クラスを呼びだして、同じParameterをパスする手法を勉強した記憶はあります。

しかしその目的や効果は忘れてしまいました。

Claudeの回答を以下にまとめます。

まず親クラスのDirectRLEnvは以下のような構造になっています。

実装のない関数だけでなく、具体的な実装がある関数もあります。

その中でinit()関数は、Step()関数などで使用するDataの生成を行います。

このStep()関数は子クラスの関数を決まった順番で呼び出す 司令塔 の役割を持っていますので、このStep()関数が正常に作動しないと、子クラスであるIsaacLabTutorialEnvも正常に動きません。

のでここで親クラスのInit()関数も呼び出すそうです。

次の文です。

Superが呼びだす親クラスのInit()関数がやる事をClaudeが教えてくれました。

確かにこの中にSetup_scene()関数の呼び出しがありますね。

Setup_Scene()関数の実装は以下の様になっています。

その解説文です。

これは

の解説ですね。

これは前回、設定ClassであるDirectRLEnvCfgのrobot_cfgで指定した内容だけでは、Stage上にはRobotは存在しない。Stage上にRobotを生成するにはこの実装が必要である。って事ですね。

一応、Claudeで確認しました。

ここで設定Classで指定したレシピに基づいて、実際の料理が作成されるのか、これは分かり易い例えです。

次の文です。

これは何をやってるんでしょうか?
Env0の条件を他のEnvにCopyしてるのかな?それとも他のEnvを作成するためにEnv0のCloneを作成してるんでしょうか?

他のEnvを作成するためにEnv0のCloneを作成すると言う意味だそうです。
そして

これでこのそれぞれの環境下にある全てのRobotがScene Objectの監視下に入りました。

ここで、2025-10-19のBlogには以下の様に書いてありました。

今回はほぼ完ぺきに理解してます。

成長してます。確実に。

残りの文です。

ここは抽象的な話なので、物理の計算をした後で、Robotが行動する。これらは別々に行われる。位の解釈で十分だと思います。

2025-10-19のBlogには次の週もこの部分を勉強すると書いてあったので次の週のBlogも見てみます。

うーん。

これは来週まとめる事にします。

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

8. DirectX12の勉強

今週も他の予定が入って時間作れなかったです。

と思ったんですが、やらないと遅れる一方なのでちょっとだけ勉強する事にしました。

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

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

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

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

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

8.1.1 前回の復習

Ch5_CopyTextureをGitHubに上げました。

これでやっとChapter 6を実装する準備が整いました。

Blogをずっと遡って確認したら前回、Chapter 6の勉強をしたのは2026-01-18のblogでした。

それからずっとSample CodeがCompileしないのとかのBugを直していました。

2026-01-18のblogの内容を以下にまとめます。

「6.2.1 定数Bufferの作成」を読んでその内容をまとめているんですが、

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

という制約があります。

これを守るために、教科書では

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

としています。

でこの実装の意味ですが、

0xffは

0000 0000 0000 0000 0000 0000 1111 1111

という意味だそうです。

~0xffはその反転、

1111 1111 1111 1111 1111 1111 0000 0000

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

下8桁は

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

必ず0になります。

ので

必ず256の倍数になる訳です。

ので、AIに聞いて確認するって書いてありました。

これからやっていきます。

8.1.2 (sizeof(matrix)+0xff) & ~0xff)の確認

Geminiに質問しました。

なんと存在する意味がよく分かってなかった

+0xff

が私の疑問を解消するための役割を担当していました。

ああ、理解しました。

0xffを足す事で、もし下8桁に1がある場合はキリ上げが起きるんです。

だから下8桁を消しても、下9桁が切り上がっているので、Memoryが足りなくなる事は無くなるんです。

納得です。

具体的な例でも説明してくれました。

Gemini凄い。

8.1.3 「6.2.1 定数Bufferの作成」を実装する

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

Buildしてみます。

S_OKになってました。

まあ大丈夫でしょう。

8.1.4 GitHubのRepositoryにPushする

GitHub Desktopを開きました。

CommitしてPushしました。

このままでBranchであるChapter 6の方がPushされてるはずです。

Browserから確認しました。

Chapter6のmain.cppに以下のCodeが追加されていました。

Ch5_CopyTextureの方のmain.cppには追加されていません。

もとのCodeのままです。

出来てますね。

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

こっちは流石に今週はお休みします。

9. まとめと感想

なし

10. 参照(Reference)

[1] pwnisher. (2024, May 11). Unreal engine materials in 6 levels of complexity [Video]. YouTube. https://www.youtube.com/watch?v=iZgbzwBQTPY

[2] 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

[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] 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, February 14). Walkthrough. Isaac Lab Documentation. https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/index.html

[8] 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

[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] Skyentific. (2025, March 14). How to build Humanoid: NVIDIA Isaac Lab, how to walk [Video]. YouTube. https://www.youtube.com/watch?v=xwOaStX0mxE