
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を作成する事にしました。
Gaea2を使用して以下のTerrainを作成しました。

Heightmapと色の追加に使用したMaskとSatmapのImageも追加でExportしました。

今週はこれを使用してUE5に神社用のLandscapeを作成します。
しました。

Sizeは適当です。

本当はMaskを使用してLandscape用のMaterialを自作する予定だったんですが、
最初は

MW Landscape Auto Materialで代用しておきます。
これの使用方法を忘れてしまったのでYouTubeの自分の動画で作成方法を確認しました。

なんと株式会社KAZUHIROで検索しても検索に出て来ません。
株式会社KAZUHIRO+Gaea2で検索してやっと出て来ます。
ショック。
以下のような地形を作成しました。

Gameを実行すると以下の様になりました。

凄い。
これで十分でしょう。
谷底です。

山頂付近です。

大きさを見ると大体3kmのようです。

無難に以下の場所に神社を建設する事にしました。

大体100m^2の大きさの瑞垣を追加してみました。

横から見るとこんな感じです。

まずLandscapeを平にする事から始める必要がありますね。
確か建物を置くとその周りのLandscapeを自動で平にしてくれるPluginが有ったはずです。
それから調べます。
2.1.2 Landscapeを建物の大きさに合わせて平にするPluginを調べる
Pluginの名前が分かりません。
こういう時はAIに聞いてしまいましょう。

ChatGPTに質問したら一発で答えが返って来ました。
Blogを検索したら2024-09-15のBlogに以下の様にまとめてありました。

あってますね。
ただし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>の実装を完成しました。
しかし結果が以下の様になってしまいました。

本来ならPointが床に表示されるんですが、されてません。
で先週はこのBugを直して

Pointが表示されるように直しました。
でBugを直していてこの事に気が付いたんですね。

ので今週は先週、Bugを直した部分の実装が実際に何をやっているのか復習します。
2.2.2 Create Procedural Interiors With Full Room Separation | UE 5.4 P5 [1]の<15:15 - Set Density on Room Center Points>の実装を理解する
今週は以下の実装でそれぞれのNodeが何をやってるのかを理解します。

まず最初の実装の部分です。

Get Spline DataノードはこのPCGをSetしてるBPにあるSplineを取得します。
次のSpline SamplerノードがこのNodeの設定に従ってSpline内にPointを生成します。

こんな感じです。
まずこのNodeの機能を勉強しますか。
このNodeのDimensionの値をOn SplineからOn Interiorに変更したんですが

この意味が分かりません。
ChatGPTに聞いてしまいましょう。

もうこれだけでした。
線として扱う場合はOn Spline、面として扱う場合はOn interiorだそうです。
次に以下のInterior Sample Spacingについての質問です。

ChatGPTに以下の質問をしました。

大体100cmになるようにPointを生成するのか。
更に詳しく説明してくれてます。

要は平均したら100cmになるって事です。
その理由ですが、

だからだそうです。
良し、この部分の実装は理解出来ました。
次行きます。

そもそもFloor LoopとかRoom SizesのNodeがどこから来てるのかが分かりません。
それから調べます。
なんとFloor Loopは

Named Rerouteで以下の場所で設定されてました。

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

あれ、思ってるよりかなり複雑です。
まず以下の部分の実装を見ていきます。

Floorの数から1を引いた数をWall Heightにかけてます。これは最上階の床の高さを示してると思われます。
一階の床のPointと最上階の床のPointをMergeしています。
試しにMerge Pointsノードを可視化したら以下の様になっていました。

次のCreate Splineノードです。

可視化すると以下のようなSplineを生成していました。

先程生成した2つのPointを繋ぐSplineを生成したようです。
一応、このNodeの機能もChatGPTで確認しておきます。

あれ?
Create Splineノードの機能は2つのPointからSplineを生成するだけじゃないみたいです。

順序付きの制御点でSplineを作成するのか。
でもどんな順番で?

うーん。
Point毎にIndexがあるみたいですね。その順番でSplineを生成していくようです。
次です。

Num SamplesにはFloorの値がPassされてます。
可視化すると

となっていました。
それぞれの階の床の位置にPointが生成されています。
こっちのSpline SamplerのDimensionはOn Splineになっていました。

この後の実装が何をしてるのか分かりませんね。

ChatGPTに解説してもらいましょう。

では解説してもらいます。

ああ、そう言えばそんな事をTutorialが言ってた記憶があります。
Spline上のPointは全部同じMeshしか載せられないのを、それぞれのPointで別々なMeshを追加するために、ある事をやる必要がある。みたいな話だったと思います。
それをここでやっていたのか。

Spline Samplerノード上では全てのPointは同じSetに存在してるそうです。
つまり全部のPointに一個のMeshしか対応できないという事です。

それをAttribute Partitionノードが一個しかないPointのSetを分割します。
今回は$indexによって分割します。
これが分かりにくい。
以下にPoint SamplerノードのDataを示しますが

それぞれのPointが別なIndexを持っています。
となると$Indexで分割したらPoint一個毎に分割されてしまうじゃないですか。
どういう事なの?
と思ったらこれもChatGPTが具体的に例で説明してくれてました。

つまり前の解釈であってたんです。
そして次のGet Attribute From Point Indexノードの機能についての説明です。

これは先にまとめを書いてしまいます。
Attribute Partitionノードが分割したそれぞれのPointのData(Attribute)が取得出来ない状態になってしまってるそうです。
それを回復するためにこのNodeがあるそうです。
このNodeを繋げるとAttribute Partitionノードで分割されたそれぞれのPointのAttributeの値が再び読めるようになるそうです。
実際のDataで確認してみましょう。
Attribute PartitionノードのDataを見てみます。


あれ?
普通にあります。
Get Attribute From Point IndexノードのDataも見てみます。


こっちの方がDataが無くなってるじゃん。
間違えて理解してる?
もう一回ChatGPTの回答を読み直します。


うーん。
やっぱりそう説明しています。
これって

が返すのはPointです。
しかしAttributeで返してほしいです。
それを

がしてる気がします。
つまりGet Attribute From Point Indexノードの本当の機能は、PointのIndexからそのPointが属してるAttributeを返す事じゃないでしょうか?
これが正解でしょう。
今回はChatGPTに勝ったな!
うーん。
今週はここまでですね。
続きのRoom Sizesの実装については来週からやる事にします。

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]を勉強する事にしました。
2.3.1 前回の復習
Unreal Engine - How To Edit Animations Non-Destructively with Control Rig [3]を実装しました。
結果です。

首をかしげながら歩くAnimationが完成しました。
これだけでもかなり有用な方法です。
そして最後に

と書いて終わっていました。
2.3.2 足のAnimationを変更する方法を考える
首のAnimationは元のAnimationとは混じっていません。
しかし今度の足のAnimationは元のAnimationの形状を大幅に変更します。
それでも上手く出来るのかどうかを確認するのが今回の足のAnimationを変更するTestをする目的です。
足のAnimationを追加する方法ですが、

ここで首を回転させるAnimationの代わりに足の動きを変えるAnimationを追加すれば良いだけです。
2.3.3 足のAnimationを変更する方法を試す
それでは実際に試してみます。
先週のBlogを読むと以下のProjectで実装していたので

同じProjectを使用してTestします。
起動させました。

今のAnimationでは普通に歩いています。
以下に示した様に足元にCubeを配置すると

そのCubeを貫いて歩いています。
これをCubeの上に足を置くようなAnimationに変更します。
まず今のAnimationをControl RigにBakeします。

を選択しました。

Animationを消します。

この状態で再生すると

先程のAnimationが再生されました。

Control Rigの+を押してAdditiveを選択します。

Control Rigに新しいLayerが追加されました。
ここにAnimationを追加します。

ここに来て大問題です。
Control Rigが表示されていません。
AIに聞いてみます。
結論から書くと出来ました。

Viewportの右上に目のiconが有りました。

これがずっと見つからなかったんですが、ありました。
このIconをClickして

Viewport Statsを選択しRigと打つとControl Rigが表示されます。
これを選択します。
この状態で、Level SequenceのControl Rigを選択すると

Control Rigが表示されました。
ChatGPTとGeminiの両方に聞いたんですが、両方とも正解の回答を返していました。
ただChatGPTの説明では目のIconを見つける事が出来ませんでした。
Geminiの説明で見つける事が出来ました。
しかしその後、Level Sequence上のControl RigのLayerを選択するとControl Rigが表示されるというのはChatGPTだけが回答していました。
うーん。
甲乙つけがたしです。
Control Rigを利用して以下のAnimationを追加しました。

最初の時は足がCubeの上に乗ります。

2回目の時はCubeを貫いて歩きます。

再生して確認します。
普通に出来てました。
正面から確認しましたが出来てます。

一回目の時はCubeに足を乗せて

2回目の時はCubeを貫いて歩いています。
作成したAnimationをAnimation SequenceとしてBakeします。

Bake Animation Sequenceを選択してBakeしました。
名前はWalk_forward_headturn_RightLegUpにしました。
Control Rigを消しました。

AnimationからBakeで新しく作成したAnimationを追加します。

確認します。

完璧です。
出来ました。
2.3.4 DragonのWalkingのanimationを調整するには
これでControl Rigがあれば複雑なAnimationの微調整を簡単に出来る事が判明しました。
問題はDragonのSkeletal MeshにControl Rigが無い事です。
Control Rigを作成する方法を勉強する必要があります。
ChatGPTに質問したら
以下のSiteを紹介してくれました。

https://www.youtube.com/watch?v=yj3DkIdA3LE
このSiteは来週勉強する事にします。
以下のAssetもあるそうです。

確認したら有料のAssetでした。
やっぱりControl Rigの基本を勉強する必要があります。

以下の方法で勉強したらどうですか?と言っていました。

今までControl Rigの何を勉強したのかの復習も必要ですね。
今週はこんなもんで十分でしょう。
ここまでにします。
3. AIの勉強
AIの勉強の目的ですが、
生成AIが凄いTrendになってるので、最低限の基礎は知っておくべきと思いこの勉強を始めたんでした。
のでこれを勉強してどうしたいというのは無いです。
今週からCursor AIの勉強もする事にします。Vibe Codingというか、AIによるCodingを知っておく必要がありますので。
3.1 Cursor AIの勉強
これはもうAntigravityの勉強と統合します。
ここで中止とします。
3.2 Practical Deep Learning for Coders 2022 [4]の勉強をする
3.2.1 前回の復習
前回の復習を行うには前々回の復習からやる必要があります。
まずLecture3の今まで勉強した部分のまとめです。

実際の深層学習ではax^2+bx+cの計算の代わりに以下のNodeの計算結果をそのまま使用します。

それぞれのNodeがmx+bという計算を司っています。
そしてその計算結果に
![]()
を行うと

のようなどんな複雑な形状も再現出来るようになります。
ここまでが前々回の復習です。
しかしこの解釈だと順伝播の時にReLu関数を使用する事になります。今までのAIの説明だとReLu関数は逆伝播の時に使用するって言っています。
やっぱりLecture3の残りを復習する事で、実際のDeep Learningでどんな計算をしてるのかを確認する必要が有ります。
ここからLecture 3の残りを復習する事になります。しかし実際のDeep Learningの計算をする節の前に5つ位、復習してない節があります。
その部分を勉強した2025-04-20のBlogを読み直すと結構勘違いして間違って理解してるところがあるのでその前回はその
Deep Learningの計算をする節の前の節をしっかり勉強し直す事にしました。
3.2.2 Lesson 3: Practical Deep Learning for Coders 2022[5]の続きを復習する
<Build a regression model in spreadsheet>
2025-04-20のBlogを読み直すとNotebookLMのMind mapを利用して勉強していました。
これ今考えると滅茶苦茶分かりにくいです。
のでこの部分はLectureからもう一回まとめる事にします。
Excelを開いて以下のDataを表示しました。

このDataは以下のSiteからDownloadしました。

この後、DownloadしたDataを少しだけ整理してる話が続きます。
この部分は重要でないのでSkipします。
今度は数字ではない要素、例えば以下に示したSexを数字に変換します。

ここでこれらの数字でない要素に掛け算する事は出来ないから。と言っていました。
やっぱしここはmx+bのxがそれぞれのCellの値になるんでしょうか?

ここでそれぞれのParameterに対してRandomな数字を作成しました。
これはmx+bのmのDefault値なんでしょうか?
今度は以下の2つParameterの値を比較して

値が全然違う事を述べています。
正規化するのかな?

Logしていました。
この理由は前に勉強した時にまとめてあるのでここでは述べません。
正規化するよりLogする方が全体のバランスを綺麗に表せる場合はLogするとだけここには書いておきます。
そして以下の値と

以下の値を

それぞれ掛けて、その結果を全部足していました。
うーん。
これじゃmxだけじゃない?
そしたら以下に示したOnesを追加してる事を解説していました。

うーん。
もしかしたらこれがbになるのか。
いやbの合計値になるのか。
そんな気がします。
結果です。

この結果からLoss関数も計算出来ます。

その結果です。
更にTotal Lossも計算していました。

で、Solverを使用してこのTotal Lossの値が最小になるように

以下の値を変化させるようにしました。

あ、成程。
これでmとbの最適解を決定するのか。
結果です。

おお、一応、

と同じ計算をやりましたね。
でもこの計算はReLu関数はまだ使用していません。
更にLectureの説明では、これはまだRegressionでNeural Networkではないそうです。
<Build a neuralnet by adding two regression models>
何で?
そしてNeural Networkにするために同じ事をもう一回繰り返します。

うーん。
これはNeural NetworkじゃなくてDeep Learningではない。と言いたかったんじゃないでしょうか?
2回繰り返す事で一応、Layerの数が2になります。

2つ目のLayerも同じ様に計算しました。

この結果に対してReLu関数で値を調整しました。

え。
この結果に対してするの?
それぞれのMx+bに対してするのかと思っていました。
うーん。
これで複雑な形状も近似出来る式が生成できるとは思えません。
まあ、このLectureの例はそこまで厳密ではないのかもしれません。
この2つの結果を足します。

予測値が出ました。
予測値と結果からLoss関数を計算します。

そしてTotal Lossを計算しました。

Solverを使用してTotal Lossの値が最小値になるように
以下の値を調整します。

結果です。


うーん。
これで完成か。
Lectureではこの後、Matrix Multiplicationを使用する方法を説明しています。
今週はここまでで十分でしょう。
3.2.3 Lesson 3: Practical Deep Learning for Coders 2022[5]の続きを復習した感想
前よりは何をやってるのかはっきり理解出来ましたが、まだTitanicのそれぞれのDataの計算と以下のLayerとNodeの関係が分かりません。

例えば今回運賃というDataをInputしましたが、この運賃はInput LayerのNodeの一つに対応するんでしょうか?
それともHidden LayerのNodeに対応するのかな?
するとそのNodeでmx+bの計算をしてそのnode特有のmとbの値が出て来るはずです。

一応、mの値は出て来るのか。
という事はやっぱりHidden LayerのNodeに対応してるのかな。
後、ReLu関数はやっぱりmx+bの計算結果に使用していましたね。

とならないんでしょうか?
うーん。
まだよく分からない部分が沢山ありますね。
でも今回の勉強の目的は達成出来ましたので、今週のAIの勉強はここまでにします。
4. Nvidia Omniverseの勉強
Robotic AIの仮想空間におけるTrainingのための環境設定こそがこれからの3D Graphicsの専門家が生きる場所であると思っています。
のでその仮想空間でRobotic AIがどんなTrainingを行っているかをまず勉強する事にしました。
色々調べると、その部分はNvidiaのOmniverseの中のIsaac Simが担当している事が判明しました。
のでその辺りを勉強します。
2025年9月からIsaac Lab Documentation [6]の勉強に切り替えました。
4.1 前回の復習
Training the Jetbot: Ground Truth [7]の続きを勉強していました。
以下の図が何を説明してるのかがよく分からないと書いて居てましたが、

結論としては、
Commandは-piからpiの範囲で定義しないと、Quadrant 2とQuadrant 4の値が同じになってしまいますよ。と前の文章の説明の補足をしてるだけ。
となりました。
これは多分あってるでしょう。
そして何故、何回もこの話をするのかとChatGPTに怒った時のChatGPTの回答です。

こういう事に気をつけないでミスをする場合が非常に多いそうです。
これは勉強になりました。
その後は、Makerを視覚化するための以下の実装

のそれぞれのCodeの意味を勉強しました。
重要な箇所だけ以下にまとめます。
Vstack()関数の意味で


が出て来ます。
ここで

の意味を説明しています。
これが以外に難しいのでここでも説明をまとめておきます。
まずnum_envsの意味ですが、並列で動かす環境の数を表しています。

この例では64になっています。
次の3はそれぞれの配列の要素が3である事を示しています。
そして

ですが、

のような計算結果になります。
これが難しいのは私がVectorとTensorの区別がついてないからです。
ここは今調べて確認します。
Gemini3に以下の質問をしました。

回答です。

PyTorchにおけるTensorの定義があるんですね。
そしてPyTorchでは全ての数字をTensorと言う型の箱に入れて扱うのか。
だから全部Tensorになるのか。

こういう風にDataのShapeを表すと全部、Tensorとして扱われるのか。
具体的な例の説明もありました。

は、
![]()
となります。

の場合は
![]()
となります。
最後に回答のまとめです。

これは今、復習した内容の更なる補足ですね。
一つだけ分からないのは、3次元 テンソル (Tensor) [N, x, y]の場合はどのように表記かです。
これもGemini3に聞いてしまいます。

回答です。

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

ああ、理解しました。
こうやって表示するのか。
要は[]で覆っていけば良いんですね。
最後に分かり易く本棚に例えて説明してくれました。

もう理解しました。
この後、以下の実装の機能を勉強していて

ChatGPTの説明で
Loc、Rots、そしてMarker_indicesの値を以下の様に定義したんですが、

間違って解釈して、ChatGPTに直されていました。
今はTensorの定義を理解したので正しく説明出来ます。
Indicesの意味は分かりませんね。
先週のBlogを読み直しても説明していません。
先週質問したChatGPTの回答を見つけて来ました。

だそうです。
Forward MakerのVectorは0、Command MakerのVectorは1で表示するという事です。
これで前回勉強した内容を全部復習しました。
4.2 Training the Jetbot: Ground Truth [7]の続きを勉強する


これは前回勉強した以下の実装の解説です。
![]()
次の文です。

これは短いのでそのまま訳さないで載せておきます。
続きの実装です。

まずParameterのActions: Torch.Tensorの意味が分かりません。
―>NoneはReturn Valueが無いと言う意味でしょう。これは分かります。
次のSelf.actions = action.clone()
ではParameterに指定したActionの値が入るんでしょうか?
最後のSelf._visualize_markers()は先程復習した関数です。
まず

からです。
ChatGPTに質問したら完璧に回答してくれました。
以下にその内容をまとめます。
これはParameter名はActionsです。そしてそのActionsの型がtorch.Tensorが想定されますよ。という意味です。
次のCodeですが、

Self.actionsはParameterのactionsとは違う変数です。
そしてParameterのactionsの値を別な場所で使用出来るようにSelf.actionsに保持しているそうです。
そしてCloneを使用しないと単にParameterのactionsのaddressだけを保持してしまい、ParameterのActionsの値が途中で変更した場合、その変更した値を参照してしまうから、Clone()関数で別なAddressにこのParameterの今のactionsの値を保持させ、それを参照するようにしてるそうです。
やっと理解出来た。
次の文です。


そして以下の実装が紹介されていました。

Codeを読んでいきます。
まず以下の部分の意味が分かりません。

ChatGPTの回答です。

はい。
そして
Sequence[int]の意味も教えてくれました。

だそうです。
# pick new commands for reset envs
の解説です。

2行目の-1の意味が分かりません。

だそうです。
この後、Normの計算方法とかをChatGPTにかなり詳しく質問したんですが、それはあまりに細かい話になるのでここではSkipします。

あれ?これって前にやった内容ですよね。
ここはSkipします。

だそうです。
ここは特に疑問は無いです。
そして

しています。
以上でした。
最後の結果です。

なんか途中で集中力が切れてしまいました。
今週はここまでにします。
Training the Jetbot: Ground Truth [7]を勉強した感想は来週書く事にします。
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 [8]の<05:37 Fluid Sourcing>を勉強しました。
先週のBlogを見たら、風邪引いたかもしれないと書いてあります。
今週は、咳が止まりません。こうなると薬飲んでも全然直らないで、静かにしてるしかないんですが、忙しすぎて休めません。
ああ、どうしたら良いんでしょうか?
6.2 Houdini is HIP - Part 15: Sparkling Water Project [8]の<05:37 Fluid Sourcing>を実装する
それでは先週勉強した内容を実装していきます。
Obj Layerに戻り、新しいGeometryノードを追加します。

この中に入ります。
まずSphereノードを配置しました。

SphereノードはPolygonとPrimitiveがあります。
多分ですが、このSphereはPointを生成するために使用するだけなのでどっちでも良いと思います。
Polygonの方を使用しました。
SphereノードのUniform Scaleの値を0.1に変更しました。

結果です。

凄い小っちゃいです。
更に0.04に変更しました。

位置を以下の場所に変更しました。

Frameの位置を45に変更します。

Uniform Scaleを選択して

Altを押します。
Tutorialではこれで、以下に示した様なBarが

追加されるとありますが、
されません。

Uniform Scaleを右Clickしたら以下のBoxが表示されました。

これを見るとKeyframeを追加するには、Alt+LMBになっています。
試してみます。

お、出来ました。
でもUniform Scaleの値がbezier()になってしまいました。

これあってるんでしょうか?
ChatGPTに聞いてみます。

回答です。

Bezier()と表示されるのは正しいみたいです。

あってるって、合ってると言う漢字であってましたっけ。
前に調べた時は、正しいと言う意味で使用する時は平仮名で書く必要がある。のが正解だった気がします。
でもChatGPTの回答は自然に見えますね。
合ってるでも良いのかもしれません。
ここから重要な情報をChatGPTが教えてくれました。

これも重要な情報ですが、
この次です。

これ試してみたら出来ました。
MMBでUniform Scaleをクリックすると

現在の数字が表示されます。
一応、ChatGPTの回答の2と3も以下に示しておきます。

ベジェ曲線がどんな曲線なのか不明ですが、そういうものとして理解しておきます。

これは強引すぎる解釈でしょう。
でも一応、論理は通ってますのでこれも載せておく事にしました。
今度はFrameの位置を54に移動させます。

Uniform Scaleの値を0にして

Frameをセットしました。

これ最初は出来なくて、なんか色々弄ってたら突然出来ました。
合ってるのかな?
Frameの45から54を移動させるとSphereノードが表示されたり消えたりします。
一応出来てるようです。

でも緑のKey Frameが消えてしまいました。

Sphere Nodeをもう一回選択してみました。

表示されました。
今度はFLIP DOP Sourceノードを追加します。

FLIP DOP SourceノードのParticle Separationの値を0.004に変更します。

しました。
先週のBlogに重要な事が書いてありました。

10分の1が丁度いいのか。
更にVelocityの値も変更しました。

私の結果ですが以下の様になっています。

なんか違いますね。
一寸Tutorialを見て確認します。
Voxel Sizeも0.004にセットしていました。

直します。
今度は以下の様になりました。

うーん。
分からん。
取りあえずこれはOKと言う事にして先に進みます。
以下のIconをEnableしてVelocityを可視化します。

結果です。

あれ?
Sphereの位置が逆だった。
いや、TutorialのSphereのVelocityの向きもCupと逆向きでした。

最後にNULLノードを追加して

名前をFLIP_SOURCEに変更して終わっていました。
短いですが、咳が止まらないのでここで終わりにします。
休む事も必要です。
7. AIについての調査(ComfyUIの勉強)
今週は特別にGoogleのAIについての調査をします。
最近GoogleはGemini3やTPUで快進撃を続けていますが、これがどういう事なのかを客観的にまとめられるように調査します。
7.1 Googleの逆襲
GoogleはAI革命で3つの戦いを主に行っています。
それはTPU vs GPU、Gemini vs ChatGPT、そしてYouTube vs TikTokです。
YouTube vs TikTokに関しては異論がある人もあると思いますが、
実は、どの動画をどの人にRecommendするかなんかはもろにAIが担当するところで、
その結果YouTubeを見る時間が多くなるかTikTokを見る時間が多くなるか変わってくる訳で
これもAI革命の主戦場の一つなんです。
<TPU vs GPU>
私が前から予測してた通り、METAがTPU用のPyTorch、TorchTPUを発表しました。
これを踏まえてAI開発におけるTPUとGPUの長所、短所をまとめます。
まず結論から言うと
研究ではGPU、最適な状態が分かった上でScale upして大規模に試すときはTPUが有利。
となります。
ただしScale upする時にGPUからTPUに移るととんでもなく手間がかかる(無限のBug地獄)が有るとも聞きました。
そしてTorchTPUは研究において今まではGPU一択しかなかったのが、TPUの選択も視野に入れる事が出来る。となりました。
つまり選択肢の幅が広がった。という事です。
TPUの最大の問題は生産出来る会社です。今、最新のAI用のChipを生産出来るのは台湾のTSMCだけです。それに準じてSamsungとIntelが来ています。
Intelは無理でしょう。となるとSamsungが担当する事になると思われますが出来るんでしょうか?
一説によるとTPUのChipの値段はGPUの70%以下だそうです。
そんなんでSamsung持つんですかね。
実際にTPUがGPUの対抗馬として公開されたら、ボロクソに叩かれそう。
<Gemini vs ChatGPT>
無料版同士を比較するとGemni3は三回位しか質問出来ないし、回答が遅い。
ChatGPTの方が沢山使えるし、会話してて楽しいです。
ただ回答の精度とかはGemini3の方が僅かに上のような気がします。
これを踏まえて考察するとGoogleはChatGPTに負けます。
Gemini3はPokémon GOと同じです。
あんなに流行っていたのに、今やってる人全くいません。
GoogleはUserの気持ちを理解するのが非常に苦手なんです。
無料版のUserが三回位しか質問出来なかったらUserは根付かないですよ。私も最初はGemini3の高精度な回答に感服してChatGPTから切り替えましたが、もう今はChatGPTに戻ってしまいました。
私のChannelをShadow Banして潰したYouTubeが勝つわけ無いでしょう。
TikTokは中国系のChannelという事で今は避けられていますが、Oracleが買収した後は米国企業になります。信用度は爆上げします。
よほどOracleがへましない限り、TikTokがShareを奪うでしょうね。
YouTubeは今からでも私のChannelのShadow Banを外した方が良いですよ。
そして広告収入という現在のBusiness Modelが立ち行かなくなります。
OpenAIは、Agentic AIのServiceを通じて商品を購入して貰ったらその商品の数%を手数料として集めるという、新しいBusiness Modelを考えています。
こっちなら企業は無駄なお金を払う必要は無くなります。
Start up企業などのまだ収入が無い企業にとっては非常に有難いモデルです。
それに対して広告は儲かってる企業が払う税金を減らす分には、都合が良いですが、今のご時世そんな企業はほとんど無いでしょう。
ので、今Googleには安定してるBusinessがあるからOpenAIやOracleとは違う。という意見って本当に今しか見てないです。
勿論、YouTubeが広告を出す企業に特別な忖度をして、その企業に対しての批判的な動画をバンバン、Shadow Banするとかしてるなら別ですが、
そうでない限り広告を出すMeritはほとんどの企業にはなくなるんじゃないでしょうか?
そしてもしYouTubeが広告を出す企業に特別な忖度をしたら
その動画は物凄くつまらなくなってTVの二の舞になるでしょうね。
<まとめ>
これらを考慮すると、やっぱり今のGoogleのTPU、Gemini3の快進撃がこれからもずっと続くとは思えません。
Pokémon GOのように一時を境にして急速に廃れて、OpenAI、そしてNvidiaのGPUに戻っていくと思われます。
8. DirectX12の勉強
3D Graphicsを作成するのにOpenGLを使ってるとバカにされるからDirectX12の使い方も勉強しようとしたら、Windows 8ではDirectX12が使用出来なくてずっと勉強を我慢していました。
で新しいPCを買ってやっとDirectX12を勉強できる環境になったら、もうDirectX12を勉強する人がいなくなっちゃってたんです。
のでこれも出来たら何したいというのは無いですね。
ああ、昔MMDを自分で作りたいというのはありました。それを目的にします。
8.1 Lötwig Fusel氏のD3D12 Beginners Tutorial [D3D12Ez]を勉強する
8.1.1 前回の復習
前回の勉強では主に2つの事をしてます。
一つ目は、
HLSLではSemanticsによってDataが管理されている。
事についてもう少しだけ深堀して勉強しました。
もう一つは、
Writing Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [9]の最初の10分を勉強しました。
一つ目の
HLSLではSemanticsによってDataが管理されている。
事に関して簡単にいかにまとめます。
まずShaderで言うSemanticとは変数の後に:POSITIONと書く事を指します。そしてこれがHLSLでC++側のCodeとHLSL側の変数が同じである事を示すと言う意味です。
Semanticには2つの種類があります。
一つ目はSystem Value Semanticで、名前の最初に必ずSV_が付きます。
このTypeのShaderにはSV_POSITIONやSV_Targetのように、その値を必ず指定する必要があるものがあります。
2つ目は自由にその名前を設定出来るもので、
以下の方法でCPU側でSemanticの変数の名前を指定します。

8.1.2 Writing Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [9]の最初を実装する
それでは先週勉強した内容を実装していきます。
Shadersという名前のFolderを作成します。

追加しました。
これは以下のIconが

Show All Fileになってる場合はそのままFileを追加出来たはずです。
そうじゃない場合は、Filterとか言うのが作成されたはずです。
前のBlogを見て確認します。
2023-11-05のBlogにそれらしき事が書いてあるんですが再現出来ません。
確かSolutionか何かを切り替えるとSolution Explorerに表示されるのがFolderではなくFilterになったはずですが、証拠のScreenshotが無いです。
あれ?
もうCopilotに質問してしまいます。
Smart Plus(GPT5.2)で質問しました。

やっぱり合ってた。

でこれはC++特有だそうです。
同じVSでもC#には無い機能だそうです。
以下の方法で切り替えられるそうです。

さっきこれを試したんですが、両方Folder Viewになってしまったんです。
どうしてなんでしょう?

あ、これだわ。
さっきSolutionからじゃなくてProjectから開いたわ。
いや、Solutionから開いても同じでした。
うーん。
今、これにこだわる必要は無いでしょう。
先に進みます。
一応、ShadersのFolderが追加されているのは確認しました。

ここにHLSLを追加します。

Addを押しました。
以下のFileが作成されました。

以下の様に書き直しました。

このCodeの意味については先週しっかり勉強したので今週は繰り返しません。
これで完成です。
8.2 「DirectX 12の魔導書」を勉強する
8.2.1 「5.12.5 BarrierとFenceの設定」の続きを勉強する
<Raw Pitchは256の倍数でなければならない>
以下の部分の話をしています。
![]()
元のImageを見たら200x200です。

うーん。
でも普通に出来ましたよね。

Copilot(GPT5.2)に聞いたら、色々理由を並べていますが、たまたまだと言っていました。
たまたまなのか。
では直す必要がありますね。

Copilotによるとこの部分のCodeは以下の意味だそうです。

うーん。
Copilotの説明はあってはいるんですが、なんか文章がちぐはぐな時がある気がします。
同じ質問をGemini3にしてみます。

回答を見ます。
うーん。
同じかな。
今週はCopilot(GPT5.2)で勉強します。
この次は中間BufferのSizeも変更する必要があるそうです。
以下の様に変更していました。
3D12_RESOURCE_DESC resDescの値を
![]()
の様に変更していました。
これがよく分かりません。
分かりました。
かなり時間がかかりましたが、分からなかった部分が分かりました。
教科書は中間BufferのSizeと言っていますが、これはUpload HeapのResourceの事です。
Copilotの説明を簡潔に述べると、CopyTextureRegion()関数のRowPitchの値を変更したら、Upload HeapのResourceのWidthの値も変更する必要が有るという事です。
そしてここが重要なんですが、Default HeapのResourceのWidthの値は変更する必要は無いんです。
何故なら、

Default Heap側のWidthは元の画像のSizeをGPUに伝えるのが目的だからです。
うーん。
深い。
今週はここまでにしますか。
本当はChapter 5終わらせたかったんですが、これは無理です。急いで終わらせてこういう重要なConceptを見逃がしてしまったら元も子もありません。
今週はここまでにして、一週間この勉強した内容を吟味する事にします。
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] Motion Forge CG. (2024, January 15). Unreal Engine – How To Edit Animations Non-Destructively with Control Rig [Video]. YouTube. https://www.youtube.com/watch?v=nfz5H4PN2ys
[4] Howard, J. (Instructor). (n.d.). Practical Deep Learning for Coders [Video playlist]. YouTube. https://www.youtube.com/playlist?list=PLfYUBJiXbdtSvpQjSnJJ_PmDQB_VyT5iU
[5] Jeremy Howard. (2022, July 21). Lesson 3: Practical Deep Learning for Coders 2022 [Video]. YouTube. https://www.youtube.com/watch?v=hBBOjCiFcuo
[6] Nvidia. (n.d.). Isaac Lab Documentation. Retrieved from https://isaac-sim.github.io/IsaacLab/main/index.html
[7] Isaac Lab Project Developers. (2025, November 25). Training the Jetbot: Ground Truth. In Isaac Lab Documentation — Walkthrough. https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/training_jetbot_gt.html
[8] Nine Between. (2023, November 29). Houdini is HIP - Part 15: Sparkling Water Project [Video]. YouTube. https://www.youtube.com/watch?v=Xs2tHiVFKF0
[9] Lötwig Fusel. (2023, August 6). Writing Shaders in HLSL | D3D12 Beginners Tutorial [D3D12Ez] [Video]. YouTube. https://www.youtube.com/watch?v=8MMRz9QMJI8