UE4の勉強記録

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

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

1. 今週の予定

先週は、YouTubeの動画の作成に思っている2倍以上の時間と労力をとられてしまい、全体的に勉強の量をかなり減らす結果になりました。

特にDirectX12の勉強をする時間は全く取れませんでした。

ので今週はUEの勉強に集中してやる事にします。

1.1 今週の予定

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

<Landscapeの作成>

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

Niagaraの勉強>

先週、作成したアニメ調の炎を更に磨き上げます。

<Materialの勉強>

Ben Cloward先生のAdvanced Material Seriesの続きを勉強します。

<Gaeaの勉強>

Earth and Space Sciences XのLecture 8の続きを勉強します。

GaeaのTutorialの作成の続きをやります。

<Houdiniの勉強>

Free Time Coder氏のUnreal PCG Tutorial [1]の続きを勉強します。

<UEFNの勉強>

 Unreal Editor for Fortnite Beginner Tutorial - UEFN Starter Course! [2]の勉強の続きをやります。

<DirectX12の勉強>

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

2.Landscapeの作成

先週勉強したMagnet VFXUnreal Engine 5.1Beginner Tutorial - UE5 Starter Course 2023 [3]を実装します。

2.1 Unreal Engine 5.1Beginner Tutorial - UE5 Starter Course 2023 [3]を実装します

まずこのTutorialのために新しいMapを作成しました。

<Lighting Setup>

Emv. Light Mixerで以下のObjectを追加しました。

Exponential Height FogのVolumetric FogをEnableしました。

これが

こうなりました。

こんな説明がされています。

読んでも意味が分からないですね。

まず最初の文ですが、Scalability Settingが何を指しているのか不明です。

次にStartDistance、FogMaxOpacity、そしてFogCutoffDistanceが何をやっているParameterなのかが分かりません。

まあその名前から大体は想像できますが。

次の文の意味は何となくは理解出来ますね。

「Volumetric Fogの計算結果とExponential Height Fogの計算結果は一致しません。なぜならExponential Height fogは物理的な振る舞いに基づいて計算されていないから。」

という事を言っているはずです。

という事はVolumetric Fogの方はある程度かもしれませんが、一応物理的な振る舞いに沿って計算されているのかもしれませんね。

次に行きます。

SkyLight0を選択してReal Time CaptureをEnableします。

こっちのParameterも初めて使用します。

Real Time Captureは以下のような説明がありました。

こっちの説明の意味は分かりますね。

PluginのModeling Tools Editor Modeは最初からEnableされてありました。

それではModeling Modeを使用してみます。

Rectを選択します。

ModelingのところにRectのPropertiesが表示されました。

中央に配置します。

いつCreate Rectangleボタンを押すんでしょうか?

Tutorialで確認します。

これをやる前にSubdivisionの設定を変更していました。

それをやります。

Wireframe Modeに変更します。

Width SubdivisionとDepth Subdivisionの値を200に変更します。

結果です。

ここでAccept Buttonを押します。

このRectangleをDuplicateして以下の形状を作成しました。

これだけでもかなりの迫力です。

<Materials Setup>

使用するMaterialをQuick BridgeからDownloadします。

まずCharred BricksをDownloadしました。

品質はどれを選択すべきか分かりません。

一応Medium Qualityを選択しました。

映画用だとこういうのは全部High Qualityを使用するのかもしれません。

Coal AshをDownloadします。

Powdered Coal and SoilをDownloadします。

はい。

三種類のMaterialのDownloadが出来ました。

<Materials Instance>

ここからMaterialをBlendします。

先程Downloadした3つのMaterial Instanceを選択します。

3つのMaterialは最下層から選択して表面を最後に選択するそうです。

そしてQuixel Bridgeに戻って以下のIconを選択します。

以下のBoxが開かれました。

Create Material Blendを押します。

こんなErrorが表示されました。

調べたらQuixelのForumのUnable to create blend materials UE5.2 [4]に同じ結果になる人達が大量に集まっていました。

これを読むとUE5.2のBugの様です。

以下の方法で回避出来るそうです。

試してみます。

Material Instanceを一個だけ選択してBlend Materialを作成しました。

ここからどうやって2つのMaterial Instanceを追加するのかが分かりません。

取りあえずこれを開きます。

うん。

ここに追加すればいいのか?

しました。

Top Layerも同じ感じでセットします。

取りあえずこれで出来たことにして次をやって行きます。

<Blend Material>

Use Puddle LayerをEnableしました。

Level上に配置しているRectangleに適用しました。

Specular Lightが強すぎますね。

これはTutorialでは調整してないので今の時点では放置しておきます。

Tilingの調整をします。

結果です。

レンガのサイズの大きさは小さくなりましたね。

<Paint Mode>

それではLayerを塗っていきます。

まずMesh Paint Modeに変更します。

Paint Colorを黒くします。

ChannelをRedのみの選択にします。

以下の結果になりました。

うーん。

なんか全然印象が違います。

GreenのLayerも塗りました。

なんか全然違いますね。

Tutorialのは色が黒いんです。

Puddle Layerも試してみます。

こっちは綺麗に出来ていますね。

取りあえず別のStatic MeshにもPaintする方法を試します。

こっちは普通に出来ました。

光の角度を変えたら更に白くなっています。

うーん。

この問題は後で考えます。

Puddleの波の調整を試します。

Liquid Wave Controlの値を以下の様に変更しました。

Puddleに波が発生しました。

これは問題なく操作出来る事が確認出来たので先程の問題に戻ります。

TextureのBrightnessとBrightness Curveの値を以下の様にしました。

結果です。

それなりに黒くなりました。

今回はこの方法で直す事にします。

他のTextureの値も調整しました。

ここから最高に調整して以下の様になりました。

まだまだですね。

ここだけずっとやっている訳にもいかないので先に進みます。

<Walls>

今度は壁のMaterialを作成します。

以下の3つMaterialをQuixel BridgeからImportしました。

以下の様になりました。

<Shadows>

Blend MaterialのTwo Slideは既にEnableしてあります。

Wallの影が地面に投影されています。

MegaScans-Urban Alleywayを追加しました。

DownloadしたAssetを使用して以下の様にConcreteの柱を追加しました。

以下の様にDecalを追加しました。

思っていたより操作が難しかったです。

今度はSoul: Cityを追加します。

屋根を作成しました。

こんな感じになりました。

私の目には相当Realに見えます。

まだ拙い部分がかなりありますが本物の写真に見えなくもないです。

結構これだけでも凄いです。

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

3.Niagaraの勉強

3.1 アニメ調の炎のEffectの作成

先週作成したアニメ調の炎の精度をもっと上げていきます。

先週の結果を以下に示します。

まず直したいのが、Gradationがあり端の色が黒ずんでいる所です。

その後で、色は固定して赤と黄色っぽいOrangeの2つにする事にします。

その後で黒や光も追加しようと思います。

<Gradationを無くす>

Materialを開きEmissive Colorの手前でCeilノードを追加しました。

これで0.8とかの曖昧な値は全部1に底上げされるので、Gradationが無くなるはずです。

テストします。

黒ずんだGradationは無くなりましたが、炎の色が黄色になってしまいました。

あ、この理由が分かりました。

以下の実装にある通り

色の指定をした後で、Ceilingを掛けているので、オレンジのようなGの値が1以下の色の場合、Gの値が強制的に1に底上げされてしまうので黄色になります。

以下の様に実装を改良しました。

SUBUV(Texture Sample)ノードのすぐ後にCeilノードを追加しました。

こんな感じになりました。

うーん。

成程。

まず色ですが、赤から黄色まで色々な色が表示されるようになりました。

しかし後ろのParticleは全く見えないです。

更に炎の上の部分が切れています。

以下の様に実装を変更してみます。

これでOpacity Maskの計算はCeilingが掛からなくなりました。

結果です。

これは先週の炎と同じ形状をしています。

ただし黒ずんだ色のGradationは無くなりました。

<Opacity MaskにはCeilingした結果を追加した方が良いのか>

2つの結果を比べると、Opacity MaskにもCeilingした方が炎っぽい見た目をしています。

ただし枠の上の方が切れているのが確認出来るためあんまり見た目は良くないです。

以下の様にMask Opacityの計算にCeilingの代わりにStepノードを追加してみました。

このStepノードは何故か公式の解説がないNodeでその機能を自分自身で解明する必要がありました。

今、検索して調べたら公式のMath Material Expressions [5]にStepノードの解説がありました。

以下のVersion情報から確認するとStepノードの解説はUE5.0から追加されたようです。

このNodeの機能を簡単に言うと

Yの値とXの値を比較して、Yの値より小さい場合は0、大きい場合は1に変換します。

つまりCeilingの時は0以外は全部1に変換していましたが、今回はStepノードを以下の条件で使用する事で

0.2以下を0それ以上を全部1に変換します。

結果です。

炎の形状はCeilingの時よりも崩れていますが、炎の上の部分が切れている事は無くなりました。

取りあえずこれを採用する事にします。

<新しく生成されたSpritを常にCameraから見て前に表示するようにする>

新しく生成されたSpritを常にCameraから見て前に表示するようにしたいんです。

そしてUEにはそれが出来る機能がある事も知っています。

どこかでそれを勉強した記憶があります。

しかしそれの名前もどこで勉強したのかも覚えていません。

ぱっとNiagaraの実装を確認するとRender SectionにあるSprite Renderノードの

Sort Modeが怪しいです。

これでBlogを検索してみます。

見つかりません。

今度はSortingで検索してみます。

2021-12-26のBlogにSort Modeの詳しい解説が載っていました。

何とSorting Modeと書いていました。

これでは検索に引っかからない訳です。

それはともかくこのBlogを読むと以下の様にCustom Descendingが新しいSpriteを常にCameraの前に持ってくるようです。

Sort ModeをCustom Descendingに変更しました。

結果です。

あんまりよく分かりません。

Particle Update SectionにScale Color Moduleを追加して

以下の設定にします。

更にParticle Spawn SectionにInitialize Particle Moduleの

Linear Colorの色は以下の様に黄色に設定しました。

結果です。

この設定では黄色が常に前に存在してなければならないはずです。

しかし実際は赤い炎が全面に出て来る時があります。

うーん。

2021-12-26のBlogで勉強したCGHOW氏のFlower Effect in UE4 Niagara Tutorial [6]のTutorialの復習が必要ですね。

今週はここまでとしてこの続きは来週やる事にします。

4.Materialの勉強

Ben Cloward先生のYouTube Channelは2カ月前から更新が止まっています。

今まで2年近くBen Cloward先生のTutorialで勉強していますが、こんな事は無かったです。

そしたら最新のTutorialに以下のような説明がありました。

安心しました。

特に問題は無いみたいです。

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

4.1 Glass Shader - Advanced Materials - Episode 16 [7]を勉強する

まず軽く全部見ます。

UEのところだけ見ました。

以下にTutorialのUEの部分の内容をまとめます。

まずMaterialのBlend Modeの設定をTranslucentに変更します。

更にLighting ModeをSurface Translucency Volumeに変更します。

Opacityの値を0.35にします。

結果です。

今度はSpecularの値を10にしました。

これは1との違いが分かりません。

Ben Cloward先生は

と言っていますが、

違いは無いと思います。

これは実装する時に確認します。

あ、そうだReflectionは反射、Refractionは屈曲の事です。

今度はRefractionの値を変更します。

結果です。

Refractionしています。

TutorialによるとこのRefractionの値はIntuitiveな操作で望みの結果を得る事が難しいそうです。

ので以下の実装を足します。

更にFresnelノードの値を

にします。

すると

ガラスを表面から見た時にはRefractionはほとんど起きませんが、

横から見た時は

Refractionが起きます。

今度はRoughnessに0をセットします。

結果です。

Reflectionが少しだけ追加されたと言っていますが、私には全く同じ見えます。

ひょっとするとYouTubeの圧縮でReflectionは見えなくなっているのかもしれません。

あ、Glassを横に動かした時にReflectionが見えました。

止まっている時は分かりませんが、確かにGlassが動いている時はGlassに映っている何かが見えます。

椅子の周りに2本の黒い線が見えます。

これが映っている何かで、Glassを動かすとこの黒い線が移動します。

こっちの方がはっきり分かります。

Glassの後ろにある木々がGlassに映っています。

今度はFrosted Glassの作成方法についてです。

Spiral Blur- Scene Textureノードを使用します。

以下の様に設定します。

TutorialではそれぞれのParameterの機能について詳しく解説していますが、ここにはまとめません。

更に以下の様にResultノードにつなげて結果を見ます。

結果です。

Frosted Glassになりました。

この後も色々していますが、実装とは関係ないのでここで終わりにします。

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

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

5.Gaeaの勉強

今週もGeologyの勉強とTutorialの作成の2つをやっていきます。

5.1 Earth and Space Sciences Xの勉強

今週もGeology 8 (Weathering and Erosion)[6]を勉強します。

<Chemical Weathering and Dissolving>

最初のSlideです。

Chemical WeatheringがDissolvingとOxidizingの2つで構成されている事を説明しています。

DissolvingはAcidによって溶かされる事を指し、OxidizingはElectronを失う化学反応を指すと説明されています。

これ、化学的な見地からしたらどっちも同じ気がします。

Oxidationって酸化って意味で酸によって溶かされる事も含んだはずです。

Ferromagnesian Mineralが溶かされる事を知っておくのが重要みたいです。

次のSlideです。

題はChemical Weathering of Graniteとなっています。

Graniteって何だっけと思って調べたら2023-06-11のBlogで勉強していました。

これでした。

<Products of Chemical Weathering>

ここではChemical WeatheringによってどんなProductが生成されるのかについて解説しています。

Clay mineralがもっとも多く生成されると言っていますが、Clay Mineralって土器を作成する時に使用するヤツでしょうか?

後、Quartz Grainsって単に細かくなって粉になっただけですよね。これってPhysical Weatheringに分類されるべきじゃないのかな。と思いました。

<Weathering・Alteration caused by Chemical Weathering>

このSlideの話のPointは「岩はChemical Weatheringにさらされると丸くなる。」って事です。

色々な角度から岩の表面はChemical Weatheringによる攻撃を受けます。その結果、体積比で最も表面積の小さい球の形状に近づく訳です。

<Goldich Stability Series>

ここではChemical Weatheringに対する抵抗性について説明しています。

Mechanical Weatheringによって岩の表面積が増加するとそれに伴ってChemical Weatheringの進行速度も進みます。

酸に溶けやすい成分が含まれる岩はChemical Weatheringによって溶けやすいです。

<Climate and Weathering>

ここで説明されている内容は以下の2つです。

  • Climateについて
  • 暖かくて湿度の高い気候がChemical Weatheringを促進する

まずClimateについてですが、これは気温と湿度の事だそうです。

暖かくて湿度が高いClimateな地域ではChemical Weatheringが最も効果的になります。

<Differential Weathering>

最後にDifferential Weatheringについて解説しています。

これは同じ気候でほぼ同じ条件の地形でも岩によって浸食の割合が全然違っている事を表現しています。

岩の中に浸食されにくい成分があるとその部分だけ浸食されずに残ります。

この部分をGeologyではhoodooと呼びます。

アメリカ先住民の言葉だそうです。

別なHoodooの例です。

これなんかキノコにしか見えないです。

以上でした。

5.2 GaeaのTutorialの作成の続き

先週は以下のような感じで2色に色分けする実装を勉強しました。

しかしこれでは全く美しくないし、本物っぽくも無いです。

今回はこれを本物の山の様に調整します。

大体以下のような感じになります。

まだまだ本物には程遠いですが、先週の結果と比較すると段違いの出来です。

まずConstantの色を実際のTerrainにふさわしい色に変更します。

Dataを無くしてしまったので以下のような新しいTerrainに色を塗り直しました。

まずConstantノードの値を変更する事で赤を以下の色に変更しました。

青は以下の色に変更しました。

結果です。

前よりもマシですが、色の境界がはっきりしているのが変です。

色の境界をぼやけさせます。

Heightノードを選択して

Falloffの値を変更します。

するとこれが

こうなります。

灰色の部分は両方の色が混じった箇所になります。

結果です。

うーん。

あんまりきれいではないですね。

緑を茶色に変更してHeightノードのFall offの値も7%に変更しました。

かなりマシになりましたが、まだ変です。

もう少し、色をまだらに塗りたいですね。

はい。

それにはMaskに使用しているNodeを変更する必要があります。

Heightノードはその高さに応じてMaskをします。

これはNodeの機能を理解するには非常に便利ですが、実用として使用するにはあんまり便利ではないです。

では実際のMaskに使用出来てかつHeightノードの次ぐらいに使用しやすいNodeはどれかというと

以下のSlopeノードになります。

SlopeノードのParameterです。

ほぼHeightノードのParameterと同じですが、高さの代わりに角度が指定できます。

以下の様にParameterを変更しました。

Falloffの値は0にしています。

結果です。

Combineノードの結果です。

色がまだらになりました。

Slopの値をいじってもっと見た目を良くします。

Falloffの値を増やします。

結果です。

どうですか?

かなり前より良くなったはずです。

ここで山の部分を際立出せるために地面だけ別な色で塗りたいと思ったとします。

はい。

その場合は先程のHeightノードを使用します。

以下の実装を追加します。

Combineノードに更にCombineノードを繋げる事で、この実装はLEGO Blockのように無限につなげる事が出来るんです。

以下に簡単に説明します。

Combineノードの一個目のPinに今までの結果を繋げます。

二個目のPinに地面用の色をConstantノードで指定します。

今回は以下の色を指定しました。

三番目のPinにMaskとしてHeightノードを繋げます。

Heightノードの設定は以下の様にしました。

Maxは0.1にセットしています。

以下の様にMaskをしました。

黒い部分はMaskをしているので前の色のままです。

白い部分だけが今回の色で塗られます。

結果です。

あれ、あんまり区別がつかないですね。

しかたない。

最初のConstantノードの色を変更します。

地面が単調です。

地面の色を変更してみます。

あんまり変化しません。

今度はこの平らな部分が単調に塗られて本物っぽくない問題を解決します。

<TextureノードとSatMapノード>

話を簡単にするために以下の実装に変更しました。

結果です。

今度はこの平らな部分にまだらな色を追加する方法を説明します。

これは2番目のConstantノードの実装を改良する事で達成します。

まずData GroupからTextureノードを追加します。

このTextureノードは微妙なMaskを平な地面の部分にもしてくれます。

可視化出来ませんが実際には平らな地面にも微妙なMaskが掛かっています。

その後にColor GroupにあるSatMapノードを追加します。

このSatMapノードは以下の様に

0~1の割合でまだらな色を指定します。

これは例えば0.01と0.02で色がかなり違うような設定になっています。

しかも色々な種類の設定が選択出来ます。

この結果をConstantノードの代わりにCombineノードの2番目のPinに繋げます。

結果です。

平な部分にまだらな色を指定する事が出来ました。

一寸色の差が大きいのでCombineノードのBlendの値を調整します。

結果です。

どうですか。

平な部分にも色を付ける事が出来ました。

この手法は今までConstantノードで色を指定した箇所に全部使用できます。

以下の実装に変更しました。

一番目のConstantノードをTextureノード+SatMapノードに変更しました。

更にこのSatMapノードでは

以下の色の設定を選択しました。

結果です。

かなり立派になって来ました。

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

もう色の付け方の説明方法は大体理解出来ました。

次はTerrainの作成方法の説明をやります。

6.Houdiniの勉強

今週もHoudiniの勉強は少しだけお休みしてFree Time Coder氏のUnreal PCG Tutorial [1]を勉強します。

6.1 Unreal 5.2 Preview PCG Tutorial - Part 4 – Subgraphs [9]の実装の続きをやる

Path Splineを追加したらPath Splineに沿ってPointsが消えるようにします。

とりあえず2023-06-26のBlogにまとめたやり方でやってみます。

PCG_Splineを開き

Outputノードに新しいPinを追加します。

以下の様に設定を組んでいます。

名前はTutorialと同じRoadMaskにしました。

Allowed TypesはPointです。

次にこのPinにBounds Modifierノードの結果を送ります。

PCG_Splineノードの結果は以下の様になりました。

同様の事をPCG_Scatterにも行います。

こちらはInputノードに新しいInput用のPinを追加します。

以下の設定で追加しました。

なんか一個実装を変更する度に2分位止まるようになっています。

最後にDifferenceノードを追加します。

DifferenceノードのDifferences Pinには先程作成したInputノードのMaskを繋ぎます。

更にPCG_SubGraphを開き以下の様にPCG_SplineのRoadMaskとPCG_ScatterのMaskを繋ぎます。

これで完成のはずです。

結果です。

何故かBP_PathSplineが白いBlockの塊になっています。

これを非表示にします。

Debugの表示をPCG_ScatterのDifferenceノードに変更しました。

結果です。

出来てますね。

BP_PathSplineのSplineの位置を変更してみます。

変更したPathにそってPointが消えました。

出来ています。

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

7.UEFNの勉強

7.1   Unreal Editor for Fortnite Beginner Tutorial - UEFN Starter Course! [10]の実装の続き

今週は敵の配置について勉強します。

Guard Spawnerを配置します。

以下の様に配置しました。

とりあえず以下の設定だけ変えました。

敵の使用がよく分からないのでまずTestして確認します。

敵が生成されています。

敵に向けて銃を撃ってみました。

FortniteをPlayした事がないので敵に弾が当たりません。

敵が打ち返してきました。

何とやられてしまいました。

この後、何回が挑戦しましたが全く勝てません。

理由は

  • 敵が永遠に再生される
  • こっちのライフルの弾がなくなってしまう

からです。

これらは後でどう直すのかを検討します。

まずはTutorialの書かれている通りにGuard Spawnerの設定を直します。

Allow Infinite SpawnをOffにしました。

これで敵は一回だけしか生成されないようです。

更にTotal Spawn Limitの値を4にします。

これはこのSpawnerで生成出来る数を指定するそうです。

一回だけしか生成出来ないのに1にしたら一体しか生成出来なくなるという事でしょうね。

次にSpawn Timerの値を0に変更します。

これはSpawnした後にどれくらいしてからSpawnするのかを指定するそうです。

まずはこの設定でTestしてみます。

今度は勝てました。

敵を倒したらRifleが生成されています。

これもどこかで設定しているんでしょうか?

後、全く動かない黒い人が生成されています。

これは消したいです。

まあそれは兎も角、事情はよく分かったのでTutorialの続きをやります。

Guard Typeを変更します。

更にAccuracyをHighにしました。

テストします。

なんと負けてしまいました。

2回目で何とか勝てました。

AccuracyをHighにするだけでかなり強くなっています。

後、敵の見た目も変わっていました。

何回か戦いましたが、勝率は50%ぐらいでした。

Tutorialはこの後で破壊されたくないAssetにはCan be DamagedをOffにしていました。

湖だけOffにしました。

これで一応、Tutorialの内容は全部実装しました。

7.2  Unreal Editor for Fortnite Beginner Tutorial - UEFN Starter Course! [10]の実装した感想

UEFNの基礎の基礎は理解出来ました。

ただまだ分からない部分があります。

  • Mapを公開して誰でもPlay出来るようにする方法
  • Mapから収入を得る方法
  • 同時にPlay出来る人数を決定する方法

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

この方法さえ判明すれば一応、UEFNでGameの作成が出来るようになるわけです。

一応、今年の12月をめどに一個、Gameを公開しようと思います。

来週からそのための調査も開始します。

7.3 Metaverseにおけるインベーダーゲームとは?

Meta社の考えるMetaverseが全く価値の無いものである事はMeta社の株価の急落を見れば素人でも理解する事は簡単です。

しかしEpic Games社の考えるMetaverseがどれくらいの価値を持つものであるのかを理解するのは現時点では3Dの専門家でもかなり難しいです。

Epic Games社の考えるMetaverseは一言で言うとInternetの3D化です。

これは今のChatGPT位世界を変える可能性のある分野で、その革命が起きる前に私も一口乗る事にします。

私のIdeaは簡単で、2Dで流行った初期のGameを3D化してネット上でPlay出来るようにするだけです。

私が選んだGameは

の2つです。

これらをUEFNで作成します。

しかしこれとんでもないブームを起こすと思います。

どうやって版権やGame Systemを守るかも検討する必要があります。

まずInvader Gameの方は、全部ここで作成内容を公開する事にします。

商標とか特許を取る事は最初は考えられないので、全部公開する事で誰かに真似された時に、こっちがOriginalである事を主張します。

そうする事でCreatorとしての価値を守る訳です。

大ヒットした後で、沢山のCopy商品が販売されてもOriginalである事を主張出来ます。

これで版権やGame Systemは守れなくてもCreatorの価値と言う別な形で評価されるようになるわけです。

以下にConcept Artを貼っておきます。

城というかTowerの屋上から進行してくるInvaderを撃つ感じになります。

Third Person型なので後ろから進行してくるInvaderは振り返らない限り見えません。

後、たまに空にUFOが飛びます。

来週からこのGameをUEFNで作成する事にします。

8.DirectX12の勉強

DirectX12の勉強をかなりの期間していなかったので、今週は復習だけします。

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

8.1.1 今までの復習

2023-06-19のBlogに今やっている内容が大体まとめられています。

Command list, Command Queue, Swap Chain, Render Target, そしてDescriptor Heapがなんであるかについて復習しています。

このBlogのまとめを読んだら大体の意味は思い出しました。

本当は今週はこれらの用語の復習をやろうと思っていたんですが、このBlogを読んだら大体思い出したので先に進む事にします。

2023-06-11のBlogを読んだら「3.3.6 Swap Chainを動作させる」の「Render Targetの設定」まで実装していました。

この実装部分を確認します。

ありました。

OMSetRenderTargets()関数の三番目のParameterの値がFalseになっています。

教科書の例ではTrueになっています。

確かSample CodeをそのままCopy and Pasteしたはずです。Sample Codeを確認します。

はい。

Sample CodeはFalseになっています。

教科書の解説を読むと、このParameterは題14章で勉強するMulti-Render Targetの時にしか使用しないそうです。

教科書では一応Trueにしていますが、Falseでも問題ないでしょうね。

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

8.1.2 「Render TargetのClear」を実装する

まず教科書の内容を読み直します。

読みました。

これは簡単です。

単に白でRender Targetを塗り直しているだけです。

何故Clearしないと画像の変換が出来ないのか分かりませんが、そうする事で何かのMeritがあるんでしょうね。

実装部分をSample Codeで確認します。

ClearColorの色の指定方法が教科書と違いますね。

While Loopの外側でframeの初期化をしていました。

これはおそらくこの後で、このCodeを改良するんだと思います。

今回はSample CodeのままCopy and Pasteしてしまいます。

While Loopの前にFrameを初期化します。

次に画面クリアの実装をします。

RGBの値を指定するのにBit Operationを行っていますね。

これはやり方を忘れてしまいました。

復習します。

8.1.3 「r = (float)(0xff & frame >> 16) / 255.0f;」

まず0xffの復習からします。

recycle bin $I file header 0xff [11]に以下の説明がありました。

Stack Over Flowのwhat is 0xFF in C#? [12] には以下の様に説明されていました。

次は&です。

GeeksforgeeksのBitwise Operators in C/C++ [13]の説明です。

&はANDでした。

すっかりこの辺の計算を忘れてしまっています。

1111 1111と&という事はFrameの数字がそのままその値になるってことでしょうね。

次の>>の計算の意味もここで紹介されていました。

つまり1111 1111を16回、右にShiftするの?

全部で8しかないですが?

いやこのTypeはFloatです。

うーん。

Float?

Bits in Floating-Point Numbers [13]にFloatのBitの表示方法がまとめられていました。

成程。

Floatだと32 bitsある訳です。

0000 0000 0000 0000 0000 0000 0000 0000

0000 0000 0000 0000 0000 0000 1111 1111

として16右にずらすと

0000 0000 0000 0000 0000 0000 0000 0000

となります。

いやこの場合は、

1111 1111 1000 0000 0000 0000 0000 0000

1000 0000 0000 0000 0111 1111 1000 0000

になると考えるべきなんでしょうか?

うーん。

分からん。

以下のCodeでテストします。

結果です。

単に0になっているだけですね。

一応、以下の条件でも試してみます。

結果です。

変わりませんね。

これらの結果から推測すると以下の計算のRGBの結果は

(0,0,1)みたいに青くなるだけですね。

Comment欄に書いてあるような黄色にはならないですね。

これは全部の実装が終わって画面をClearした時にどの色になるかわかるでしょう。

その時に確認します。

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

8.2.1 今までの勉強の復習

2023-06-11のBlogを読んだら「2.3.4 Command Listの生成」まで実装していました。

まず教科書のこの辺を読み直します。

「2.3.3 Swap Chainの作成」と「2.3.4 Command Listの生成」を読み直しました。

大体は覚えていました。

8.2.2 「2.3.5 Render Target Viewの作成」を読む

今週はこれを読む事にします。

読みました。

以下に内容を簡単にまとめます。

まずMulti-Textureが何のために使用されるのかについて解説しています。

次にResourceとResource View Objectについて解説しています。

ResourceはTextureなどのDataがどこにあるのかの情報を保持しているだけですが、Resource View ObjectはそのDataをどう扱うべきなのか、Pipelineではどうすべきか、そしてGPU上のAddressはどこが対応するのかなどの情報を保持します。

Render Targetの場合はResource View ObjectはRender Target Viewになります。

そしてRender Target Viewの生成について以下の図で解説しています。

この辺は「DirectX 12の魔導書」の内容とほぼ同じなので大意を掴むのは容易です。

ただ一個ずつCodeを見比べたら、結構悩む場面も出てくるかもしれません。それは実装が終わってからやる事にします。

この後は、Descriptor handleがDescriptorの位置を指定しているが、Descriptorが2個以上ある場合はその位置をずらす必要がある事を解説しています。

これも「DirectX 12の魔導書」で既にやりました。

細かい実装は来週やる時に確認します。

そして実装が終わってから「DirectX 12の魔導書」のやり方と比較します。

DirectX12は休み明けの始めての勉強なのでこの位にしておきます。

9.まとめと感想

今週はYouTubeの動画の制作よりもUEの勉強を優先しました。

まあ内容的にはそんなに沢山の勉強は出来なかったです。

まだどの分野に集中して労力を投資すべきなのか定まっていないからかもしれません。

10.参照(Reference)

[1] FreetimeCoder [FreetimeCoder]. (n.d.). Unreal PCG Tutorial. YouTube. https://www.youtube.com/playlist?list=PLA03OHAaHgYpo0enf8p-2oEpja3grLOKZ

[2] Fortnite Sensei. (2023, March 31). Unreal Editor for Fortnite Beginner Tutorial - UEFN Starter Course! [Video]. YouTube. https://www.youtube.com/watch?v=0CcoOq963O8

[3] Magnet VFX. (2023, April 2). Unreal Engine 5.1Beginner Tutorial - UE5 Starter Course 2023 #unrealengine5  #megascans [Video]. YouTube. https://www.youtube.com/watch?v=OCgn40aWVuU

[4] Unable to create blend materials UE5.2. (n.d.). Quixel. https://help.quixel.com/hc/en-us/community/posts/10874985830301-Unable-to-create-blend-materials-UE5-2

[5] Math Material expressions. (n.d.). https://docs.unrealengine.com/5.0/en-US/math-material-expressions-in-unreal-engine/

[6] CGHOW. (2021, December 4). Flower Effect in UE4 Niagara Tutorial | Download Files [Video]. YouTube. https://www.youtube.com/watch?v=37g1J8mImjg

[7] Ben Cloward. (2023, February 23). Glass Shader - Advanced Materials - Episode 16 [Video]. YouTube. https://www.youtube.com/watch?v=wKbt6KkZkxs

[8] Earth and Space Sciences X. (2015, October 30). Geology 8 (Weathering and erosion) [Video]. YouTube. https://www.youtube.com/watch?v=NMmNOUQL0Xc

[9] FreetimeCoder. (2023, March 27). Unreal 5.2 Preview PCG Tutorial - Part 4 - Subgraphs [Video]. YouTube. https://www.youtube.com/watch?v=9T8KvzJ07oQ

[10] Fortnite Sensei. (2023, March 31). Unreal Editor for Fortnite Beginner Tutorial - UEFN Starter Course! [Video]. YouTube. https://www.youtube.com/watch?v=0CcoOq963O8

[11] recycle bin $I file header 0xff - Microsoft Q&A. (n.d.-b). https://learn.microsoft.com/en-us/answers/questions/1152118/recycle-bin-i-file-header-0xff

[12] recycle bin $I file header 0xff - Microsoft Q&A. (n.d.). https://learn.microsoft.com/en-us/answers/questions/1152118/recycle-bin-i-file-header-0xff

[13] Orion Sky Lawlor, olawlor@acm.org. (n.d.). CS 301 lecture. https://www.cs.uaf.edu/2011/fall/cs301/lecture/11_07_float_bits.html