UE4の勉強記録

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

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

1. 今週の予定

1.1 今週の予定

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

<Landscapeの作成>

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

Niagara の勉強>

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

<Materialの勉強>

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

<Gaeaの勉強>

Earth and Space Sciences XのTutorialを勉強します。

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

<Houdiniの勉強>

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

<UEFNの勉強>

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

<DirectX12の勉強>

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

前に(2022-10-16のBlogなど)で解説したLötwig Fusel氏が初心者向けのDirectX12のTutorialを英語で発表していました。

半年前位から作成し始めたらしく今まで私のRadarに引っかからなかったです。

最初のTutorialを軽く見たのですがかなり良い感じです。

これも勉強する事にします。

2. Landscapeの作成

2.1 先週の復習について

先週は建物の内部を作成しないとUnreal Engine 5 for Architecture - 2023 Full Beginner Course [1]の続きを進める事が出来ないのが判明したところで終わったんでした。

一応、先週のBlogを読み直して忘れている内容が無いか確認します。

確認しました。

この後で、昔購入して全く読んでなかった建築関連のUEの本を読んだ感想なども書いていました。

以下のような感想を書いていました。

これ、これが結構重要な話だったんです。

これについては新たなIdeaが閃いたのでそれを述べる事にします。

2.2 UEで仮想空間に作成した建物の使い道

実際の設計も3Dで行っていてそのDataをそのままUEにImportして光の当たり具合や、実際に中に入って問題が無いのかの確認をUEで行うだけなら、作成にそんなに時間も掛からないのかもしれません。

3日位で完成出来るかもしれません。

週5で80万円/月だとすると一日4万円です。4x3万円なら12万円なのでそんなに高くないです。

2億や3億の買い物をする人が12万円を惜しむ訳もないです。

40万位ならUEの建築のモデルに出す可能性はあると仮定するなら、2週間は確保できる訳です。

それなら使い捨てでも問題ないかもしれません。

一から作成した場合で100万位製作費がかかる場合を考えてみます。

これだと先週言った通り「要らない。」となる可能性が高いです。

先週述べたYouTuberの例のような

「Studio内で魚を捌くところを撮影するので、どうしても光の当たり具合を確認したい。」

みたいな場合を除いてこんな高額な金額をわざわざ払う人はいないでしょう。

これの解決策を思いついたんです。

これから仮想空間で撮影する事が劇的に増えていくはずです。

この前、伊藤園がAIで作成したCharacterを使用したCommercialを流して話題になりました。

同様な事がこれからもあるはずです。

その時に家の中で撮影したい。

と言う要望も少なからずあるはずです。

この時にこのUEで作成した家を貸し出すのはどうでしょうか?

一日の撮影で賃料、一万円みたいな感じです。

これって結構いけそうな気がします。

Netから繋げられる仮想空間に町を作成して、そこに家を配置しておきます。

撮影したい人はその町の家の中身を自由に見れるようにしておきます。

そして気に入った家があったらそこでその家の持ち主と交渉となる訳です。

家の中身が知られてしまうので、安全に問題があるかもしれませんが、それは町に入れる人達を仮想空間で撮影している実績のある会社の人だけに限るとかにすれば対策可能だと思います。

もしかしたらそういう大邸宅に住んでいる人達はSecurity会社と特別な契約しているのでそもそも泥棒が入る事自体不可能かもしれません。

2.3 先週読んだ建築関連のUEの本の続きを読む

先週、途中まで読んでそれっきりになっていたので一応、全部読む事にします。

最後まで読みましたが、UE4特有の機能だったりUEの基本的な操作などの解説だったりが主でした。

特に記録しておかないといけない事はなかったです。

筆者の最後のまとめみたいなところで、CADのOperatorだったと書かれていたところを見ると今では家の設計はCADで行うのが普通なのかもしれません。

そうするとUEで家を再構築するのも結構簡単かもしれないです。

2.4 建物の内部を作成する

まずFloorで追加していないPropを追加します。

今の時点では以下のPropを使用しています。

FloorのPropは全部で以下のものがありました。

これらのPropを追加します。

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

中身を見てみます。

玄関です。

逆向きになりました。

最初の部屋に入りました。

うーん。

綺麗!

反対側です。

広いですね。

奥の部屋に入ります。

これはBath Roomなんでしょうか?

裏口に通じています。

ドアの上の部分の壁が無いですね。

車庫になっていました。

今度は2階を見てみます。

ここに階段を配置するようです。

2階に来ました。

ここは何か足りないですね。

土台が必要です。

大体理解しました。

今度はDemo画面を見ます。

玄関です。

もう一個ドアがありました。

中に入ります。

凄い。

ここは台所になっていました。

台所の奥です。

DoorやLampが追加されていました。

Doorの中の部屋を見てみます。

真っ暗でしたがBath Roomであってました。

車庫です。

デモの観察はここまでにします。

自分の建物の実装に今まで観察した内容を追加します。

Doorを追加しました。

階段も追加しました。

部屋の奥のドアも追加しました。

Bath Roomと車庫へとつながるところにもDoorを追加しました。

車庫にDoorを追加しました。

2階も作成しますか。

階段を上ります。

右の部屋です。

左の部屋です。

奥の部屋です。

この部屋はBath Roomでしょうね。

奥には更に2つの部屋がありました。

まずDoorを追加します。

裏側です。

ドアの付け方は全く分かりません。

適当に並べただけです。

間違いが判明したら後で直します。

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

3. Niagaraの勉強

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

今週も続きを勉強します。

先週は「Game of Life」の途中まで読みました。残りを読んでいきます。

Game of Life

残りの部分を読んだんですが、実装の内容で流石にこの部分は読んだだけでは理解出来ませんでした。

実装する時にしっかり勉強する事にします。

<木の生成Simulation>

理論と実践に分けて感想を述べます。

理論における感想です。

まず子のNodeの位置の決定方法の図(14.1.8)の説明がよく分からなかったです。

①、②そして③が順番を示してるのかそれとも何か別な事を示しているのか不明です。

更に言うと③だけGrayになっていて①と②と関係があるのかどうかすら分かりません。

Nodeの中には1が書かれていましたがこれが親のNodeを示しいるのか、それとも自身のNodeを示しているのかの不明です。

後、純粋に木を生成する理論とHLSLでそれを実装するための理論の違いはもっとはっきりと分けて解説して欲しかったです。

読んでると先程のNodeの位置の決定方法の図の改良版(14.3.19)がありました。

こっちの方は理解が出来ました。

実装ですが、これは実際にやってみないと分かりません。

ただぱっと読んだ感じだと結構再現するために必要な情報が抜けている気がします。

再現出来るのか心配です。

ここまで読んで確信したんですが、この本にはUEに新しく追加されたNiagara Simulationの機能の解説はなさそうです。

確かにこの本に書かれている内容もNiagaraのSimulationの解説ですが、読むほうはUEに新しく追加されたNiagara Simulationの使い方が解説されていると思ってこの本買っているはずです。

一寸、そのあたりは最初にきちんと説明しておかないと詐欺だと思われかねないです。

<流体Simulation(理論)>

もう、これだけで本書いてほしいLevelです。

この内容こそが私が昔から勉強したかった所です。

どの分野の教科書を読んだらこういう内容が習えるのか分からないので、忙しさにかまけてずっと調べないでいました。

一寸だけ調べます。

うーん。

分からん。

やっぱしどれがこの手法なのか分かりません。

粒子法というのがそうなんでしょうか?

とりあえずはこの章をしっかり読み込む事にします。

今回は軽く読んだだけなので2回、3回と読み込んでいく内にもっと情報が拾えるようになるでしょう。

<流体Simulation(実装)>

はあ。

凄い。

粒子がどうやって水面に変化するのかも長年の疑問でしたが、非常に分かり易い解説がされていました。

この最後の2つの章の内容だけの本を作成して欲しいです。

ただやっぱり本では伝達できる情報がかなり限定されてしまいますね。

この数年ずっとYouTubeのTutorialばかり見てた結果、動画の本に対する優位性を確信するにいたりました。

そう言う訳で本当は動画化して欲しいです。

最後の2章はじっくり読み込む事にします。

この辺は自分のLife Workにしたいのでじっくりゆっくりやって行きます。

4. Materialの勉強

とうとうBen Cloward先生が復活してYouTube上にMaterialのTutorialを上げ始めました。

もうこれは勉強を再開しない訳にはいかないです。

4.1 Tempered Steel Shader - Advanced Materials - Episode 20 [2]を勉強します

今週はこれを勉強します。

まず最初は軽く全部見ます。

と思ったけど時間がそんなに残っていないのでやっぱりいきなりまとめる事にします。

<Intro>

特に重要な事は無し。

<Thin Film Interference>

このTutorialでは以下のような金属の表面を再現するためのMaterialを作成するそうです。

ここでは何でこのような色が金属の表面に現れるかについての光学的な解説がされていました。

結論だけ述べるとこれは前回のTutorialであるIridescent Bubble Shader - Advanced Materials - Episode 19[3]で勉強した現象と同じでした。

今回のTutorialはこの前回勉強した手法と前に勉強した金属の表面を再現する手法を組み合わせてこのような表面を持つ金属を再現するそうです。

金属の表面のTutorialはおそらくこれでしょう。

Brushed Metal Shader - Advanced Materials - Episode 11 [4]

調べたら2023-05-15のBlogで勉強していました。

Blogを読んでみるとAnisotropyを使用すればほぼこの金属感は再現出来るみたいです。

<Shader Setup>

Brushed Metal Shader - Advanced Materials - Episode 11 [4]で作成した以下のMaterialをそのまま使用するそうです。

ここでこのMaterialの内容について簡単に復習しています。

私は先程2023-05-15のBlogを読み直していたのでこの部分の内容は全部知っていました。

のでここにまとめる事はしません。

次にIridescent Bubble Shader - Advanced Materials - Episode 19[3]で作成した実装から以下の部分をCopyして持ってきます。

<Gradient Setup>

金属表面の色を出すためにBubbleの実装の切り取った部分を以下のように改良していました。

この結果をTexture SampleノードのUVsにつなげて

結果です。

これ使用しているTextureがTutorialと同じだったらこの計算方法と同じにやれば良いですが、どうだったんでしょう。

2023-09-18のBlogで確認したんですが分かりません。

どうやってこのBubbleの色とSteelの色を混合するのかと思ったら以下のように

Lerpで混合してBase Colorに繋げているだけでした。

結果です。

それなりに本物っぽいです。

ここからは改良するだけだそうです。

Noiseを追加しました。

結果です。

次は以下のような実装を試していました。

結果です。

うーん。

こっちは何を表したかったんでしょうか?

よく分かりません。

Multiplyノードの値を0.01に変更しました。

結果です。

おお、こっちはどっかで見た事あるような金属になりました。

以下のように組む事で

金属の光沢を出すための熱の加え方をControl出来るそうです。

これだけ聞くと何の事と思ってしまいますが、前の節でこの金属の光沢は炎で金属を炙る事で酸化鉄の膜が出来て発生すると説明していました。

これをまとめるのが面倒だったのでその説明を抜かしてここまで来てしまったのでなんか突然、突拍子もない話になってしまいました。

これは炎で炙る温度を変更するための値になります。

こんな結果になっていました。

紫色は高い温度で炙った場合に発生したはずです。

<Substrate>

Substrate自体は弄ってなかったです。

この機能が使用出来るようになったら実際の酸化鉄の膜を指定出来るようになるみたいだ。とか語っているだけでした。

以上でした。

5.Gaeaの勉強

次のTutorialを作成します。

5.1 GaeaのTutorialの作成

今回は本当のTutorialとしては最初のTutorialを作成します。

まず最新のGaeaをInstallします。

しました。

Versionは1.3.2.7でした。

中身を確認しましたが、今までのVersionと大きな違いは無かったです。

Defaultの画面です。

Tool画面だけ大きくします。

この画面でTutorialをやります。

普通のTutorialはここで画面の説明をしますが、私はしません。

ここで説明されても憶えられないからです。

後KeyboardやMouseで何をしたかを表示する必要があります。

調べます。

大体の人はNoh BoardというGitHubにあるSoftを使用して画面上にKeyboardやMouseの入力を表示しているようです。

これでGaeaを操作している時のMouseやKeyboardの操作を逐一表示出来るようになったんですが、

実際に試してみると、

このSoft、Gaeaを起動するたびに後ろに移動してしまいます。

後ろでMouseの操作方法を表示されても意味ないです。

色々調べたら、OBSという録画用のSoftを使用するか、PowerToysというAppを使用してNoh Boardを常に最前面で表示し続ける2つの方法があるようです。

これは後で検討します。

<追記>

Carnacと言うソフトならInstallするだけで画面の一番上に打ったキーを表示してくれるそうです。

こっちを試してみます。

何とMouseやAltは表示してくれません。

後、日本語にも対応してないみたいです。

解決しました。

https://github.com/bfritscher/carnac/releases/tag/v3-beta

にCarnacからForkしてMouseの機能も追加したのがありました。

これをDownloadして試しました。

MouseのInputもきれいに表示してくれています。

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

<>

今回のTutorialで教える内容は以下の2つです。

  • Gaeaで地形を作成するまでの一連の流れを理解
  • 最初のNodeについて

そうか2つあるから混乱するのか。

今回はGaeaで地形を形成するには以下の3つの事をやる必要がある事を解説すべきだったです。

  1. 地形を作成する
  2. 色をつける
  3. Buildの設定をする

この話を軸にしてTutorialを作り直します。

PowerPointを作り直しました。

このように3つの工程を話の軸にします。

今週のLectureの内容です。

よく考えたらInstallの方法とかの説明もしてなかったです。

このTutorialはUE5を一通り使用出来る人が対象なので、AppのInstall方法すら分からない人はこのLectureの対象外ですが、一応Installの方法は説明する事にしました。

後、以外に大切なのがVersionについての説明です。

GaeaはVersionが変わるとその内容もかなり変わります。

半分位は別物のSoftになったりしています。実際の例で言うと3年位前のGaeaのTutorialを今見ても何の役にも立たないです。

のでこのVersionのTutorialをやっているって事を説明する事が非常に大切になります。

そして今回のLectureの肝であるGaeaで地形を作成するために必要な3つの工程についての解説になります。

こっからDownloadしてで終わりにしようと思いましたが、一応Install方法を録画してそのVideoをここで再生する事にします。

次にVersionの確認についての説明です。

古いVersionだとUIや機能が全く違っていて3年以上前のTutorialは役に立たない事は述べる必要があるのですが、ちょっとくどいかもしれません。

Lectureの予定ではさわりだけ説明して残りはここで説明する事にします。

次のSlideです。

3つの工程について解説しています。

ここでGaeaに画面を切り替えます。

やり方はAltを押したままTabを押します。

すると以下の画面が表示されます。

Tabを押すと次の画面に移動します。

ここで紹介するGaeaのTemplateは来週探します。

最後のSlideです。

以上です。

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

残りは来週やります。

一週間に一回のTutorialをUploadするのはかなり難しいようです。

二週間に一回を目指す事にします。

6. Houdiniの勉強

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

2023-05-15のBlogで述べていたようにCastle Wall Tool [5]の勉強をやります。

6.1 Houdini 19 - Wall Tool 01[6]を勉強する

まず軽く全部見ました。

思っていたより良い感じです。

しっかりとNodeや操作も見せていますし、その機能やLogicも学習者に分かるように説明しています。

以下にこのTutorialの内容をまとめます。

<Intro>

以下のBlock Wall Toolと言う名前のNodeを追加しました。

これが表示されているWindowの名前を忘れてしまっています。

調べます。

2023-04-24のBlogに今まで勉強したHoudiniの内容がまとめられていました。

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

Network PaneがNodeを表示するWindowの名前でした。

Paneは一枚の板ガラスと言う意味で発音はPainと同じです。

UEのPCGを勉強したお陰でHoudiniはどの辺を勉強すべきなのかが前よりはっきり見えるようになりました。

このNodeの使い方を勉強するのがHoudiniの勉強なんです。

どうやってこのNodeが作成されているのかを勉強するのはHoudiniでProgrammerとして働きたい場合を除いてHoudiniの勉強の範囲外なんです。

これが前は分からなかった。

今回のTutorialで勉強する以下のNodeなんて

壁のBrickを作成するために専用で作成されたNodeです。

こんなの壁を作成する以外に使用方法なんて無いです。

そしてそんなNodeの使い方を勉強するのがHoudiniの勉強なんです。

今まで私はHoudini社の天才が世界の全てをProceduralな方法で表す数式を発見したんだと思っていました。

だからその根本的な考え方を理解しないと駄目だと勝手に思ってそこを理解しようと一生懸命、Tutorialを勉強していました。

そんなものは無いです。

それぞれのThing、例えば城の壁とか家の屋根とかに特化すれば、Proceduralな方法で表す事が可能な事、そしてそれを組み合わせると想像以上に本物そっくりなAssetやEnvironmentを作成出来る事がHoudiniの秘密だったんです。

Brick Wall ToolノードはScene Viewでは以下のように表示されています。

Parameter Paneに表示されているBrick Wall ToolのParameterです。

この中にある基礎Parameterの値を操作してScene Viewに表示されている壁の形状を色々変形させています。

これは来週、実装する時に試します。

<Noise>

今度はBrick Wall ToolのParameterに表示されているNoiseの値をいじっています。

こんな形状になっていました。

ここに紹介されているそれぞれのParameterは来週実装する時に試す事にします。

次にBuild ModeをOffにしました。

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

うーん。

Build Modeは何をしているんでしょうか?

<Curves>

今度はBrick Wall Toolノードの左側のInputについてです。

Curveノードを追加します。

Curveノードは

以下のTool BarのCurve Iconを押して

以下のCurveの特性を指定する箇所から

NURBS Curveを選択します。

そして以下のようにMouseで適当に描いて

Scene View上に追加していました。

この時Mouseでどんな操作をしているのかはTutorialの画面上に表示されていませんでした。

実装する時は適当にやってみます。

そして以下のようにCurveノードをBrick Wall Toolノードに接続しました。

結果です。

なんか凄い事になっています。

Curveの向きが間違っていたのでそれを直します。

今度の結果です。

おお。

これは良い感じです。

<Second Input>

二番目のInputにSphereノードを追加しました。

このNodeで指定した範囲のBrickを消すそうです。

結果です。

確かにこのSphereで指定している範囲と重なっている部分のBrickが消えています。

<Final Thoughts>

最後にBrick Wall Toolノードの以下のParameterをいじって

Brickの色を変更していました。

この後、一寸だけ以下のMaterialの設定方法についての解説もしていました。

がその部分はこのTutorialの範囲外だそうです。

今週は久しぶりにHoudiniの勉強をしたのでこの位で終わりにします。

7. UEFNの勉強

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

7.1 How to Make Custom Vehicles in Fortnite - UEFN / Creative 2.0 [6]を実装する

今週は先週勉強したHow to Make Custom Vehicles in Fortnite - UEFN / Creative 2.0 [6]を実装します。

<Intro>

やる事は無いので次に行きます。

<Place UFO Device>

UFO SpawnerをLevel上に展開します。

これがUFO Spawnerみたいです。

Level上に配置します。

思ったより大きいですね。

<Create Prop>

BlueprintからPropを作成します。

名前はProp_CustomShipにしました。

<Add Static Mesh Component>

中を開きStatic Meshを追加します。

Static Meshに追加する素材をFabから探します。

これですね。

追加しました。

Prop_CustomShipに戻ってStatic MeshにこのHot DogのBunをセットします。

結果です。

うーん。

小っちゃくない?

先週のBlogのまとめを見るとその前にCollisionの設定をいじっていました。

Hot DogのBunのCollision Presetの設定をNoCollisionに変更していました。

そしてHot DogのBunのSizeを変更しています。

Tutorialと同じように14倍にしました。

結果です。

でっかくなりました。

これならUFOの代わりに乗る事も出来そうです。

Sphereを使用してHot Dog Bunの位置を調整しています。

これはSkipします。

Level上に戻ってUFO Spawnerの上にProp_CustomShipを配置します。

ナニコレ?

TutorialとHot Dogの大きさが全然違います。

Tutorialで確認したらSizeを更に大きくしていました。

Hot Dogの大きさを100倍にします。

これならそれなりにUFOとして乗れそうです。

<Create Verse Device>

新しいVerse Deviceを作成します。

Verse Explorerに戻って

Hot_dog_ship_deviceを開きます。

VS Codeを開くといつもと同じ画面が表示されました。

以下の2つのModuleを追加しました。

更に以下に示した2つのObjectを生成しました。

<Get List of All Players>

次は変数であるPlayerListを作成します

先週のBlogで

と書いています。

ArrayのInitializationの方法を確認します。

公式SiteのArray[7]を見つけました。

丁寧に解説されていました。

でもこの例だとVarは使用していませんね。

これでもArrayのElementは交換できるんでしょうか?

公式SiteのArray[7]の例を見ると

ArrayのElementを変更している方のArrayはVarで作成されていました。

ArrayのElementを交換したいならVarを付ける必要があるようです。

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

はい。

<UFO Enter and Exit Functions>

OnBegin()関数に以下のMethodを追加します。

これはPlayerがUFOに乗ったり下りたりしたら発動するEventを設定しています。

こんどはHandleEntersUFO()関数とHandleExitsUFO()関数を作成していきます。

まず以下のVariableを作成しました。

更にHandleEntersUFO()関数とHandleExitsUFO()関数を作成しました。

<Create main UFO Teleport Loop>&<Get Player Position/Rotation>&<Configure Prop.TeleportTo Function>

残りの節は一気にやって行きます。

DoHotdogFollowUFO()関数を作成しました。

最後にこの関数をOnBegin()で呼び出します。

<Reference Prop and UFO Spawner>

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

しました。

Hot_Dog_Ship_DeviceをLevel上に配置します。

そしてHot_Dog_Ship_Deviceの2つのParameterにInstanceをセットします。

これで完成したはずです。

<Final Result>

テストします。

正し今の状態でテストすると前のTutorialで作成したcabbageが追いかけてきてTestどころではなくなるので、Cabbageを追いかけるDeviceはLevel上から消しておきます。

Sessionを開始しました。

結果です。

UFOに乗っている間、そのUFOにHot DogのBunが付いて来ています。

UFOから降りるとHot DogのBunはUFOの場所に留まっています。

うん。

出来ていますね。

はい。

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

8. DirectX12の勉強

今週からLötwig Fusel氏の以下のTutorialも勉強する事にします。

D3D12 Beginners Tutorialです。

8.1 D3D12 Beginners Tutorialの勉強

8,1,1 Project Setup & ComPointer | D3D12 Beginners Tutorial [D3D12Ez] [8]を勉強する

無理をすると続かないので、一回の勉強でLectureは10分程度聞く程度にします。

まずProject Settingから説明しています。

Platformにはx64だけがセットされているようにしろ。とだけ説明しています。

うーん。

具体的なやり方の説明はなさそうです。

けっこう厳しめのTutorialかもしれません。

Output Directoryの設定です。

このやり方が好きなのでこれでやっている。とだけ説明しています。

Intermediate Directoryの設定です。

これについても具体的な解説は無いです。

見たら分かるでしょう。位の感じで解説していました。

C++ Language Standardの設定です。

これは最新版をセットしたとだけ解説していました。

今度はLinkerのInputの設定です。

D3d12.libとdxgi.lib、更にdxguid.libを追加していました。

ここで簡単なDXGIについての解説もしていました。

Dxguid.libは何のLibraryなんでしょう?

Blog内で検索したけどこのLibraryは今まで使用していないみたいです。

Tutorialの説明を聞くとこのDxguid.libが無いとそもそもDirectXAccessする事が出来ないみたいに解説していました。

Blogから検索してもDxguid.libをどのように勉強したのかが確認出来ません。

のでVisual Studioで作成してるProjectの設定から確認します。

うーん。

LinkerのInputのAdditional Dependenciesの値は何も変わってなかったです。

これは来週、実装する時にもう一回調査します。

更にVC++ DirectoriesのInclude Directoriesの値も変更したそうです。

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

現時点でのProjectは以下のようになっていました。

ここからWindows APIの説明に入るみたいです。

Window.hを追加しました。

このTutorialの説明だとWindows APIを使用するためにはこれさえ追加すればOKだそうです。

うーん。

そうだったけ?

だけどCustomizeする必要が有る場合は以下のようにすると良いそうです。

まずSupport Folderを追加します。

いやこの表示の仕方はFolderじゃないんだ。

なんだっけ。

Fileだったけ?

いやFileはHeader FileやSource Fileを指します。

調べます。

Filterだった。

うーん。

Support FilterにWinInclude.hを作成します。

以下のような実装を追加しました。

Tutorialでは最大値を大きくするみたなNOMINMAXについての簡単な解説をしていましたが、あんまり実感が湧かなくて理解出来ている気がしませんでした。

これは来週、調べる事にします。

更にd3d12.hやdxgil_6.hなどもIncludeしました。

更にDebug Layerを使用するために

D3d12sdklayers.hも追加していました。

うーん。

Debug Layerを使用するのにこれをIncludeする必要があるの?

他のTutorialではこんなのIncludeしていないです。

まだこの辺の謎を解明するには知識が足りなさすぎます。

今回は動いたらOK位にします。

更にdxgidebug.hも追加しました。

これでWinInclude.hは完成だそうです。

Main.cppに戻ってWinInclude.hをIncludeします。

ここで大体、Tutorialの10分位を勉強しました。

今回の勉強はここまでとします。

来週、実装してみます。

8,1,2 Project Setup & ComPointer | D3D12 Beginners Tutorial [D3D12Ez] [8]を勉強した感想

うーん。

まだDirectX 12を勉強するための準備なのであんまり感想と言う感想はないです。

このDirectX 12を使用するためのVisual Studioの設定方法について一番詳しく解説していたTutorialって

OlympusMonsTutorials氏の C++ DirectX 12 Game Engine - [S01E01] - Creating Our First Window [9]なんです。

2022-10-23のBlogを見るとこのTutorialの詳細なまとめがあります。

あれ?

丁度、一年前のTutorialですね。これ

たった一年ですがDirectX 12の勉強もそれなりに進みましたね。

この辺のBlogは来週、実装する時に読み直す事にします。

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

8.2.1 先週の復習

「3.4.2 Fence」を実装しました。

Fenceがどうやって機能するのかをしっかり理解しました。

このFenceの説明に関して言うともう一個の教科書である「Direct3D 12 ゲームグラフィック実践ガイド」は役に立たないです。

8.2.2 「3.4.3 Resource Barrier」を勉強する

まず軽く全部読みます。

Resource BarrierはResourceの状態遷移をGPUに伝えるが役目だそうです。

ああ、思い出しました。

GPUがResourceの状態が間違っていると認識してErrorになったんでした。

それをGPUにこのResourceの状態は今はこうなっているからErrorじゃないよ。と教えるのがResource Barrierでした。

そう言えばLötwig Fusel氏のTutorialでも

Resource State | D3D12 Beginners Tutorial [D3D12Ez][10]と書かれていて、ResourceのBarrierではなくResourceのStatusになっていますね。

今、軽く見たらしっかりResourceBarrier()関数を使用していました。

<Resource Barrierの設定>

Set Render Targets()関数を呼ぶ前辺りに

Resource Barrier()関数をセットします。

ここでResourceBarrier()関数の2番目のParameterであるBarrierDescの三番目の要素がUnionになっています。

このUnionについては2023-08-14のBlogで散々勉強したので今回はSkipします。

教科書を読んだらこのBarrier Descの構造は大体理解出来たんですが、一応ここにもまとめておきます。

まずResourceBarrier()関数のParameterから調べます。

公式SiteのID3D12GraphicsCommandList::ResourceBarrier method (d3d12.h)[11]です。

この説明は抽象的過ぎて何を説明しているのか全く分かりませんね。

一個目のParameterについての解説です。

教科書の解説によるとこれは1で良いそうです。

次のParameterがBarrierDesc構造体です。

公式SiteのD3D12_RESOURCE_BARRIER structure (d3d12.h)[11]を見ます。

教科書の説明と全く同じでした。

教科書では

  • Type:D3D12_RESOURCE_BARRIER_TYPE_TRANSITION
  • Flags:D3D12_RESOURCE_BARRIER_FLAG_NONE

が選択されていました。

BarrierDesc構造体内でUnionで作成させているTransitionです。

もう公式SiteのD3D12_RESOURCE_TRANSITION_BARRIER structure (d3d12.h)[12]を見て勉強しましょう。

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

ここで重要なのはStateBeforeとStateAfterです。

しかし一番私が疑問があるのが最初のParameterであるResourceなんです。

これ一寸だけ調べます。

公式SiteのD3D12_RESOURCE_TRANSITION_BARRIER structure (d3d12.h)[12]によると

となっています。

Sample Codeには

がセットされていて_backBufferがそのResourceを表している事が分かります。

この_backBufferって何だっけ?

調べたら以下の箇所で作成していました。

うーん。

DXGIのSwap Chain Descから作成したswcDescをSwapChianにあるGetDesc()関数で値をAssignしています。

そのswcDescのBufferCountを使用して作成されていますね。

うーん。

いや、これはVectorなので値はAssignされてはいません。単にID3D12ResourceをswcDescのBufferCountの数だけ作成しただけです。

それ以降の実装である以下の部分で

_backBuffersのそれぞれのVectorがAssignされています。

おお、やっと意味が分かりました。

すると今度は以下のbbIdxの意味が不明です。

ID3D12ResourceはswcDescのBufferCountの数だけ作成しています。

今どれが使用されているのかをこのbbIdxが示しているんでしょうか?

Sample Code見たらそのようでした。

はい。

もうこれで大体理解出来ました。

後は、いつこのResourceの状態が変わったと認識するかだけです。

Sample Codeを見るとCommand ListのClearRenderTargetView()関数を呼び出した後で

Resourceの状態が変化したとGPUに宣言しています。

うーん。

宣言する時はSet Render Targets()関数を呼ぶ前にしていて、Resourceの状態が変化した時はClearRenderTargetView()関数を呼び出した後でするのか。

納得出来るような出来ないような感じですね。

今週の「DirectX 12の魔導書」の勉強はここまでにしますか。

Resource Barrierの宣言する場所については来週まで一寸だけ考える事にします。

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

8.3.1 先週の復習

先週はFenceの意味が分からなかった原因はこの教科書がしっかり説明してなかったからだと言う事が判明したんでした。

その後で「2.4 Direct3D12の描画処理」を読んでる途中で時間が無くなってしまったんです。

具体的に言うと<2.4.2 書き込みのためのResource Barrier>を読んでいる途中で終わっています。

今週も「2.4 Direct3D12の描画処理」の続きを読む事にします。

8.3.2 「2.4 Direct3D12の描画処理」の続きを読む

<2.4.2 書き込みのためのResource Barrier>

もうResource Barrierの機能は大体理解しました。

その観点からこの解説を読むとこれ間違っているとまでは行かないですけど、あまり正確な説明じゃないですね。

Resource Barrierの機能はLockと同じじゃないです。

Resource BarrierはCPUからGPUにそのResourceがどんな状態になっているかを連絡する事です。

うーん。

この教科書で勉強するのもそろそろ考えた方が良いかもしれません。

FenceのIncrementの説明といいResource Barrierの説明といい正確とも学習者に十分な情報を提供しているとも言い難いです。

もう一寸だけ勉強したらこの教科書で勉強を続けるかどうかを考える事にします。

<2.4.3 Render Target Viewの設定>

Sample Codeの以下の部分の説明をしていました。

OMSetRenderTargets()関数とClearRenderTargetView()関数がClearした時の背景の色を指定しているんでした。

ここで用事が入ってしまって勉強を中止する必要が出て来てしまいました。

うーん。

まあしょうがない。

残りは来週読む事にします。

9. まとめと感想

なし

10. 参照(Reference)

[1] Gediminas Kirdeikis. (2023, April 30). Unreal Engine 5 for Architecture - 2023 Full Beginner Course [Video]. YouTube. https://www.youtube.com/watch?v=bT8aSTkpkDY

[2] Ben Cloward. (2023, March 30). Tempered Steel Shader - Advanced Materials - Episode 20 [Video]. YouTube. https://www.youtube.com/watch?v=mRqWzBCm1uY

[3] Ben Cloward. (2023, March 16). Iridescent Bubble Shader - Advanced Materials - Episode 19 [Video]. YouTube. https://www.youtube.com/watch?v=bN84YxaBEGw

[4] Ben Cloward. (2022, December 15). Brushed Metal Shader - Advanced Materials - Episode 11 [Video]. YouTube. https://www.youtube.com/watch?v=POwYQtq-1jU

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

[6] Pi Equals Three. (2023, April 1). How to make custom vehicles in Fortnite - UEFN / Creative 2.0 [Video]. YouTube. https://www.youtube.com/watch?v=T3krv-HgksI

[7] Array. (n.d.). Epic Developer Community. https://dev.epicgames.com/documentation/en-us/uefn/array-in-verse

[8] Lötwig Fusel. (2023, May 1). Project Setup & ComPointer | D3D12 Beginners Tutorial [D3D12EZ] [Video]. YouTube. https://www.youtube.com/watch?v=rF30qoUFDq8

[9] OlympusMonsTutorials. (2021, February 17). C++ DirectX 12 Game Engine - [S01E01] - Creating Our First Window [Video]. https://www.youtube.com/watch?v=2vrEIhAajhM

[10] Lötwig Fusel. (2023, July 8). Resource State | D3D12 Beginners Tutorial [D3D12EZ] [Video]. YouTube. https://www.youtube.com/watch?v=yWg0TVahQzI

[11] Stevewhims. (2021, August 3). D3D12_RESOURCE_BARRIER (d3d12.h) - Win32 apps. Microsoft Learn. https://learn.microsoft.com/en-us/windows/win32/api/d3d12/ns-d3d12-d3d12_resource_barrier

[12] Stevewhims. (2021, April 2). D3D12_RESOURCE_TRANSITION_BARRIER (d3d12.h) - Win32 apps. Microsoft Learn. https://learn.microsoft.com/en-us/windows/win32/api/d3d12/ns-d3d12-d3d12_resource_transition_barrier