UE4の勉強記録

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

UE5の勉強などなど

1.今週の予定

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

  • 映像作成用UE5の勉強
  • AIの勉強
  • Nvidia Omniverseの勉強
  • Gaeaの勉強もしくはVroidとUE5の勉強
  • Houdiniの勉強
  • AIについての調査(ComfyUIの勉強)
  • DirectX12の勉強

2. 映像作成用UE5の勉強

2.1 PCGの勉強

2.1.1 Loopを使用してPointを増殖する方法を考える

Loopを使用してPointを増やす方法ですが、一週間考えて色々なIdeaが出て来ました。

それらを試してみます。

駄目でした。

やっぱり頭の中で考えた方法は全然、現実性が無かった。

うーん。

する事が無くなってしまった。

次のTutorialを勉強しますか。

2.1.2 Here's How to Adjust Your Building Based on the Asset Size | UE 5.4 P2 [1]の最初の10分を勉強する

<00:00 - Tutorial Result Demo>

どんなAssetのSizeでもWallやFloorに使用出来るように実装を変更するそうです。

いや今だったどのSizeのWallやFloorを使用できるじゃないですか。

まあWallとFloorのSizeが一致してないと駄目な部分はありますが。

と思ったら言っている意味が違った。

以下のようにWall SizeやWall Heightを変更するとAssetのSizeが変化してその大きさにFitするようにするみたいです。

<00:43 - Creating the Data Assets>

これを実行するには、AssetのWallのSizeを取得する機能と、そのSizeに応じてDynamicにWallのSizeを変化させる機能が必要になります。

これらの機能はUE5.4から新しく追加されたData Assetsを使用する事によって実装する事が可能になります。

Data Assets自体はUE5.4以前から存在していましたが、PCGから使用出来るようになったのはUE5.4からだそうです。

こんな風にData Assetsを紹介されると、早くData Assetsの勉強をしたくなります。

凄いHookingです。

Data Assetsを管理するためのFolderを作成しました。

名前はData Assetsです。

中を開いてStructureを追加します。

Structureの名前はS_BuildingComponentsとしました。

開きます。

Default ValueのTabを右に移動して以下のようなLayoutに変更しました。

以下の3つのMemberを追加しました。

MeshはWallに使用するMeshの事です。

WeightはどれくらいこのMeshを使用するのかを指定するためのMemberだそうです。

沢山使用するMeshはこのWeightが高くなるんでしょうか?

最後のOpenBackですが、Meshの裏側があるかどうかを示すためのMemberだそうです。

成程。私がWallに使用しているMeshは裏側がないのでOpenBackはTrueになりますね。

WeightのDefault値だけは1に変更していました。

Primary Data Asset型のBlueprintを作成します。

名前はPDA_ModularBuildingと名付けます。

中を開き以下の3つのVariableを追加します。

この後にもVariableは追加するそうですが、取りあえず必要なのはこれだけだそうです。

Data Assetを追加します。

元のClassに先程作成したPDA_ModularBuildingを選択します。

名前はDA_RegularBuildingにしました。

ここでやっとData Assetの登場です。

中を開き以下のようにセットしました。

これでData Assetsの方は完成だそうです。

<05:14 - Scaling Walls Relative to Mesh Size Using Data Assets>

ではPCG_Buildingに戻ってPCG_Building内からStatic MeshのSizeを取得します。

以下に示した様にStatic MeshのSize、Height、そしてThicknessが必要な値です。

ここからが一寸複雑です。

まず以下のGraph Settingsを選択します。

すると以下のBoxが開くので

Parametersの+を押して、New Propertyを開きます。

名前をDataAssetに変更しました。

これは何でもよくて、大切なのは次です。

このParameterのTypeをPDA Moduler Buildingに変更します。

Object Referenceを選択します。

するとData Assetsは以下のように変化します。

そしてここにDA_RegularBuildingをセットします。

この設定が終わったら、Gprahに戻り以下に示したGet Data Assetノードを配置します。

そしてGet Property From Object Pathノードを追加します。

Get Property From Object PathノードのProperty Nameに,

DetailWalls(必要なWallの名前)を追加します。

はい。

Errorが消えました。

そしてMatch And Set Attributesノードを追加します。

うーん。

これだとStatic Meshそのものを取得する事はできるけど、そのStatic MeshのSize、Height、そしてThicknessを取得する事は出来ないんじゃ?

Match And Set AttributesノードにCtrl+Aで黄色のMarkを表示させて

中にあるDataを表示させました。

うーん?

こういうDataをMatch And Set Attributesノードは持ってるの。

今度はここにある全てのPointのScaleを調整するそうです。

そしてそのためにはLoopを使用する必要があります。

Loop用のPCG_Graphを作成します。

これをGraph上にLoopとして配置しました。

Loopの実装をやっていきます。

まずOutputの設定です。

Inputの最初の設定です。

InputされたPointをLoopしていくので、この設定になります。

更にInputを3つ追加し以下のような設定に変更します。

あ、分かった。

先程用意したHeight、Size、そしてThicknessの値をここにImportして、

それらの値と同じSizeになる様にPointの大きさをここで変更するんです。

PCG_BuildingのGraphに戻ってLoopのInputを繋げます。

予測した通りに繋げました。

ただしMatch And Set AttributesノードのOutputをそのままPointsにつなげる事は出来ません。

Attribute Partitionノードを追加します。

そしてPartition Attribute SelectorsのIndex[0]の値をMeshに変更します。

これでPCG Scale Mesh to SizeノードのPointにつなげる事が出来ます。

うーん。

何で?

ここで丁度10分経ったので、この部分は来週、実装する時に考える事にします。

Mesh and Set Attributeノード内にどんなDataが入っているのかが分れば、Partition Attribute SelectorsのIndex[0]の値をMeshに変更する意味も自ずと判明するはずです。

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

2.2.1 Creating and Modifying Control Rig [2]を実装する

今週は先週勉強した内容を実際にやってみる事にします。

<Character Import Settings>

まずはCharacterのImportか。

これってMannequinをImportしているけど、元からあるんだよな。

うーん。

FabのCharacterでもImportしてみますか?

あ。

Vroidでも良いか。

一寸Boxの中身は違いますが、まあ良いでしょう。

これで設定を実装していきます。

SkeletonをBlankにします。

元からBlankにはなっていました。

これをBlankにする事で、元からあるSkeletonが適応されるそうです。

以下の項目はありませんした。

次に行きます。

次の以下の項目は無かったですが、

代わりに以下の項目がありました。

Skeleton MeshのPoseを確認したらT-Poseになっています。

あれ?

これであってんの?

Skeleton Treeですが以下のようになっていました。

以下の内容をCheckします。

Rootに全てのJointが繋がっていますね。

EmptyのGroupはなさそうです。

HairやSkirtのような操作出来ないJointがあるみたいですが、これが必要でないJointなのかどうかは不明です。

MaterialやLODの設定はよく分からないのでこのままにしておきます。

<Control Rig Asset>

Control RigのPluginですが最初からInstallされていました。

先週のBlogに書いてある方法でこのSkeletal MeshのControl Rigを作成しました。

開くと以下のようなWindowが現れました。

Bones, Controls and Nulls>

まずBoneを追加してみます。

しました。

今度はControlを追加します。

勝手にRoot_Ctlと言う名前に変更されています。

更にWorldSpaceというのも勝手に生成されました。

赤いBallのようなIconは生成されています。

Detailを見ると以下のParameterがありました。

以下のように変更しました。

先週のBlogに以下のように書いていますが、

Ctrl+Pを押したら以下のBoxが開きました。

普通にScaleの値をいじって大きくしました。

Control TypeですがUE5.5では以下のような設定になっていました。

うーん。

多分、このままでOKでしょう。

ここで拳の開閉を指定するControl Typeを作成するんですが、

このControl、Rootに追加したのを使用しているのか、新しく追加したのかが不明です。

Tutorialを見て確認します。

普通にControlをそのまま使用していました。

ただTutorialのやり方ではControlを作成する時にRootを選択してなかったです。

うーん。

作り直すか。

Tutorialのやり方で作り直しました。

で、Value TypeをFloatに変更しました。

結果です。

成程ね。

ShapeをBoxに変更して

Sizeを1に戻すと以下のようになりました。

以下に示したCurrentの値を変更するとBoxの位置が変わります。

ここで先週のBlogでは

Setup Eventを選択しろと言っていますが、

無いです。

多分Construction Eventがそれに当たるんでしょう。

以下の状態にはなるんですが、

Controlの位置は変更出来ません。

仕方ないのでPropertyにあるParameterの値をいじって以下のようにセットしました。

結果です。

この方法だとLineは元の場所から移動してくれません。

CopilotのThink Deeperに質問してみました。

回答です。

凄すぎる。

これは来週試す事にします。

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

やっぱり一寸だけやってみます。

セットしました。

結果です。

最初、全く変化しないと思ったらCompileし直さないといけなかったです。

そしたらControlの位置を変更出来ました。

ここまでにしておきます。

と思ったんですが先週のBlogを読んだら後、一寸だけです。

やってしまいます。

Animatableです。

これはそんなParameterは存在してなかったです。

CopilotのThink Deeperに質問してみます。

回答です。

凄すぎる。

試してみます。

こんなの無いです。

今度は同じ質問をPerplexityでしてみます。

つまりAnimatableをセットしなくてもLevel SequenceからControlを使用出来るようになったみたいですね。

最後にNullを追加しました。

これで先週のBlogの内容は全部終わりました。

3. AIの勉強

3.1 先週の復習

先週はHugging FaceのAccountを作成してGradioのInterfaceを使用した非常に簡単なHomepageを作成しました。

もう少し具体的に何をやったのかを先週のBlogを読み直して復習します。

先週、Hugging FaceのHomepageを作成するに当たってLesson 2: Practical Deep Learning for Coders 2022 [3]で述べている内容と違う部分がかなりありました。

このTutorialは2年前に作成されたものですが、日進月歩で進化するAI業界では2年前は大昔です。やり方が変わってしまっても仕方ないです。

その辺を以下にまとめ直しておきます。

まず新しいSpaceの作成方法です。

以下のNewというButtonからSpaceを選択します。

次にCloneのやり方ですが、UbuntuからCloneを作成するには、その前にAccess Tokenを作成してそのPasswordを設定する必要があります。

でCloneの作成には成功しました。

App.pyを作成しました。

App.pyを生成するために、以下のCommandを使用しました。

VS Codeから生成する方法は分からなかったです。

Commit and pushはTerminalから行いました。

何故ならVS Codeからやった場合、Access TokenのPasswordを指定する方法が分らないからです。

ここで以下の2つを指定したんですが、

User.nameの方を記録していませんでした。

ああ。

確か名前をそのまま入力したはずですが、記録には残していません。

以上です。

3.2 Hugging Faceの確認

Hugging FaceのHomepageも確認しておきます。

まず作成したHomepageです。

これBuildしてRunを実行しないと表示されなかったです。

Accountの方を確認しようとしたら、Passwordの入力を求められました。

ChromeにSaveされているPasswordを入力するとそのままAccountの内容が見れるようになりました。

まあ、特に問題は無いですね。

3.3 Jupyter NotebookにGradioを追加

では先週出来なかったこれをやっていきます。

まずはJupyter Notebookを起動して前回書いたCodeを確認します。

以下の部分にErrorが出ていました。

うーん。

こんなErrorあったかな?

確認します。

2025-02-02のBlogを見るとこの部分のCodeは記録されていませんね。

消してしまいます。

ではGradioを使用したUI付きのFileを作成します。

GradioはまだInstallしてないのでErrorが出ると思いますが、Errorが出るところまではやっていきます。

新しいNotebookを作成するを選択したら以下のButtonが表示されました。

前に作成した時にこんなの聞かれてたかな?

しかも名前が勝手にUntitled.ipynbになっています。

名称を変更します。

TestGradio.ipynbに変更しました。

Untitled.ipynbはまだ残っています。

ナニコレ?

まあいいや。

まずFast.aiのImportからやってみます。

はい。これは出来てます。

次にGradioをImportしてみます。

はい。

Errorになりました。

では一端、Jupyter Notebookを止めてGradioをInstallする事にします。

GradioのInstall方法ですが、2025-02-09のBlogにやり方がまとめられていました。

Cellって何でしょうか?

これはもう一回Copilotに質問した方がいいですね。

この回答を読むとJupyter Notebook内にCellというTerminalのような機能があるみたいです。

それから確認します。

確認したらCellって以下のCodeを書く四角を指していました。

じゃここで試してみます。

この後ずっと回答が続いて最後に

となりました。

テストしてみます。

こんな返事が返って来ました。

どうしたらいいのかCopilotに質問してみます。

Copilotの回答です。

だそうです。

具体的には

を実行すれば良いそうです。

はあ、凄い。

早速やっていきます。

成功したみたいです。

次のCommandです。

既に出来てるみたいです。

次のCommandです。

そんなCommand無いって回答しています。

もう一回Copilotに質問します。

以下の回答が返って来ました。

うーん。

一回再起動したら動く気もします。

どうしようか。

Think Deeperで同じ質問をしてみます。

まじか。

全然違う解答が返って来ました。

一応、確認します。

Copilotに質問したら以下に示した様にURLで確認出来るそうです。

確認します。

あれ?

Notebookじゃん。

Versionを見ると以下のようになっています。

確かにLabもあります。

以下の部分の解説を読むと

そもそもExtensionをInstallしなくてもipywidgetsは使用出来るみたいです。

Jupyter Notebookを再起動して以下のCommandを実行しました。

普通に出来たみたいです。

以下のCodeでTestしました。

UIが表示されています。

GradioのInstallは出来ましたね。

3.4 UI付きのAIを作成

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

4. Nvidia Omniverseの勉強

4.1 NVIDIA Isaac Sim - MuSHR RC Car - Ackermann Tutorial [4]を勉強する

4.1.1「 3 - Joint Types - NVIDIA Isaac Sim - MuSHR RC Car - Ackermann Tutorial [5]を実装する

これは特にやる事ありません。

一応、Issac Simを開いて確認だけします。

Loginしろと出て来たのでLoginしました。

その後はLauncherをUpdateしろと出て来たので、Updateして再起動しました。

Issac Simを起動します。

を起動します。

以下のThrottleのPropertyを見ます。

DampingとStiffnessは以下の値になっていました。

この2つの概念は今もってよく分かりません。

DampingにCursorを合わせると以下の表示が出て来ました。

Stiffnessは以下の表示が出て来ました。

そうだ。

これこそAIに聞いてみよう。

まずは通常のCopilotに聞いてみます。

回答です。

Revolute Jointを知らないとこの2つの意味も理解出来ないのか。

先にこれを調べるか。

え、日本語無いの?

Wikipediaの回答です。

https://en.wikipedia.org/wiki/Revolute_joint

この回答よりも重要なのがこっち、

中国語はあるのに日本語は無いです。

こういうのを見るともう日本は終わりというか、根本から腐ってるのが分かります。

で、肝心の中身ですが、ドアのノブのように2つの個体が一つの同じ軸で回転するJointの事を指すそうです。

タイヤの回転もこれですね。

はい。

理解しました。

でDampingの説明です。

要はBreakです。

次はStiffnessです。

ばねのように元の形状に戻ろうとする力を指しているようです。

うーん。

成程。

これは0でも問題ないですね。

あ、Revolute Jointの説明もありました。

まあ、この通常のCopilotの説明でもDampingとStiffnessの概念はかなり理解出来ました。

というかこれで十分です。

Steerの場合です。

先週のBlogには以下のように書いてありました。

DampingとStiffnessの意味が理解出来るとこの文の意味も理解出来ます。

Steeringつまりハンドルは回した後に、元の位置に戻ってこないと困る訳です。だからStiffnessの値が0では困る訳です。

これであってるはず。

もう一回動画を見て確認します。

うーん。

そういう風には説明してないですね。

Tutorialで言っていたのは、次の動画でGraphで実装したのを実行したら、ThrottleはControl出来るけどSteerはControl出来ないのが分かる。だけでした。

はい。

4.1.3「4 - Action Graphs - Part 1 - NVIDIA Isaac Sim - MuSHR RC Car - Ackermann Tutorial」[6]を勉強する

では次のTutorialの内容を実装します。

Action Graphを追加します。

Action Graphを開きます。

先週のBlogでは以下の方法で開いていましたが、

単にDouble Clickしただけじゃ開けないんでしょうか?

試してみます。

開けないです。

代わりに名前の変更が出来るようになりました。

開けたのか?

何も変わってないじゃん。と思ったら以下のTabにAction Graphが追加されていました。

開けていました。

先週のBlogにまとめた方法で以下に示したOn Playback Tickノードを配置しました。

おお、このNodeのDesignはかなり恰好良いです。

次にROS1 Subscribe AckermannDriveノードを追加しますが、

そんなNodeはありません。

Tutorialを見るとありますね。

はい。

こういう時にはまずAIに聞きましょう。

まずは通常のCopilotに質問します。

以下の回答が返って来ました。

Setupから何をEnableかInstallをする必要がある。って言っています。

具体的な手順としては

となっていました。

うーん。

一応、Think Deeperでも聞いてみます。

こっちは以下の3つの理由を上げていました。

うーん。

でも1と3は前の通常のCopilotの回答の答えでもありますね。

直すための手順です。

うん。

成程。

結構細かい手順で説明されていますが、最初の部分は通常のCopilotの回答と同じでした。

ついでにPerplexityのDeep Researchでも聞いてみます。

非常に頼もしい回答です。

ここでもExtensionを追加する必要性を述べています。

ただ、今のIssac SimにROS1のExtensionを追加出来るのか、とかWindow11で動いているIssac SimにROSに基づくNodeを動かす事が出来るのかとかは不明です。

いや、よく読んだら書いてあるのかもしれませんが、今のところの私の解釈では不明です。

ここからは何について述べているんでしょう?

ここからはROS2の実装の説明みたいです。

これも何を説明しているのか不明です。

もうこの辺になると読む気も起きません。

取りあえず回答は全部貼っておきます。

で最後のConclusionです。

おお、これは分かり易い。

実装はここまでにして次のStepについて考える事にします。

4.1.4 次のStepについて

今理解した内容で想像すると、ROS1 Subscribe AckermannDriveノードを使用するためには、

  1. Issac SimのExtensionをEnableする
  2. 必要なPackageをInstallする

が必要みたいです。

でも、Ros1ってWindows11では動かないはずです。必要なPackageって絶対にROS1関連のPackageですよね。

となると解決策は、

  • ROS2で似たような実装をする
  • UbuntuからIssac Simを起動させる

の2つしかありません。

これらの可能性についてはどのAIの回答ものべていませんでした。

というかそもそもRobot工学の人達はIssac SimをWindowから動かす事はあまりしないのかもしれません。

今週はここまでにしてどうするか、一週間考える事にします。

4.2 Nvidia Omniverse Issac Sim [7]の勉強

もう疲れたので、この勉強は今週はお休みにしようかと思いましたが、何とIsaac Sim ApplicationにROS and ROS2が載っていました。

これは読む必要があるでしょう。

読んでみます。

こんなに沢山の記事があるのか。

最初にこんな文章が書かれていました。

ROS2 HumbleをInstallするのか。

<ROS and ROS 2 Installation>

ここに以下の図がありました。

HumbleだったらWindows11でも動くそうです。

あれ?

WSL2使っています。

こんなのこの説明読んだだけじゃやり方分かりません。

ていうか、奇跡的にこの部分は既にやっています。

いやHumbleだったけInstallしたROS2のVersionは?

これも確認します。

2025-01-19のBlogを見ると以下のように書いてありました。

Humbleですね。

ROS and ROS 2 InstallationのUse WSL2 to run ROS2 on Windows, which communicates with the Isaac Sim ROS Bridge run using internal ROS2 libraries.に

以下の手順が書かれていました。

6以前はROS2をWSL2にInstallする方法が説明されていて、まあ大体今までやった内容と同じです。

ほええ。

これってもしかしてWSL2のUbuntuにあるROS2の情報をWindowsにあるIssac Simから得る方法ではないの?

これこそが知りたかった情報では?

で色々やっていますが、最後に以下のように書いています。

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

来週はここで集めた情報を整理してどうしたらROS2関連のNodeをIssac Simから使用出来るかを検討します。

5. Gaeaの勉強もしくはVroidとUE5の勉強

今週はGaeaの勉強も無しですし、VroidとUE5の勉強も特にやる内容はありません。

うーん。

どうしよう。

今週は別な用事もあるので、これは無しにします。

6. Houdiniの勉強

6.1  VEX Isn't Scary Project - Part 3: Geometry [8]の続きを実装する

Blur Normal>

この実装方法だとCircle SetupノードのLinesの値を変更してもBlurが対応してくれるそうです。

確認してみます。

Lineの数を2にしてみました。

Blurがおかしくなってる感じはありません。

<Tube Size>

Attribute Blurノードの以下のParameterの値を変更しました。

TutorialではBlurring Iterationsの値は49にまで上げていましたが、この値を上げると溝がぼやっとします。

あんまり綺麗じゃないです。

15にしました。

Step Sizeは値を買えても変化が出ないです。一応、Tutorialと同じ値にしておきました。

Normal2ノードの後にNullノードを追加して名前をBASE_GEO_OUTに変更しました。

<BaseGeoOut>

Geometry Layerに戻ってGeometryを2つ追加します。

それぞれBASEとSPHERESと名付けました。

BASEを開き、中にObject_mergeノードを配置します。

Object1にBASE_GEO_OUTをセットします。

以下のImageが表示されました。

SPHERESの方も同様に、Object Mergeノードを配置してSPHERES_GEO_OUTを追加します。

結果です。

あれ?SphereのSizeが小さいです。

Sphere1ノードの

Radiusの値を変更しました。

結果です。

この位なら良いでしょう。

続きをやります。

再生してみます。

Sphereが非常にゆっくり動き出しました。

先週のBlogには

と書いていましたがForward再生でも凄い遅いです。

Time Shiftノードを追加します。

Frameを右Clickして以下のBoxを表示させ、Delete Channelsを選択しました。

これ、外見は何も変化しませんね。

きちんと選択出来たことはどこで確認出来るんでしょうか?

更にFrameの値を1にセットしました。

この実装で、再生したらSphereが非常にSmoothに動くようになりました。

<Poly WireとTransform Node>

横から見たViewです。

Sphereが浮いているのが確認出来ます。

Spheresノードの後にTransformノードを追加します。

Sphereを移動させて隙間を無くしました。

次に溝を超えて移動するSphereの問題を解決します。

<Transform LinesとIncrease Tube Size>

以下の場所にTransformノードを追加します。

TransformノードのUniform Scaleの値を大きくしました。

結果です。

溝の先が伸びました。

Testします。

Sphereが溝の先端から飛び出す事は無くなりました。

<Add Base Group>

先週のBlogには以下のようにまとめてありますが、

Sphere1ノードを見たら以下のようになっていました。

Primitive TypeをPolygon Meshに変更しました。

RowとColumnが使用出来るようになりました。

Groupノードを以下の場所に追加しました。

更にGroupノードのGroup Nameにlight_stripをセットしました。

<Add Face Group>

GroupノードのBase Groupに以下の値を追加しました。

Tutorialより一寸だけ太くなっています。

Poly Extrudeノードを以下の場所に追加します。

Poly Extrudeノードの以下の値を変更しました。

結果です。

Sphereに窪みが出来ました。

<The Problem>

この状態で実行してみます。

Sphereが回転してないのが確認出来ました。

<The Circle Setup>

個々は理論の話なので実装するものは無いです。

先週勉強した内容は実装出来ました。

7. AIについての調査(ComfyUIの勉強)

7.1 ComfyUI Hunyuan Video to Video: Using video to create LONG AI videos by Latent Upscale Guidance [8]を勉強する

以下に示した様に2つの映像から新しい映像を作成するそうです。

Workflowの簡単な説明がありました。

Promptから以下のCharacterを生成するとします。

Hunyuan ModelにPromptを入れると

こんな結果になります。

全然似てません。

代わりにHunyuan Loraを使用して以下のImageをInputします。

更にPromptで猫耳を追加するようにします。

結果です。

こうするともっと本物に近づいた結果になります。

これHunyuan LoraのWorkflowを理解するのは良い説明ですが、Inputに使用した画像(もしかしたら映像?)がアニメではなくなっています。

その辺はどうなんでしょう?

今度は2つのVideoをInputに使用するWorkflowです。

最初に赤い矢印に沿って解像度の低いVideoを生成します。

その後で、その解像度の低いVideoを利用して解像度の高いVideoを生成しています。

成程。

この2番目のWorkflowを使用すれば、低解像度のVideoを生成しないで別なVideoを使用して

別な映像を生成する事も出来ます。

成程。

ここからこのTutorialで使用するWorkflowの詳細について解説するそうです。

ちなみにWorkflowそのものは以下の場所からDownload出来るそうです。

開くと以下のようになってるそうです。

おお、これは先程説明したWorkflowがそのまま再現されています。

別なVideoをReferenceに使用する場合の説明もあります。

この後、それぞれのSectionにあるNodeの説明をしています。

全部聞きましたが、ここにまとめると膨大な量になってしまうので今回はまとめません。

と言うかここで説明してる内容は、実際にこのWorkflowを動かせるようになってから重要になってくるので、今慌ててまとめる必要もないです。

実装は来週やる事にします。

7.2 Loraについて

今勉強したTutorialでLoraを使用してVideoをInputしていましたが、Loraって何なんでしょう?

調べます。

どうもLoraは生成されたImageに更なるDetailを追加する機能のようです。

Copilotに聞いて確認しましょう。

想像した通りの回答が返って来ました。

LoraのTutorialを探してどうやって使用するのかを調べます。

YouTubeにあるTutorialを何個か見たんですが、長すぎます。

こんなの5分で説明出来るはずです。

もう直接Workflowを試してみます。

以下のWorkflowを見つけました。

DownloadしたらpngのDataしかないです。

今度はこっちを試してみます。

こっちはWorkflowがありました。

使用しているModelを追加します。

これはどこのFolderに追加すればいいんでしょうか?

Copilotに聞いたらCheckpointで良いと言っていました。

次はLoraのModelです。

これはLoraというFolder内に配置するはずです。

同じ名前のModelが見つかりません。

代わりにこれを使用する事にします。

実行したら出来ました。

Checkpointに使用したModelを以下のに変更しました。

結果です。

うーん。

凄いのか?

そうだ。Loraを使用するにはPromptに特定の言葉をTypeする必要があるんでした。

LoraのModelを見ましたがどこにも書いて無いです。

これではLoraが効いているのかどうか分かりません。

以下のLoraを試してみます。

こっちはTrigger Wordsが沢山載っています。

以下のImageを生成したWorkflowで試してみます。

まずはLoraを追加しただけです。

KSamplerノードのSeedは固定しています。

変化なかったです。

ではTrigger Wordを追加してみます。

凄い効いてる。

でもPromptに追加したTrigger Wordのせいかもしれません。

Trigger Wordだけ残して、Loraを外してテストしてみます。

確かに変顔にはなっていますが、絵のQualityがかなり落ちています。

成程、専用のLoraを使用する事で絵のQualityを維持したまま、加工が出来るようになるのか。

納得しました。

ILと表示されてるのが沢山あります。

よく見たら先程使用したLoraも

ILと書かれていました。

どういう意味なんでしょうか?

Copilotに聞いてみました。

こんなModelがあるのか。

これも後で調査する事にします。

こんなものですか。

8. DirectX12の勉強

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

8.1.1 Render Target View & Descriptor Heap | D3D12 Beginners Tutorial [D3D12Ez] [10]の最初の10分を実装する

先週のBlogを読み直したんですが、実際に実装する箇所は一寸しかないですね。

やってしまいます。

DescriptorHeap型のVariableを作成します。

初期化します。

今週実装するのはこれだけです。

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

8.2.1「5.8.4 Samplerの設定」を勉強する

SamplerはTexture Dataからどう色のDataを取り出すのかを指定するそうです。

実際はD3D12_STATIC_SAMPLER_DESCというStructで指定するそうです。

公式SiteのD3D12_STATIC_SAMPLER_DESC structure (d3d12.h) [9]の説明です。

結構指定する内容がありますね。

教科書ではWについて特別に節を設けて説明していました。

Wは3D Textureに使用するそうです。

Sample Codeでは以下のように設定していました。

最後にこのSamplerDescをRoot Signatureにセットします。

これでRoot Signatureの設定は完了だそうです。

戻り値がS_OKになるそうです。

9. まとめと感想

なし。

10. 参照(Reference)

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

[2] Creating and Modifying Control Rig. (n.d.). Unreal Engine. https://dev.epicgames.com/community/learning/courses/5vL/unreal-engine-creating-and-modifying-control-rig/DnO1/unreal-engine-creating-and-modifying-control-rig-overview

[3] Jeremy Howard. (2022, July 21). Lesson 2: Practical Deep Learning for Coders 2022 [Video]. YouTube. https://www.youtube.com/watch?v=F4tvM4Vb3A0

[4] NVIDIA Isaac Sim - MUSHR RC Car - Ackermann Tutorial. (n.d.). YouTube. https://www.youtube.com/playlist?list=PL60qgWqGu6k82AJ2SDWOscEKLjCc5tdEW

[5] Berk Tepebağ. (2024, August 20). 3 - Joint Types - NVIDIA Isaac SiM - MUSHR RC Car - Ackermann Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=3y8cEWXtuUg

[6] Berk Tepebağ. (2024, August 20). 4 - Action Graphs - Part 1 - NVIDIA Isaac Sim - MUSHR RC Car - Ackermann Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=pqE2y8YVdGI

[7] What is Isaac Sim? — Omniverse IsaacSim. (n.d.). https://docs.isaacsim.omniverse.nvidia.com/latest/index.html

[8] AI Artistry Atelier. (2025, January 10). ComfyUI Hunyuan Video to Video: Using video to create LONG AI videos by Latent Upscale Guidance [Video]. YouTube. https://www.youtube.com/watch?v=aDDU3p72mkQ

[9] Stevewhims. (2021, October 6). D3D12_STATIC_SAMPLER_DESC (d3d12.h) - Win32 apps. Microsoft Learn. https://learn.microsoft.com/en-us/windows/win32/api/d3d12/ns-d3d12-d3d12_static_sampler_desc