UE4の勉強記録

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

UE5の勉強 -映像作品としてのLandscapeを作成する-

1. 今週の予定

1.1 今週の予定

今週は以下の内容を勉強します。

<Landscapeの作成>

建築用のLevelの作成の勉強の続きをやります。

内部の家具を追加していきます。

Niagara の勉強>

Unreal Engine 5で学ぶビジュアルエフェクト実装 基本機能からNiagara、シミュレーションまで」の実装をやります。

<Materialの勉強>

Ben Cloward先生のTutorialが復活しました。のでBen Cloward先生のTutorialの何かを勉強します。

<Gaeaの勉強>

更にGaeaのTutorialを作成します。

<Houdiniの勉強>

今週からHoudiniの勉強に戻ります。

Castle Wall Tool [1]の勉強をやります。

<UEFNの勉強>

Pi Equals Three氏のTutorialをやります。

<DirectX12の勉強>

DirectX 12の魔導書」と「Direct3D 12 ゲームグラフィック実践ガイド」の勉強をやります。

更にLötwig Fusel氏のDirectX12のTutorialをやります。

2. Landscapeの作成

2.1 建物の内部を作成する

今週も建物の内部の家具や装飾品などを追加していきます。

<階段下の棚>

階段の下の棚を追加します。

SM_Shelfです。

これが棚です。

棚に配置されている装飾品です。

次の棚です。

下の棚です。

真ん中上段の棚です。

真ん中下段の棚です。

左側2つ目上段の棚です。

左端の棚です。

右側下段の棚です。

右端下段の棚です。

はい。

大体どうなっているのか判明しました。

配置します。

まず棚を配置しました。

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

こんなに隙間が空いていたんですね。

こういう細かい点は実際にAssetを配置しないと気が付かないですね。

装飾品も並べました。

うーん。

もう少しうまい並べ方が有ったかもしれません。

<Doorの直し>

Demoの建物を見たら、DoorはBlueprintになっていました。

しかも実行中にEを押すとDoorが開くようになっていました。

せっかくなんでDoorをぜんぶ付け替えます。

まずDoorを全部外しました。

何故か玄関だけはBPで作成していました。

のでこれは残します。

玄関の奥のDoorです。

居間の奥にあるDoorです。

奥にある小部屋のDoorです。

Bathroomと車庫に繋がるDoorです。

Doorが開くかどうかも確認しました。

二階のDoorも直します。

Demoで確認すると一個以外全部。右のDoorになっていました。

LのDoorはSizeが70㎝のやつでした。

BPのDoorを配置します。

Doorを開けたところです。

開閉する方向がそれぞれのDoorでバラバラです。

本当の建物はこういうのはどうやって統一するのでしょうか?

まずほとんどの人は右利きなので右手でDoorを開けるはずです。

廊下側にDoorが開くと廊下に人が居た場合、ぶつかる危険があるので内側に開くようにしました。

<Bathroomの作成>

BathroomにもAssetを配置していきます。

DemoのBathroomです。

使用しているAssetを確認します。

Bathtubです。

足を拭くためのCarpetです。

Towelを掛けるためのRailです。

Toiletです。

洗面所の鏡です。

洗面所のSinkです。

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

DoorとBathtubがぶつかっています。

外開きでした。

180度回転させて以下のように開くように変更しました。

DemoとはDoorの開く向きが逆です。

右手で開けるようにするとDemoのが正しいですね。

直します。

これはこれで開けにくそうです。

ここで時間がなくなってしまいました。

二階の家具や装飾品の配置は来週やります。

3. Niagara の勉強

3.1 先週の復習

先週のBlogを読み直しましたが、特に調べないといけない部分はなさそうです。

続きをやる事にします。

3.2 「Unreal Engine 5で学ぶビジュアルエフェクト実装 基本機能からNiagara、シミュレーションまで」を実装する

今週は「Chapter 13 Game of Life」を実装します。

これあんまり興味のないSimulationなんですが、Grid状でSimulationをやる方法をここで勉強するそうなのでSkipする訳には行きません。

まずSample Codeを実行してみます。

しばらくしたら以下の模様で固定してしまいました。

これって何度やっても同じなんでしょうか?

以下の辺りの模様に注目して

何回かSimulationを試してみます。

同じでした。

うーん。

それでは実装方法をまとめます。

まず以下のようなGridを作成します。

それぞれの升目をCellとします。

それぞれのCellは以下の特長を持っています。

  • 生きているか死んでいるかを示す変数を保持
  • 周りの8個のCellが生きているか死んでいるかを把握する能力

更にCellの生死は以下に説明したように周りの8個のCellの状態で決まります。

Cellが生きている場合は、周りの8個のCellの内、生きているCellが2か3の場合は生き続ける事が出来ます。

それ以外は死にます。

Cellが死んでいる場合は、周りの8個のCellの内、生きているCellが3の場合は、新しい生命が誕生して生き返ります。

それ以外は死んだままです。

それだけです。

ああ。

Simulationとは何かを今理解しました。

  • 一つのCell(Particle)では、周りの状態という情報を得て次の行動を決定
  • 次々に全てのCell(Particle)で行動を決定

これを何万回も繰り返してるだけでした。

今まで、何でParticleを使用した流体力学の計算では、Particle同士がOverlapしないのか不思議だったんですが、この疑問が解決しました。

Particleが移動出来る位置は他のParticleが無い場所だけです。

ので個々のParticleが移動する場所を選択する時点で、他のParticleとOverlapする可能性自体が発生しないんです。

うーん。

この説明は分かりにくいです。

こういう言い方の方が分かり易いかもしれません。

今までSimulationに対する私のImageはFPSというかネットで沢山の人が参加して同時に戦うGameと同じTypeだったんです。

しかし実際はSimulationってのは実際はGameに例えるとTurn制のGameだったんです。

うーん。

それでは実装してみます。

まずNSを作成します。

教科書にはどのTemplateを使用するのかは書いてないです。

取りあえずEmptyで作成しました。

EmitterのPropertiesの設定を以下のように変更しました。

次にMaterialの作成を行います。

うーん。

ここの説明は今一理解出来ないですね。

一回実装してからもう一回説明を読む事にします。

Materialを作成しました。

名前はM_RenderTargetとします。

Materialの作成はこれだけでした。

Texture Sample ParameterノードというNiagaraからMaterialにTextureのDataを送る事が出来るNodeを使用しています。

これでGrid内のCellの生死の色を指定するんでしょうか?

Render SectionのSprite Rendererノードの

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

うーん。

Source ModeをEmitterに変換した事は無いですね。

どういう機能なんでしょうか?

後で調べる事にします。

次にEmitter AttributeのParameterにRender Target型の変数を作成します。

む。

Render Target型は沢山ありました。

どれを使用すべきなのか分かりません。

Sample Codeで確認するとRender Target 2Dのようです。

Render Target 2Dで試してみます。

以下のようにRender Target 2D型の変数、Render Targetを作成しました。

更にGrid 2D Collection型の変数も追加します。

これは同じ名前のClassがあったので、それから作成しました。

一応、Sample Codeでも確認しておきます。

以下の3つのParameterが作成されています。

Grid 2D Collectionの型はGrid 2D Collectionでした。

あってますね。

うーん。

作成した[EMITTER] Render Target Moduleを

Emitter Spawn Sectionにセットして

Sizeの値を256に変更しました。

次に[EMITTER] Grid2D Collection Moduleをセットします。

普通にSetしたんですが以下に示した様に

緑色の矢印が表示されていますね。

これって何なんでしょう?

Sample Codeで確認しましたが

緑色の矢印なんて表示されていませんね。

うーん。

気になりますね。

あれ?

一回、Projectを閉じて開いたら緑の矢印が消えていました。

うーん。

気にしても仕方ないので先に進みます。

新しいScratch Moduleを追加します。

まだ全体像が見えないです。

Map Getノードに以下のParameterを追加しました。

ここで教科書の図を見るとSet Num Cellノードにこれらの値をPassしてOutput ノードに繋げています。

Map SetノードがないですしSet Num Cellノードが何なのかについての説明もないです。

Set Num CellノードはMap Setノードの名称だけ変更したNodeでしょうか?

Sample Codeで確認します。

うーん。

これを見る限りでは違いますね。

Set Num CellsというNodeは当然ですが存在しません。

試しにSample CodeからCopyして貼り付けてみました。

Applyします。

思いっきりErrorになりました。

うーん。

これは分からん。

教科書の以下の部分にかいてありました。

この説明の部分が丁度端っこに表示されていて、読み飛ばしている事にずっと気が付きませんでした。

Grid 2D Collectionから検索すると

Set Num Cellsはしっかりありました。

以下のように実装しました。

うーん。

やっと教科書通りに実装する事が出来ました。

成程、ClassのMethodからNodeを生成する事もある訳ですね。

これからはNodeが見つからなかったらClassのMethodである可能性も検討します。

Niagaraに戻ってSetGrid2DCells Moduleの設定を以下の様にします。

教科書に説明が書いてありました。

Grid2D CollectionのGridの数を直接指定する方法がないためこのやり方で指定したそうです。

うーん。

理解してしまえば何てことはない話です。

因みに5.3の現時点でもSet Grid 2D CollectionのParameterは以下のようになっていて

Gridの値を直接入力する事は出来ないです。

今度はRender SectionにあるSprite Renderer Moduleの設定です。

BindingにあるMaterial Parametersの以下の箇所に[EMITTER] Render Targetを追加します。

これが追加出来なくて悩みました。

何度確認しても[EMITTER] Render Targetの初期化は正しく行っています。

しかしNiagara Variableに[EMITTER] Render Targetをセットする事が出来ません。

ほとほと、諦めていたところ、先にMaterial Parameters NameにMainTexをセットしたら、[EMITTER] Render Targetもセット出来るようになりました。

後から見直したら、これも教科書にきちんと説明されていました。

でもこれも端っこに表示されていて読み飛ばしていました。

Materialの以下のNodeとBindさせたんでした。

ParticleのModuleは全部、消しました。

これは、今週中には終わらないかもしれないですね。

次の「13.4.5 本体の実装に向けて」までやる事にします。

この節は、これからSimulationを実装するにあたっての工程を簡単にまとめているだけでした。

以下の3つの工程にそって実装するそうです。

  1. Grid状のDataを作成
  2. Main Logicの計算を行う
  3. Render Targetに結果を書き込む

まあ、大体はImageした通りの工程です。

今週のNiagara Simulationの勉強はここまでとします。

4. Materialの勉強

今週もBen Cloward先生のTutorialをやっていきます。

4.1 Subgraphs and Material Functions - Advanced Materials - Episode 21 [2]を勉強する

今回はいつもと様子が違って、基礎の復習みたいです。

それぞれの節の内容についてまとめていきます。

<Intro>

UnityのSubgraph、UnrealのMaterial Functionについての勉強だそうです。

<Basics>

Material FunctionがProgrammingにおけるFunctionと同じような役割を担っている事について説明しています。

<Example>

実際のMaterialを例にしてMaterial Functionを作成しています。

そんだけです。

<Advantages>

特に記録に残す事は無いです。

<Summary>

これも無いです。

今回のTutorialは本当に基礎の話で初心者以外は勉強する必要がない内容かもしれません。

一応、確認のための最後まで見る事にしました。

Unreal Tutorial>

Unrealと書いていますが、UnityのMaterial Functionの作成方法についての解説でした。

<Create Material Function>

ここからUnrealのTutorialに戻ります。

Material Functionの作成方法を逐一説明していました。

例えばFunction Input ノードの使用方法の説明とかしています。

流石にこの内容は私には簡単過ぎます。

今週のMaterialの勉強は軽く全部見て終わりにする事にします。

<Use Preview as Default>

Function InputにあるParameterの説明です。

これも知っています。

残りの話も全部知っている内容でした。

流石に、今回の内容はBen Cloward先生のTutorialでは初心者向け過ぎます。

多分、この辺からUnity社に転職して色々な問題に巻き込まれてしまってTutorialを作成する所では無くなって来たんでしょうね。

5. Gaeaの勉強

5.1 Tutorialの作成

今週から3つの工程の最初の工程である「地形(Terrain)の作成」をやっていきます。

初回の今回は「最初のNode」について勉強します。

今週のLectureの内容です。

10分以内に終わらせるように簡潔な内容を心掛けている事を強調します。

先週のLectureの復習です。

3つの工程を復習します。

そして今週からその中の最初の工程である「地形(Terrain)を作成」をやって行く事を説明します。

次のSlideです。

この内容はGaeaで説明します。

まとめです。

Gaeaで説明した内容をもう一回Power Pointで説明します。

録画もしました。

なんか内容にまとまりがないので、何回も録画したり文章を直したりしました。

その結果、なんか手応えみたいなものを感じて来ました。

次の日にもう一回録画を取り直して完成としました。

編集した後、見直しましたがまあ完璧では無いですが、及第点は取れているでしょう。

この動画を作成している時に入ってきた情報ですが、何とGaea2.0の公開が間近に迫っているそうです。

もしGaea2.0が公開されたらこのTutorial Seriesはどうしましょう。

もう一回最初から作り直すかもしれません。

6. Houdiniの勉強

6.1 Houdini 19 - Wall Tool 02 [3]を実装する

今週は先週勉強した内容を実装します。

先週、新しいVersionのHoudiniをInstallしたんですが、今週Launcherを立ち上げたら新しいVersionがでてるのでUpdateするか?と聞いてきました。

はい。

を押したらInstallを開始しましたが、数秒後にUpdateに失敗しました。

と出て来ました。

こういうの嫌ですね。

なんか、私のせいでUpdateが失敗したみたいに叱責されている気がします。

別に最新のVersionを使用しなければならない理由もないので先週InstallしたVersionで実装する事にします。

まずFileからNew Projectを開きます。

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

Acceptを押して設定を保存します。

Network PaneにGeometryノードを配置しました。

このGeometryノードの名前をWallToolに変更します。

やり方が分かりません。

散々、色々な事を試して

Parameter Paneの以下の部分を変更すれば良い事に気が付きました。

Geometryノードの中に入ってLineノードを2つ配置しました。

名前をLine_Width, Line_Heightに変更します。

Line_Widthの設定を以下のように変更しました。

結果です。

線が中央の0の点を中心に横に表示されるようになりました。

まずこの-ch(“dist”)/2の意味を調べる事にします。

公式Siteのch expression function [4]に簡単な説明がありました。

ああ、分かりました。

この場合はDistの値をChが取って来ているんです。

となるとDistが何なのかを知る必要があります。

今度はDistを調べます。

うーん。

見つからなかったです。

DistがParameterであるのは間違いないです。が調べ方が分かりません。

Tutorialを見直したら以下に示した様に

Lengthの値を選択した状態でOriginのZをClickしてDrop Actionと言う名前のBoxを表示してRelative Channel Referenceを選択しました。

すると

のように表示されました。

うーん。

これを試してます。

出来ました。

出来ましたがやり方は違っていました。

Lengthの値を選択したまま、Drag and DropでOriginのZの値のところに持っていきます。

そこでDropすると先程のDrop ActionsのBoxが表示されるので

そこからRelative Channel Referenceを選択します。

この時点で以下のような表示になりました。

ああ、Houdiniの軸はUnrealとは違うんでした。

まあ良いです。

Ch(“dist”)の意味は分かりました。

Lengthの値をPassしているだけです。

-ch(“dist”)/2なのでLengthの値を2で割ってNegateしています。

つまり-0.5です。

更にDirectionの設定が以下のようになっているので

Z軸の正の方向にLineが伸びていきます。

LineのLengthは1ですのでZ軸に沿って-0.5から0.5の長さのLineが生成されます。

うーん。

Lineを一本引く方法を理解するのもこんなに時間がかかるのか。

これが初心者という事なのか。

うーん。

正直、もう疲れて来ています。

次にScene Viewの右端に表示されているTool Barの以下のIconをEnableします。

今度はこれらの全てのIconの機能を調べないといけないのかとげんなりしていたら

何とCursorを重ねたら機能の簡単な説明が表示されました。

どうや。これが単なる初心者との違いや。

と思わず関西弁でドヤってしまいましたが、こういう狡い技を使えるかどうかがProgrammerとしての経験値の高さを示しているんです。

他のIconの機能も調べます。

これはPointの番号を示すそうです。

これの事ですね。

これはPrimitiveのNormal Vectorを表示するそうですが、現時点では何も表示されていません。

最後のこのIconはPrimitiveの数を示すそうですが、現時点では

になっていました。

今あるPrimitiveが0ならPrimitiveのNormalを示す前のIconをEnableしても何も変化しないのも当然です。

はい。

EnableしたIconの機能が全て判明しました。

Line_HeightのParameterも変更します。

長さを三倍にしました。

結果です。

長さが3倍になっていました。

それぞれのLineを以下に示した様にCopy To Pointsノードに繋げました。

結果です。

なんかTutorialの形状と違うと思ったら

TutorialのLine_WidthのLengthは5になっていました。

直しました。

結果です。

今度はTutorialと同じような形状になりました。

このCopy To Pointsノードの機能に関しては

Tutorialで説明されていました。

最初のInputのLineを2番目のInputにあるすべてのPointから再生するはずです。

結果を見てもそのようになっています。

次にNodeの色を黄色に変更しています。

やり方は調べたらすぐに出て来ました。

Network Paneにある以下のTool Barの内

赤線で囲ったIconを選択します。

すると以下のようにColorのPalletが表示されます。

後のやり方はまあ、どのSoftでも同じなので省略します。

次にLine_HeightノードとCopy To Pointsノードの間にResampleノードを追加しました。

結果です。

お、Tutorialと同じになりました。

ReSampleノードがCopy To Pointsノードの2番目のInputにPassするPointsの値を30個に増やしています。

ので結果的に30のLineが生成されている訳です。

次にResampleノードの以下の設定を変更します。

これでSegmentの数、つまり生成されるPointの数は6個になったはずです。

結果です。

なっています。

Resampleノードの名前をResample_BrickRowに変更し色も黄色に変更しました。

更にResampleノードをCopy To Pointsノードに追加しました。

結果です。

うーん。

よく分かりませんが多分、Tutorialと同じ結果でしょう。

Maximum Segment LengthのLengthの値を

としました。

結果です。

凄い。

Brick感が出て来ました。

先週のBlogを見たら同じ感想を書いていました。

名前をResample_BrickSpacingに変更し黄色くします。

次にそれぞれのPointのTangentを表示します。

まずPolyframeノードを追加します。

しました。

何も変化しません。

Poly Frameノードの以下の部分の設定を変更しました。

結果です。

何も変わっていません。

あれ?

TutorialだとここでTangent Lineが表示されています。

Scene Viewの右端にあるTool Barの以下のIconをEnableしてみました。

以下のようにTutorialと同じような結果になりました。

Tutorialで確認したらPolyframeノードを追加する前に、このNormalのIconをEnableしていました。

うーん。

ここで時間が無くなってしまいました。

PolyFrameノードの機能についても調べたいし、今週はここまでとします。

残りの実装や今回使用したNodeの機能などについては来週、調査する事にします。

7. UEFNの勉強

今週もPi Equals Three氏のTutorialをやっていきます。

7.1 Make a UI Button Play A Sequence! UEFN / Creative 2.0 Custom UI Part 2 [5]を実装する

先週、勉強したTutorialを実装します。

<Intro>

今週使用するCustom_UIの確認から行います。

Double ClickしたらVisual Studio Codeを開きました。

Codeもしっかり確認出来ますね。

実行も出来るか確認します。

使い方を忘れてしまいました。

確認します。

2023-08-28のBlogに書いてありました。

Buttonを探したらUFOの発着台の下に埋まっていました。

Gameを実行してButtonを押したらUI画面が表示されました。

UI画面のButtonを押したらGameが終了しました。

ああ、そうだった。

このButtonを押すとGameが終了するように実装したんでした。

関係ないですけどCharacterが変更しています。

うーん。

前のCharacterの方がかっこよかったですね。

<Starting Code>

ここは特にやる事は無いです。

次の作業を行います。

<Reference Cinematic Sequence Device>

動画を管理する変数を追加します。

UEFNに戻ってBuildをします。

UIを表示させるためのDeviceを選択してPropertiesを確認すると

Cinematic Sequenceが追加されています。

Tutorialでは、ここに以下のAssetをセットしていますが、

これを自作する必要があります。

検索するとCinematic SequenceというAssetは元々ありますね。

これの使い方を調べれば良いみたいです。

検索したらCinematic Sequenceの使用方法を説明しているSiteが直ぐに見つかりました。

Using the Cinematic Sequencer in UEFN [6]です。

ここにEmbedされている動画を見たら、Cinematic Sequenceの使用方法は大体理解しました。

Level Sequencerを作成しました。

名前はLS_Testにしました。

これを開いてAnimationを作成します。

以下に示した紫色のイスを追加して

この椅子が移動するAnimationを追加しました。

今回はVerseの勉強が主なので、Level Sequenceの設定はこれくらいで良いです。

Cinematic SequenceのSequenceにこのLS_Testをセットします。

これでOKなはずです。

<Creating Button>

今度は新しいButtonを作成します。

以下のTextを作成しました。

先週のBlogにはここで使用されているLocalizesと言うSpecifierの機能について詳しく説明しています。

Localizesがついていると同じTextでもObjectが違う場合は別であると認識します。

これはいつかテストして確認します。

まだUEFNとVerseの構造を完全に理解した訳ではないので、今の時点ではどうやってテストしたら良いのか分かりません。

もう少しUEFNとVerseの理解が進んだら確認するためのテストの方法も思いつくでしょう。

新しいButtonを作成するための実装をします。

Buttonの作成方法は前のTutorialで勉強した内容と同じです。

<Binding Button On Click Event>

今度はOnClick().Subscribe()関数を実装します。

PlaySequence()関数はこれから作成します。

<Creating Play Sequence Function>

以下のように作成しました。

これでButtonが押されてたらCinematic SequenceにセットされているCinematic Sequence Deviceが起動するはずです。

<Adding Button Widget to Canvas and UI>と<Specifying Button Position on Screen>

Copyして以下のCodeを追加しました。

これであっているはずです。

<Final Result>

テストします。

まずUEFNに戻ってBuildしました。

そしてUpdateしました。

結構時間が掛かりましたがUpdateが完了しました。

Game画面に行ってButtonを押すと以下のUIが表示されました。

Play Sequenceを押します。

Level Sequenceで指定した通り、椅子が移動しました。

はい、出来ました。

8. DirectX12の勉強

8.1 Lötwig Fusel氏のD3D12 Beginners Tutorialを勉強します

今週もLötwig Fusel氏のD3D12 Beginners Tutorialを勉強します。

8.1.1 先週の復習

 Project Setup & ComPointer | D3D12 Beginners Tutorial [D3D12Ez] [9]を実装しています。

思い出しました。

Projectの設定をTutorialの説明する通りにやったんですが、Sample Codeを見ると作成したFileの保存場所が違っていたんです。

作成したFileの保存場所も正しく設定するには、前に勉強した他のTutorialを復習する必要があります。

それを次の週にやる事にして終わったんでした。

Blogを読み直すともう少し詳しく書いてありました。

まずSolution Explorerの違いです。

私のProjectでは以下のようになっています。

Sample CodeやTutorialでは以下のようになっています。

次にFolder Viewの違いです。

私のProjectです。

Sample Codeの場合です。

うーん。

これは先週、設定で指定したFolderであるBuildが無いですね。

これです。

Output DirectoryにBuildを指定しています。

Sample CodeのFolderを開いて確認取ると以下のようになっていました。

Build Folderがありました。

何故かVisual Studioの方には表示されません。

8.1.2 FileやFolderを同じにする

Sample Codeと先週、自分で作成したProjectのFileやFolderを同じにします。

<File>

こっちは適当にやったら出来そうです。

My Projectは以下のようになっています。

Sample Codeは以下のようになっています。

うーん。

分かりました。

まずHeader FileとSource Fileを消します。

そしてMyD3D12Ez_1.cppを追加します。

これで見た目は同じになりました。

<Folder>

こっちの直し方が分かりません。

今私のProjectは以下のようになっています。

Sample Codeは以下のようになっています。

まず全部のFileがSrcと言う名前のFolder内に配置されています。

ここだけ直すなら、MyD3D12Ez_1の名前をSrcに変更したらほぼ同じになります。

以下のTutorialを勉強した時に、このFolderの設定をかなり丁寧に勉強しています。

今はすっかり忘れてしまっていますが、一応このTutorialのFolderの指定方法も復習しておいた方が良い気がします。

ので今から見直します。

2022-10-31のBlog

ここでVSのFolder Viewの設定を変更しています。

読んだんですが特に設定の方で変更する必要はなさそうです。

<>

取りあえず、Tutorialと同じようにする事にします。

Folderの名前をSrcに変更しました。

これでテストしてみます。

Startup Itemを指定しないといけないみたいです。

Please select a valid startup item [7]に以下の回答が書かれていました。

よく分からないけどProject Fileからもう一回開けば良いみたいです。

うん。

出来ました。

Folder Viewを確認します。

あれ?

これはオカシイですね。

元に戻します。

今度はBuildが2つになってしまいました。

うーん。

訳分からん。

新しいProjectを作成して確認します。

以下のProjectを作成しました。

Folder Viewは以下のようになっています。

実際のFolderは以下のようになっています。

1111_test1 Folderの中に

同じ名前の1111_test1 Folderと1111_test1.slnがあります。

この1111_test1 Folderの中には以下のFileがあります。

この時点ではFolder Viewの設定と実際のFolderは同じです。

ここで二番目の1111_test1 Folderの名前をsrcに変更出来れば

Sample CodeのFolderと全く同じになります。

先程それをやったらFolder全体がおかしくなりました。

もう一回試します。

しました。

Folderの名前も変更されています。

これで実行してみます。

うーん。

1111_test1.slnをEditorで開き

赤線の部分をsrcに書き換えました。

これでSolutionから開いて実行してみました。

普通に実行できました。

Folder Viewを見ると以下のようになっていました。

Debugやx64は先週変更した設定で同じになるはずです。

となるとこの方法で直るのか?

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

Buildがsrcの中と外に作成されています。

中のBuildは消します。

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

Debugが2つ作成されています。

これも消します。

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

これであっているはずです。

よく分からん内に出来てしまいました。

これは来週もう一回考える事にします。

今週のProject Setup & ComPointer | D3D12 Beginners Tutorial [D3D12Ez] [9]の勉強はここまでです。

8.2 「DirectX 12の魔導書」の勉強

8.2.1 先週の復習

先週は何を勉強したんだっけ?とBlogを読み直したら

「Chapter 3 初期化から画面クリアまで」の勉強が先週で終わったんでした。一年かけて勉強した第3章がやっと終わったんでした。

すっかり忘れていました。

8.2.2「Chapter 4 Polygonの表示」を軽く読む

今週は「Chapter 4 Polygonの表示」を軽く読む事にします。

本当パラパラとですが全部読みました。

感想ですがChapter 3よりは簡単そうです。

DirectX 12の勉強方法というか教科書の読み方が段々分かってきたのかもしれません。

要は

  • この章で何をするか
  • そのためにどんな関数が必要になるのか

を理解するのが重要なんです。

今回は本当に簡単に全体像を把握するのが大切なのでどんな関数が必要なのかはほとんど無視して、この章で何をするのか?を軸に本を読みました。

この章では三角形の映像を表示します。

そのために、Graphic PipelineをPipeline Stateを使用して構築します。

これを以下の手順で行うんです。

  1. Vertex 情報を作成
  2. Vertex 情報をGPU側にCopyするためのMemoryを確保(Vertex Bufferの作成)
  3. Shaderの作成
  4. Shaderの読み込みなど
  5. GPUに渡したDataが何なのかを説明する機能を追加(Vertex Layoutの作成)
  6. Graphic Pipelineの設定を指定(Graphic Pipeline Stateの作成)
  7. Vertex以外の情報をGraphic Pipelineの外側から渡す(Root Signatureの作成)
  8. Viewportの指定

そしてこれを行うために必要とされるDirectX 12の関数が膨大なんです。

それぞれの工程において使用される関数についてはその時々に詳しく勉強します。

やっとここでHLSLの勉強が出来ますね。

DirectX 12の勉強の目的の内の大きな一つがHLSLを完全に理解して使用出来るようになる事です。

やっとここまで来ました。

まあ、慌てても何も変わらないのでゆっくり確実に勉強していきます。

8.3「Direct3D 12 ゲームグラフィック実践ガイド」の勉強

今週はここで時間が無くなってしまいました。

Direct3D 12 ゲームグラフィック実践ガイド」の勉強はお休みします。

9. まとめと感想

今週もなしです。

10.参照(Reference)

[1] Castle Wall Tool. (n.d.). https://www.youtube.com/playlist?list=PLNbgmFvU__fiPhyUWHHzZ2Nv5ieM_bOdB

[2] Ben Cloward. (2023b, April 6). Subgraphs and Material Functions - Advanced Materials - Episode 21 [Video]. YouTube. https://www.youtube.com/watch?v=F6TaPc90bKY

[3] Rick Banks. (2022, June 20). Houdini 19 - Wall Tool 02 [Video]. YouTube. https://www.youtube.com/watch?v=J2Tf_OIy9CA

[4] ch. (n.d.). Sidefx Documents Houdini. https://www.sidefx.com/docs/houdini/expressions/ch.html

[5] Pi Equals Three. (2023, March 30). Make a custom UI with a clickable Button - UEFN/Creative2.0 [Video]. YouTube. https://www.youtube.com/watch?v=vB6vXZNgzkM

[6] Using the Cinematic Sequencer in UEFN | Community tutorial. (n.d.). Epic Developer Community. https://dev.epicgames.com/community/learning/tutorials/jyp4/fortnite-using-the-cinematic-sequencer-in-uefn

[7] Please select a valid startup item. (n.d.). Stack Overflow. https://stackoverflow.com/questions/47622872/please-select-a-valid-startup-item