
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 先週の復習
先週は突然、参道って砂利道じゃなかった気がして調査する事にしました。
結論としては参道は以下のような感じになってる事が判明しました。

このImageを元に参道を作成します。
更に石道を作成するためのAssetも探しました。

今週はこの続きからやって行きます。
2.1.2 石道のAssetを探す
先週の続きをやって行きます。
先週は以下のようなMaterialは無視していましたが

今週はMaterialも追加する事にします。

これなんか使えそうですが、Textureって書いてありますね。
これは脇の砂利道に使用できそうなので

Downloadしておきます。
全然関係ないけど凄いAsset見つけました。

これは後でCheckする事にします。
もう無いですね。
後はQuxielなどにあるMaterialをもう一回確認します。

Materialはいっぱいあり過ぎるのでこれはまた別な機会に調査する事にします。
2.1.3 石道用のAssetを整理する
石道用に沢山のAssetをDownloadしましたが、Stone RoadというFolderを作成してそこに全部まとめておきます。そうしないとどこに何があるのか分からなくなってしまうからです。
以下のAssetを新しく作成したStone RoadというFolderに移しました。

それぞれを試してみます。
2.1.4 Assetを使用して石道を作成する
上から順番に試してみます。
<Anglo-Scandinavian_Beasts__North_Grimston__Yorks>
何これ?

Textureがぼやけています。
Static Meshを開いたら以下の通りです。

これは使えません。
ひょっとしてFolderの場所を移動させたからこうなったの?
他のAssetを確認したらそんな事は無いみたいです。
これは使えませんね。
次行きます。
<Grey_natural_slate_stone_wall>
この後、何個が砂利道用のAssetが続きます。
そして

これです。
このAssetは使えるでしょう。
試してみます。
まずStatic Meshを作成します。
このMaterialを使用して以下のStatic Meshを作成しました。

何故かTextureのSizeを変更する事は出来ませんでした。
これに使用したMaterial Instanceの以下のBaseColorTexture_TexCoodの値を変更したら

TextureのSizeが変更するはずですが、まったく変わりませんでした。
いちいちMaterialの実装をCheckしてる時間はないのでこれで試してみます。
PCG_SanndouのStatic Mesh Spawnerノードの値だけ変更したら以下の様になりました。

これは使えません。
直します。

Tilingは酷いですが、それ以外は良い感じです。
もう少し大きくても良いですね。
以下のStatic Meshを作成しました。

こんな感じです。

これでTextureのSizeが変更できたら完璧ですね。
もう一回試してみます。
BaseColorTexture_TexCoodの値を10にしてみました。

こんどは変化しました。

したけど、なんか変ですね。

TextureかRoughnessか何かのSizeは変化してないのかもしれません。
分かりました。
BaseColorTexture_TexCoodの値を4以上にするとこの形状に変化します。それ以下は最初の形状のままです。
うーん。
とりあえず他のを見ますか。一応候補に残しておきます。
<Grey_stone_tile_texture>
以下のStatic Meshを作りました。

これのMaterial Instanceも先程のMaterial Instanceと同じで

の値を変更してもTextureのSizeは変わりません。
そうだ、ChatGPTに聞いてみます。

この後、グワッと説明が続きますが、結論はMaterialの仕様がそうなってるからだそうです。
直すには

自作しろ。ってありました。
前に作ったMaterialを使うか。
これは来週探す事にします。
結果です。

うーん。
90度回転させてみるか。

おお。かなり良くないですか?

こんな感じになりました。
これでOKですね。
このTextureを改良して使う事にします。
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>を勉強しました。
一寸しか勉強してないですね。
今週はこれを実装します。
2.2.2 Create Procedural Interiors With Full Room Separation | UE 5.4 P5 [1]の<18:20 - Grow Selection Based on Created Center Points>を実装する
PCG Expand Point Selection Inner Loopノード内の実装をやって行きます。
Attribute Filter Rangeノードを追加しました。

Target Attributeの値を$Positionに変更しました。

Get Attribute From Point Indexノードを以下の様に追加しました。

Get Attribute From Point IndexノードのInput Sourceを$Positionに変更しました。

ここで先週のBlogでは、Get Attribute From Point Indexノードの実際の値がPositionになってるはずだ。
と書いているんですが、これって今確認出来るんでしょうか?
PCG_ExpandPointSelectionノードがPCG_Building内で使用されてたら今この値がどうなるか確認出来るはずですが、既に使用してたかな?

まだ使用してないですね。
これは実装した後で確認します。
次に生成したGet Attribute From Point IndexノードをDuplicateして

3つに増やしました。
して2番目のGet Attribute From Point IndexノードのInput Sourceの値を

Half Widthに変更します。
これは$は要らないようです。
最初$Half Widthと書いたらErrorになりました。
先週のBlogを見ても

と書いてありました。
そして3番目のGet Attribute From Point IndexノードのInput Sourceの値を

に変更しました。

更にそれぞれの結果にWall Sizeを掛けました。
Vector型に変換するために以下の実装を追加しました。

ZにはCreate Attributeノードで0を追加しました。
そして最初に作成したGet Attribute From Point IndexノードにSubtractノードとAddノードを追加し、以下の様に実装しました。

これでCenterからX軸方向とY軸方向に同距離のPositionを得る事が出来ました。
つまり四角が出来たんです。

これをAttribute Filter Rangeノードにつなぎ、そのPointがCenterを中心とする四角内に存在してるかどうかを判定します。
最後にSetノードを以下の様に組みました。

先週のBlogには

とだけ書いてありました。
以下の様に組んでみました。
まずSetノードのInput Bですが、ここにはCenterのPointのDensityの値をPassする必要があるはずです。
のでCenterにGet Attribute From Point Indexノードを繋いで

そのInput Sourceの値を$Densityに変更しました。

次にSet内の実装ですが

全部$Densityに変更しました。

Input Source1の値にInput Source 2の値をセットしてOutput Targetにセットした$DensityをOutputする
うん。
なんか違うような?
まあ良いです。
答えを確認しましょう。
Setの設定は間違っていました。
Tutorialでは以下の様に設定してました。

うーん。
Input Source 2の@Lastは最後に変更したAttributeの事だから、前のNodeでPickupした$Densityの事になるはずです。
Output Targetにセットした@Sourceは何を示すんでしょうか?
Pointが持つAttributeの値を全部Outputしろって事でしょうか?
分からん。
ChatGPTに聞いてみます。
ChatGPTに質問したら、ずいぶん勘違いしてる事が判明しました。
まず一番大きな勘違いは
SetノードのInputの順番を間違えていました。
正しいInputは以下の様になっています。

SetノードのInAにはAttribute Filter RangeノードのInside Filterの結果がPassされ、SetノードのIn BにはGet Attribute From Point IndexがPassされます。
そして以下の設定です。

それぞれのParameterは以下の内容を表しているそうです。

ここでInput Source2ですが、編集元を表します。ここに@Lastをセットするという事は、
In Aにセットされた以下のAttribute Filter RangeノードのInside Filterからpassされた

Attributeがセットされるという事だそうです。

だそうです。
ここに
Input Source1で指定した$Densityが関わって来ます。
これは、In Bの$Densityの値で、BaseのDensityの値を上書きしろ。という意味だそうです。

最後のOutput Targetは

という事をやっているそうです。
@SourceというAttributeがあってそこでは、Pointの全てのAttributeの初期値を保持してるらしいですが、その@Sourceの値を今の変更した値で上書きするのが、このOutput Targetに@Sourceをセットした場合に起きる事だそうです。
これは結構壮大な話で、今まで@Lastの意味とか理解したと思っていたら間違っていた事も判明しました。
でもそのままChatGPTの言う事を信じる訳にも行かないので、来週、PCG_ExpandPointSelectionを実装したら、実際の値の変化を追って確認します。
このChatGPTとの会話は、
UE5 PCG Setノード
という名前で保存されています。
来週は、これを読みながら確認していきます。
今週はここまでにします。
2.3 Level Sequence上でAnimationの編集をする方法
Level Sequence上でDragonをAnimation Sequenceを使用するとDragonの爪が地面にめり込んでしまいます。
これを直すには、Animation SequenceではなくControl Rigを使用する必要があるみたいです。しかし私が使用してるDragonには付属のControl Rigがありません。
しかもControl Rigがどういうものなのか全く理解していません。
のでControl Rigがどういうものなのかについての全般的な知識と、その使用方法についての基礎を勉強する事にしました。
その後、今まで勉強してたTutorialはUE5.0用のTutorialで5.5はControl Rig [2]を勉強する必要がある事が判明しました。
のでControl Rig [2]を勉強する事にしました。
そして2025-12-21のBlogでまとめましたが、別なLayerを使用する事で、Control Rigを使用してLevel Sequence上のAnimationを編集出来る事が判明しました。
ので、後はDragonにControl Rigを追加出来れば、Dragonの爪が地面にめり込んでしまう問題を直す事が出来る事が判明しました。
2.3.1 前回の復習
先週は、
FBIKノードを使用するには普通のControlとBoneの実装は外す必要があるのか?
について調査しました。
結論だけここに書くと、普通のControlとBoneの実装は外す必要があります。
そしてFBIKでBakeしたAnimationは、元のAnimationと全く同じにはならないそうです。
直すのはDragonの爪だけ。FBIKノードを使用しないで直せないか?
という事も検討する事にしました。

そしたらほとんどControlのShapeをDefaultのままにしてたので、Level Sequenceから変更する事が出来ない事に気が付きました。

で終わっています。
2.3.2 今週の予定
今週の予定というか、これからやる事の整理をここでしておきます。
前回の復習で述べた通り、これからやるべき事には
- FBIKの追加と
- FBIKを使用しないでDragonの爪の位置だけ調整する
の2つがあります。
それぞれ長所と短所があり、更にどちらをやるにしてもそれなりの時間を要します。
この2つの長所と短所、そして実装するに必要な工程とその工程にかかる時間(推定)を以下にまとめます。
<FBIKノードの追加>
長所はLevel Sequenceで歩く動作を編集する時に非常に簡単になる事です。
この利点は唯一無二です。
短所はFBIKを実装した場合、BakeしたAnimationが元のAnimationと全く同じには成らないという事です。
作成するためには、今までFBIKについて勉強したBlogを読み直して、自分で組み、AnimationをBakeして動作を確認する必要があります。
- FBIKについて勉強したBlogの復習
- 自分でFBIKを組む
- AnimationをBakeして確認
- 2~3を繰り返し質を向上させる
- 完成したらそれを使用してAnimationを編集
のような工程になります。3カ月は最低でもかかると思います。
しかし完成したら以下の利点が発生します。
FBIKの調整には職人芸が求められるので、元のAnimationを再現出来るような高品質なFBIKを作れた場合、即商業化出来ます。
<FBIKを使用しないでDragonの爪の位置だけ調整する>
本当に爪の位置だけ変更する事で対応出来るのかは不明ですが、やって出来たらこのProjectに一つの区切りがつきます。
問題は、時間がかからないで試せると思っていたら、ほとんどのControlのShapeがDefaultのままで、まず膨大な数のControlのShapeを変更する必要がある事です。
以下の工程でやる事になると思われます。
- ControlのShapeを直す
- 直したShapeを使用して爪の位置を変更
- Bakeして結果を見る
うん。
これはどうせ直すのは爪の位置だけなので、Shapeを追加するのも爪だけで十分です。
更に試しなので右前足の爪だけ試せば十分です。
これだったら直ぐに出来ます。
こっちからやってみる事にします。
2.3.3 FBIKを使用しないでDragonの爪の位置だけ調整する
ではこっちをやってみます。
まずDragonの爪のControlのShapeを変更します。
以下のControlのShapeを変更していきます。

一番先のControlだけShapeを変更しました。

これで爪の位置を変更出来るか試してみます。
Levelを開きLevel SequenceにこのControlでWalkingのAnimationをBakeしました。
Level SequenceのAnimationを5Frame目で止めると以下の様になっていました。。

しっかりBoxが表示されています。
以外な事に爪はまったく地面に潜っていません。
逆に爪を潜らせるAnimationに変更する事にします。
次の手順は、Layerを追加してControlのAnimationを変更するんですが、やり方を忘れてしまいました。
調べます。
2025-12-14のBlogにやり方がまとめられていました。

これだけみたいです。
早速試してみます。
Control Rigの+を押しAdditiveを選択しました。

確かにControl RigのLayerが増えました。
以下の3つの爪だけ地面に潜る様に編集しました。

Frame4の時は

となっていて
Frame5になると

このように爪が地面に潜るようになります。
Playで確認すると以下の様に左の前足の爪だけ地面に潜っています。

うん。出来ますね。
爪の位置だけ調整するなら、FBIKノードを使用するまでも無いですね。
ではこのAnimationをAnimation SequenceとしてBakeしてみます。
Animation SequenceとしてExportしました。
やり方は2025-12-14のBlogにまとめられているままです。
作成したAnimation SequenceをAnimationにセットします。

再生させました。

滅茶苦茶Smoothに歩いています。
しかし左の前足の爪は地面にめり込んでいます。
凄い!
Dragonの爪がめり込むAnimationを直すにはこれで十分な気がします。
今週はここまでにしておきますが、とうとうこのProjectも佳境に入って来ました。
来週は全ての爪のControlのShapeを改良して、実際のDragonが道路に歩いてるAnimationがあるLevel Sequenceを直してみましょう。
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]の続きを勉強したんでした。<54:28 What does fastkaggle do>まで勉強したみたいです。
そしてKaggle Competitionで良い成績を取る事の重要性について学んだんでした。
Kaggle CompetitionはこのTutorial Seriesが終了したら挑戦する事にします。
そしてKaggle Competitionでは以下の戦略で挑戦する事にした

書いてありました。
でもこれって画像認識のCompetitionじゃないですよね。これが通じるのはTable式のDataから結果を推測する場合です。
3.2 Lesson 6: Practical Deep Learning for Coders 2022 [4]の続きを勉強する
<1:02:52 fastcore.parallel>
まだ米作の話をしていますね。

ImageのSizeを調べるのは結構時間がかかります。
Parallelに処理して同時に別な事をやる事で効率を上げたいです。

それを可能にするのがFastcore.parallelです。
これをImportしてParallel()関数を使用する事で並列に処理できるようになるそうです。
<1:04:12 item_tfms=Resize(480, method='squish')>
Lectureで見てるSiteは
First Steps: Road to the Top, Part 1 [5]
です。
先週のBlogには

と書いていましたが、
これ画像認識で数年前ですがKaggle Competitionで一番になっています。
勉強する価値はあります。
ただし、ChatGPTが優しい忠告をしてくれてます。

今FastKaggleを使用してKaggle Competitionで活躍できる可能性はかなり低いみたいですね。
その辺を理解した上で、FastKaggleの使用方法は軽く勉強して、その背後にある何でこんな事をするのかに重点を置いた勉強をする事にします。

ChatGPTの訳です。

DataのResizeをやってますね。
Resizeには色々な種類があったはずです。
ChatGPTにResizeの色々な種類に関して質問したら以下の回答が返って来ました。


Squishです。
以下の実装でも実際に使用してるのはSquishです。

Squishは兎に角、動かしたい時に採用する手法のようです。

次はPadです。

これは比率が変わると問題になる画像向けのようです。

中央を固定して抜き出す方法ですね。

ID用の写真のように被写体が常に中央にある事が分かってる場合はこれを採用するのか。

ランダムに切り出す事もあるのか。
あれ?
でもこれって学習が進んで過学習を防ぐためにやるんじゃなかったけ?

うーん。これが最も使用される方法である。としか書いてないですね。
調べたらData Augmentationに使用するための画像として使用されるのがもっとも多いみたいです。

色々な米の病気を撮影したImageが表示されてました。

<1:06:20 Fine-tuning project>
以下の内容を説明しています。

The best Vision models for Fine-tuning [6]についても説明しています。

これって結構重要な内容じゃないですか?
Kaggle Competitionでいい成績を取るためには、よいModelを選択する必要があります。
ChatGPTにここに書かれている情報がどれくらい今でも役に立つか聞いてみます。
まず以下の部分は役に立たないそうです。

ここで紹介されているModel名はもう古くて役に立たないという事は分かりますが、それ以外の事はよく分からないですね。
Benchmark順位とか、最新Architecture構成とか、何を指してるのか分かりません。
以下の部分は今でも通用するそうです。

Fine-Tuningを前提としたModelの選択は今でも正しいのか。

Dataの量が多い時は大きなModel、Dataの量が少ない時は小さなModelを選択すべし。

これは何を言ってるのか分かりません。
転移学習ってなんでしたっけ?
ChatGPTに聞いてみます。

じゃFine Tuningも転移学習の一種じゃん。

そうでした。
それは兎も角、ここにFeature Extractionという転移学習の種類が紹介されています。
ここにBackbone凍結とかHeadだけ学習とか、先程の転移学習前提構造の解説に書かれていた内容とほぼ同じ事が書かれています。
となるとこのFeature Extractionはここで勉強する内容のようです。
そしてそれは今でも通用する工程だという事ですね。

Iterationを重視。
これは先週の勉強でしっかり理解しました。とにかく完成させてテストする。そして直してまたテストする。これを繰り返してModelの品質を向上させろ。って事です。
更に

具体的に今、変わってる部分の説明をしてくれました。
もうCNNは使用してないのか。今はViTというのを使用してるのか。全く聞いたことが無いですね。
Lectureに戻ります。
以下の表をみせてました。

<1:07:22 Criteria for evaluating models>
The best Vision models for Fine-tuning [6]にはこの表の後に以下の説明がありました。


あれ?でもLectureはResnetを選択しました。

ChatGPTに聞いたら、今Resnet系を採用するのは教育関係だけだそうです。

ただし今主流の学習方法は

のようにやるので、最初にBaselineで採用するのには使用するそうです。
うーん。
この学習方法はまだよく分からない。
Lectureに戻ります。

Learning Rateの値を決定しています。
0.01をLearning Rateにして計算してます。

<1:10:22 Should we submit as soon as we can>
ここでもうKaggle Competitionに提出しています。
提出する前にすべきことは、
ない
と断言していました。
兎に角、提出する事が大切だそうです。
うーん。深い!
しかしもう集中力が切れて来ました。
この節は来週勉強する事にします。
丁度、Kaggle Competitionに提出する話に代わってるので、区切りもついています。
今週のAIの勉強はここまでにします。
4. Nvidia Omniverseの勉強
Robotic AIの仮想空間におけるTrainingのための環境設定こそがこれからの3D Graphicsの専門家が生きる場所であると思っています。
のでその仮想空間でRobotic AIがどんなTrainingを行っているかをまず勉強する事にしました。
色々調べると、その部分はNvidiaのOmniverseの中のIsaac Simが担当している事が判明しました。
のでその辺りを勉強します。
2025年9月からIsaac Lab Documentation [7]の勉強に切り替えました。
4.1 前回の復習
Walkthrough [8]の実装の続きをやっていました。
まず先々週の疑問である
Isaac Labは本当にIsaac Simの場所を見失ってるのか
を確認しました。
前々回は、Isaac LabはIsaac Simの場所を見失ってるから以下のCommandがErrorになる。との結論になりました。

でこれが、本当だったら以下のCommandを実行しても
![]()
Isaac Simが起動しないはずです。
結果は
普通に実行出来ました。

途中で、Isaac Simも起動していました。
ので、
Isaac LabはIsaac Simの場所を見失ってる
は間違いである事が判明しました。
本当はここからそれなら何で

が起動しないのかを調べる必要があるんですが、それはやってません。
多分、Walkthrough [8]の勉強の方をやる方が重要だと、判断したんでしょう。
そして
Walkthrough [8]の最初のLectureであるEnvironment Design Background [9]
の復習をやっています。
なんと、ここで今までした勉強の内容を復習しようとBlogを見たら

で終わってしまいました。
4.2 Environment Design Background [9]の復習をする
Copilotに翻訳させた本文が載っていました。

Isaac Labは世界をどう構築するかから指定する必要がある。という事ですね。
2025-10-19のBlogには以下の様に書いてありました。

この疑問は、今聞いてもその通りと思います。
<App, Sim, World, Stage, and Scene>についてまとめていました。
この節こそが最も重要な内容で、これを理解するかどうかでこの先のIsaac Sim/Labの成果が変わってくると言っても過言ではありません。
まずは2025-10-19のBlogの内容を復習します。
以下にその内容をまとめます。2025-10-19のBlogの内容の繰り返しになってしまう部分もありますが、この概念を理解しないと後々、問題になるのでやる事にします。
まず以下の図がありました。

これでApp, Sim, World, Stage, そしてSceneの関係をポンチ絵で表してるんですね。
まずWorldの説明から始まっています。

これは2025-10-19のBlogでも述べていましたが、世界は空間を原点と原点からの距離で定義してるだけであると。
で次の文ですが、

Worldの構造の上位には、SimulationとApplicationが存在します。と書いてありますが、
今読むと、この意味がよく分からないです。
以下の2つの可能性があります。
一つ目はSimulationとApplicationはWorld内で上位に位置してる、
二つ目はWorldの上位に位置してる、
どっちの意味なのか分かりません。
Geminiに聞いてみます。

だそうです。
そういう意味だったのか。
やっと理解した。
更にそれぞれの役割も説明してくれました。

この説明におけるWorldとSimulationの意味は理解出来ますが、Applicationの意味は、よく分からないですね?
Applicationが担当するのはUserのInputを受けて実行する部分と理解しているんですが、
それは違うんでしょうか?
Geminiに質問しました。
Geminiの回答です。
アプリケーションは「それ以外のすべて」に責任を持つもの
とEnvironment Design Background [9]に書いてありますが、
これは、個別の物理法則(Simulation)や空間定義(World)以外の、プログラムを動かすための基盤全般を指しています。
具体的には

が含まれるそうです。
つまりApplicationの下の階層で定義されている個別の物理法則(Simulation)や更にその下の階層で定義されている空間(World)以外で、
このSoftに存在してるものすべてはこのApplicationのLayerで定義されてる
という事です。
理解しました。
Geminiの説明は断トツで分かり易いですね。
これでApplicationとSimulationとWorldの階層関係を理解する事が出来ました。
次に行きます。

この文章はApplicationが何なのかを説明しています。
いますが、はっきり言って分かりにくい文章です。
もうApplicationが何なのかは理解出来たので、あえてこの文が何を言おうとしてるのかを推測する必要は無いでしょう。
次に行きます。

今度はApplicationの一つ下の階層である、Simulationの説明です。
ここはSimulationするために必要な機能が詰まってるんでしょう。
と単純に推測しますが、この文章を読む限り、大体それであってますね。
時間や重力は純粋な物理法則ですが、Renderingの頻度はそれをどれくらいの頻度で画像として表すかを示してるので純粋な物理法則とは言えないですね。
それよりもここで述べられている、Sub stepの意味が分かりません。
Stepで更新する時に、いろいろな部分が更新されます。それぞれの部分の更新をSub-stepで管理してるんでしょうか?
Geminiに質問します。

違いました。
Stepはその中に細かいSub-Stepで構成されていたんです。
Step一回をやるには、最初に_pre_Physics_step、Physics_step、_post_physics_step、そしてRender_stepを行う必要があります。
これらのStep内のStepの事をSub_stepと呼んでいたんです。
理解しました。
そしてHookするとは、これらのSub-StepにUserが直接介入して条件を変更するための機能という事です。
次の文です。

ここはまずStageとSceneの定義を理解する事から始めます。
というかこれが今回の勉強の肝です。
まずStageの定義です。

StageはIsaac SimにおけるUSDの管理を担当してる
って事でしょうか?

だそうです。

USDの階層構造にもWorldがありますが、これはIsaac Lab 構造階層のWorldとは別物なはずです。
Geminiで確認します。
うーん。
あんまり分かり易い回答が返って来ませんでした。
どうも質問の意味をGeminiは理解出来なかったみたいです。
これはPass.
次はSceneの定義です。
これはIsaac Labの学習で使用するUSDの事です。
Geminiは以下の様に説明していました。

Vectorizationとかは今はどうでも良いです。
SceneとStageの違いを完璧に理解出来れば、これからのIsaac Labを使用した強化学習の世界でTop10%に必ず入れます。
ここはきっちり勉強しましょう。
Geminiの回答もふらふらしています。
かなり厳しく問い詰めたら、USDだけでなく以下のものもSceneに含まれるそうです。

SensorとActuatorの情報もSceneには必要なのか。
そしてこれです。

Sceneは配列、Tensor/Matrixで管理するんです。
これが、SceneとStageの最も大きな違いです。
この点についてGeminiに解説してもらいました。

成程。
要はVectorizationを爆速で行うためにTensorで管理してるのか。

GPU Accelerationの技術を使用するのか。それで高速で計算出来る様になってるのか。
驚いた。

これは、Walkthrough [8]の一回目の勉強で、散々やったので覚えています。
この面倒な設定こそがIsaac Labが高速でVectorizationを処理できる秘密だったんですね。
やっぱりWalkthrough [8]は何度も勉強する必要があるわ。
最初の勉強で、ここで述べられている値をTensorで記述する方法を勉強してなかったら、今こんな説明をされても??で終わっていました。
一応、Geminiの回答にあったまとめもここに載せておきます。

これ、
SceneはIsaac Labで学習に使用するために必要なUSDのDataなどを、学習で高速化するために一括処理用の行列に変換して保持してる。
これこそが、Sceneの真の定義です。
やっとApp, Sim, World, Stage, そしてSceneの定義そしてそれぞれの関係性を理解する事が出来ました。
最後にオマケですが、このTensorの計算ってTPUでやった方がGPUより速いんじゃないでしょうか?
それに対してのGeminiの回答を載せておきます。

で、回答の内容を書いてしまいますが、
この計算に使用されているPhysXや RTXは、NVIDIA製のGPUで動くことを前提に最適化されているのでTPU上では動かない。
だからGPUでしか計算出来ない。
というなんともそっけない回答でした。
Environment Design Background [9](2025-10-19のBlog)の内容に戻ります。
今度はStageについて色々説明していましたが、Stageは以下の事だと言う事さえ理解出来れば十分です。

今度はSceneについての説明です。

なかなか重要なConceptについて説明しています。
それぞれの文がそれぞれ重要な事を述べているんですが、今はそこまで深堀はしません。
今のSceneとStageの理解で充分ですので。
ここに述べられている事は三回目の勉強で重要になる内容と言う事にして次にいきます。
2025-10-19のBlogには以下のような感想が書いてありました。

この時はVector化がよく分からなかったのは当然ですね。
最後の文です。

これはSceneの一例を説明してるだけですね。
この辺の説明は実際にIsaac Labの設定をいじらないと分からないし、分かってもこの説明が分かり易いものに変化するものでもありません。
サラッと流して終わりにしましょう。
4.3 App、Sim、World、Stage、そしてSceneのそれぞれの定義のまとめ
せっかくIsaac LagにおけるApp、Sim、World、Stage、そしてSceneのそれぞれの定義を理解したので、ここにまとめ直しておきます。
まずEnvironment Design Background [9]には以下の図が最初にバーンと載っていますが、

はっきり言ってApp、Sim、World、Stage、そしてSceneのそれぞれの定義を理解するためには何の役にも立ちません。
それぞれが以下の階層になってる事をまず理解する必要があります。

この階層を知るだけで、App、Sim、World、Stage、そしてSceneのそれぞれの定義の50%は理解したのと同じです。
Environment Design Background [9]に沿ってWorldを起点に説明すると、Worldは空間を原点やその原点からの距離などで定義します。
それだけではSimulationをする事は出来ないので、その上の階層であるSimで、物理法則やRendering頻度などを定義します。
更にそれ以外のUserからの干渉、Simulationの起動、Memoryの管理などをその上の階層であるApplicationで行います。これがApplicationです。
Worldの下の階層にあるStageはUSDを管理しています。
USDそのものと言っても良いです。
そしてUSDは以下のような階層になっています。

ここにWorldという階層がありますが、これはUSD内のWorldで、Isaac LabのWorldとは関係ありません。
USDはその構造上、3dのAssetだけでなくその周りの環境、光や地面も扱うのでそういう物をここで管理しています。
最後のSceneですが、Sceneは
Isaac Labで学習に使用するために必要なUSDのData、Sensor、そしてActuatorを保持するものです。
そして強化学習をGPU内で高速かつ並列(Vectorization)で行うために、SceneはそのDataを全てTensor化して保持しています。
以上です。
これでApp、Sim、World、Stage、そしてSceneのそれぞれの定義を完璧に理解しました。
こうやって並べると、Worldだけはここに敢えて抜き出す必要がある定義なのかな?という気になりますね。
実装をもっと深くやって行くとその認識が変わっていくんでしょうか?
まあいいです。
今週のNvidia Omniverseの勉強はここまでにします。
一日の勉強で、これだけ理解出来たら十分でしょう。
5. AIの勉強2(日本語字幕AIを作成する)
YouTubeなどを見てると日本語の字幕をつける動画が沢山あります。しかしその字幕の漢字が間違っています。
これは2パターンあって、字幕は合ってるのに、間違った読み方をする場合と、音声はあってるのに字幕の漢字が間違ってる場合です。
見ていて、もしくは聞いていて非常にイライラします。
元のAIに一寸Fine Turningすれば直ぐに直ると思うんですがどうなんですか?
簡単に直せるなら、Projectとして自分でやってみようかなと思っています。
5.1 前回の復習
OpenAI Whisperを使用してYouTubeの動画から字幕を作成しました。
Whisperの性能が良くて、字幕直す必要なさそうです。
日本語字幕の問題って
- 言葉が聞こえるのに字幕が表示されない、もしくは字幕が最初に沢山表示されて、言葉をしゃべってるときに字幕が表示されない。
- 漢字が間違って表示される。
の2点ですが、先週作成した字幕付きの動画を見た限りではそんな問題は発生してませんでした。
5.2 動画の字幕を全部確認する
先週は5分位しか見なかったので今度はしっかり全部確認する事にします。
練習も兼ねて、別な動画を使用して字幕を作ります。

https://www.youtube.com/watch?v=ZGpf4oe1nMU
から字幕を作成する事にします。

仮想環境であるwhisper-taskを起動しました。

Folderの位置を移動させました。
字幕を作成するCommandを使用しました。

Errorになりました。

あ、

Ffmeg.exeが無いんだ。

Ffmeg.exeを移動させました。
もう一回試します。

今度は完璧に出来ました。
.srt Fileを使用して字幕を付けます。
字幕付きの動画を見て字幕を確認します。

痛烈が通列になってますね。
通列って単語、漢字に変換出来ないんですが、よくこんなの出て来ましたね。
01:15の部分でした。
その後英語のCommercialが紹介されるんですが、

出鱈目な字幕が生成されています。
会社名ですが、アタラ株式会社の字幕が新田株式会社になってしまっていました。

細かく見て言ったら結構間違いありますね。

個人名の漢字も間違えていました。
こういうのはどうすれば直るんですかね。個人名は直すにも限界があると思うんですが、字幕を作る前に個人名などは入力出来る様にしておく必要があるのかもしれません。

満を持したが満渋になってました。
12:32のところです。
字幕を白で表してるので、バックが白くなると読めないんですが、それでもさっきの間違いからほぼ11分間間違いなし出来ました。
OpenAI Whisperやっぱりすごいです。

読みにくいですがRedditがRevitになってました。
15:06のところです。

Open AIの事がOpen エアになってました。
正しこの部分は話者もOpen エアって言ってました。
こういうのは字幕としてはどっちが正しいんでしょう。
15:24のところです。

ここは
すごい離脱するんですよ。
が正しい字幕ですね。
離脱が出発になってしまっていますね。
16:08のところです。

これなんか字幕全く読めません。
字幕の形状もちょっと変更する必要がありますね。
これがずっと続きます。

広告主が広告人士になってました。
19:37のところです。

頭打ちになるが、頭の血になってました。
これは結構大きな間違いですね。
25:27のところです。
ここで丁度半分ですね。
どうしようかな。
取りあえずここまでにして、Davinci Resolveの字幕の形状を変更する方をやる事にしますか。
5.3 Davinci Resolveの字幕の形状を一括で変更する方法を調べる
ChatGPTで一発でやり方が分かりました。

その通りの設定にしました。

これでもう一回動画を生成します。

これならはっきり読めますね。
最初からこれすればよかった。
5.4 動画の字幕を全部確認するの続きをやる
25:27の続きからやっていきます。

広告主がするのは出稿ですね。出行はそんな言葉、多分無いですね。
26:21です。

控訴が構想になってました。
これは正直聞き取れるだろうと思いました。
何でOpenAI Whisper間違えちゃったんでしょう?
30:45です。

盤石が、万弱になってました。
31:01のところです。

ここは合ってました。なんでさっきの出稿は駄目だったんでしょうか?
謎です。

グーグルさんしてる訳ですね
と言っていますが、グーグルさんがグーグラインになっていました。

グーグルの広告が
と言ってるところが、中小企業になっていました。
文の意味は完全に通っていますし、これは後で直すのは無理っぽいですね。

Googleの一強が、一興になってました。
38:47です。

メタってなんであんなにのあんなにが、あんまりになってました。
42:33です。

Websiteも生成AIで作られた、と言ってるんですがWebsiteがまるまる抜けてました。
これは珍しい間違いですね。
43:20です。

悪手が悪種になってました。
44:11です。

物凄く大きなパラダイムシフトの部分が、世界のパラダイムシフトになってしまっています。
これはWhisperが聞き取れなかったのを、推測で埋めたんでしょうか?
意味は通ってます。
49:12です。
最後の部分です。


ここはSpotifyなどでお楽しみ下さい。
と言ってるんですが、全く拾えなかったみたいです。
たしかに一寸早口で、もごもご発音してはいました。
以上です。
5.5 字幕のCheckをやった感想
それなりに間違いがありました。
前半の字幕が読めなかった箇所は間違いに気が付かなかった箇所もあるかもしれません。
こういうDataを集めて、ModelをFine Turing出来るならそれだけで商売になりそうです。
来週はこの字幕をAIに投げて、字幕の間違いを直してもらい、どれくらいの精度で直せるのかを確認します。
できればCLIでFileを投げて、Fileで結果を受け取りたいですね。
いや、Chatでそのままやった方が楽か。
その辺は一週間かけて考えます。
6. Houdiniの勉強
Houdiniの勉強を始めた理由は、これからの3D GraphicsはProceduralな3Dの生成だという風潮が2年前ぐらいに起きて、それで慌てて勉強を始めたんです。
生成AIブームが起きて、Proceduralな3Dの生成のブームはすっかりなくなってしまいましたが、Nodeを使用して3Dを生成する手法は、職人的な技術が無くても3D Objectの生成が出来るのでかなり便利という事に気が付きました。
のでHoudiniの勉強は続けています。
しばらくHoudiniの勉強はお休みして木の生成について調査していましたが、やっぱりHoudiniの水のSimulationの勉強をする事にします
木を自分で実装してもその凄さに気が付く人はほとんどいません。
それに対して水のVEXを作成したら誰が見ても凄いと思うからです。
6.1 前回の復習
Houdini is HIP – Part 15: Sparkling Water Project [9]の<16:19 Adding Colliders>を18:21まで実装しました。
特にまとめる内容も無いです。
今週も続きをまとめる事にします。
6.2 Houdini is HIP – Part 15: Sparkling Water Project [9]の続きを勉強する
まず、前回実装したCollideの設定方法が、複雑な形状、例えば海から浮上するMonster、などでも高い精度で水の動きを計算出来る設定なんだそうです。
以下にLectureの説明をそのまま載せておきます。

Geminiに訳して貰いました。

この解説途中からよく分からなくなります。
"deforming geometry usually..."の部分なんですが、
変形するGeometryはFrame毎にCollision Guideを計算しなければならないが、(この方法で)Volumeとして明示的に指定した場合は計算をSkipできる
と言ってる気がするんです。
しかしGeometryが変形する場合は、その形状がFrame毎に変形するんですから、CacheとしてSaveする事なんて不可能だと思うんです。
変形するGeometryはFrame毎にCollision Guideを計算しなければならないが、(このような変形しない形状は)Volumeとして明示的に指定した場合は計算をSkipできる
って言ってるなら辻褄があうんですが、どうなんでしょう。
Geminiが説明してくれました。

変形するVolumeをFrame毎に連番FileとしてDiskに保存するのか。
そんな事をHoudiniはしてるのか。

更に詳しく説明してくれました。
つまり変形するVolumeの形状は先に計算しておいて、CacheとしてSaveしておくそうです。

そのお陰でSimulationに必要な時間が少なくて済むようになる訳ですね。

VolumeのDataをFrame毎にSaveしてもHoudiniが採用してるOpenVDBという形式なら僅かなData量でVolumeの形状を保存できるそうです。
そして

という効果も出て来るそうです。
凄い。
やっと意味が分かった。
そして先週実装し、先々週勉強した方法が、こんな重要な事をやってるのも理解しました。
正直、これを理解するだけでかなり疲れました。
続きをやっていきます。
これでCollideの設定も万全と思うかもしれませんが、以下の様に

この設定では液体を表す粒子がGlassから漏れてしまいます。
この問題を解決するのために、Surface Colliderも使用する事にするそうです。
やっぱし、SimulationでCollisionが突き抜けてしまう問題は、3D Graphics Engine共通の問題のようですね。

Static Objectノードの
Collision DetectionをUse Volume Collisionsに変更します。
しかしここをUse Surface Collisionに変更する事も出来ます。

Show Collision RadiusをEnableして
Collideを可視化すると以下の様になります。

このSurfaceをCollideとしてSimulationすると以下の様に

液体を表すParticleがGlassの中で消えたりしています。

しかしSurfaceでColliderを指定した場合は、Glassから液体を表すParticleが貫く事はありません。
納得。
だからこれからVolumeとSurfaceの両方をColliderとして使用するのか。
まず以下の様にStatic ObjectノードをDuplicateします。

そしてStatic Object2ノードの方の
Collision Detectionの値をUse Volume Collisionに変更します。

更にMergeノードを追加して以下の様に繋ぎます。

この状態でSimulationを行ってParticleの流れを確認します。
まずGlassの表示を、Static Object1ノードのshow Collision RadiusをDisableして消します。

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

かなりSmoothです。

更にParticleがGlassからはみ出る事もありません。
凄い。
最後にこのTechniqueの使い分けの大まかな目安を説明してました。

成程。
理解しました。
<22:00 Volume Loss Causes>
これ、Geminiに全部解説してもらった方が理解が速く進む気がして来ました。
この説は全部、Geminiに解説してもらいます。

Reseeding(リシーディング):
シミュレーション中、ある格子(Voxel)の中に粒子が密集しすぎたり、逆にスカスカになったりします。これを防ぐために、Houdiniは自動的に粒子を足したり消したりして、適切な密度を保とうとします。
こんな事してんの?
それじゃParticleが増えたり減ったりするのは当然ですね。

要は液体がColliderに激しくぶつかる所では、計算の精度が低くなって粒子が消えてしまう。って事です。
それがFrame毎に起きるのでGlass内の液体が目に見えて消えてしまう現象が起きるそうです。

密度が足りないとSolverの計算の精度が低くなるんですね。
以下の方法で解決するそうです。

やっぱりSub stepを上げるのか。
Particle Separationに関しては、粒子が重なる場合はどう計算してるんでしょうか?
液体は非圧縮性の流体だから、その場所に既に粒子がある場合は重なる事は出来ないはずです。
Geminiに聞いてみます。

ここから解答になります。

凄い。
細かい計算は分かりませんが、どのように重なりという問題を解決してるのかの理論は理解出来ました。
更に追加の情報として

この辺の具体的な計算方法を知りたい。
しかしそれはHoudiniの勉強の境界を越えてしまうので、止めておきます。
これだけ理解したら十分です。
動画を見て確認だけします。
見ました。
Geminiの説明の方が分かり易かったです。
理論はAIに聞いて要約してもらった方が速く、更に深く理解出来ますね。
この位で止めておきます。
7. Nvidia Omniverseの勉強2(強化学習の勉強)
Nvidia Omniverseの勉強で、Isaac Lab Documentation [7]の勉強をしていますが、
これってIsaac Labの使用方法の勉強が主で、
Robotが自動歩行するためにどんな強化学習をしなければならないのかは別に勉強しないといけないのではないのか?
との疑問が出て来ました。
で先週は強化学習の教科書について調査しました。
でその教科書を勉強するための時間をここに作りました。
7.1 How to build Humanoid: NVIDIA Isaac Lab, how to walk [10]の続きを勉強する
先週は20.26まで勉強したのでその続きからやっていきます。
TerrainにあるTerrain_Generator_cfg.pyを見ていきます。

Terrain Configuratorがあります。

ここではTerrainGeneratorCfgと書いてありますね。TutorialではTerrain Configuratorと言っていました。
更にTasksにあるVelocity_env_cfg.pyを開きました。

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

Sceneの設定をしてるんでしょうか?
Terrainの指定がありますね。

RobotやLightの指定もしています。
Sceneの指定をしてるところでしょうね。
Observationについての話もしていました。

ここではVelocityとAngular Velocityの値を指定しています。
TutorialではここでNoiseを追加してるところが興味深いと述べていました。正確な値を得る事が出来ない方が実地で試験する時、成績が良くなるんでしょうね。
更に以下のPositionの値も取得していました。

Randomizationの項目もありました。

これは何をRandomizeするんでしょうか?

TutorialではJoint Armatureの事をMoment of Inertiaと同じと言ってます。
そうなのか?
Geminiに質問しました。

慣性モーメントは回転運動を起こす時やその逆の止める時に必要とする力を表してるのか。
Joint Armatureはモーター内の回転子自体の慣性を示してるのか。

納得。やっぱりGeminiの説明は分かり易い。

はい。理解しました。
この後、早口で色々なParameterの設定を紹介しています。
重要そうなのだけ紹介します。

Feet_Air_Time、つまり足が地面から離れている時間です。

すり足をしないような指定もしています。

ここでこのJointを必要以上に使用しないように設定してるそうです。
Terminationです。

ここではいつSimulationを終了するのかを指定しています。

Curriculumの指定をここでしています。
ほとんど説明はありませんでした。
ここでどんな順序で学習してるのか知りたかったんですが、このCodeを見ただけじゃ分かりませんね。
この説明を聞いて複雑だと思ったかもしれないが、Isaac LabのSource Folder内に同じような実装がある。

と説明していました。

確かにありました。
このCodeの内容を理解すれば、Isaac Labで自由に設定できるようになるはずです。
今年はこの辺を目指して頑張ります。
Tutorialでは簡単にどんな指定をこのFileでしてるのかを見せていました。
このFileが基礎になってそれぞれのRobotはこのFileを参考にして調整するそうです。
更に、以下のFileを紹介して

このRobot

のFileがどのように変化したのかを示しています。
で、これからこのTutorialで使用するRobot用のFileを作成します。
Berkeley HumanoidのCodeは

Lsaac LabのVersionが1.0.0でIsaac SimのVersionは4.0.0です。
なので
最新版ように書き直したそうです。

完成品を一寸だけ見せてました。

GithubにこのCodeは公開されていました。
RobotのModelはURDF Fileから作ったそうです。

どうやってUSDに変換したのかは説明ありませんでした。

Simulationをしてるところを表示しています。

おお、Simulationで矢印を表示したのもやっています。
Walkthroughでやってるやつだ。

最後にTutorialで作成中のRobotのSimulationも見せていました。
あれ?
今まで見てたのは違うやつのSimulationだったの?
そう言えば形が一寸違っていました。
これで動画は終わっていました。
以上です。
7.2 How to build Humanoid: NVIDIA Isaac Lab, how to walk [10]を勉強した感想
Isaac Labを使用したRobotの強化学習を行うのに、どんな事をやる必要があるのか大体理解しました。
Walkthroughを勉強してた時は、なんか無駄な勉強しちゃったのかなと思いましたが、ドンピシャだったです。更にUE5を使用したRLの勉強もかなり役に立ってますね。
役に立たなそうなのが、ROS2からIsaac Simを繋げるための勉強だったです。
あれは要らなかった。
あの当時はまだAIの無かったし、どう勉強したら良いのか全く分からなかったです。
こんな理解で充分でしょう。
8. DirectX12の勉強
3D Graphicsを作成するのにOpenGLを使ってるとバカにされるからDirectX12の使い方も勉強しようとしたら、Windows 8ではDirectX12が使用出来なくてずっと勉強を我慢していました。
で新しいPCを買ってやっとDirectX12を勉強できる環境になったら、もうDirectX12を勉強する人がいなくなっちゃってたんです。
のでこれも出来たら何したいというのは無いですね。
ああ、昔MMDを自分で作りたいというのはありました。それを目的にします。
8.1 「DirectX 12の魔導書」を勉強する
8.1.1 前回の復習
忙しかったと言え、2週間もサボってしまいました。
もう悲しい。
前回の勉強では、Chapter 6のSample CodeからDirectXTex.libを使用出来る様にしました。
最後に
Ch5_CopyTextureをGithubに上げて管理すると書いています。
今週はこれについて調査する事にします。
8.1.2 Ch5_CopyTextureをGithubに上げて管理する方法を調査する
これGeminiに聞いたら、非常に簡単だったのでGeminiの説明にそってやってしまいました。
こんなにAIが発達した世の中ではもう敢えてここに記録に残す価値もないので、日記として記録に残しておきます。

と言ってるので、GitHub DesktopをInstallしました。
更に10年くらい前に作成したRepositoryを全部消すかPrivateに変更しておきます。
前に作業した時はまだ無料UserはPrivateは使用出来なかったんです。
以下の方法でやりました。

で、Ch5_CopyTextureをRepositoryに上げました。
ここで「Git Ignore」にVisual Studioをセットしました。
これからこのProjectにChapter 6の内容を追加していきます。のでCh5_CopyTextureの内容は保持できるようにBranchをしました。
そして

だけ追加して
CommitとPushしました。
GitHubのBrowserからChapter6のmain.cppを見ると

しっかり追加されていました。
Repositoryはしっかり出来たのでこれで完成です。
細かい手順はGeminiの
GitHubでDirectX12コードを管理
に書いてあります。
以上です。
8.2 Lötwig Fusel氏のD3D12 Beginners Tutorial [D3D12Ez]を勉強する
8.2.1 前回の復習
CompileされたShader FileをLoadする実装を追加してました。
なんせ2週間ぶりなので前の内容あんまり覚えていません。
Shader.h FileとShader.cpp fileを作成していました。
8.2.2 Writing Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [11]の続きを勉強する
Shader.cppのConstructor内に以下の実装を追加しました。

これでShader.cppは完成です。
MAX_PATHの値はどこかで指定したんでしょうか?
これは実装する時確認します。
Main.cppに戻ってShader.hをIncludeします。

そしてShader Classを使用してVertex ShaderとPixel Shaderを以下の様に読み込みます。

更にShader.cpp FileのShader()関数に以下の実装を追加しました。

ShaderDirをStaticなVariableに変更します。
Shader.hに以下の宣言を追加します。

static std::filesystem::path s_shaderDir;
次にShader.cpp Fileで以下の実装を追加しました。

static std::filesystem::path s_shaderDir;
これで初期化が出来た。とTutorialは言っています。
そうなのか?
よく見たら同じじゃん。
Sample Code見たら
Shader.h Fileには

static std::filesystem::path s_shaderDir;
がなくなってました。
つまり、最初Shader.hでs_shaderDirを宣言したんだけど、何かの事情でShader.cppの方に移しただけだったんです。
更に、Tutorialでは以下の様なCodeになっていました。

これって宣言する場所でどんな違いが生じるんでしたっけ。
Constructor内でStaticなVariableを初期化するとSingletonになるんでしたっけ?
全く覚えていません。
Geminiに聞いてみます。

こんな違いがあるそうです。
Singletonは?静的Local変数って、Singletonじゃないの?

ホントか?
なんかHallucinations起こしてない?
心配だからここに記録するのはやめておこう。
Shader.hに#include <fstream>を追加しました。

そしてMain.cppの以下の実装のFileのExtensionの部分をCSOに変更しました。

その後で、Shader.cppのConstructorに以下の実装を追加しました。

で、Shader.hに以下のinlineのGetterを追加しました。

BufferとSizeを返しています。
27:45まで勉強しました。
ここで水洗便所が壊れたと家族が突然言って来て、結局直ったんですが、2時間ぐらい時間を取られて、もう集中出来なくなってしまいました。
今週のDirectX12の勉強はここまでにします。
9. まとめと感想
なし
10. 参照(Reference)
[1] Procedural Minds. (2024, August 25). Do you want to remove just one side of your building? | UE 5.4 p4 [Video]. YouTube. https://www.youtube.com/watch?v=ngizgkYM2Ac
[2] Epic Games. (n.d.). Control Rig in Unreal Engine, from https://dev.epicgames.com/documentation/en-us/unreal-engine/control-rig-in-unreal-engine
[3] 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 5: Practical Deep Learning for Coders 2022 [Video]. YouTube. https://www.youtube.com/watch?v=_rXzeWq4C6w
[5] Howard, J. (n.d.). First Steps: Road to the Top, Part 1 [Kaggle notebook]. Kaggle. Retrieved February 24, 2026, from https://www.kaggle.com/code/jhoward/first-steps-road-to-the-top-part-1
[6] Howard, J. (n.d.). The best vision models for fine-tuning [Kaggle notebook]. Kaggle. Retrieved February 25, 2026, from https://www.kaggle.com/code/jhoward/the-best-vision-models-for-fine-tuning
[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] Nine Between. (2023, November 29). Houdini is HIP - Part 15: Sparkling Water Project [Video]. YouTube. https://www.youtube.com/watch?v=Xs2tHiVFKF0
[10] Skyentific. (2025, March 14). How to build Humanoid: NVIDIA Isaac Lab, how to walk [Video]. YouTube. https://www.youtube.com/watch?v=xwOaStX0mxE
[11] Lötwig Fusel. (2023, August 6). Writing Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [Video]. YouTube. https://www.youtube.com/watch?v=8MMRz9QMJI8