
それぞれの節で何が目的で勉強してるのかを最初に述べているので、進捗が理解出来るようになっているので、今年は一年間のまとめはやりません。
今までの勉強を継続します。
1.今週の予定
今週もこの順序に従って勉強していきます。
- 映像作成用UE5の勉強
- AIの勉強
- Nvidia Omniverseの勉強
- Gaeaの勉強もしくはVroidとUE5の勉強
- Houdiniの勉強
- AIについての調査(ComfyUIの勉強)
- DirectX12の勉強
それぞれの勉強の最初にその勉強をする目的を一寸だけ書いておきます。
2. 映像作成用UE5の勉強
2.1 PCGを使用した神社の作成
PCGで建物を作成する方法を勉強してるので、その応用としてPCGで神社を作成する事にしました。
最終的にはUEFNのMap内で神社を作成して、 誰でも参拝出来るようにするつもりです。
2.1.1 前回の復習
Landscape PatchというPluginを使用して瑞垣が囲む部分を平にしました。
これが

以下の様になりました。

そして最後に

と書いて終わっていました。
2.1.2 楼門を追加する
瑞垣内の草を消したいんですが、やり方が分かりません。
ので、今やり方が分かってる楼門を追加する事を先にやります。
楼門を追加する場所の瑞垣の塀を消す方法は2025-11-23のBlogに載っていました。
2025-11-23のBlogのやり方に沿って以下のようなTrigger Boxを追加しました。

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

こっちに変えました。

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

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

これは正面しか作成していませんが、これでOKな気がします。
このやり方で草は隠してしまう事にします。
2.1.3 草を消す方法を考える
Layerを増やして上のLayerに別なMaterialを貼ったらどうでしょうか?
ChatGPTに聞いたら以下の方法で出来ると言って来ました。

No Glassを追加するのはつかえそうなIdeaですね。
もしくはTrigger BoxにTagでNo Glassをつけて、そのNo Glassがある場合は、草を生やさないと言う風な設定に変更しても良いかもしれません。
草はPCGで生やしてるはずです。
ならば、楼門を置く場所だけ瑞垣を消した方法で草も消せるはずです。
草を生やしてる実装を確認します。
PCG使ってなかったです。

Foliageを使用して草を追加してるみたいですね。
Foliageの使用方法なんかもう覚えていません。
うーん。
どうしよう?
ChatGPTの回答は本当はもっと詳しくて以下の様になっていました。


なんかこっちを実行したらそのままできそうな気がして来ました。
以下の箇所に追加出来たら③はいけそうな気がします。

ChatGPTの①の手法だけ別なLandscapeを作成して試してみます。
以下のLandscapeをMW Landscape Auto Materialを使用して作成しました。

Layerを追加しようとしたら

出来ないです。
RemoveFoliageというLayerがDefaultであります。
これを使用したら草を消す事が出来そうです。
LayerInfoを作成しました。
すると草が消えてしまいました。
ChatGPTに聞くと
色々回答してくれたんですがもう時間が無くなってしまいました。
UE5 Landscape Material変更方法
という題でChatGPTには保存されています。来週はこれを復習する事からやる事にします。
2.2 PCGの勉強
PCGを使用した建物の作成を勉強しています。
その理由ですが、Luma AIで作成した3D Gaussian SplattingをUE5にImportすると以下の様に、

奥にあるHigh-rise apartment Building(マンション)が歪んでいます。
気持ち悪くなる位曲がっています。
これ直さないと3D Gaussian Splattingは使用出来ない。との結論になりました。
でどのように直すかとなると、PCGを使用してHigh-rise apartment Building(マンション)を作成するしかないのかな。となりPCGで建物を作成する方法を勉強する事になりました。
2.2.1 前回の復習
Create Procedural Interiors With Full Room Separation | UE 5.4 P5 [1]の<15:15 - Set Density on Room Center Points>の実装が実際に何をやってるのかを理解ための復習の続きをやっています。
PCG Random Points with Floorsノードの

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

ここで
Attribute Filterノードの

設定が

となっています。
ChatGPTによると@Lastの意味は、
直前のNodeが書き込んだAttributeの事だそうです。
しかし、Attribute Filterノードの直前のNodeは、以下のSort Attributeノードで

このNodeではAttributeの値は変更していません。
更に、
Attribute FilterノードのFilterの値は、以下の方法で計算されており

5になるんですが、Densityだと0~1の間の値なので、全部Passしてしまいます。
つまりこのNodeの設定が間違ってるのか、私の理解が間違っているのかのどちらかになります。
で、

と言って終わっていました。
2.2.2 Attribute Filterノードの実装を確認する
Attribute Filterノードをどこで実装したのかを確認します。
2025-10-19のBlogで勉強してますね。
まずこれを軽く読みます。
ここでAttribute Filterノードについて述べているのは、

部屋数のPointだけFilterされるという事だけです。
そうなの?
この実装で部屋数のPointだけFilterされるの?
後、このBlogでこれが Create Procedural Interiors With Full Room Separation | UE 5.4 P5 [1]の<09:00 - Select Room "Center Points" Based on Data Asset Quantity>で勉強した内容である事も判明しました。
Tutorialを見直してみます。
Attribute FilterノードのTarget Attributeの値を$Indexに変更していました。

やっぱし。
どう考えても@Lastはおかしかった。
Projectの方のAttribute FilterノードのTarget Attributeの値も$Indexに変更しました。

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

これで疑問の一つ目は解決しました。
2つ目の疑問ですが、以下の実装が、それぞれの階の部屋数を返すそうです。

そうなのかよく分かりません。
これはChatGPTにGet Entries Countノードの機能を聞いてみましょう。

だそうです。
参照してるData AssetのIndexは以下の様になってるので

返す値は5になるみたいです。
この状態でAttribute Filterノードの結果を可視化してみました。

結果です。

こういう結果を求めてたのか。
これならやっと何をやってるのかが理解出来ました。
うーん。でもTutorialのは5個Pointが表示されていますね。

更にそれぞれの階で全く同じ結果になってるのかも分かりません。
あ、でもIndexの数が5で、
Attribute FilterノードのOperatorの値が<なので
![]()
4であってるのか。
それぞれの階で全く同じ結果になってるのは正しいかどうかはまだ不明ですが…
取りあえずは、PCG Random Points with Floorsノードの実装の復習を終わらせてしまいましょう。
最後に、Attribute Filterノードの後に、Match And Set Attributesノードが使用されています。

ChatGPTに質問します。

なんか凄い回答が返って来ました。
これは長いし、複雑なので来週勉強する事にします。
ChatGPTの題は
UE5 Get Entries Count
です。
この中でMatch And Set Attributesノードについて質問しました。
2.3 Level Sequence上でAnimationの編集をする方法
Level Sequence上でDragonをAnimation Sequenceを使用するとDragonの爪が地面にめり込んでしまいます。
これを直すには、Animation SequenceではなくControl Rigを使用する必要があるみたいです。しかし私が使用してるDragonには付属のControl Rigがありません。
しかもControl Rigがどういうものなのか全く理解していません。
のでControl Rigがどういうものなのかについての全般的な知識と、その使用方法についての基礎を勉強する事にしました。
その後、今まで勉強してたTutorialはUE5.0用のTutorialで5.5はControl Rig [2]を勉強する必要がある事が判明しました。
のでControl Rig [2]を勉強する事にしました。
そして2025-12-21のBlogでまとめましたが、別なLayerを使用する事で、Control Rigを使用してLevel Sequence上のAnimationを編集出来る事が判明しました。
ので、後はDragonにControl Rigを追加出来れば、Dragonの爪が地面にめり込んでしまう問題を直す事が出来る事が判明しました。
2.3.1 前回の復習
DragonのSkeletal Meshを使用して以下のControl Rigを作成しました。

そしてLevel SequenceからこのDragonのAnimationを追加し、そのAnimationをControl RigにBakeしました。
次にこのControl Rigを開いて一個だけControlを追加しました。

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

ここでControl RigにBake出来ないと、次の工程に進む事が出来ません。
以下の方法で試してみたらどうかと提案だけ考えて終わっています。

今週はこれらを試してみます。
2.3.2 Mannequinで独自のControl Rigを作成して試す
前回、Mannequinで実験した時に使用したSkeletal Meshです。

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

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

これらを使用して先週やった検証と同じ事をやってみます。
まずこのMannequinをLevel上に配置し

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

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

今の時点では指定したAnimationの動きをしています。
ここでBake to Control Rigを選択すると

SKM_Quinn_me_Simple_CtrlRig1が表示されています。
先程作成したControl Rigです。
SKM_Quinn_me_Simple_CtrlRig1を開きRoot BoneからRoot_ctrlを作成しました。

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

何故か、先週のBlogにはこの実装部分の記録が抜けていますが、先週のDragonのControl Rigもこの実装はしています。
Control Rigの形状も以下の様に変更しました。

Control Rigを動かすと

Mannequinも動きます。
この状態でLevel SequenceからBake to Control Rigを選択すると

先程まであった、SKM_Quinn_me_Simple_CtrlRig1が無くなっています。
先週試したDragonと同じ結果になりました。
Bake to an invertible control Rig that matches this skeleton
と書いてありますね。
今回はGemini3に聞いてみます。


というかなり複雑な説明をした上で質問しました。
Geminiの回答です。

別にFrustrationは感じてないですが、絶望はしてます。
Invertible(逆変換可能)な状態ではなくなったから
そうなったと言っています。
え、そうなの?
実はそういう気は先週からしてたんです。
前にBackward Solveを勉強した時に、Backward SolveはBoneからControl Rigを操作するための実装と勉強した記憶があります。
2025-03-16のBlogにも以下の様に書いてありました。

もっと詳しく勉強した週があるはずですが、今検索して見つかったのはこれだけです。
そしてGemini3は以下の回答も返してきました。

成程。
試してみます。
Control Rigに以下の実装を追加しました。

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

ああ、
SKM_Quinn_me_Simple_CtrlRig1が表示されています。
直りました。
Gemini3凄い。
2.3.3 Gemini3はやっぱりChatGPT5より上です
先週は散々、ChatGPTに同様の質問をして

という散々な結果になってしまったんですが、
今回、Geminiに質問したら一発で解決しました。
先週のChatGPTの回答は、Compileしてないからだ。とかSaveしてないからだ。とか回答していましたが、Backward Solveが未実装とは一言も述べませんでした。
ただ、先週は質問した時に
Bake to an invertible control Rig that matches this skeleton
は書きませんでした。
公平を期すために、Geminiにした質問とまったく同じ質問を今、ChatGPTにもしてみます。
結果です。

あれ?
今回は正しい回答を返してきました。
やっぱり
Bake to an invertible control Rig that matches this skeleton
があると回答の精度が上がるのでしょうか?
しかし解決策でBackward Solveによる実装は述べてないです。
ChatGPTが述べた回答は以下のようなもので

非現実的で実際に実装する事は出来ないものです。
やっぱりGeminiの方が優れた回答を返してます。
そういう事か。
これだけで判断するのは危険かもしれませんが、Geminiの方がChatGPTより上ですね。
2.3.4 先週のDragonで試してみる
では先週出来なかったDragonで試してみます。
Control Rigを新しく作成しました。

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

Level Sequenceにも追加しました。

更にAnimationも追加しました。
この状態でBake to Control Rigを選択すると

先程作成したControl Rig、SK_DesertDragon_CtrlRig2が表示されています。
SK_DesertDragon_CtrlRig2を開き以下の実装を追加しました。

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

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

しっかりCompileとSaveをして
Level SequenceからBake to Control Rigを選択すると

SK_DesertDragon_CtirlRig2が表示されています。
Dragonでも出来ました。
これで先週の問題は解決しました。
先週、あんなに困って絶望した原因は、GeminiではなくChatGPTに質問してしまったからです。
うーん。
もしChatGPTが正しく回答出来ない時は、Geminiにも同じ質問をしてみる事は必須ですね。
先週、ChatGPTじゃなくてGeminiに質問してたら一日無駄にしなくて済んだかもしれません。
はい。
3. AIの勉強
AIの勉強の目的ですが、
生成AIが凄いTrendになってるので、最低限の基礎は知っておくべきと思いこの勉強を始めたんでした。
のでこれを勉強してどうしたいというのは無いです。
3.1 Practical Deep Learning for Coders 2022 [3]の勉強をする
3.1.1 前回の復習
2025-10-26のBlogから始まったんですが、
Lesson 6: Practical Deep Learning for Coders 2022 [4]のRandom Forestの勉強までやりました。
ここで一端復習する必要を感じ、
今まで習った計算方法、特にTitanicの乗客の色々な要素(性別、年齢など)から生存を予測するための計算方法を整理する事にしました。
その理由ですが、これでLinear Model、Neural Network ModelそしてRandom Forestの具体的な手順を完全に理解した事になるんですが、実際は全然理解してないからです。
先週の前までの勉強で、一応今まで疑問だった数式(Linear Model)に対しての計算方法、

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

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

それぞれの要素に対して2回Weightを計算する事で、Neural Networkになりました。
で、ReLu関数に関する以下の疑問も解決しました。

これはChatGPTとGeminiの両方に質問したら解明しました。
結論は、やっぱり順伝播で使用しています。
そして逆伝播でも使用するそうです。
つまりReLu関数は両方で使用する事が判明しました。
ここまでが先週の前までにやった復習の内容です。
そして先週は
Lesson 4: Practical Deep Learning for Coders 2022 [5]がTitanic号のDataを使用して何らかの計算をしてないか確認しました。
先週のBlogはLesson 4: Practical Deep Learning for Coders 2022 [5]ではなくGetting started with NLP for absolute beginners [6]と書いていますが、正確に言うとLesson 4: Practical Deep Learning for Coders 2022 [5]です。
何故こんな事をしたのかというと、
今までの復習で出て来たTitanicの乗客の要素から生存を予測する計算は、Lesson 4: Practical Deep Learning for Coders 2022 [5]にはないんです。
じゃ
Lesson 4: Practical Deep Learning for Coders 2022 [5]では何を勉強してるか。
という事を確認しました。
その結果、
Lesson 4: Practical Deep Learning for Coders 2022 [5]では、Titanicの乗客の要素から生存を予測する計算はしてない代わりに、
California州の不動産のDataを使用して
計算している事が判明しました。
で、このCalifornia州の不動産のDataを使用した計算が何をやってるのかを今週は調査します。
3.1.2 Lesson 4: Practical Deep Learning for Coders 2022 [5]の復習をする
まずはLesson 4: Practical Deep Learning for Coders 2022 [5]でどんな内容を勉強したのかを復習します。
これをやっておかないとCalifornia州の不動産のDataを使用した計算の意味も理解出来ないからです。
この週からLesson 4: Practical Deep Learning for Coders 2022 [5]の勉強は始まっています。
この週はまたNotebookLMを使用してMind Mapを作成しています。
簡単にこのBlogの勉強内容をまとめます。
Lesson 4: Practical Deep Learning for Coders 2022 [5]はNLP、Natural Language Processing(自然言語処理)について勉強する事を知りました。

と書いてありますが、これってHallucinationですよね。だって今までNLPは扱ってないですから。
ただ、このTutorialでTransformerを扱ったのは確か事実だったはずです。

そうだ、Hugging FaceのLibraryを使用して何かをしたんだ。
それは今でも覚えています。
更に、Fine Tuning、NLPの主要なTaskとして文書の分類、Token化、そして最後にKaggle Competitionについて説明していました。
更に機械学習について以下のまとめが貼ってありました。そこには
- Dataを訓練セット、検証セット、そしてTestセットに分ける事。
- 過学習について
- MetricとLoss Functionについて
- Outliersについて
についての解説がありました。
この辺の内容については今でも覚えていますね。
この週はMind Mapを使用して勉強していますが、結構効率的な勉強してました。
この辺からGoogleのAIの性能が急上昇を始めたのかもしれません。
この後もずっとMind Mapの内容をまとめていますが、実際の実装に関連してる話や、Mind Mapからでは断定は出来ない専門用語の紹介などが主になってるため、ここにはまとめません。
で、肝心のCalifornia州の不動産のDataを使用した計算に関してですが、まったくその話はありませんでした。
ここで時間が無くなってしまったので、今週のAIの勉強は終わりです。
続きは来週やります。
4. Nvidia Omniverseの勉強
Robotic AIの仮想空間におけるTrainingのための環境設定こそがこれからの3D Graphicsの専門家が生きる場所であると思っています。
のでその仮想空間でRobotic AIがどんなTrainingを行っているかをまず勉強する事にしました。
色々調べると、その部分はNvidiaのOmniverseの中のIsaac Simが担当している事が判明しました。
のでその辺りを勉強します。
2025年9月からIsaac Lab Documentation [7]の勉強に切り替えました。
4.1 前回の復習
Exploring the RL problem [8]を勉強してます。
最初の部分を一寸だけ勉強してました。
記録すべき内容はほとんどないですが、一個だけあえてのべるとすると
self.forwards
の計算は、Local CoordinateをWorld Coordinateに変換してると説明してるのに、実際の実装では、World Coordinateである
self.robot.data.root_link_quat_w
に(1,0,0)を掛けて計算してるだけで、どこにもLocal CoordinateをWorld Coordinateに変換してないと思ったら、
(1,0,0)がLocal座標でそれに
self.robot.data.root_link_quat_w
を掛けたら、(1,0,0)のWorld座標に変換されている。
という事だったという事です。
4.2 Exploring the RL problem [8]の続きを勉強する
続きを勉強していきます。

ChatGPTの訳です。

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

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

Reshape(-1,1)の意味が分からないですね。
ChatGPTに聞いてみます。

うーん。
今一よく分からないです。
詳しい説明を読んでいきます。

あ、TensorのShapeを変える。という意味がよく分かってないんだ。
これをChatGPTに説明してもらいます。
非常に分かり易く説明してくれました。
その内容を以下にまとめます。

Tensorは数字の入った箱の集まり、
Shapeはその箱の並び方を示したものだそうです。
この説明を聞いたときは、あんまりピンとこなかったんですが、この後の説明で凄い上手い例えだと分かります。
一次元で、Shape=(4,)の場合です。

これだと、箱は横に4つ並んでいます。
今度は2次元Tensorの例です。Shape=(4,1)で説明しています。


これが2次元Tensorなら3次元TensorはShape(2,2)で作成出来るの?
と言う疑問が湧きますが、これは後で検討します。
先にReshape()関数についての説明をまとめます。

そして-1の意味です。

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

だそうです。
これでReshape()関数の機能は完璧に理解しました。
<3次元Tensorの表し方について>

ChatGPTの回答です。

ガーン。
間違っていたのか。

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

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

成程。
言われれば理解出来ますが、まだ腑に落ちないですね。
<>
では実装の勉強に戻ります。

まずSelf.forwardsについて勉強します。
ここには(N,2)や(N,3)と書かれていますが、これって2次元Tensorなんでしょうか?
ChatGPTに質問してみます。

流石にこれは合ってました。
次にNの意味について質問しました。

あ、そうだった。
これは先週勉強しました。
そしてSelf.forwardsについて簡単に説明してくれました。

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

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

これは3D空間の場合です。
3D空間でもTensorは2次元のままです。
今度は
self.commands
について質問します。
ChatGPTは

と前に回答してます。
ここの
は2Dの場合の例なんでしょうか?
更に
self.forwards * self.commands
してるって事は、
self.forwardsには全てのEnvironmentのDataが入ってるから、全てのEnvironmentにこれらの進むべきVectorを掛けてるって事でしょうか?
ChatGPTの回答です。

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

この場合だと、環境1と環境2の値が表示されていたのか。
そして
self.forwards * self.commandsが実際に何をしてるのかですが、

の場合、

となるそうです。
ので

となるそうです。
![]()
この後、Sumを取っていますが、これは

を計算してるそうです。

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

内積の結果が、そのままRewardの値になります。
後は、
dim=-1, keepdim=True
の意味を理解すればこのCodeの意味は大体理解しました。

一番内側の方向って、意味が分かりません。
詳しい説明を読んでいきます。

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

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

成程。
足した後は、1次元の2要素に変化してますね。
Dim=1の場合です。

うーん。
こういう計算になるのか。
Dim=-1の場合です。

だそうです。
頭がこんがらがって来ました。
後、KeepDim=Trueの意味です。

Shapeは変わらないって事でしょうか?
<dim=-1とkeepdim=True>
dim=-1とkeepdim=Trueは前に勉強した記憶があります。
2025-11-16のBlogにあるEnvironment Design [9]の_get_rewards()関数で勉強していました。

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

これ読むと、今回と同じ解説をしていますね。
ただこれを勉強した時は今ほどは理解してないで、何となくで流してしまっています。
keepdim=Trueについても勉強していました。
その時のChatGPTの回答を以下に示します。

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

このころはまだ、ChatGPTにはLimitがあったんだ。
今は有るのかもしれませんが、表示されなくなりましたね。
それは兎も角、この時はTensorの次元の意味がよく分からないと言って終わっていますね。
もう時間が無いです。
今週のNvidia Omniverseの勉強はここまでにします。
5. Gaeaの勉強もしくはVroidとUE5の勉強
なし。
しばらくお休みします。
6. Houdiniの勉強
Houdiniの勉強を始めた理由は、これからの3D GraphicsはProceduralな3Dの生成だという風潮が2年前ぐらいに起きて、それで慌てて勉強を始めたんです。
生成AIブームが起きて、Proceduralな3Dの生成のブームはすっかりなくなってしまいましたが、Nodeを使用して3Dを生成する手法は、職人的な技術が無くても3D Objectの生成が出来るのでかなり便利という事に気が付きました。
のでHoudiniの勉強は続けています。
しばらくHoudiniの勉強はお休みして木の生成について調査していましたが、やっぱりHoudiniの水のSimulationの勉強をする事にします
木を自分で実装してもその凄さに気が付く人はほとんどいません。
それに対して水のVEXを作成したら誰が見ても凄いと思うからです。
6.1 前回の復習
Houdini is HIP - Part 15: Sparkling Water Project [10]の<09:23 Collider Geo Setup>を勉強しました。
VDB from Polygonsノードについて勉強しています。

このNodeはPolygonに穴が空いてる場合や、何らかの操作をすると穴が空いてしまう場合に、このNodeを使用して一端VDBにして、もう一回Polygonにするのに使用します。
そんだけです。
6.2 Houdini is HIP - Part 15: Sparkling Water Project [10]の<09:23 Collider Geo Setup>を実装する
先週勉強した範囲はほとんど無いですが、その分は一応実装しておきます。
GLASS_OUTに2つのNullを追加しました。

2つのNullノードの名前は、GLASS_SURFACE_OUTとGLASS_VOLUME_OUTに変更しました。
VDB from Polygonsノードを追加しました。

以上です。
6.3 How to create a River with Houdini [11]を勉強する
お正月にお勧めで以下のTutorialが表示されました。

こんな感じです。

もうこれを勉強したら水の生成に必要な知識全部学べるはずです。
こっちを勉強します。
今週は取りあえず、動画を全部見て中身を確認します。

途中までみましたが、初心者向けじゃなかったです。
全体の工程とかを大まかに説明していますが、一個一個のNodeの使用方法とかは全く説明してなかったです。
はあ。
これは中止します。
6.4 Houdini is HIP - Part 15: Sparkling Water Project [10]の<09:23 Collider Geo Setup>の続きを勉強する
仕方ないです。こっちの続きを勉強します。
VDB from PolygonノードのDistanceVDBをOffにして
![]()
FogVDBをEnableします。

そして以下のWindowを開き

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

結果です。

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

結果です。

ここで<09:23 Collider Geo Setup>が終わっていました。
じゃ、今週のHoudiniの勉強もここで終わりにします。
7. AIについての調査(ComfyUIの勉強)
この日は時間が取れなかったので無しです。
8. DirectX12の勉強
3D Graphicsを作成するのにOpenGLを使ってるとバカにされるからDirectX12の使い方も勉強しようとしたら、Windows 8ではDirectX12が使用出来なくてずっと勉強を我慢していました。
で新しいPCを買ってやっとDirectX12を勉強できる環境になったら、もうDirectX12を勉強する人がいなくなっちゃってたんです。
のでこれも出来たら何したいというのは無いですね。
ああ、昔MMDを自分で作りたいというのはありました。それを目的にします。
8.1 「DirectX 12の魔導書」を勉強する
8.1.1 先週の復習
「6.1 行列の基本」を勉強しています。
「6.1.1 座標交換操作の順番」では、一般的な行列の計算方法の解説をしています。
これは当たり前すぎる内容なのでここにはまとめません。
その後で、DirectXの特殊な行列の計算方法をまとめています。
ここで最初、ChatGPT5.2に質問したら以下に示した様に間違った回答が返って来ました。

まずx*1+y*0+1*3は、x+3で4ではありません。
更に、x*0+y*1+1*4もy+1で6ではありません。
今なら、すらすらと正しい答えを言えますが、先週はまだDirectXにおける行列の計算方法を知らなかったので、なんとなく間違ってない。と思って
そこでGemini3にも質問してみたらこっちは正しい回答を返してきました。
以下にそれを示します。

やっぱりGemini3の方がChatGPT5.2より凄いとなりました。
後、DirectXと通常の行列の計算では以下に示した様に

計算の順番が違うそうです。
これは実際に試して確認しないとあんまりピンと来ません。
「6.1.2 XMATRIX構造体」では、XMATRIX構造体について勉強しました。
ただしBlogにまとめてあるのは、
XMMatrixRotationY(XM_1DIV2PI)*XMMatrixTranslation(1,2,3)
という実装の
XM_1DIV2PIと1,2,3の意味についてです。
まずM_1DIV2PIの意味です。

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

以上です。
「6.1 行列の基本」には実装する内容は無いので、今週は次の節を勉強します。
8.1.2 「6.2 定数BufferとShaderからの利用」を読む
CPU側で生成した行列も、GPU側に送って使用します。
その方法ですが、教科書には以下の手順で送ると書いてありました。
- 定数Bufferを作る
- 定数Bufferの中身をMapで書き換える
- 定数Buffer ViewをDescriptor Heapに追加する
- Roof Signatureに定数Buffer参照用のRange設定を追加する
- Shaderから利用する
Heapに追加する。ではUpload HeapかDefault Heapなのかは書いて無いですね。
では、「6.2 定数BufferとShaderからの利用」のSub節を勉強していきます。
8.1.3 「6.2.1 定数Bufferの作成」を読む
Bufferの作成方法はVertex Bufferの時と同じだそうです。
Mapで中身を書き換える必要があるので、D3D12_HEAP_TYPE_UPLOADを使用するそうです。
Upload Heapを使用するのか。
後で、Default Heapに移すんでしょうか?
Bufferの作成は、CreateCommittedResource()関数を使用するそうです。
今までのやり方と同じです。
ここからは前節で使用したD3dx12.hをどんどん使用して実装していくそうです。
去年、D3dx12.hを使用出来る様にしておいて良かった!
そしてCreateCommittedResource()関数の実装が載っていました。
教科書とほぼ同じ実装がSample Codeにあったのでそれを以下に載せておきます。

あれ、Errorになってる。

D3dx12.hがErrorになってる。
これは来週直します。
教科書では以下のような表示になっていて
![]()
赤い部分に
「必要なバイト数を256アライメントしたBite数」
と書いてありました。
教科書では、DirectX12では
「定数BufferのAlignmentは256Biteでなければならない。」
と書かれていました。
これも前節でTextureの値をCopyTextureRegion()関数を使用してGPU側に送った時のRowPitchの設定と同じです。
DirectX12ではそういうものとして作成されているんでしょう。
この部分の実装はSample Codeには残っていませんでした。
一応、
手書きで書き残しておきます。
XMMATRIX matrix = XMMATRXIdentity();
で
matrixを生成して
Bufferに
(sizeof(matrix)+0xff) & ~0xff)
となっていました。
この
~
という記号は初めて使用します。
教科書には、この部分の計算の意味が説明されていました。
Size ÷ (256 – size % 256)
という意味だそうです。
これだと、どんな数字を入れても、256の倍数になるそうです。
で肝心の以下の実装の
(size+0xff) & ~0xff)
ですが、
まず
0xff
は32Bitsの最後の8桁だけが1になってる事を示してるそうです。
0000 0000 0000 0000 0000 0000 1111 1111
という事ですね。
で
~0xff
ですが、0xffの反転の意味だそうです。つまり
1111 1111 1111 1111 1111 1111 0000 0000
という意味だそうです。
(size+0xff)は、この値と&をしてるので、
下8桁は
???? ???? ???? ???? ???? ???? 0000 0000
必ず0になります。
だから256の倍数になる訳です。
うーん。
教科書の言ってる意味は理解しました。
ただ本当にこの計算でかならず必要とされる最低限のMemory数に最も近くて、更に必要とされる最低限のMemory数より大きな数になるのかは不明です。
最後の8桁を無条件に0にしたら、必要とされる最低限のMemory数より小さくなる事だってありそうです。
合ってるのか、一寸心配です。
ここで時間が無くなってしまいました。
続きは来週やります。
この計算方法については、来週Gemini3かChatGPTに質問して確認する事にします。
8.2 Lötwig Fusel氏のD3D12 Beginners Tutorial [D3D12Ez]を勉強する
8.2.1 前回の復習
Writing Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [12]の続きを勉強していました。
前々回作成したHLSLのDefaultの実装を書き換えていました。
重要な内容だけ以下に示します。
TutorialではSV_TARGETをSV_Targetに書き換えていたんですが、ChatGPTの回答によると、HLSLのSemanticsは大文字と小文字は区別しないそうです。
Return ValueがSV_Targetの場合、Float2,3そして4のどれかになる必要があるそうです。
このTutorialではFloat4を使用していました。
これは以下のDXGI_SWAP_CHAIN_DESC1のFormatで指定してるからだそうです。

ここでSwap Chainが出て来ましたが、Swap Chainが何をしてるのかを忘れてしまったので、Swap Chainの復習をしました。
Swap Chainは画面の切り替え(Double Buffering)を行うためのものでした。
後、最後に

と書いているんですが、ここで?となりました。
今まで、SV_Targetを直していたのVertex Shaderだったはずです。
一寸、Tutorialを見直してみます。
見直してる途中で、2025-12-14のBlogを見たんですが、なんとそこに

って書いてありました。
これってどっちが正しいでしょう?
もしかしたらSVの付くSemanticは大文字小文字の区別がつかないのかもしれません。
Tutorialを見直してたら、14:33頃からPixel Shaderをしっかり作成していました。
この辺の勉強を先週のBlogはまるまる抜かしています。
これは勉強をやり直す必要がありますね。
8.2.2 Writing Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [12]の続きを実装する
取りあえず、Vertex Shaderの実装の部分だけやってしまいます。

あれ?出来てる。
どこまで実装したんだっけ。
2025-12-21のBlogを見直したら、そこでここまでしっかり実装してました。
その前のBlogで勉強したのか。
確認します。
2025-12-14のBlogを見ます。
うーん。色々勉強していますが、Writing Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [12]に関しては最初の10分を勉強した。と書いてありました。
Tutorialを見ながら確認していくと、13:32までは勉強しています。
その後の、ShaderをCompileするModelの確認とかはやっていません。
この辺の勉強が先週の勉強でまるまる抜けてしまったようです。
8.2.3 来週の予定
かなりゴチャゴチャになってしまいました。
しかし今週はもう時間が無いので、これ以上は勉強出来ません。
ので来週、効率的に勉強出来るように以下に整理しておきます。
まず、先週勉強したところですが、その前に実装したところから少しだけ飛ばして勉強を始めてしまっています。ので今回、先週勉強した範囲を実装する事が出来なくなってしまいました。
本来、先週勉強すべき最初の部分は、Writing Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [12]の13:32からでした。
来週はここから勉強して先週勉強した部分との空白を埋める事にします。
そしてその後で、実装をします。
もう一つ、問題があります。それは2025-12-14のBlogを見ると
Copilotが

と答えています。
これは先週のBlogのまとめにある

と矛盾します。こっちはChatGPTとGeminiの回答です。
これもどっちが正しいのか来週確認します。
以上です。
9. まとめと感想
なし。
10. 参照(Reference)
[1] Procedural Minds. (2024, August 25). Do you want to remove just one side of your building? | UE 5.4 p4 [Video]. YouTube. https://www.youtube.com/watch?v=ngizgkYM2Ac
[2] Epic Games. (n.d.). Control Rig in Unreal Engine, from https://dev.epicgames.com/documentation/en-us/unreal-engine/control-rig-in-unreal-engine
[3] Howard, J. (Instructor). (n.d.). Practical Deep Learning for Coders [Video playlist]. YouTube. https://www.youtube.com/playlist?list=PLfYUBJiXbdtSvpQjSnJJ_PmDQB_VyT5iU
[4] Howard, J. (Instructor). (n.d.). How random forests really work – Part 6 [Video]. YouTube. https://www.youtube.com/watch?v=AdhG64NF76E
[5] Howard, J. (2022, July 21). Lesson 4: Practical Deep Learning for Coders 2022 [Video]. YouTube. https://www.youtube.com/watch?v=toUgBQv1BT8
[6] Howard, J. (Instructor). (2022, May 16). Getting started with NLP for absolute beginners. Kaggle. https://www.kaggle.com/code/jhoward/getting-started-with-nlp-for-absolute-beginners
[7] Nvidia. (n.d.). Isaac Lab Documentation. Retrieved from https://isaac-sim.github.io/IsaacLab/main/index.html
[8] Isaac Lab Project Developers. (n.d.). Exploring the RL problem. In Isaac Lab documentation. https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/training_jetbot_reward_exploration.html
[9] Isaac Lab Project Developers. (n.d.). Environment Design. Retrieved from https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/technical_env_design.html
[10] Nine Between. (2023, November 29). Houdini is HIP - Part 15: Sparkling Water Project [Video]. YouTube. https://www.youtube.com/watch?v=Xs2tHiVFKF0
[11] flyz. (2024, How to create a River with Houdini [Video]. YouTube. https://www.youtube.com/watch?v=ik3TWjGz3Ds
[12] Lötwig Fusel. (2023, August 6). Writing Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [Video]. YouTube. https://www.youtube.com/watch?v=8MMRz9QMJI8
































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































